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,才能实现理想效果

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐