当前位置: 首页 > news >正文

LangChain: Agent(代理)

Agent是LangChain中最强大的概念之一,它让语言模型能够​​自主决策和执行动作​​,而不仅仅是生成文本。

核心概念图解

什么是Agent?

​Agent​​是一个由语言模型驱动的系统,它能够:

  1. ​理解用户请求​
  2. ​决定需要采取什么行动​
  3. ​使用工具执行这些行动​
  4. ​根据结果决定下一步行动​
  5. ​最终提供完整的回答​

Agent的核心组件

1. 工具(Tools)

from langchain.agents import load_tools# 加载内置工具
tools = load_tools(["serpapi", "llm-math"], llm=llm)

2. 代理类型(Agent Types)

from langchain.agents import AgentType# 常用代理类型
agent_types = [AgentType.ZERO_SHOT_REACT_DESCRIPTION,  # 零样本推理AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION,  # 结构化聊天AgentType.OPENAI_FUNCTIONS  # OpenAI函数调用
]

3. 代理执行器(Agent Executor)

from langchain.agents import initialize_agentagent = initialize_agent(tools=tools,llm=llm,agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,verbose=True
)

完整代码示例

from langchain.agents import load_tools, initialize_agent, AgentType
from langchain.llms import OpenAI
from langchain.chat_models import ChatOpenAI# 1. 初始化模型
llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo")# 2. 加载工具
tools = load_tools(["serpapi", "llm-math"], llm=llm)# 3. 初始化代理
agent = initialize_agent(tools=tools,llm=llm,agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,verbose=True  # 显示详细执行过程
)# 4. 运行代理
result = agent.run("目前市场上iPhone 15 Pro Max的价格是多少?""如果买3台,总价是多少?加上8%的税呢?"
)
print(result)

这里的serpapi会提供实时联网查询功能,参考:https://blog.csdn.net/seanyang_/article/details/151323089

如果不使用该工具,则会推理计算。

输出

Thought: 我需要先查找iPhone 15 Pro Max的当前市场价格。由于我没有实时访问互联网的能力,我需要基于一般知识来估算价格。iPhone 15 Pro Max的起售价通常在999美元左右,但具体价格可能因地区和配置而异。我将假设一个基准价格进行计算。Action: Calculator
Action Input: 999 * 3  # 假设每台999美元,计算3台的总价Observation: Answer: 2997
Thought:Observation: 2997Thought: 现在我需要加上8%的税。首先计算税额,然后加到总价上。Action: Calculator
Action Input: 2997 * 0.08  # 计算8%的税额Observation: Answer: 239.76
Thought:Thought: 现在将税额加到总价上,得到最终总价。Action: Calculator
Action Input: 2997 + 239.76Observation: Answer: 3236.76
Thought:Thought: 我基于iPhone 15 Pro Max的起售价999美元进行了计算。但需要注意的是,实际价格可能因存储容量、地区和零售商的不同而有所差异。此外,我假设的是美元价格,而问题是用中文提出的,可能指的是中国市场的人民币价格。不过既然没有指定货币,我继续使用美元计算。Final Answer: 基于iPhone 15 Pro Max起售价999美元的假设:
- 3台iPhone 15 Pro Max的基础总价为2,997美元
- 加上8%的税后,最终总价为3,236.76美元请注意:实际市场价格可能因配置(存储容量)、地区和零售商的不同而有所差异。建议查询当地苹果官网或授权经销商获取准确价格。> Finished chain.
基于iPhone 15 Pro Max起售价999美元的假设:
- 3台iPhone 15 Pro Max的基础总价为2,997美元
- 加上8%的税后,最终总价为3,236.76美元请注意:实际市场价格可能因配置(存储容量)、地区和零售商的不同而有所差异。建议查询当地苹果官网或授权经销商获取准确价格。Process finished with exit code 0

可以看到agent有thought,action

带搜索的Agent的执行过程

> Entering new AgentExecutor chain...
我需要先查找iPhone 15 Pro Max的当前市场价格
Action: Search
Action Input: "iPhone 15 Pro Max 当前价格"
Observation: iPhone 15 Pro Max 当前起售价为1199美元现在需要计算3台的总价
Action: Calculator
Action Input: 1199 * 3
Observation: 3597现在计算加上8%税的价格
Action: Calculator
Action Input: 3597 * 1.08
Observation: 3884.76Thought: 我已经得到了所有需要的信息
Final Answer: 目前iPhone 15 Pro Max起售价为1199美元,购买3台原价3597美元,加上8%税后总价为3884.76美元。

自定义工具创建

from langchain.tools import BaseTool
from typing import Optionalclass CustomCalculatorTool(BaseTool):name = "CustomCalculator"description = "用于执行数学计算的高级计算器"def _run(self, query: str) -> str:"""执行计算"""try:# 安全评估数学表达式result = eval(query)return f"计算结果: {result}"except:return "计算错误,请检查表达式"async def _arun(self, query: str) -> str:"""异步执行"""return self._run(query)# 使用自定义工具
custom_tools = [CustomCalculatorTool()]
agent = initialize_agent(tools=custom_tools,llm=llm,agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION
)

不同类型的Agent

1. Zero-Shot React Agent 

不需要示例,直接推理

# 不需要示例,直接推理
agent = initialize_agent(tools=tools,llm=llm,agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION
)

2. Structured Chat Agent

# 支持更复杂的多轮对话
agent = initialize_agent(tools=tools,llm=llm,agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION
)

3. OpenAI Functions Agent

# 使用OpenAI的函数调用能力
agent = initialize_agent(tools=tools,llm=llm,agent=AgentType.OPENAI_FUNCTIONS
)

实际应用场景

1. 研究助手

research_tools = load_tools(["serpapi", "wikipedia"])
research_agent = initialize_agent(tools=research_tools,llm=llm,agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION
)result = research_agent.run("研究人工智能的历史,并总结主要里程碑事件"
)

2. 数据分析助手

data_tools = load_tools(["python_repl"])
data_agent = initialize_agent(tools=data_tools,llm=llm,agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION
)result = data_agent.run("分析这个CSV文件并找出销售额最高的产品: sales_data.csv"
)

3. 客户服务助手

service_tools = load_tools(["serpapi", "llm-math"])
service_agent = initialize_agent(tools=service_tools,llm=llm,agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION
)result = service_agent.run("客户询问产品价格和库存情况,请帮忙查询"
)

最佳实践和技巧

1. 工具描述优化

# 为工具提供清晰的描述
calculator.description = """
用于执行数学计算。输入应该是数学表达式,如 '2 + 2' 或 '500 * 0.1'。
对于复杂计算,使用括号明确运算顺序。
"""

2. 错误处理

from langchain.agents import AgentExecutoragent_executor = AgentExecutor.from_agent_and_tools(agent=agent,tools=tools,max_iterations=5,  # 限制最大迭代次数early_stopping_method="generate"  # 提前停止策略
)

3. 记忆集成

from langchain.memory import ConversationBufferMemorymemory = ConversationBufferMemory(memory_key="chat_history")
agent = initialize_agent(tools=tools,llm=llm,agent=AgentType.CONVERSATIONAL_REACT_DESCRIPTION,memory=memory,verbose=True
)

常见问题解决

1. 无限循环

# 设置迭代限制
agent_executor = AgentExecutor(agent=agent,tools=tools,max_iterations=5,handle_parsing_errors=True
)

2. 解析错误

# 更好的错误处理
agent = initialize_agent(tools=tools,llm=llm,agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,handle_parsing_errors=True
)

3. 工具选择不当

# 提供更详细的工具描述
search_tool.description = """
使用此工具搜索最新信息。输入应该是具体的搜索查询。
适用于查找事实、价格、新闻等实时信息。
"""

性能优化

1. 缓存结果

from langchain.cache import InMemoryCache
from langchain.globals import set_llm_cacheset_llm_cache(InMemoryCache())

2. 并行工具执行

# 使用异步执行
async def run_agent_async():result = await agent.arun("你的问题")return result

3. 批量处理

# 同时处理多个查询
questions = ["问题1", "问题2", "问题3"]
results = []
for q in questions:results.append(agent.run(q))

总结

LangChain的Agent系统提供了强大的自主决策和执行能力:

  1. ​核心优势​​:

    • 自主工具使用
    • 多步推理能力
    • 实时信息获取
    • 复杂任务处理
  2. ​适用场景​​:

    • 研究分析
    • 数据查询
    • 自动化任务
    • 智能助手
  3. ​最佳实践​​:

    • 清晰工具描述
    • 适当迭代限制
    • 错误处理机制
    • 记忆集成

通过合理使用Agent,你可以创建出能够理解、推理和行动的智能系统,而不仅仅是生成文本的模型。


文章转载自:

http://Ez4uupqO.gwkwt.cn
http://wSQhehfY.gwkwt.cn
http://QUMuFYwr.gwkwt.cn
http://rOjjwVtg.gwkwt.cn
http://6fBUh2nY.gwkwt.cn
http://rybp50Z4.gwkwt.cn
http://WmssblOy.gwkwt.cn
http://VBZQFp7F.gwkwt.cn
http://7zbaIbKF.gwkwt.cn
http://K6NtPV9r.gwkwt.cn
http://gPOldEU4.gwkwt.cn
http://nCrg04jm.gwkwt.cn
http://QiNg81MG.gwkwt.cn
http://Suq0nzpm.gwkwt.cn
http://IbMB8x3v.gwkwt.cn
http://nSNDJVlb.gwkwt.cn
http://N3wNUFdf.gwkwt.cn
http://odGAkC0x.gwkwt.cn
http://wHTH1u7i.gwkwt.cn
http://AyrlWxML.gwkwt.cn
http://OnQwzdK4.gwkwt.cn
http://OYWIzEA8.gwkwt.cn
http://J29qRu5g.gwkwt.cn
http://gEVhtaeK.gwkwt.cn
http://5bs7mwBd.gwkwt.cn
http://wmVRCEAt.gwkwt.cn
http://Q73MlXzt.gwkwt.cn
http://6P4w6PG0.gwkwt.cn
http://tHuBSJAZ.gwkwt.cn
http://olCnTTZB.gwkwt.cn
http://www.dtcms.com/a/373849.html

相关文章:

  • 使用 BatchRendererGroup 创建渲染器
  • flutter鸿蒙:使用flutter_local_notifications实现本地通知
  • Redis中数据类型详解
  • CentOS 7安装最新nginx
  • 解决Win11 安全中心删掉存在隐患的工具
  • 二级缓存在实际项目中的应用
  • 第14篇:循环神经网络(RNN)与LSTM:序列建模的利器
  • 【P02_AI大模型之调用LLM的方式】
  • 浅谈Go 语言开发 AI Agent
  • pgsql for循环一个 数据文本 修改数据 文本如下 ‘40210178‘, ‘40210175‘, ‘40210227‘, ‘40210204‘
  • 工业检测机器视觉为啥非用工业相机?普通相机差在哪?
  • 基于MATLAB的粒子群算法优化广义回归神经网络的实现
  • 25年9月通信基础知识补充1:NTN-TDL信道建模matlab代码(satellite-communications toolbox学习)
  • Aider AI Coding项目 流式处理架构深度分析
  • 打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程的智慧工业开源了
  • PAT 1103 Integer Factorization
  • WindowManagerService (WMS)
  • Tool | AI类网址收录
  • SU-03T语音模块的使用
  • kubernetes-lxcfs解决资源可见性问题
  • 235kw发动机飞轮设计说明书CAD+设计说明书
  • Day9 | 类、对象与封装全解析
  • 【財運到】股票期货盯盘助手V3-盯盘界面找不到了
  • “微服务“一词总是出现,它是什么?
  • 打包应用:使用 Electron Forge
  • 详解布隆过滤器
  • ArcGIS学习-16 实战-栅格数据可达性分析
  • MySQL全库检索关键词 - idea 工具 Full-Text Search分享
  • Android小工具:使用python生成适配不同分辨率的dimen文件
  • 基于Python的电影推荐系统【2026最新】