大模型速通学习笔记(56)

LangChain AI Agent 多框架协同:TOT+ReAct+RAG 落地实战指南

一、核心主题定位

本集聚焦 AI Agent 的多框架深度协同技术,核心解决 “单一框架无法覆盖‘知识支撑 - 推理决策 - 执行落地’全链路” 的痛点。通过整合思维树(TOT)的多路径推理能力、ReAct 的 “思考 - 行动 - 观察” 闭环执行逻辑、RAG 的专业知识检索能力,构建 “知识增强型智能决策执行系统”,适配企业级复杂场景(如技术支持、医疗咨询、金融分析),让 Agent 既有专业知识储备,又能灵活推理、透明执行。


二、多框架协同核心价值与逻辑

1. 核心价值

  • 知识无盲区:RAG 接入私有知识库(如产品手册、病历库),解决 Agent “不懂专业领域知识” 的问题,让决策有依据。
  • 推理更灵活:TOT 突破单一路径局限,面对复杂问题生成多套方案并评估筛选,避免 “一步错全错”。
  • 执行可追溯:ReAct 让每一步行动都对应明确思考,工具调用逻辑透明,便于调试和合规审计。
  • 场景适配广:从标准化任务(如故障诊断)到个性化需求(如定制化方案),均能覆盖,落地性强。

2. 协同核心逻辑(四步闭环)

  1. 知识检索(RAG):接收用户需求后,优先调用 RAG 检索相关专业知识(如 “用户问设备卡顿,先查产品故障手册”),为后续决策铺垫。
  2. 路径规划(TOT):结合需求与检索到的知识,生成 2-3 套执行路径(如 “路径 1:问设备型号→查故障库→给方案;路径 2:先问故障细节→匹配知识→诊断”),按 “可行性 + 效率” 评分,选最优路径。
  3. 闭环执行(ReAct):按最优路径,以 “思考→行动→观察” 循环推进:
    • 思考:明确 “为什么做这一步”(如 “需要设备型号才能精准查故障,所以先问用户”);
    • 行动:调用工具(如查询故障库)或向用户提问;
    • 观察:获取结果(如工具返回故障原因),判断是否需调整(如结果不符,回溯到 TOT 重新选路径)。
  4. 结果整合:将执行结果与专业知识结合,生成结构化回复(如 “故障原因 + 解决方案 + 注意事项”),完成任务。

三、核心实操:多框架协同落地(以 “产品售后故障诊断” 为例)

1. 环境准备(依赖安装)

bash

运行

# 核心依赖:LangChain+RAG+Agent框架
pip install langchain==0.1.10 langchain-community==0.0.30
pip install chromadb sentence-transformers  # RAG向量库与Embedding模型
pip install zhipuai  # 智普大模型(中文场景适配)

2. 完整代码实现

(1)初始化 RAG 知识库(产品售后手册)

python

运行

from langchain.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import Chroma

# 1. 加载产品售后手册(本地TXT文件)
loader = TextLoader("产品售后故障手册.txt", encoding="utf-8")
documents = loader.load()

# 2. 中文语义分块(避免拆断句子,提升检索精度)
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=500,  # 每个片段500字符(约250字)
    chunk_overlap=50,  # 重叠50字符,避免语义断裂
    separators=["\n\n", "。", "!", ";"]  # 中文分隔符
)
text_chunks = text_splitter.split_documents(documents)

# 3. 构建中文向量库(本地Chroma,无需联网)
embedding = HuggingFaceEmbeddings(
    model_name="BAAI/bge-small-zh-v1.5",  # 中文优化Embedding模型
    model_kwargs={"device": "cpu"}  # 无GPU用cpu,有GPU改"cuda"
)
vector_db = Chroma.from_documents(
    documents=text_chunks,
    embedding=embedding,
    persist_directory="./after_sales_rag_db"  # 向量库存储路径
)
vector_db.persist()

# 4. 构建RAG检索链(用于获取专业知识)
from langchain.chains import RetrievalQA
from langchain_community.llms import ZhipuAI

llm_rag = ZhipuAI(
    model="glm-3-turbo",
    api_key="你的智普API_KEY",
    temperature=0.1  # 低随机性,知识输出更准确
)
rag_chain = RetrievalQA.from_chain_type(
    llm=llm_rag,
    chain_type="stuff",  # 直接将检索到的知识传入模型
    retriever=vector_db.as_retriever(search_kwargs={"k": 2}),  # 取2条最相关知识
    return_source_documents=False  # 仅返回知识内容,简化结果
)
(2)定义售后工具(ReAct 执行环节调用)

python

运行

from langchain_core.tools import Tool

# 工具1:故障诊断(根据设备型号和故障现象匹配方案)
def fault_diagnose_tool(device_model: str, fault_symptom: str) -> str:
    """
    故障诊断工具:根据设备型号和故障现象返回诊断结果
    输入:device_model(设备型号,如PROD-001)、fault_symptom(故障现象,如卡顿/无法启动)
    输出:诊断结果与初步建议
    """
    # 模拟故障库(实际场景可对接企业故障系统)
    fault_db = {
        "PROD-001-卡顿": "故障原因:本地缓存超过5GB;建议:清理缓存至2GB以下,重启设备",
        "PROD-001-无法启动": "故障原因:电源接口松动或适配器故障;建议:检查电源连接,更换适配器测试",
        "PROD-002-黑屏": "故障原因:屏幕排线接触不良;建议:联系售后人员检修排线"
    }
    key = f"{device_model}-{fault_symptom}"
    return fault_db.get(key, f"暂无{device_model}设备{fault_symptom}的匹配故障方案,建议提供更多故障细节")

# 工具2:知识查询(调用RAG获取专业手册内容)
def knowledge_query_tool(query: str) -> str:
    """知识查询工具:检索产品售后手册,返回相关专业知识"""
    result = rag_chain.invoke({"query": query})
    return f"专业知识参考:{result['result']}"

# 工具列表(Agent可调用的工具集合)
tools = [
    Tool(
        name="fault_diagnose",
        func=fault_diagnose_tool,
        description="用于诊断设备故障,必须传入device_model(设备型号)和fault_symptom(故障现象)两个参数"
    ),
    Tool(
        name="knowledge_query",
        func=knowledge_query_tool,
        description="用于查询产品售后手册的专业知识,传入与故障相关的关键词(如“PROD-001缓存清理”)"
    )
]
(3)初始化多框架协同 Agent

python

运行

from langchain.agents import initialize_agent, AgentType
from langchain.memory import ConversationBufferMemory
from langchain_community.llms import ZhipuAI

# 1. 初始化核心大模型(用于推理决策)
llm_agent = ZhipuAI(
    model="glm-4",  # 高性能模型,适合复杂推理
    api_key="你的智普API_KEY",
    temperature=0.2  # 保留一定灵活性,同时避免无意义推理
)

# 2. 初始化记忆模块(保存对话历史,支持多轮交互)
memory = ConversationBufferMemory(
    return_messages=True,
    memory_key="chat_history"  # 与Agent Prompt中的变量名对应
)

# 3. 编写Agent系统提示(融合TOT+ReAct+RAG逻辑)
system_prompt = """
你是产品售后故障诊断Agent,需严格按以下规则工作:
1. 知识优先(RAG):遇到专业问题(如故障原因、操作步骤),先调用knowledge_query工具获取售后手册知识,再做决策;
2. 路径规划(TOT):面对需求先生成2套执行路径,按“效率高、步骤少”选最优(如“先问设备型号→再问故障现象”比“先问故障→再问型号”更优);
3. 执行闭环(ReAct):
   - 思考:每步行动前说明“为什么做”(如“需要设备型号才能调用故障诊断工具,所以先问用户”);
   - 行动:仅调用必要工具,参数缺失时先向用户确认(如没设备型号,先问“你的设备型号是多少?”);
   - 观察:工具返回结果后,判断是否需下一步(如结果已明确,直接给方案;结果模糊,补充查询知识);
4. 结果整合:最终回复需包含“故障原因+解决方案+知识依据”,清晰易懂。
"""

# 4. 初始化Agent(融合多框架)
agent = initialize_agent(
    tools=tools,
    llm=llm_agent,
    agent=AgentType.CHAT_CONVERSATIONAL_REACT_DESCRIPTION,  # ReAct框架适配
    memory=memory,
    verbose=True,  # 打印执行日志,便于调试
    agent_kwargs={
        "system_message": system_prompt,
        "human_message_template": "{input}"
    }
)
(4)测试多框架协同 Agent

python

运行

# 测试场景:用户反馈设备卡顿,需诊断
user_input = "我的设备用着突然卡顿,该怎么解决?"
result = agent.run(user_input)

# 输出示例(含思考、行动、结果)
# 1. 思考:用户没说设备型号,无法调用故障诊断工具,也无法精准查知识,所以先问型号;
# 2. 行动:向用户提问“请问你的设备型号是多少?(如PROD-001)”;
# 3. 用户回复“PROD-001”;
# 4. 思考:已有型号,需先查售后手册中PROD-001卡顿的知识,再诊断;
# 5. 行动:调用knowledge_query工具,参数“PROD-001 卡顿”;
# 6. 观察:知识返回“PROD-001设备缓存超过5GB易卡顿,清理缓存可恢复”;
# 7. 思考:已有知识,调用故障诊断工具确认方案;
# 8. 行动:调用fault_diagnose工具,参数device_model="PROD-001",fault_symptom="卡顿";
# 9. 观察:诊断结果与知识一致;
# 10. 结果整合:生成最终回复。

print("Agent最终回复:", result)

四、核心应用场景

1. 企业技术支持

  • 协同逻辑:RAG(技术手册)+ TOT(故障排查路径)+ ReAct(调用诊断工具 / 远程协助工具)
  • 价值:7×24 小时响应,标准化故障处理,减少人工客服工作量,提升用户满意度。

2. 医疗辅助诊断(基层医院)

  • 协同逻辑:RAG(病历库 / 药典)+ TOT(诊断方案)+ ReAct(症状问询 / 检查建议)
  • 价值:为基层医生提供专业知识支撑,降低误诊率,让优质医疗资源下沉。

3. 金融投资分析

  • 协同逻辑:RAG(行业报告 / 政策文件)+ TOT(投资方案)+ ReAct(数据查询 / 风险评估工具)
  • 价值:结合实时数据与专业知识,生成多维度投资建议,辅助分析师决策。

五、实操避坑与优化指南

1. 常见问题与解决方案

问题现象原因分析解决方案
RAG 检索知识无关检索关键词不精准,或分块粒度不当1. 让 Agent 生成 “精准检索词”(如 “PROD-001 卡顿 原因”);2. 调整分块 size 为 400-600 字符
TOT 路径规划冗余路径评估标准不明确在 system prompt 中添加 “路径需满足‘步骤≤3 步’‘无需重复提问’” 的约束
ReAct 工具调用参数缺失工具描述未明确必填参数工具 description 中强调 “必须传入 XX 参数”(如 “fault_diagnose 必须传入 device_model 和 fault_symptom”)
多轮对话历史丢失记忆模块未正确关联确保 memory 的 memory_key 与 Agent Prompt 中的变量名一致(如均为 “chat_history”)

2. 核心优化技巧

  • 知识优先级排序:在 RAG 检索中,按 “官方手册>最新案例>历史故障” 排序,确保知识权威性。
  • 路径评估量化:TOT 路径评分按 “步骤数(30%)+ 知识匹配度(50%)+ 工具可用性(20%)” 计算,避免主观判断。
  • 工具结果格式化:工具返回结果统一用 “原因:XXX;建议:XXX” 格式,便于 Agent 整合,减少理解成本。
  • 日志监控:集成 LangSmith,记录 “RAG 检索结果、TOT 路径评分、ReAct 行动步骤”,定期分析优化(如高频回溯路径需调整)。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一刀7段

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值