—1—
先从传统思维的架构设计说起
我们先来看一个场景:用户输入一个问题(Prompt)后,如何实现用户问题的自动路由和查询(比如:是 RAG 检索还是 SQL 查询)?
解决方案:意图识别架构设计
第一、对于用户输入的问题(Prompt),我们通过意图识别模块来判断是需要路由给RAG 检索还是路由给 SQL 查询;
第二、意图识别模块接收用户的问题(Prompt),然后将用户的问题交给大模型去判断分类;
第三、意图识别架构设计如下图所示:
第四、大模型需要提前做 SFT Fine-tuning 微调,目的是让大模型知道什么问题属于 RAG 检索问题,什么问题属于 SQL 查询问题,Fine-tuning 微调的样本数据格式如下:
examples =[
{
"inn":"我想知道东方阿尔法优势产业混合C基金,在2021年年度报告中,前10大重仓股中,有多少只股票在报告期内取得正收益。",
"out":"rag_question***我想知道东方阿尔法优势产业混合C基金,在2021年年度报告中,前10大重仓股中,有多少只股票在报告期内取得正收益。"
},
{
"inn":"森赫电梯股份有限公司产品生产材料是什么?",
"out":"rag_question***森赫电梯股份有限公司产品生产材料是什么?"
},
{
"inn":"20210930日,一级行业为机械的股票的成交金额合计是多少?取整。",
"out":"agent_question***20210930日,一级行业为机械的股票的成交金额合计是多少?取整。"
},
...
]
第五、意图识别模块识别结果后,通过在代码中硬编码 if...else 对识别后的分类进行不同的后续处理,代码如下:
# 如果是 RAG 相关的问题
if intent =="rag_question":
result = self.rag.get_result(question=question)
return result
# 如果是 Agent 相关的问题
elif intent =="agent_question":
result = self.agent.get_result(input=question)
return result
# 其他类问题
else:
result = self.chat.invoke(input=question).content
return result
意图识别架构设计的问题
从上述实现流程我们可以看到,意图识别的架构设计本质还是传统的开发模式,也就是静态业务流程编排的面向过程架构设计范式,也就是说程序执行的每一个步骤还是由开发者精准控制,大模型此刻只是扮演者辅助工具角色,用于问题分类,这种面向过程的架构设计范式有3个问题:
第一、若意图识别出现偏差,后续的处理流程将失去效果,结果必然会出现错误。
第二、尽管我们可以在 if...else... 结构中加入修正策略,比如:当 RAG 检索失败时转而查询 SQ L数据库,但面对复杂的需求,这种策略的编写与维护成本将呈指数级增长。
第三、最关键的是,这种处理方式丝毫体现不出智能化的特点。
那么如何基于 AI Agent 智能体的架构设计对用户问题(Prompt)自主判断和自主解决呢?
—2—
基于 AI Agent 智能体的新架构设计方案
AI Agent 智能体由大模型推理能力、Planning 规