用户登录

在项目的 data 目录里有个 posts.json 文件,里面有一组内容数据,我们可以根据每个数据项目的标题还有分类,使用 OpenAI 的 embeddings 生成对应的向量。把生成的 embeddings 放在一个属性里面,然后保存一个新的文件 json 文件。

在项目里新建一个文件,名字是 create-embedding.mjs 。文件里先导入一个 fs 模块,来自 fs/promises,另外还需要用到 openai 的客户端。

在 index.mjs 这个文件里,剪切一下创建的这个 openai ,还有上面这些导入的东西。新建一个文件,名字是 app.service.mjs,把剪切的内容粘贴到这里。在这个 openai 的前面,再添加一个 export,导出它。这样在其它的模块里就可以导入使用这个 openai 客户端。

回到 create-embedding.mjs,在文件顶部从 app.service.mjs 这个文件里,导入一个 openai 。

声明一个 inputFilePath,它的值是当前目录 data 下面的 posts.json ,这是要处理的文件所在位置。再声明一个 outputFilePath,它的值是当前目录data,然后是 posts_with_embedding.json。

下面声明一个 data,等于 await,用一下 fs 上面的 readFile,读取文件内容,文件位置是 inputFilePath,编码设置成 utf-8。再声明一个 posts,它的值是用 JSON.parse 处理之后的 data。

再声明一个 postsWithEmbedding ,等于一个空白的数组。

然后用一个 for of 循环,分别给每一个内容项目创建 embedding。 循环的数据是 posts,解构声明一下 title 还有 category,这是内容项目里的两个属性。

在循环里,声明一个 response 等于 await,用一下 openai.createEmbedding 这个方法,提供一个对象,要使用的 model 是 text-embedding-ada-002 ,再提供一个 input,它是一个字符模板,里面可以是标题冒号,然后是内容项目的标题内容,一个分号,再添加一个分类冒号,然后是内容项目的分类内容。这个 input 属性的值就是要转换的用向量表示的文本。

下面执行一下 postsWithEmbedding.push,提供一个对象,里面添加一个 title,一个 category,再添加一个 embedding,它的值是就是响应里的 data 里面的 data 属性里的第一个项目里的 embedding 这个属性的值。

最后再把 postsWithEmbedding 这个数据的值写入到一个 json 文件里,await,用一下 fs.writeFile,位置是 outputFilePath,用一下 JSON.stringify 处理一下 postsWithEmbedding,第二个参数是 null,表示没有要使用的 replacer ,第三个参数是 2,表示缩进使用的空格的数量。

在终端,执行一下 node create-embedding.mjs 。完成以后,在项目的 data 目录里面,会出现一个 posts_with_embedding.json ,打开这个文件观察一下,你会发现在内容项目里多了一个 embedding 属性,它的值就是使用 OpenAI 的 embeddings 接口,根据内容的标题还有分类文本内容生成的一个向量。

给内容生成嵌入向量《 OpenAI:嵌入向量 》

统计

15260
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点