RefineDocumentsChain,是一种问答链,使用这种链可以突破语言模型的 token 限制,我们可以把一大块文本切分成一组文档,RefineDocumentsChain 可以把这些文档分别交给模型去处理,每次处理一个文档,用上一个文档的处理结果,当前文档还有用户问题作为上下文一同交给模型,最后会得到一个最终版本的答案。
要使用这种链,可以先在 langchain/chains 里面,导入 loadQARefineChain,在程序里,声明的这个 chain ,可以用一下 loadQARefineChain,给它提供一个 model。使用这个 chain 可以问一个问题,比如“宁皓网哪年创建?”。
在终端,执行 node index.mjs,先观察一下调用模型的时候输出的提示,这里输出了两个提示,说明调用了两次语言模型。第一次调用模型的时候,在提示文本里会包含第一个文档的内容,还有用户的问题。得到答案以后,会使用这个答案与下一个文档继续调用模型。
这个 We have provided an existing answer 后面的内容就是使用第一个文档调用模型返回来的文本,它说并没有找到有用的答案。下面是第二个文档里的内容,模型会根据它作为上下文回答用户的问题。
最后得到的结果显示 ninghao.net was created in 2011 ,这里是用英文回答,如果你希望用中文回答,可以自己定义一下 RefineDocumentsChain 使用的这些提示,可以把提示文本全部改成中文。
或者也可以在用户问的这个问答里面,加上一个“用中文回答”,在终端,再运行一下应用,这回返回的答案就会是 “宁皓网创建于2011 年11月10日”。