今天阅读一篇文章,来自 Node Weekly,讲了作者如何使用 Node.js+OpenAI+ModelFusion 来实现 Chat With PDF 的方案,作者代码在 https://github.com/lgrammel/modelfusion/blob/main/examples/pdf-chat-terminal/src/main.ts,是一个命令行工具。
用户和 PDF Chat 工具交互流程图如下:
- 使用
pdfjs-dist/legacy/build/pdf
一页一页读取 PDF 文件内容,将空白字符替换为空格,最终得到pageTexts: string[]
数组,每一个元素是一页的文本内容。 - 使用
modelfusion
包中的OpenAITextEmbeddingModel
文本嵌入模型,进行分词和嵌入,存入到vectorIndex
中,vectorIndex
主要用来快速查询向量的相似度。 - 用
modulefusion
中的相关 API 实现「用户输入——AI 回答」的循环,vectorIndex
用来查询相关背景信息。
- PDF 读取相关操作,可以使用
pdfjs-dist
包,最后其实也是转换为纯文本来操作了。 modulefusion
作为一个 npm 包,做了很多工作,方便了我们调用 OpenAI 的接口,分词、嵌入、相似性查找、OpenAI 模型的调用都帮我们封装好了,只需要简单调用就可以快速的实现一个 Chat With PDF 的功能。还是比较推荐的