langchain-agent的基础使用

Agent

python 复制代码
from langchain.chat_models import init_chat_model
from langchain.agents import create_agent
​
# 1. 初始化模型
model = init_chat_model("gpt-4o-mini", model_provider="openai")
​
# 2. 创建 agent(一步完成)
agent = create_agent(
    model=model,
    tools=[tool1, tool2],
    system_prompt="Agent 的行为指令"  # 可选
)
​
# 3. 调用
result = agent.invoke({
    "messages": [{"role": "user", "content": "问题"}]
})

Agent模型的传入方式

在 LangChain 1.2 中,create_agent 是构建智能体的核心入口,底层基于 LangGraph 实现 。它接收模型、工具、系统提示词等参数,其中模型是 Agent 的"大脑",负责决策与推理。

无论你用哪种方式传模型,create_agent(...) 返回的都是同一个类型:

python 复制代码
<class 'langgraph.graph.state.CompiledStateGraph'>

也就是说 Agent 本质是 LangGraph 的 CompiledStateGraph 实例,底层是一张图结构。你可以用下面这行把它的流程图可视化出来:

python 复制代码
from IPython.display import Image, display
display(Image(agent.get_graph().draw_mermaid_png()))

方式一:传入模型字符串(最省事)

python 复制代码
from langchain.agents import create_agent
agent = create_agent("deepseek-v4-flash")

直接把模型名当字符串 丢进去,由 Agent 内部自主创建模型对象。

  • 优点:一行搞定,零配置。

  • 局限:走默认配置,无法自定义 api_key、base_url 等。

  • 适用:Demo、快速验证。

方式二:传入模型对象(更可控,生产推荐)

先把模型实例化好,再传给 create_agent。实例化有两种等价写法:

python 复制代码
from langchain.chat_models import init_chat_model
import os
from dotenv import load_dotenv
load_dotenv(override=True)
​
# 写法A:通用工厂函数(可指定 provider / api_key / base_url)
model = init_chat_model(
    model="gpt-5.4-mini",
    model_provider="openai",
    api_key=os.getenv("CLOSEAI_API_KEY"),
    base_url=os.getenv("CLOSEAI_BASE_URL"),
)
​
# 写法B:直接用某厂商的封装类
# from langchain_deepseek import ChatDeepSeek
# model = ChatDeepSeek(model="deepseek-v4-flash")
​
agent = create_agent(model)

这种方式能精细控制 api_key、base_url、provider、温度等配置------需要走自定义网关(如前面用到的 CloseAI 兼容地址)时,必须用它。

agent的调用

agent.invoke() 是 Agent 最基本的同步调用方法,会阻塞程序执行直到返回最终结果。

输入 传入一个字典 ,通过 messages 字段传递消息列表:

python 复制代码
response = agent.invoke({"messages": [...]})

消息列表中的每条消息通常包含 role("system" / "user" / "assistant" / "tool")和 content。传纯字符串时默认会被当成 HumanMessage。

也可以在开头加入 system 角色来定义 Agent 的人设和行为,例如"你是一个小学数学老师"。

python 复制代码
resp = agent.invoke( {
    "messages": [
        {"role": "system", "content": "你是一个小学数学老师,耐心,幽默,讲解深入浅
出"},
        {"role": "user", "content": "100加上50等于多少?"}
    ]
})

输出 返回的也是一个字典,包含完整的消息列表:

python 复制代码
{
    "messages": [
        HumanMessage(...),    # 用户问题
        AIMessage(...),       # AI 工具调用(如有)
        ToolMessage(...),     # 工具返回结果(如有)
        AIMessage(...)        # 最终回答 ← 通常取这个
    ]
}

获取最终回答:

python 复制代码
final_answer = response["messages"][-1].content

调用 Agent 就是:传入 {"messages": [...]},拿到 {"messages": [...]},最后一条 AIMessage 的 content 就是最终答案。 底层可能经历多轮"AI 调用工具 → 工具返回 → AI 再回答"的循环,但 invoke() 会等全部跑完才一次性返回。

Agent 工具的使用

只有给 Agent 接入了工具 ,create_agent 的创建才算真正完整。工具可以是 LangChain 内置的 ,也可以自己自定义 ;绑定方式分静态绑定 (本节)和动态绑定(需中间件,后讲)。

一、怎么接入:统一塞进 tools=[...]

所有工具都在 create_agent(model=..., tools=[...]) 的 tools 列表里传入,可绑一个或多个。

① 自定义工具(@tool 装饰器)

python 复制代码
@tool(parse_docstring=True)
def get_weather(city: str) -> str:
    """天气查询工具
    Args:
        city: 城市名称
    """
    return f"{city}的天气为晴朗,25°C。"
​
agent = create_agent(model=model, tools=[get_weather])

配合 system_prompt 限定人设(如"只回答天气相关问题"),问"北京天气"时模型自动 tool_calls → 执行工具 → 返回 ToolMessage → 给出最终答案。

② 内置工具(如 TavilySearch 联网搜索) 先在官网申请 API-KEY 写入 .env(TAVILY_API_KEY),实例化后可直接 .invoke() 单测,也能直接塞进 tools:

python 复制代码
# 1. 去 tavily.com 注册,拿到 API Key,写进 .env:TAVILY_API_KEY=xxx
from langchain_community.tools.tavily_search import TavilySearch
​
# 2. 实例化内置工具
search_tool = TavilySearch(max_results=2)
​
# 3. 当普通工具单测
search_tool.invoke("北京今天的天气")
​
# 4. 或直接绑进 Agent,让它自主决定何时联网查
agent = create_agent(model=model, tools=[search_tool])
agent.invoke({"messages": ["帮我查一下最新的大模型新闻"]})

例如:

python 复制代码
# 2.工具实例化
web_search = TavilySearch(max_results=2)
​
# 3.创建Agent
agent = create_agent(
    model=model,
    tools=[web_search],
    #system_prompt="你是一名多才多艺的智能助手,可以调用工具帮助用户解决问题。"
)
​
# 4.运行Agent获得结果
result = agent.invoke(
    {"messages": [{"role": "user", "content": "请帮我查询2024年诺贝尔物理学奖得主
是谁?"}]}
)

③ 绑多个工具

python 复制代码
agent = create_agent(model, tools=[get_weather, get_news])

模型会自主判断调哪个、甚至一次并行调多个 (例中同时返回 get_weather、get_news 两个 tool_calls)。

Tavily 是什么

一句话:Tavily 是专为 AI Agent 打造的"实时联网搜索 API" ------ 官网自我定位是 "the real-time search engine for AI agents"(AI 智能体的实时搜索引擎)。它不是给人用的搜索引擎,而是给大模型 / Agent 用的"联网能力层"。

解决的问题: 大模型有两个硬伤:知识有截止日期 、会幻觉 。让 Agent 接入 Tavily,就等于给它接上"实时查网 + 把网页内容清洗成结构化片段"的能力,让它能基于最新、可溯源的真实信息来回答,而不是凭记忆瞎编。JetBrains 的案例就提到:模型本来会"自信地编出不存在的库方法",接入 Tavily 实时搜索后立刻解决。

ReAct 结构

Agent 接入工具后,运行时到底是怎么"一圈一圈"跑起来的。 答案是经典的 ReAct 结构。

LangChain 的 Agent 把"模型"和"工具"缝合成一个整体,背后由一个基于 LangGraph 的图结构来编排执行流程。

  • 用户抛出复杂需求后,Agent 像人一样:先理解任务 → 规划步骤 → 选合适的工具(搜索网络、查数据库、做计算等)去拿信息;

  • 然后在一个循环里反复调用模型和工具;

  • 终止条件 :当某一次模型输出里不再包含工具调用时,循环结束,模型综合所有已获得信息给出最终答案。

​​​​​​​

相关推荐
把我格子衫拿来2 小时前
VTK 体绘制入门到排错:传递函数、采样距离与透明度的关系
python·vtk·可视化·医学影像·体绘制
张张123y7 小时前
后端第一课:输入 URL 后发生了什么?我用手写 Socket 把全链路跑通了
python·websocket·ai·socket·url·后端开发
全栈弄潮儿10 小时前
Python实战第7期:字典与集合
后端·python·编程语言
2603_9651481110 小时前
电商选品调研:通过关键词搜索API获取市场热销商品,结合商品详情API分析竞品卖点与定价
开发语言·数据库·人工智能·python·信息可视化
xixiaoyunya11 小时前
Python 异步编程入门:用 asyncio 轻松实现并发任务
开发语言·python·php
把我格子衫拿来11 小时前
Dice 很高就够了吗?分割评价中的 IoU、表面距离与 HD95
python·图像分割·模型评估·医学影像·dice
曲径海盗11 小时前
【Python 学习第 31 天】复习:变量与数据类型 等 3 题
python·学习笔记·编程入门
Data_Journal11 小时前
如何绕过 Cloudflare:网页抓取的最佳方法
网络·python
我命由我1234512 小时前
智能助手通用问答边界
人工智能·python·学习·ai·学习方法·ai编程·智能体