Skip to content

快速上手

概述

本章通过一个完整的示例,带你在几分钟内创建第一个具备工具调用能力的 AI Agent。完成本章后,你将理解 LangChain 的基本工作模式。

先修知识

你的第一个 Agent

LangChain 的核心是 create_agent 函数——只需指定模型和工具,就能创建一个完整的 AI Agent:

python
from langchain.agents import create_agent
from langchain.tools import tool

# 1. 定义工具
@tool
def get_weather(city: str) -> str:
    """获取指定城市的当前天气"""
    # 实际项目中这里调用天气 API
    weather_data = {
        "北京": "晴天,25°C",
        "上海": "多云,28°C",
        "深圳": "小雨,30°C",
    }
    return weather_data.get(city, f"暂无 {city} 的天气数据")

@tool
def calculate(expression: str) -> str:
    """计算数学表达式"""
    try:
        return str(eval(expression))
    except Exception as e:
        return f"计算错误: {e}"

# 2. 创建 Agent
agent = create_agent(
    model="anthropic:claude-sonnet-4-5-20250929",
    tools=[get_weather, calculate],
)

# 3. 调用 Agent
result = agent.invoke({
    "messages": [
        {"role": "user", "content": "北京今天天气怎么样?另外帮我算一下 128 * 365"}
    ]
})

# 4. 查看结果
print(result["messages"][-1].content)

输出示例

北京今天天气晴朗,温度 25°C,非常适合户外活动!

另外,128 × 365 = 46720。

发生了什么?

前端类比

create_agent 的工作模式类似于 React 的组件组合:你定义好"能力"(工具),把它们"注入"到 Agent 中,Agent 会根据用户输入自动决定调用哪些能力。就像 React 组件根据 props 决定渲染什么一样。

LangChain 原生语义create_agent 底层运行在 LangGraph 的运行时上,它构建了一个包含"模型调用"和"工具执行"两个节点的循环图。LLM 在每轮迭代中决定是调用工具还是返回最终结果。

核心概念速览

通过上面的示例,你已经接触到了 LangChain 的三个核心概念:

模型 (Model)

通过 model 参数指定 LLM。LangChain 使用 provider:model-name 格式:

python
# Anthropic Claude
agent = create_agent(model="anthropic:claude-sonnet-4-5-20250929", tools=[...])

# OpenAI GPT
agent = create_agent(model="openai:gpt-4o", tools=[...])

# Google Gemini
agent = create_agent(model="google-genai:gemini-2.0-flash", tools=[...])

工具 (Tool)

使用 @tool 装饰器将普通函数变成 Agent 可调用的工具。函数的 docstring 是关键——LLM 通过它理解工具的用途:

python
@tool
def search_docs(query: str, max_results: int = 5) -> str:
    """在知识库中搜索文档

    Args:
        query: 搜索关键词
        max_results: 最大返回数量,默认 5
    """
    return f"找到 {max_results} 条关于 '{query}' 的结果"

消息 (Message)

Agent 通过消息列表与用户交互。每条消息有一个 role(角色):

python
result = agent.invoke({
    "messages": [
        {"role": "system", "content": "你是一个专业的数据分析师"},
        {"role": "user", "content": "分析这组数据的趋势"},
    ]
})

添加 System Prompt

通过 prompt 参数定制 Agent 的行为和角色:

python
agent = create_agent(
    model="anthropic:claude-sonnet-4-5-20250929",
    tools=[get_weather, calculate],
    prompt="你是一个友好的中文助手。回答问题时要详细且有条理。",
)

流式输出

使用 .stream() 方法实时查看 Agent 的执行过程:

python
for chunk in agent.stream(
    {"messages": [{"role": "user", "content": "北京天气如何?"}]},
    stream_mode="updates",
):
    for node, data in chunk.items():
        print(f"[{node}] {data['messages'][-1].content_blocks}")

结构化输出

让 Agent 返回结构化数据:

python
from pydantic import BaseModel

class WeatherReport(BaseModel):
    city: str
    temperature: float
    condition: str
    suggestion: str

agent = create_agent(
    model="anthropic:claude-sonnet-4-5-20250929",
    tools=[get_weather],
    response_format=WeatherReport,
)

result = agent.invoke({
    "messages": [{"role": "user", "content": "北京天气怎么样?"}]
})

report = result["structured_response"]
print(f"{report.city}: {report.temperature}°C, {report.condition}")

完整示例:个人助手 Agent

下面是一个稍微复杂的示例,展示如何组合多个工具构建实用的 Agent:

python
from langchain.agents import create_agent
from langchain.tools import tool
from datetime import datetime

@tool
def get_current_time() -> str:
    """获取当前日期和时间"""
    return datetime.now().strftime("%Y-%m-%d %H:%M:%S")

@tool
def search_notes(keyword: str) -> str:
    """搜索笔记内容

    Args:
        keyword: 搜索关键词
    """
    notes = {
        "会议": "明天下午 3 点产品评审会议",
        "待办": "完成 API 文档、Review PR #42",
        "学习": "学习 LangChain 的 Middleware 系统",
    }
    results = [v for k, v in notes.items() if keyword in k]
    return "\n".join(results) if results else "未找到相关笔记"

@tool
def create_reminder(content: str, time: str) -> str:
    """创建提醒

    Args:
        content: 提醒内容
        time: 提醒时间
    """
    return f"已创建提醒: [{time}] {content}"

# 创建个人助手
assistant = create_agent(
    model="anthropic:claude-sonnet-4-5-20250929",
    tools=[get_current_time, search_notes, create_reminder],
    prompt="你是一个高效的个人助手,帮助用户管理日程和笔记。回复简洁明了。",
)

# 使用
result = assistant.invoke({
    "messages": [
        {"role": "user", "content": "帮我查一下有没有关于会议的笔记,然后提醒我明天准备材料"}
    ]
})

print(result["messages"][-1].content)

常见问题

Q: create_agent 与旧版 initialize_agent 有什么区别?

A: create_agent 是 LangChain 1.0 引入的统一接口,替代了旧版的多个 Agent 构造函数。它更简洁、类型安全,且内置 Middleware 支持。详见 迁移指南

Q: Agent 调用工具的次数有限制吗?

A: 默认没有硬性限制,Agent 会在认为任务完成时停止。你可以通过 recursion_limit 参数限制最大迭代次数。

Q: 可以不使用工具吗?

A: 可以。不传 tools 参数时,Agent 退化为普通的对话模型:

python
agent = create_agent(model="anthropic:claude-sonnet-4-5-20250929")

下一步

恭喜你创建了第一个 Agent!接下来建议深入学习各个核心组件:

参考资源

学习文档整合站点