🗒️如何给RAG挂上引文编号:使用Langchain实现
2024-8-9
| 2024-8-9
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
如何让AI像学术论文一样,每个观点都有可追溯的来源?看看如何给RAG(检索增强生成)系统加上引文编号,让AI的回答更有说服力。
在项目中,也进行了一些如何更好的挂在引文的尝试,现在稍微输出一下:

一、最直接的Prompt大法

最简单的方法莫过于在提示词中直接要求AI加上引用。比如下面的要求:
这种方法简单直接,但有时AI会选择性失忆,忘记添加引用。就像调皮的学生,老师说要写作业,他就装作没听见。

二、Langchain的四板斧

Langchain官方提供了四种方法来解决这个问题:
  1. 函数调用:通过定义特定的函数来处理引用。
  1. 直接提示:类似于我们刚才提到的Prompt大法。
  1. 检索后处理:在获取相关文档后,对文档进行处理,提取最相关的部分作为引用。
  1. 生成后处理:先生成答案,然后再添加引用。
每种方法都有其优缺点,就像武林中的四大门派,各有各的独门绝技。

三、后挂载:先生成,再计算

但是,有时候这些方法还是不够完美。于是,我们的主角决定另辟蹊径,尝试一种新的方法:后挂载。
这个方法的核心思想是,让AI先自由发挥,说完它想说的话,然后我们再给它的回答加上引用。听起来简单,但实现起来可没那么容易。
我们的主角先是尝试了callback的方式,但发现这种方法无法改变stream输出。正当他陷入困境时,灵光一现,想到了可以直接写一个包装器(wrapper)来实现这个功能。
下面是这个包装器的核心代码:
这个包装器的工作原理是:
  1. 先让原来的chain完成输出。
  1. 在最后添加一次额外的输出。
  1. 在这个过程中,计算AI回答中的每个句子与参考资料的相似度。
  1. 如果相似度超过设定的阈值,就在原句后面添加引用。
 
这种方法的好处是,它不会干扰AI的正常思考过程,而是在AI完成回答后,才进行引用的添加。就像是给AI戴上了一顶“诚实帽”,让它的每句话都有据可循。

四、总结

通过这种后挂载的方法,我们可以得到既流畅自然又有可靠来源的AI回答。不丢失stream,不多次请求LLM。
当然,这个方法还有改进的空间。比如,我们可以进一步优化相似度计算的算法,或者探索更智能的引用添加策略。
 

以上

  • LLM
  • 开发
  • 理解旋转位置编码(RoPE)如何保持内容数据库与向量数据库内容一致?使用LangChain Indexing API
    Loading...
    目录