背景
之前在试着提高解题正确率,目标100%,发现外部知识不足仅依靠大模型的话比较困难。而试题人工生产成本巨大。
本质因为大模型生成内容会有幻觉特点,也就是说解答的试题正确性不太好评判,直接解答试题生产场景不太可控。
后面考虑调用OpenAI解题的时候,像xxx那样通过输出置信度来帮助判断答案的正确性 or 其他形式只要能保证LLM生成答案是可靠(程序判断)的。
目录
- RAG知识库现状
- 测评1
- 初次测评结果
- 分析与优化
- 优化后测评
- 测评2
- 测评3
RAG知识库现状
想要一定程度避免解题内容为幻觉,必须依靠外部知识(RAG知识库)。
可以考虑构建Agent Workflow用于幻觉检查,只输出依靠RAG之后有依据一定正确的 答案和解析,不确定的输出如 “当前AI Agent 没有十足把握生成正确答案…” 而判断的依据就是根据RAG、web search的知识。
-
测试数据量:RAG知识库使用ES的 qbm_rag_ques_knowledge,高中英语单选题型数据量184532。
-
知识格式:【题干】xxx,【答案】:xxx,【解析】:xxx。
测评1
随机选取100道高中英语单选测试集,使用GPT-4o-mini模型
构建Agent Workflow,优化流程,优化提示词。
初次测评结果
test-ai-answer-result-gpt4o-mini-check-hallucination.json
幻觉检查、答案评估输出 “AI Agent暂时没有十足的把握确定答案…” 的试题有31个。
通过幻觉检查、答案确定通过的输出答案的题69个,其中错误的4个
- 2267372320546816
- 2267372320530432
- 2265225605718017
- 2238952535252993
分析与优化
经过分析BAD CASE优化点
- 优化知识库质量:知识库剔除不包含没有解析的试题 or 文档评分的时候调整提示词将该文档判断为不相关,重建courseId=28的知识库,总数据量196235,去除低质量知识后184532。
- 优化流程结点:web search的内容也需要grade_documents 和 hallucination_grade,发现网络召回的内容还是会干扰,比如只是语意相关,会干扰解题,因此取消web search节点。
- 重排序:取消莱文斯坦算法第二次重拍,因为不一定要求是题干相似的题。
- 优化RAG召回:增加另外的召回思路,之前使用的是单独MLT,现在加入选项内容关键字搜索,如果MLT召回内容经过评分后不相关,就进行第二次关键字召回。
- …
优化后的流程节点
1、取消web search节点:web search搜索大概率是语意相关的,召回试题的概率不是很大,语意相关的知识意义不大。
取消了web search 并修改为更严格的提示词,通过幻觉检查的数量急剧减少。
2、加另外一种关键字召回
3、优化无用流程:后发现如果召回的知识被判断为不相关,直接结束就行,不在generate生成答案解析,节省token和时间。
优化后再次测评
[test-ai-answer-result-gpt4o-mini-check-hallucination-without-websearch(4).json]
幻觉检查通过的13道试题,均解答正确
测评2
随机选取200道高中英语单选测试集,使用GPT-4o-mini模型
Agent workflow使用下面的
[test-ai-answer-result-gpt4o-mini-check-hallucination-without-websearch(5).json]
幻觉检查通过的18道试题,均解答正确
测评3
随机选取100道高中英语单选测试集,使用GPT-4o-mini模型
Agent workflow使用下面的
[test-ai-answer-result-gpt4o-mini-check-hallucination-without-websearch(6).json]
幻觉检查通过3道题,均解答正确。
Agent幻觉检查流程
以2270753096671232为例子,说明整个解题流程
当前节点 :retrieve,节点数据:
{
"maxRetrieveCount": 2,
"kpointIds": [42242, 42250],
"questionId": "2270753096671232",
"question": "Busy_with his new machines, the engineer had no time to make the new information_to his colleagues. A. experimenting; known B. to experiment; known C. to experiment; to be known D. experimenting; to be known",
"typeId": "2803",
"maxTransformQueryCount": 0,
"maxWebSearchCount": 0,
"courseId": 28,
"maxHallucinationGraderCount": 2
}
部分Agent输出日志
--- 召回的知识----
省略
---决策:文件相关:
【题干】He made up his mind to devote all he could _ his spoken English before going to college. A. to be practicing B. practicing C. practice D. to practicing;
---决策:存在文档与问题相关,准备生成,参考文档 documents :
[【题干】He made up his mind to devote all he could _ his spoken English before going to college. A. to be practicing B. practicing C. practice D. to practicing;【答案】D;【解析】devote…to..中 to是介词,后面接动名词 ]
- 当前试题:
Busy_with his new machines, the engineer had no time to make the new information_to his colleagues.
A. experimenting; known
B. to experiment; known
C. to experiment; to be known
D. experimenting; to be known,
生成依据的上下文:
[【题干】He made up his mind to devote all he could _ his spoken English before going to college. A. to be practicing B. practicing C. practice D. to practicing;【答案】D;【解析】devote…to..中 to是介词,后面接动名词]
- 生成一次答案:
【答案】:B;
【解析】:考查语法知识和词汇辨析。句意:忙于他的新机器,这位工程师没有时间将新信息告知他的同事们。
1. 选项A和D中的"experimenting"是现在分词形式,表示正在进行的动作,但句子中需要的是不定式形式"to experiment"来表示目的,因此A和D错误。
2. 选项C中的"to be known"是被动不定式形式,表示将来被动,但句子中需要的是已知的状态,因此C错误。
3. 选项B中的"to experiment"表示目的,"known"表示已知的状态,符合句意。
故选B。
【置信度】:95%
---检查幻觉---- 检查幻觉的结果,是否根据文档知识得出的结果 : 否
---决策:答案不以文档为基础,准备重新生成答案,剩余次数:2---
- 当前试题:
Busy_with his new machines, the engineer had no time to make the new information_to his colleagues. A. experimenting; known B. to experiment; known C. to experiment; to be known D. experimenting; to be known,
生成依据的上下文:
[【题干】He made up his mind to devote all he could _ his spoken English before going to college. A. to be practicing B. practicing C. practice D. to practicing;【答案】D;【解析】devote…to..中 to是介词,后面接动名词]
- 生成一次答案:【答案】:A
【解析】:考查语法知识和词汇辨析。句意:忙于他的新机器,这位工程师没有时间将新信息告知他的同事们。
1. 选项A中的"experimenting"是现在分词,表示正在进行的动作,符合句意中的“忙于他的新机器”;"known"是过去分词,表示被动,符合句意中的“将新信息告知他的同事们”。
2. 选项B中的"to experiment"是动词不定式,表示目的,不符合句意中的“忙于”;"known"是过去分词,符合句意。
3. 选项C中的"to experiment"是动词不定式,表示目的,不符合句意中的“忙于”;"to be known"是动词不定式的被动形式,不符合句意中的“将新信息告知他的同事们”。
4. 选项D中的"experimenting"是现在分词,符合句意中的“忙于”;"to be known"是动词不定式的被动形式,不符合句意中的“将新信息告知他的同事们”。
故选A。
【置信度】:95%
---检查幻觉---- 检查幻觉的结果,是否根据文档知识得出的结果 : 否
---决策:答案不以文档为基础,准备重新生成答案,剩余次数:1---
---生成结果---
准备生成一次答案:
GenerationTool.Arguments(question=Busy_with his new machines, the engineer had no time to make the new information_to his colleagues. A. experimenting; known B. to experiment; known C. to experiment; to be known D. experimenting; to be known, context=[【题干】He made up his mind to devote all he could _ his spoken English before going to college. A. to be practicing B. practicing C. practice D. to practicing;【答案】D;【解析】devote…to..中 to是介词,后面接动名词], backQuestion=null)
- 生成一次答案:【答案】:A
【解析】:考查语法知识和词汇辨析。句意:忙于他的新机器,这位工程师没有时间将新信息告知他的同事们。
1. 选项A中的"experimenting"是现在分词,表示正在进行的动作,符合句意"忙于他的新机器"。
2. "known"是过去分词,表示被动含义,符合句意"将新信息告知他的同事们"。
3. 选项B中的"to experiment"是动词不定式,不符合句意,因为句子需要表示正在进行的动作。
4. 选项C中的"to be known"是动词不定式的被动形式,不符合句意,因为句子需要表示将新信息告知同事们的动作已经完成。
5. 选项D中的"to be known"同样不符合句意,因为句子需要表示将新信息告知同事们的动作已经完成。
故选A。
【置信度】:95%
---检查幻觉---检查幻觉的结果,是否根据文档知识得出的结果 : 否
---决策:答案不以文档为基础,达到最大检查幻觉次数,准备进行答案评估---
- 当前节点序号:【4】,节点转移到:__END__
- 当前第 75 题, costTime:31 s, answer:A , ai answer:AI Agent暂时没有十足的把握确定答案...
- 当前第 75 题,写入文件成功
结论与后续优化点
从目前来看,随机测试集400高中英语单选,通过幻觉检查的确定答案的是34道(大概10%)解答正确率100%,大量验证并进行下面优化之后,大概率可以直接将Agent投入解题生产。
测试使用的模型为GPT-4o-mini,本地测试单题解题时间区间大概[5-44]s
- 提示词优化:目前初步调整提示词比较严格,后续可以大量测试下,调整优化提示词在提高答案通过幻觉检查的试题数量。
- 召回率优化:目前拓展的第二个选择题选项关键词RAG召回仍需要优化,提高召回质量。
- 幻觉检查优化:比如可以考虑使用 triger 给试题预测知识点(试题生产前的打标是否已经确定知识点?)然后提示词告诉大模型,用于检查生成的答案是否来自这些知识点。
[AI解题测评思路]