一、整体架构总览
对话 Agent 的核心能力来自「RAG 知识召回 + 动态 Prompt 构建 + ReAct 工具调用」三者的协同,同时覆盖私有知识问答与复杂任务执行两类需求。
完整执行链路为:
-
用户输入问题 → 向量化处理 → 向量数据库召回相关知识片段
-
动态拼接召回内容、对话历史、用户问题,构建结构化 Prompt
-
进入 ReAct 多轮交互循环,按需调用工具分步解决复杂问题
-
生成最终答案返回用户
这套架构既通过 RAG 保证了私有知识的准确性,又通过 ReAct 扩展了工具执行能力,是企业级对话 Agent 的标准落地方案。
二、核心流程拆解
1. RAG 召回:注入外部知识,从源头抑制幻觉
目标:从向量知识库中召回与用户问题最相关的文档片段,作为回答的事实依据,减少大模型编造内容的概率。
执行步骤:
-
预处理:通过 InputToRag 组件对用户问题做清洗、改写,生成适配召回的查询文本
-
向量化:调用 Embedding 模型将查询文本转为向量
-
相似度检索:在向量数据库中执行 TopK 相似度匹配,返回最相关的文档片段
-
结果封装:召回文档存入上下文变量,作为后续 Prompt 的事实来源
2. 动态 Prompt 构建:整合上下文与对话记忆
目标:将用户问题、RAG 召回结果、对话历史、系统规则整合为标准化 Prompt,输入给大模型。
核心组件:ChatTemplate 模板引擎
标准 Prompt 结构:
-
系统提示词:定义角色、回答规则、约束条件,嵌入召回文档与当前时间
-
用户提示词:包含用户原始问题与历史对话上下文
核心占位符设计
:
-
{content}:用户当前的原始问题 -
{documents}:RAG 召回的相关文档片段(核心事实依据) -
{date}:当前时间,提升时效性问题的回答准确性 -
{history}:多轮对话历史,保证上下文连贯性
3. ReAct 多轮交互:拆解复杂任务,调用外部工具
目标:对于需要实时数据、精确计算、业务接口调用的复杂问题,通过「思考 - 行动 - 观察」循环分步解决。
标准四步循环:
-
Reason(思考):大模型基于当前 Prompt 分析问题,判断是否需要调用工具、调用哪个工具
-
Action(执行):返回结构化工具调用指令(函数名 + 参数),执行对应工具获取结果
-
Observation(观察):将工具执行结果回传给大模型,作为下一轮思考的依据
-
循环 / 终止:信息充足则输出最终答案,信息不足则进入下一轮循环
三、关键组件深度解析
1. Lambda Node:数据流转转换器
负责流程中各节点的数据格式转换,是链路中的「适配器」:
-
InputToRag:输入原始用户问题,输出经过预处理的召回查询文本,直接影响召回精度
-
InputToChat:输入用户问题 + 对话历史,输出结构化 map 参数,为 ChatTemplate 提供动态变量
2. Retriever:向量召回连接器
负责和向量数据库交互,是 RAG 能力的核心执行单元。以 Milvus 向量库为例,核心逻辑为:调用 Embedding 接口向量化查询文本 → 调用向量库 Search 接口执行 TopK 查询 → 将返回结果统一转为标准 Document 格式。
3. Tool:Agent 的能力执行单元
Tool 本质是「带语义描述的函数」,必须包含三要素:
-
函数名称:唯一标识,供大模型调用
-
功能描述:清晰说明工具用途与适用场景,决定大模型会不会正确调用
-
参数定义:用 JSON Schema 定义入参类型、含义、必填项
四、企业级分层架构设计
一套可扩展的对话 Agent 系统,建议分为 6 层架构:
-
交互层:用户入口(IM、网页、API),负责会话管理、流式输出
-
编排层:流程调度核心,控制 RAG 召回、Prompt 构建、ReAct 循环的全链路执行
-
模型层:统一管理 Embedding 模型与对话大模型,支持多模型切换与降级
-
召回层:向量检索、关键词召回、重排序,负责知识片段的精准召回
-
工具层:统一注册管理各类业务工具、通用工具,负责鉴权与执行
-
数据层:向量数据库、文档库、会话日志、效果数据存储
五、核心参数调优建议
1. RAG 召回参数
-
TopK 召回数:通用场景设 3~5 条,单条 512 字符,总参考文本控制在 2000 字符内
-
相似度阈值:向量相似度低于 0.6 的结果直接过滤,避免无关内容干扰
-
分块大小:通用文档 512 字符,技术文档 256 字符,重叠率 10%~20%
2. Prompt 配置
-
系统提示词明确规则:必须基于召回文档回答,无答案时说明无法解答
-
对话历史保留最近 5 轮,过长时做摘要压缩,避免挤占上下文窗口
-
工具描述简洁精准,单工具描述不超过 200 字
3. ReAct 循环参数
-
最大循环步数:设 5~8 步,防止死循环
-
温度值(Temperature):设 0.1~0.3,保证工具调用格式稳定
-
工具数量:单场景工具不超过 10 个,过多会降低选择准确率
六、完整代码示例(Python + LangChain)
实现「RAG 召回 + ReAct 工具调用」的完整对话 Agent,可直接运行:
python
运行
from langchain_chroma import Chroma
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_core.tools import tool
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_core.prompts import ChatPromptTemplate
from langchain_text_splitters import RecursiveCharacterTextSplitter
# 1. 构建RAG向量知识库
knowledge_text = """
地球质量为5.972×10²⁴kg,火星质量为6.42×10²³kg。
公司内部API接入需先申请权限,审批流程为:提交工单→部门审核→中台开通。
"""
splitter = RecursiveCharacterTextSplitter(chunk_size=200, chunk_overlap=30)
docs = splitter.create_documents([knowledge_text])
vector_store = Chroma.from_documents(docs, OpenAIEmbeddings(model="text-embedding-3-small"))
retriever = vector_store.as_retriever(search_kwargs={"k": 2})
# 2. 定义工具
@tool
def calculator(expression: str) -> str:
"""执行精确数学计算,输入为合法数学表达式"""
try:
return str(eval(expression))
except:
return "计算错误"
tools = [calculator]
# 3. 构建Prompt与Agent
prompt = ChatPromptTemplate.from_messages([
("system", """你是团队知识助手,请基于下方参考资料回答问题。
参考资料:{context}
如果需要计算请调用计算器工具,资料中没有的内容说明无法解答。"""),
("placeholder", "{chat_history}"),
("human", "{input}"),
("placeholder", "{agent_scratchpad}")
])
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.2)
agent = create_tool_calling_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, max_iterations=5)
# 4. 执行问答
def chat_agent(question, history=[]):
# 先做RAG召回
context_docs = retriever.invoke(question)
context = "\n".join(doc.page_content for doc in context_docs)
# 执行Agent
result = agent_executor.invoke({
"input": question,
"chat_history": history,
"context": context
})
return result["output"]
# 测试
if __name__ == "__main__":
print(chat_agent("地球和火星的质量加起来是多少?"))
七、效果评测方法
1. 分环节量化指标
表格
| 环节 | 核心指标 | 合格标准 |
|---|---|---|
| RAG 召回 | 召回率 | Top3 召回包含正确答案 ≥90% |
| 生成回答 | 事实准确率 | 答案无事实错误 ≥85% |
| ReAct 工具 | 工具调用准确率 | 工具与参数选择正确 ≥85% |
| 整体体验 | 首字响应时长 | ≤2 秒 |
2. 评测执行方法
-
构建 50~100 条测试集,覆盖纯知识问答、需工具调用、无答案三类场景
-
每次参数调整后跑回归测试,跟踪指标变化
-
定期抽样人工评测,评估回答可读性与实用性
八、总结
对话 Agent 的能力由三大支柱共同支撑:RAG 提供外部知识记忆,动态 Prompt 实现上下文整合,ReAct 负责复杂任务拆解与工具执行。
落地时建议先跑通 RAG 纯问答,再逐步叠加 ReAct 工具能力,通过分层架构保证可扩展性,通过持续评测迭代优化效果。