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

Langchain之Agent代理的使用

目录:

    • 1、简介
    • 2、Agent 的核心概念与使用模式
      • 1. 工具
      • 2. 代理类型
      • 3. 关键组件
    • 3、案例分析
    • 4、疑点解答

1、简介

在人工智能领域,一个 Agent 是一个能够感知环境、自主决策并执行行动以实现目标的系统。相比于单纯根据输入生成输出的模型,Agent 具备 主动性、持续性和目标导向性。

2、Agent 的核心概念与使用模式

1. 工具

这是 Agent 与外界交互的桥梁。任何可以被调用的函数都可以封装成工具,例如:

  • 搜索工具:Tavily、Google Search
  • 计算工具:Python REPL(代码执行环境)
  • 信息查询工具:SQL 数据库查询、Wolfram Alpha
  • 软件工具:发送邮件、操作文件、调用 API

2. 代理类型

代理的类型决定了其决策逻辑,常见的有:

  • Zero-shot ReAct:根据当前状态,无需示例,直接决定下一步动作。最通用灵活。
  • Structured Chat ReAct:适用于动作复杂或有多个输入的场景,能更好地处理结构化输入。
  • OpenAI Functions / Assistant:专为适配 OpenAI 的 Function Calling 能力设计,高效可靠。

3. 关键组件

  • AgentExecutor:这是 Agent 的运行时环境。它负责调用 Agent,执行其选择的工具,处理错误,并将结果反馈给 Agent 进行下一步决策,直到任务完成或达到步骤限制。

3、案例分析

案例一:复杂数据分析与可视化 Agent

这个案例展示了一个更强大的、能链式调用多个工具的 Agent。

目标:“获取特斯拉过去一周的股价数据,计算其每日涨跌幅,并用折线图展示价格走势。”

为什么需要 Agent?
单一工具无法完成此任务。需要串联多个步骤:获取数据 -> 处理数据 -> 生成图表。

代码实现:

from langchain.agents import AgentType, initialize_agent, Tool
from langchain_openai import ChatOpenAI
from langchain_experimental.agents.agent_toolkits import create_python_agent
from langchain_experimental.tools import PythonAstREPLTool
import yfinance as yf  # 用于获取金融数据的库
import matplotlib.pyplot as plt
import io
import base64# --- 自定义工具定义 ---
def get_stock_price(symbol: str) -> str:"""获取股票过去一周的历史数据。"""ticker = yf.Ticker(symbol)hist = ticker.history(period="5d")return hist.to_string()def generate_plot(data_str: str) -> str:"""根据数据字符串生成图表,并返回base64编码的图片。这是一个简化版,实际应用中需要解析data_str。"""# 这里为了演示,我们直接生成一个简单的图表plt.figure(figsize=(10, 5))plt.plot([1, 2, 3, 4, 5], [100, 110, 105, 120, 115])plt.title("Tesla Stock Price (Example)")plt.xlabel("Day")plt.ylabel("Price (USD)")# 将图表保存到内存缓冲区buffer = io.BytesIO()plt.savefig(buffer, format='png')buffer.seek(0)image_png = buffer.getvalue()buffer.close()# 编码为base64,方便在HTML或某些前端中显示graphic = base64.b64encode(image_png).decode('utf-8')plt.close()return graphic# 1. 初始化LLM
llm = ChatOpenAI(model="gpt-4", temperature=0)# 2. 创建自定义工具列表
tools = [Tool(name="Get Stock Data",func=get_stock_price,description="Useful for fetching historical stock price data. Input should be a stock ticker symbol, e.g., TSLA."),Tool(name="Generate Plot",func=generate_plot,description="Useful for generating a line plot from data. Input should be a string representation of the data."),PythonAstREPLTool()  # Python代码执行工具,用于计算涨跌幅等复杂操作
]# 3. 创建代理
agent = initialize_agent(tools,llm,agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION, # 适合处理多输入的工具verbose=True
)# 4. 运行代理
result = agent.run("Get Tesla's stock price for the past week, calculate the daily percentage change, and show me a line chart of the price movement.")
print(result)
# 注意:生成的base64图像数据可以嵌入到网页或报告中。

Agent 的思考与执行过程:

  • Thought: 这个任务需要三个步骤:获取数据、计算变化、生成图表。我先从获取特斯拉的股价数据开始。

  • Action: 调用 Get Stock Data 工具,输入 TSLA。

  • Observation: 获得了一个包含日期和价格的 DataFrame 字符串。

  • Thought: 现在我需要计算每日涨跌幅。这涉及到数学运算,我可以用 Python 工具来处理这些数据。

  • Action: 调用 PythonAstREPLTool,编写一小段 Pandas 代码来计算百分比变化。

  • Observation: Python 代码成功执行,返回了计算结果。

  • Thought: 最后,我需要将处理好的数据可视化。我可以调用 Generate Plot 工具。

  • Action: 调用 Generate Plot 工具,传入处理后的数据。

  • Observation: 工具返回了一个 base64 编码的图表图像。

  • Final Answer: 我已经完成了您的请求。特斯拉过去一周的股价数据显示…(附上数据和图表)。

要点:Agent 展示了出色的任务分解和规划能力,像一个真正的数据分析师一样,按顺序调用不同的专业工具来解决复杂问题。

4、疑点解答

2025诺贝尔获得者 这个上面tavily工作做了 为啥还要agent代理?
让我们用一个类比来理解:

  • 只使用 Tavily:就像你亲自打开浏览器,在谷歌里搜索“2025诺贝尔获得者”,然后从一堆结果中自己阅读、筛选、整理信息,最后形成答案。
  • 使用 Tavily + Agent:就像你有一个私人助理。你只需要下命令:“帮我查一下2025年诺贝尔奖得主。” 这个助理会自动帮你完成搜索、阅读、理解、筛选、总结等一系列动作,然后把最终的、精炼的答案呈现在你面前。

在这里插入图片描述

http://www.dtcms.com/a/517493.html

相关文章:

  • 中国正规官方网站有哪些中国建筑设计研究院
  • wordpress建站后发布海尔网站建设不足之处
  • 黄岩做网站公司电话物联网的核心和基础是什么
  • 10-MySQL索引
  • 点餐网站模板 手机端网站设计有哪些创新点
  • 2.单智能体强化学习
  • 可以做任务的网站多元网站
  • 网站负责人不是法人网页ui设计的内容有哪些
  • 网站建设 个人模板抽奖网站插件
  • 桌面开发,在线%智慧仓库管理%系统,基于vs2022,c#,winform,orm,sql server数据
  • 公司 做网站做网站能赚到钱吗
  • html个人网站制作北京免费建站
  • Pytorch学习系列 | 实现天气识别
  • 织梦搭建本地网站怎样做易支付网站
  • dedecms中英文网站网络架设
  • 摄影网站设计素材低价网站设计
  • 医疗器械网站建设策划书平湖模板网站建设公司
  • php网站后台反应慢怎么解决菲律宾 网站开发公司
  • RHCA - DO374 | Day01:使用红帽Ansible自动化平台开发剧本
  • 软件开发包含网站开发吗wordpress install-helper.php
  • 东莞网站建设环保设备如何提高网站的搜索排名
  • 织梦网站修改教程视频教程网站开发算是软件开发
  • 经济型网站建设胶南网络推广
  • STM32 ST-Link Utility下载
  • 对对联的网站长沙建网站培训机构
  • 济南建设网站制作书签制作
  • 郑州网站改版升级百度sem竞价推广
  • 建湖做网站的公司wordpress悬浮小宠物
  • C++编程技巧和规范_静态对象讨论
  • 超详细的Git submodule讲解以及出现分离头指针(detached HEAD)的解决方法