Langchain之Agent代理的使用

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年诺贝尔奖得主。” 这个助理会自动帮你完成搜索、阅读、理解、筛选、总结等一系列动作,然后把最终的、精炼的答案呈现在你面前。

在这里插入图片描述

内容概要:本文深入探讨了Django REST Framework(DRF)在毕业设计中的高级应用与性能优化,围绕智能校园系统案例,系统讲解了DRF的核心进阶技术,包括高级序列化器设计、视图集定制、细粒度权限控制、查询优化、缓存策略、异步任务处理以及WebSocket实时通信集成。文章通过详细的代码示例,展示了如何利用DynamicFieldsModelSerializer实现动态字段返回、使用select_related和prefetch_related优化数据库查询、通过Celery实现异步任务、并集成Channels实现WebSocket实时数据推送。同时介绍了基于IP的限流、自定义分页、聚合统计等实用功能,全面提升API性能与安全性。; 适合人群:具备Django和DRF基础,正在进行毕业设计或开发复杂Web API的高校学生及初级开发者,尤其适合希望提升项目技术深度与系统性能的学习者。; 使用场景及目标:①构建高性能、可扩展的RESTful API,应用于智能校园、数据分析、实时监控等毕业设计项目;②掌握DRF高级技巧,如动态序列化、查询优化、缓存、异步任务与实时通信,提升项目竞争力;③优化系统响应速度与用户体验,应对高并发场景。; 阅读建议:此资源以实战为导向,建议读者结合代码逐项实践,重点理解性能优化与架构设计思路,同时动手搭建环境测试缓存、异步任务和WebSocket功能,深入掌握DRF在真实项目中的高级应用。
### 如何使用 LangChain 构建和配置 Agent 构建和配置基于 LangChainAgent 是一个涉及多个模块的过程,主要包括定义代理类型、配置工具集以及集成语言模型等核心组件。以下是关于如何利用 LangChain 实现这一过程的具体说明。 #### 定义代理类型 LangChain 提供了多种类型的 Agent 来满足不同的需求,例如反应型 Agent (`create_react_agent`) 和结构化 Agent 等。这些 Agent 类型决定了其行为模式和解决问题的方式[^2]。通过选择合适的 Agent 类型,可以更好地适配具体的应用场景。 #### 配置工具集 (Tools) 为了增强 Agent 的功能,需要为其提供一组预定义的工具集合。每种工具都对应特定的功能逻辑,可以通过装饰器 `@tool` 进行声明并注册到工具列表中。例如,在给定的例子中有如下自定义工具用于计算单词长度: ```python from langchain.agents import tool @tool def get_word_length(word: str) -> int: """Returns the length of a word.""" return len(word) tools = [get_word_length] ``` 此部分展示了如何创建简单实用的小型工具函数,并将其纳入整体架构之中以便后续调用[^5]。 #### 整合语言模型 Agent 的智能化水平很大程度上取决于所使用的语言模型质量及其参数设置情况。因此,在实际操作过程中需指定恰当的语言模型实例并与之前准备好的其他要素相结合形成完整的执行链路——即所谓的 `agent_executor` 对象: ```python from langchain.llms import OpenAI from langchain.agents import create_react_agent model = OpenAI() # 初始化OpenAI LLM agent_executor = create_react_agent(model, tools=tools) ``` 上述代码片段体现了将选定的大规模预训练模型与先前定制化的工具组相连接的操作方法。 #### 应用部署 完成以上准备工作之后即可考虑把组装完毕后的 Agent 投入生产环境当中投入使用。当面对诸如查询数据库记录之类的任务时,经过良好设计调整过的系统能够自动解析输入请求内容进而生成相应的解决方案[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bst@微胖子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值