完整版:对话 Agent 全链路架构详解:从 RAG 召回、Prompt 构建到 ReAct 交互落地指南

一、整体架构总览

对话 Agent 的核心能力来自「RAG 知识召回 + 动态 Prompt 构建 + ReAct 工具调用」三者的协同,同时覆盖私有知识问答与复杂任务执行两类需求。

完整执行链路为:

  1. 用户输入问题 → 向量化处理 → 向量数据库召回相关知识片段

  2. 动态拼接召回内容、对话历史、用户问题,构建结构化 Prompt

  3. 进入 ReAct 多轮交互循环,按需调用工具分步解决复杂问题

  4. 生成最终答案返回用户

这套架构既通过 RAG 保证了私有知识的准确性,又通过 ReAct 扩展了工具执行能力,是企业级对话 Agent 的标准落地方案。

二、核心流程拆解

1. RAG 召回:注入外部知识,从源头抑制幻觉

目标:从向量知识库中召回与用户问题最相关的文档片段,作为回答的事实依据,减少大模型编造内容的概率。

执行步骤

  1. 预处理:通过 InputToRag 组件对用户问题做清洗、改写,生成适配召回的查询文本

  2. 向量化:调用 Embedding 模型将查询文本转为向量

  3. 相似度检索:在向量数据库中执行 TopK 相似度匹配,返回最相关的文档片段

  4. 结果封装:召回文档存入上下文变量,作为后续 Prompt 的事实来源

2. 动态 Prompt 构建:整合上下文与对话记忆

目标:将用户问题、RAG 召回结果、对话历史、系统规则整合为标准化 Prompt,输入给大模型。

核心组件:ChatTemplate 模板引擎

标准 Prompt 结构

  • 系统提示词:定义角色、回答规则、约束条件,嵌入召回文档与当前时间

  • 用户提示词:包含用户原始问题与历史对话上下文

    核心占位符设计

  • {content}:用户当前的原始问题

  • {documents}:RAG 召回的相关文档片段(核心事实依据)

  • {date}:当前时间,提升时效性问题的回答准确性

  • {history}:多轮对话历史,保证上下文连贯性

3. ReAct 多轮交互:拆解复杂任务,调用外部工具

目标:对于需要实时数据、精确计算、业务接口调用的复杂问题,通过「思考 - 行动 - 观察」循环分步解决。

标准四步循环

  1. Reason(思考):大模型基于当前 Prompt 分析问题,判断是否需要调用工具、调用哪个工具

  2. Action(执行):返回结构化工具调用指令(函数名 + 参数),执行对应工具获取结果

  3. Observation(观察):将工具执行结果回传给大模型,作为下一轮思考的依据

  4. 循环 / 终止:信息充足则输出最终答案,信息不足则进入下一轮循环

三、关键组件深度解析

1. Lambda Node:数据流转转换器

负责流程中各节点的数据格式转换,是链路中的「适配器」:

  • InputToRag:输入原始用户问题,输出经过预处理的召回查询文本,直接影响召回精度

  • InputToChat:输入用户问题 + 对话历史,输出结构化 map 参数,为 ChatTemplate 提供动态变量

2. Retriever:向量召回连接器

负责和向量数据库交互,是 RAG 能力的核心执行单元。以 Milvus 向量库为例,核心逻辑为:调用 Embedding 接口向量化查询文本 → 调用向量库 Search 接口执行 TopK 查询 → 将返回结果统一转为标准 Document 格式。

3. Tool:Agent 的能力执行单元

Tool 本质是「带语义描述的函数」,必须包含三要素:

  • 函数名称:唯一标识,供大模型调用

  • 功能描述:清晰说明工具用途与适用场景,决定大模型会不会正确调用

  • 参数定义:用 JSON Schema 定义入参类型、含义、必填项

四、企业级分层架构设计

一套可扩展的对话 Agent 系统,建议分为 6 层架构:

  1. 交互层:用户入口(IM、网页、API),负责会话管理、流式输出

  2. 编排层:流程调度核心,控制 RAG 召回、Prompt 构建、ReAct 循环的全链路执行

  3. 模型层:统一管理 Embedding 模型与对话大模型,支持多模型切换与降级

  4. 召回层:向量检索、关键词召回、重排序,负责知识片段的精准召回

  5. 工具层:统一注册管理各类业务工具、通用工具,负责鉴权与执行

  6. 数据层:向量数据库、文档库、会话日志、效果数据存储

五、核心参数调优建议

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 工具能力,通过分层架构保证可扩展性,通过持续评测迭代优化效果。

相关推荐
ai_1111 小时前
从“工具”到“基建”:2026年合规声音交易平台的生态重构与商业演进
人工智能·重构
土星云SaturnCloud1 小时前
充电站AI视觉算法全方案:安全监管+运营提效+服务升级,土星云边缘计算赋能场站智能化
服务器·人工智能·ai·边缘计算·ai视觉
樊小肆1 小时前
DeepSeeker-Code源码导读09-MCP集成
人工智能·agent
MindUp1 小时前
自然语言处理驱动的PPT自动生成:4款工具的技术实现与实测对比
人工智能·自然语言处理·powerpoint
今天AI了吗1 小时前
AI 数据安全治理框架:模型能力与数据权限的边界在哪里
java·linux·开发语言·人工智能·python·深度学习·机器学习
Canace1 小时前
Fable 像素游戏复盘,Vibe Coding 的 10 条工程规则与赛车 Demo 实践
前端·人工智能·游戏开发
莫问ABC1 小时前
Python 详解:从语法基础到进阶实战
开发语言·python·安全
OpenPie|拓数派1 小时前
拓数派入选杭州国际数据标注联盟副理事长单位,夯实πDataCS本体能力
大数据·人工智能·openpie·拓数派·piedatacs
林伽一1 小时前
林伽一 · AI科技周报 | 2026年08月第3周
人工智能·科技