用户登录

LangChain 提供了一些文档问答链,可以根据一组文档里的内容来回答用户的一些问题。StuffDocumentsChain,MapReduceDocumentsChain 还有 RefineDocumentsChain 都属于这种类型的链。

StuffDocumentsChain 会把所有文档内容全部作为提示文本交给模型去处理,因为模型一次可以处理的文本数量是有限制的,所以这种 Chain 只能处理小量内容的文档。如果你希望处理大量的文档,可以使用 MapReduceDocumentsChain 或者 RefineDocumentsChain 。

StuffDocumentsChain

这里我提前准备好了一个 OpenAI 模型,设置了一个回调,它可以输出模型使用的提示。下面我们可以测试使用一下 StuffDocumentsChain 。

在这个 Node.js 程序文件顶部,先导入一个 Document,它来自 langchain/document,等会我们可以手工创建两个文档。再导入一个 loadQAStuffChain,来自 langchain/chains。

然后可以声明一个 documents ,它是一组文档,一个数组,里面可以手工创建两个 Document ,新建一个 Document,提供一个对象,设置一下 pageContent 属性,值是 “宁皓网(ninghao.net)是由王皓与小雪共同创立。”,再新建一个 Document,提供一个对象,设置一下 pageContent,值是 “网站于2011年11月10日首次发布,至今一直保持独立运营。”。

下面可以创建一个 chain,声明一个 chain,它的值用一下 loadQAStuffChain,把这个链要使用的模型交给这个函数,这里就是上面定义的 model。这个函数返回的东西就是一个 StuffDocumentsChain。这种 Chain 会把文档所有内容,外加用户问题一块儿交给语言模型去处理。

这种问答链适用于处理只有小量内容的文档。下面声明一个 response,它的值可以用一下 await,执行 chain.call 这个方法,提供一个对象,设置一下 input_documents,把它的值设置成 documents,再添加一个 question,比如“宁皓网哪天发布的?”。模型会根据文档内容回答用户的这个问题。在控制台上输出这个 response。

在终端,项目所在目录的下面,执行 node index.mjs。在控制台上首先会输出交给模型处理的提示文本,你会发现,这段提示文本告诉模型要根据下列内容真诚地回答用户问题。模型响应回来的文字就是根据提示里的内容生成的,这里就是 “宁皓网于2011年11月10日发布。”。

再试一下,改一下 question 的内容,比如 “宁皓网作者”。回到终端,再运行一下应用,这里显示宁皓网的作者是 “王皓和小雪”。

文档问答链(Document QA Chains)《 LangChain:链 》

统计

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

社会化网络

关于

微信订阅号

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