跳到主要内容

快速开始指南

5分钟快速入门

本指南将帮助您在5分钟内创建第一个LangChain代理。

前置条件

  1. Python环境:Python 3.9及以上版本
  2. 包管理工具:pip 或 uv
  3. API密钥:Anthropic Claude、OpenAI或其他LLM提供商的API密钥

第一步:安装LangChain

pip install langchain langchain-anthropic

或使用uv(更快的包管理器):

uv add langchain langchain-anthropic

第二步:配置API密钥

export ANTHROPIC_API_KEY="your-api-key-here"

或在Python中配置:

import os
os.environ["ANTHROPIC_API_KEY"] = "your-api-key-here"

第三步:创建第一个代理

from langchain.agents import create_agent

def get_weather(city: str) -> str:
"""获取指定城市的天气信息

Args:
city: 城市名称
"""
# 这里可以调用真实的天气API
return f"{city}目前是晴天,气温25°C"

# 创建代理
agent = create_agent(
model="anthropic:claude-sonnet-4",
tools=[get_weather],
system_prompt="你是一个有帮助的天气助手。当用户询问天气时,使用可用的工具查询信息。"
)

# 运行代理
result = agent.invoke({
"messages": [{"role": "user", "content": "旧金山的天气如何?"}]
})

print(result)

输出示例:

{
"messages": [
{"role": "user", "content": "旧金山的天气如何?"},
{"role": "assistant", "content": "旧金山目前是晴天,气温25°C..."}
]
}

理解执行过程

刚才的代码做了什么?

  1. 导入必要模块

    • create_agent:创建代理的工厂函数
  2. 定义工具

    • get_weather 函数是一个工具
    • 包含文档字符串(docstring)供模型理解
  3. 创建代理

    • 指定模型:Claude Sonnet 4
    • 注册工具:告诉代理哪些工具可用
    • 设置系统提示:指导代理行为
  4. 执行代理

    • 调用 invoke() 方法运行代理
    • 传入消息列表
    • 获取最终结果

工作流程详解

用户:旧金山的天气如何?

代理接收消息

模型分析:需要查询天气

模型生成工具调用:调用 get_weather("旧金山")

执行工具并获得结果

模型生成最终答案

返回:旧金山目前是晴天,气温25°C...

常见模型配置

Anthropic Claude

from langchain_anthropic import ChatAnthropic

model = ChatAnthropic(
model="claude-sonnet-4",
temperature=0.7,
max_tokens=1000
)

OpenAI GPT

from langchain_openai import ChatOpenAI

model = ChatOpenAI(
model="gpt-4",
temperature=0.7,
max_tokens=1000,
api_key="your-api-key"
)

Google Gemini

from langchain_google_genai import ChatGoogleGenerativeAI

model = ChatGoogleGenerativeAI(
model="gemini-pro",
temperature=0.7,
google_api_key="your-api-key"
)

调试您的第一个代理

问题:工具没有被调用

原因

  • 模型不理解何时需要使用工具
  • 工具描述不清楚
  • 系统提示不足够指导性

解决方案

# 改进系统提示
system_prompt = """
你是一个天气查询助手。当用户询问关于天气的问题时,你必须使用 get_weather 工具。
不要做任何猜测,总是先查询再回答。
"""

agent = create_agent(
model="anthropic:claude-sonnet-4",
tools=[get_weather],
system_prompt=system_prompt
)

问题:模型调用工具过多

原因

  • 系统提示鼓励过度工具调用
  • 模型试图验证结果

解决方案

# 减少工具调用的系统提示
system_prompt = """
你是一个天气助手。执行以下步骤:
1. 用户问天气 → 调用 get_weather 工具一次
2. 获得结果 → 直接返回给用户
不要重复调用同一工具。
"""

问题:出现"API调用失败"错误

原因

  • API密钥错误或过期
  • 网络连接问题
  • 请求超时

解决方案

import os
from langchain_anthropic import ChatAnthropic

# 检查API密钥
print(os.environ.get("ANTHROPIC_API_KEY")) # 验证密钥是否正确

# 使用更长的超时时间
model = ChatAnthropic(
model="claude-sonnet-4",
timeout=60 # 增加超时
)

运行代理的不同方式

方式1:单次调用

# 一次性运行,返回最终结果
result = agent.invoke({
"messages": [{"role": "user", "content": "..."}]
})
print(result)

方式2:流式输出

# 以流的方式逐步获取结果
for chunk in agent.stream({
"messages": [{"role": "user", "content": "..."}]
}):
print(chunk) # 逐步打印结果

方式3:异步执行

import asyncio

async def main():
result = await agent.ainvoke({
"messages": [{"role": "user", "content": "..."}]
})
print(result)

asyncio.run(main())

下一步

现在您已经创建了第一个代理,可以继续学习:

  1. 添加更多工具 - 扩展代理的能力
  2. 优化提示词 - 改进代理的行为
  3. 集成模型选择 - 试用不同的模型
  4. 处理对话历史 - 构建多轮对话应用

完整示例:多工具天气应用

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

@tool
def get_weather(city: str) -> str:
"""获取天气信息"""
return f"{city}目前晴天,25°C"

@tool
def get_forecast(city: str, days: int) -> str:
"""获取未来天气预报

Args:
city: 城市名称
days: 预报天数
"""
return f"{city}未来{days}天都是晴天"

@tool
def suggest_activities(weather: str) -> str:
"""根据天气建议活动

Args:
weather: 天气描述
"""
if "晴天" in weather:
return "建议:户外运动、野餐、骑自行车"
else:
return "建议:室内活动、阅读、看电影"

# 创建具有多个工具的代理
agent = create_agent(
model="anthropic:claude-sonnet-4",
tools=[get_weather, get_forecast, suggest_activities],
system_prompt="""
你是一个全能的天气和活动建议助手。
用户可能会问天气、预报或活动建议。
使用可用的工具提供准确信息。
"""
)

# 测试
result = agent.invoke({
"messages": [
{"role": "user", "content": "旧金山天气如何?有什么适合的活动吗?"}
]
})
print(result)

性能提示

  1. 缓存模型连接:重用模型实例而不是反复创建
  2. 设置合理的超时:避免长时间等待
  3. 使用流式处理:对于长时间运行,流式输出改善用户体验
  4. 监控API成本:根据需要调整模型版本

常见问题

Q: 代理可以存储对话历史吗? A: 是的,通过将消息列表传入代理。参考消息系统与对话章节了解更多。

Q: 如何手动控制工具的调用? A: 使用中间件或LangGraph来精细控制流程。参考LangGraph集成章节。

Q: 代理的性能如何优化? A: 主要从提示词优化、工具设计和模型选择三方面入手。参考上下文工程章节。