1. 为什么需要LLM代理当RAG遇到瓶颈时传统RAG检索增强生成系统在以下场景会暴露明显短板需要动态决策路径的复杂查询如多跳推理涉及实时数据更新的场景股票行情/新闻追踪需要协调多个工具链的复合任务数据分析报告生成去年我在构建一个金融问答系统时就踩过坑当用户问特斯拉最近财报表现如何对比亚迪股价有什么影响时传统RAG只能机械地返回两段不相关的文档。而代理系统可以调用财报API获取特斯拉最新数据查询股票行情服务获取比亚迪价格启动分析子代理比较两者关联性2. LangChain代理框架核心架构2.1 代理三大核心组件from langchain.agents import AgentExecutor, create_react_agent from langchain import hub # 典型代理构建流程 prompt hub.pull(hwchase17/react) # 思维链模板 tools [StockTool(), NewsSearchTool()] # 自定义工具集 agent create_react_agent(llm, tools, prompt) agent_executor AgentExecutor(agentagent, toolstools)2.2 与RAG的关键差异点特性RAGAgent工作模式线性检索-生成动态决策循环数据源固定知识库任意API/工具错误处理直接返回错误自动重试/降级关键经验当你的任务需要超过3次工具调用时就应该考虑代理方案3. 实战构建股票分析代理系统3.1 工具注册示例from langchain.tools import tool import yfinance as yf tool def get_stock_price(symbol: str): 查询实时股票价格 ticker yf.Ticker(symbol) return f{symbol}当前价格: {ticker.history(period1d)[Close].iloc[-1]}3.2 多代理协作流程路由代理分析query确定需要哪些子工具数据采集代理并行调用财经API/新闻爬虫分析代理生成对比图表和风险提示校验代理检查数据一致性防止幻觉4. 性能优化关键技巧4.1 工具调用加速为耗时工具添加缓存装饰器设置超时阈值建议5sfrom functools import lru_cache lru_cache(maxsize100) tool def get_company_info(symbol: str): # 数据库查询逻辑4.2 错误处理最佳实践agent_executor AgentExecutor( agentagent, toolstools, handle_parsing_errorsTrue, # 自动修复JSON解析错误 max_iterations6, # 防止无限循环 early_stopping_methodgenerate # 超时后强制输出 )5. 生产环境部署陷阱最近帮某投行部署时遇到的典型问题API限流解决方案是给工具添加速率限制from ratelimit import limits limits(calls30, period60) tool def market_data_api():工具冲突两个代理同时修改数据库导致死锁解决方法为写操作工具添加分布式锁监控指标工具调用排队时长成本失控某次循环bug导致调用GPT-4 2000次现在我们会强制在AgentExecutor设置预算上限agent_executor AgentExecutor( max_execution_time60, # 最大运行时间(秒) cost_limit5.0 # 美元计费上限 )