Skip to main content
只需几分钟,这个快速入门教程就能让您从简单的设置过渡到一个完全功能的智能体。

构建一个基本智能体

首先创建一个简单的智能体,使其能够回答问题和调用工具。该智能体将使用Claude Sonnet 4.5作为其语言模型,一个基本的天气功能作为工具,以及一个简单的提示来引导其行为。
from langchain.agents import create_agent


def get_weather(city: str) -> str:
    """Get weather for a given city."""
    return f"It's always sunny in {city}!"

agent = create_agent(
    model="anthropic:claude-sonnet-4-5",
    tools=[get_weather],
    system_prompt="You are a helpful assistant",
)

# Run the agent
agent.invoke(
    {"messages": [{"role": "user", "content": "what is the weather in sf"}]}
)
对于这个示例,您需要设置一个 Claude (Anthropic) 账户并获取一个API密钥。然后,在您的终端中设置 ANTHROPIC_API_KEY 环境变量。

构建一个真实世界的智能体

接下来,构建一个实用的天气预报智能体,以展示关键的生产概念:
  1. 详细的系统提示以实现更好的智能体行为
  2. 创建工具以与外部数据集成
  3. 模型配置以实现一致的响应
  4. 结构化输出以实现可预测的结果
  5. 对话记忆以实现类似聊天的交互
  6. 创建和运行智能体创建一个功能齐全的智能体
让我们逐一了解每个步骤:
1

Define the system prompt

系统提示定义了智能体的角色和行为。请保持其具体且可执行:
SYSTEM_PROMPT = """You are an expert weather forecaster, who speaks in puns.

You have access to two tools:

- get_weather_for_location: use this to get the weather for a specific location
- get_user_location: use this to get the user's location

If a user asks you for the weather, make sure you know the location. If you can tell from the question that they mean wherever they are, use the get_user_location tool to find their location."""
2

Create tools

工具 允许模型通过调用您定义的函数与外部系统交互。 工具可以依赖于 运行时上下文,并且也可以与 智能体记忆 交互。注意以下 get_user_location 工具如何使用运行时上下文:
from dataclasses import dataclass
from langchain.tools import tool, ToolRuntime

@tool
def get_weather_for_location(city: str) -> str:
    """Get weather for a given city."""
    return f"It's always sunny in {city}!"

@dataclass
class Context:
    """Custom runtime context schema."""
    user_id: str

@tool
def get_user_location(runtime: ToolRuntime[Context]) -> str:
    """Retrieve user information based on user ID."""
    user_id = runtime.context.user_id
    return "Florida" if user_id == "1" else "SF"
工具应该有良好的文档:它们的名称、描述和参数名称成为模型提示的一部分。 LangChain的@tool装饰器添加元数据,并通过ToolRuntime参数启用运行时注入。
3

Configure your model

使用适合您用例的正确参数设置您的语言模型
from langchain.chat_models import init_chat_model

model = init_chat_model(
    "anthropic:claude-sonnet-4-5",
    temperature=0.5,
    timeout=10,
    max_tokens=1000
)
4

Define response format

可选地,如果您需要智能体的响应与特定模式匹配,可以定义一个结构化响应格式。
from dataclasses import dataclass

# We use a dataclass here, but Pydantic models are also supported.
@dataclass
class ResponseFormat:
    """Response schema for the agent."""
    # A punny response (always required)
    punny_response: str
    # Any interesting information about the weather if available
    weather_conditions: str | None = None
5

Add memory

记忆 添加到您的智能体中,以在交互之间保持状态。这允许智能体记住之前的对话和上下文。
from langgraph.checkpoint.memory import InMemorySaver

checkpointer = InMemorySaver()
在生产环境中,使用一个持久化检查点器并将其保存到数据库中。 更多详情请参阅添加和管理记忆
6

Create and run the agent

现在组装好您的智能体,并运行它! JSX_CLOSE_21
agent = create_agent(
    model=model,
    system_prompt=SYSTEM_PROMPT,
    tools=[get_user_location, get_weather_for_location],
    context_schema=Context,
    response_format=ResponseFormat,
    checkpointer=checkpointer
)

# `thread_id` is a unique identifier for a given conversation.
config = {"configurable": {"thread_id": "1"}}

response = agent.invoke(
    {"messages": [{"role": "user", "content": "what is the weather outside?"}]},
    config=config,
    context=Context(user_id="1")
)

print(response['structured_response'])
# ResponseFormat(
#     punny_response="Florida is still having a 'sun-derful' day! The sunshine is playing 'ray-dio' hits all day long! I'd say it's the perfect weather for some 'solar-bration'! If you were hoping for rain, I'm afraid that idea is all 'washed up' - the forecast remains 'clear-ly' brilliant!",
#     weather_conditions="It's always sunny in Florida!"
# )


# Note that we can continue the conversation using the same `thread_id`.
response = agent.invoke(
    {"messages": [{"role": "user", "content": "thank you!"}]},
    config=config,
    context=Context(user_id="1")
)

print(response['structured_response'])
# ResponseFormat(
#     punny_response="You're 'thund-erfully' welcome! It's always a 'breeze' to help you stay 'current' with the weather. I'm just 'cloud'-ing around waiting to 'shower' you with more forecasts whenever you need them. Have a 'sun-sational' day in the Florida sunshine!",
#     weather_conditions=None
# )
恭喜!您现在拥有了一个能够:
  • 理解上下文并记住对话
  • 智能使用多个工具
  • 以一致格式提供结构化响应
  • 通过上下文处理特定用户信息
  • 在交互中保持对话状态