Langchain之Agent代理的使用

目录:

    • 1、简介
    • [2、Agent 的核心概念与使用模式](#2、Agent 的核心概念与使用模式)
      • [1. 工具](#1. 工具)
      • [2. 代理类型](#2. 代理类型)
      • [3. 关键组件](#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?

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

代码实现:

python 复制代码
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年诺贝尔奖得主。" 这个助理会自动帮你完成搜索、阅读、理解、筛选、总结等一系列动作,然后把最终的、精炼的答案呈现在你面前。
相关推荐
猫头虎11 小时前
openAI发布的AI浏览器:什么是Atlas?(含 ChatGPT 浏览功能)macOS 离线下载安装Atlas完整教程
人工智能·macos·chatgpt·langchain·prompt·aigc·agi
工藤学编程19 小时前
零基础学AI大模型之LangChain PyPDFLoader实战与PDF图片提取全解析
人工智能·langchain·pdf
Qiuner1 天前
快速入门LangChain4j Ollama本地部署与阿里百炼请求大模型
语言模型·langchain·nlp·llama·ollama
大模型教程2 天前
一套完整的 RAG 脚手架,附完整代码,基于LangChain
程序员·langchain·llm
韩宁羽2 天前
从0到1,LangChain+RAG全链路实战AI知识库
langchain
大模型真好玩2 天前
LangGraph实战项目:从零手搓DeepResearch(三)——LangGraph多智能体搭建与部署
人工智能·langchain·mcp
小新学习屋3 天前
大模型-智能体-【篇四: Agent GPT 、AgentTuning、LangChain-Agent】
gpt·langchain·大模型·智能体
马尚道3 天前
helloworld入门【从0到1,LangChain+RAG全链路实战AI知识库】
langchain
带刺的坐椅3 天前
LangChain4j 比 SolonAI 强在哪?弱在哪?
java·ai·langchain·solon·mcp