LangChain AI Agent 全组件协同实战:RAG + 记忆 + 工具 + 决策的企业级落地

一、核心主题定位

本集聚焦 LangChain Agent 的全组件深度协同,核心解决 “知识(RAG)、记忆、工具、决策各模块孤立,导致复杂任务执行效率低、结果精度差” 的痛点。通过构建 “RAG 提供专业知识→记忆保留关键状态→决策规划执行路径→工具落地具体操作” 的完整闭环,让 Agent 具备 “懂知识、记信息、会决策、能执行” 的综合能力,适配企业级市场分析、客户运营等复杂场景。


二、全组件协同核心逻辑与价值

1. 协同底层逻辑(四步闭环)

  1. 知识前置(RAG):接收需求后,先通过 RAG 检索领域专业知识(如行业报告、产品手册),为决策提供依据,避免 “凭经验决策”;
  2. 记忆锚定(混合记忆):向量记忆存储历史关键信息(如客户 ID、过往分析结论),窗口记忆保留近期交互,确保无需重复获取基础信息;
  3. 决策规划(ReAct+TOT):结合 RAG 知识与记忆信息,生成多套执行路径(如 “先查竞品数据→再做 SWOT 分析→最后生成报告”),评估后选最优;
  4. 工具执行(多工具联动):按决策路径调用工具(如数据查询、图表生成、报告导出),执行结果同步回写记忆与 RAG(更新临时知识),支撑后续步骤。

2. 协同核心价值

  • 知识驱动决策:避免 Agent “瞎决策”,每个步骤都有专业知识支撑(如市场分析引用最新行业数据);
  • 状态全程连贯:跨天、跨步骤任务(如 “周一收集数据→周三生成报告”)中,记忆与知识同步保留,无需从头开始;
  • 执行可追溯:每个工具调用都对应 “知识依据 + 记忆信息 + 决策逻辑”,便于企业合规审计与问题排查。

三、核心实操:全组件协同落地(企业市场分析 Agent)

以 “企业产品市场分析 Agent” 为例,整合 RAG(行业知识库)、混合记忆(窗口 + 向量)、多工具(竞品查询 + SWOT 分析 + 报告生成)、ReAct+TOT 决策,实现 “需求接收→知识检索→数据查询→分析→报告输出” 全流程。

1. 环境准备

bash

运行

# 核心依赖(覆盖RAG、记忆、Agent全模块)
pip install langchain==0.1.10 langchain-community==0.0.30 zhipuai chromadb sentence-transformers python-docx

2. 完整代码实现

(1)组件初始化(RAG + 记忆 + 工具 + LLM)

python

运行

from langchain_community.llms import ZhipuAI
from langchain.vectorstores import Chroma
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.chains import RetrievalQA
from langchain.memory import ConversationBufferWindowMemory, VectorStoreRetrieverMemory
from langchain_core.tools import Tool
from langchain.agents import initialize_agent, AgentType
from docx import Document  # 用于生成报告文档

# 1. 初始化RAG(行业知识库:2024年AI产品行业报告)
# 加载并处理知识库
loader = TextLoader("2024_AI_product_industry_report.txt", encoding="utf-8")
documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=600, chunk_overlap=80)
text_chunks = text_splitter.split_documents(documents)
# 构建向量库与RAG链
embedding = HuggingFaceEmbeddings(model_name="BAAI/bge-small-zh-v1.5")
rag_db = Chroma.from_documents(text_chunks, embedding, persist_directory="./industry_rag_db")
rag_chain = RetrievalQA.from_chain_type(
    llm=ZhipuAI(model="glm-3-turbo", api_key="你的API_KEY", temperature=0.1),
    chain_type="stuff",
    retriever=rag_db.as_retriever(search_kwargs={"k": 2})
)

# 2. 初始化混合记忆(向量记忆+窗口记忆)
# 向量记忆:存储行业数据、客户产品信息
vector_memory_db = Chroma(embedding_function=embedding, persist_directory="./agent_memory_db")
vector_retriever = vector_memory_db.as_retriever(search_kwargs={"k": 2})
vector_memory = VectorStoreRetrieverMemory(retriever=vector_retriever, memory_key="chat_history")
# 窗口记忆:保留最近4轮交互(实时分析进度)
window_memory = ConversationBufferWindowMemory(return_messages=True, memory_key="chat_history", k=4)

# 3. 定义市场分析工具(3个核心工具)
# 工具1:竞品数据查询
def competitor_data_tool(product_type: str) -> str:
    mock_data = {
        "AI客服": "竞品A:市场份额35%(支持多语言);竞品B:市场份额28%(价格低20%)",
        "AI数据分析": "竞品C:市场份额40%(集成Excel);竞品D:市场份额25%(支持实时分析)"
    }
    return f"[{product_type}]竞品数据:{mock_data.get(product_type, '暂无该品类竞品数据')}"

# 工具2:SWOT分析(结合RAG知识)
def swot_analysis_tool(product_type: str) -> str:
    # 调用RAG获取行业趋势知识
    rag_knowledge = rag_chain.invoke({"query": f"2024年{product_type}行业趋势"})["result"]
    # 结合竞品数据生成SWOT
    competitor_data = competitor_data_tool(product_type)
    return f"""
    【{product_type} SWOT分析】
    优势(S):企业产品技术迭代速度快于行业平均
    劣势(W):品牌知名度低于竞品A/C
    机会(O):{rag_knowledge.split('。')[0]}
    威胁(T):{competitor_data.split(';')[0]}
    """

# 工具3:分析报告生成(导出Word)
def report_generate_tool(product_type: str, content: str) -> str:
    doc = Document()
    doc.add_heading(f"{product_type}市场分析报告(2024)", 0)
    doc.add_paragraph(content)
    doc.save(f"{product_type}_market_analysis.docx")
    return f"报告已生成:{product_type}_market_analysis.docx(路径:当前目录)"

# 工具列表(明确参数与依赖)
tools = [
    Tool(
        name="competitor_data",
        func=competitor_data_tool,
        description="查询指定品类AI产品的竞品市场份额,需传入产品类型(如AI客服)"
    ),
    Tool(
        name="swot_analysis",
        func=swot_analysis_tool,
        description="生成产品SWOT分析,需传入产品类型,自动结合行业知识(RAG)与竞品数据"
    ),
    Tool(
        name="report_generate",
        func=report_generate_tool,
        description="生成Word格式分析报告,需传入产品类型和报告内容(如SWOT分析结果)"
    )
]

# 4. 初始化核心LLM(决策驱动)
llm = ZhipuAI(
    model="glm-4",
    api_key="你的API_KEY",
    temperature=0.2,
    timeout=60  # 预留足够时间处理RAG与工具调用
)
(2)Agent 构建与全流程测试

python

运行

# 1. 构建全组件协同Agent
agent = initialize_agent(
    tools=tools,
    llm=llm,
    agent=AgentType.CHAT_CONVERSATIONAL_REACT_DESCRIPTION,
    memory=window_memory,  # 主记忆用窗口,向量记忆与RAG通过Prompt关联
    verbose=True,
    agent_kwargs={
        "system_message": """
        你是企业AI产品市场分析Agent,需按以下规则协同全组件:
        1. 知识协同:先调用RAG获取行业趋势(无需手动调用,swot_analysis工具自动集成);
        2. 记忆协同:向量记忆存储产品类型、历史分析结论,优先从记忆提取,无则询问用户;
        3. 决策流程:
           - 第一步:确认产品类型(从记忆或用户获取);
           - 第二步:调用competitor_data查竞品;
           - 第三步:调用swot_analysis生成分析(结合RAG);
           - 第四步:调用report_generate导出报告;
        4. 结果回写:每步结果同步更新到向量记忆,供后续复盘。
        """,
        "human_message_template": "{input}\n(参考信息:记忆={chat_history} | 行业知识=RAG自动集成)"
    }
)

# 2. 全流程测试(多轮交互,验证组件协同)
print("=== 第一轮:启动分析,确认产品类型 ===")
agent.run("帮我做一份AI客服产品的市场分析")  # 记忆存储“产品类型:AI客服”
# 自动执行:查竞品→生成SWOT(集成RAG)→准备报告内容

print("\n=== 第二轮:补充需求,生成报告 ===")
agent.run("把SWOT分析结果生成正式报告")  # 记忆关联“AI客服”,直接调用report_generate

print("\n=== 第三轮:后续复盘,查询历史分析 ===")
agent.run("上周做的AI客服分析,竞品A的市场份额是多少?")  # 向量记忆检索历史数据,无需重新查询

四、核心场景适配与组件组合方案

1. 场景 - 组件组合表

业务场景 RAG 知识来源 记忆组合 工具类型 决策框架
AI 产品市场分析 行业报告、竞品白皮书 向量记忆(产品类型 / 数据)+ 窗口记忆(分析进度) 竞品查询、SWOT 分析、报告生成 ReAct+TOT
企业客户运营 客户画像、历史成交数据 向量记忆(客户 ID / 偏好)+ 总结记忆(互动记录) 需求推荐、订单跟进、售后反馈 ReAct
医疗临床辅助决策 病历库、诊疗指南 向量记忆(患者 ID / 病史)+ 窗口记忆(当前症状) 诊断建议、用药提醒、报告解读 ReAct+TOT(多路径验证)

2. 适配关键原则

  • 知识密集型场景(如医疗 / 法律):RAG 优先选择权威知识库(如官方诊疗指南),决策层增加 “知识校验” 步骤(如 “确认 RAG 检索到的指南是否为最新版本”);
  • 状态敏感型场景(如客户运营):记忆模块优先用 “向量记忆 + 总结记忆”,确保客户偏好与互动记录不丢失,工具调用前需 “匹配客户标签”(如 “给高价值客户推荐高端服务”);
  • 效率优先场景(如市场分析):工具间增加 “自动数据传递”(如 SWOT 分析自动获取竞品工具结果),减少决策层干预。

五、全组件协同避坑与优化指南

1. 常见问题与解决方案

问题现象 根本原因 解决方案
RAG 知识与记忆信息冲突 知识库未更新或记忆未同步 1. RAG 定期更新(如每周更新行业报告);2. 工具执行后同步更新记忆与 RAG 标签(如 “标记为 2024 年数据”)
工具调用顺序混乱 决策层未明确流程优先级 在 system_message 中定义 “强制流程顺序”(如 “必须先查竞品,再做 SWOT”)
报告生成内容缺失 工具参数传递不完整 给 report_generate 工具添加 “内容校验”(如 “若 content 长度<500 字,提示‘内容不足,需补充’”)
记忆检索速度慢 向量库数据量过大或未优化 1. 定期清理过期记忆数据(如 1 年前的分析记录);2. 给向量库添加 “场景标签”(如 “仅检索 AI 客服相关记忆”)

2. 核心优化技巧

  • 组件联动自动化:用LangChain Pipeline将 “RAG 检索→工具调用→记忆更新” 封装为固定流程,减少 Agent 决策负担;
  • 性能监控可视化:集成 LangSmith,监控 “RAG 检索耗时、工具调用成功率、记忆命中率”,针对性优化瓶颈(如 RAG 慢则增加缓存);
  • 容错机制强化:给关键工具(如 report_generate)添加 “失败重试 + 备份方案”(如 Word 生成失败则生成 Markdown 格式)。
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐