DeepSeek实战--RAG召回内容检查
1.背景
前面我们通过RAG + 向量库,实现了内容召回,提升了召回内容的准确性,但也面临了一个新的问题:大模型出现幻觉的时候,怎么主动发现、阻断 ? 在一些,严谨的场景,大模型出现幻觉问题,是致命的,比如:病情诊断、投资决策。 今天,我们一起来实现一个大模型校验机制。
2.环境准备
1)MaxKB ,搭建教程详见:https://blog.csdn.net/qq_36918149/article/details/153527187
2)大模型账号(2个不同厂商,支持多模态)
3)Dify账号:https://cloud.dify.ai/apps
3.步骤
Step1:MaxKB 配置访问API key


一共就三条 API,API 的官方使用说明在这:通过 API KEY 进行对话 - MaxKB 文档。简单总结就是这三条是有调用顺序的,先调第一条,拿到应用 id,再调第三条拿到会话 id,最后就可以通过第二条进行对话了。所以,为了演示起来简单些,我们就提前搞定会话 id,最后在 Dify 中,只调用第二条就可以了。
Step2:将对话 API 添加到Dify工作流
1)创建一个Dify流程
2)创建图片识别llm节点
3)然后添加 HTTP 请求模块
我们在该模块中配置 Swagger 文档中的第二条 API,也就是对话 API 的信息。
在 Body 中,我们设置为 JSON 格式,然后将 LLM 的输出 text 作为 message 的入参(参数格式,可以看MaxKB test请求)
接下来,就可以在该模块之后添加代码解释器模块(参数格式,可以看MaxKB tes 请求)
代码解释器的主要功能是解析 HTTP 请求模块的输出 body,从中将 content 的值拿出来。因此我编写的代码如下:
def main(body: str) -> dict:
import json
body_dict = json.loads(body) if isinstance(body, str) else body
result = body_dict["data"]["content"] if body_dict and "data" in body_dict else None
return {
"result": result,
}
在代码解释器中,必须有一个函数叫 main,而且该函数的返回值必须是 字典,否则 Dify 执行时会报错。
4)这一步完成后,加一个结束节点,将代码解释器的 result 输出即可
5)全链路测试
这样,整条流水线就测试完成了,接下来,我们用下图的例题测试一下效果


Step3:校验题目解答的结果
1)添加校验模型,火山模型
2)prompt 为:
SYSTEM
你是一个优秀的数学老师,擅长解答数学题以及检查学生的题目解答是否有问题
USER
> 学生的作业:/result
学生的作业中包含题目,例题,解析,答案四个部分。
你的工作包含如下几步:
1.阅读学生的解题过程和答案
2.自己计算一遍,从而检查学生的解题过程有没有问题
3.如果学生做的没问题,则你的输出格式为:
题目:作业中的题目
例题:作业中的例题
解析:你解答题目的过程
答案:题目的最终答案
如果学生做的有问题,则你的输出格式为:
回答错误
---------------------
题目:作业中的题目
例题:作业中的例题
解析:你解答题目的过程
答案:题目的最终答案
Step4:验证结果

4.总结
1)多模态模型,调用耗时10s以上,配置http请求节点的时候,超时配置尽量长
2)每个节点调试耗时比较长,可以用输出节点或mock数据,逐段调试
3)需要不断优化prompt,才能实现理想效果
更多推荐




所有评论(0)