第一个Agent

  |   0 评论   |   0 浏览

你将学会:create_agent 让模型在需要时调用你写的函数。
前置: L00、L01。

Agent 循环

循环结构

Agent = Model + Harness。Harness 就是循环:看消息 → 调工具或作答 → 把工具结果塞回去 → 再看。LangChain 把循环写好了,入口是 create_agent

完整代码

from dotenv import load_dotenv

load_dotenv()

from langchain.agents import create_agent
from langchain.chat_models import init_chat_model
from langchain.tools import tool

model = init_chat_model(
    "deepseek:deepseek-chat",
    temperature=0.5,
    max_tokens=2500,
    timeout=300,
    max_retries=6,
)


@tool
def get_weather(city: str) -> str:
    """查询某城市的天气。city 用中文或英文城市名。"""
    print(f"[工具] get_weather({city})", flush=True)
    return f"{city}今天晴,25°C。"


agent = create_agent(
    model=model,
    tools=[get_weather],
    system_prompt="你是助手。问天气时必须调用 get_weather,不要编造。",
)

result = agent.invoke(
    {"messages": [{"role": "user", "content": "杭州天气怎么样?"}]}
)
print("\n--- 轨迹 ---")
for m in result["messages"]:
    name = getattr(m, "name", "")
    extra = f" name={name}" if name else ""
    print(f"{m.type:8s}{extra} {m.text[:80]!r}")
print("\n最终回答 =>", result["messages"][-1].content)

终端里应出现 [工具] get_weather(...),说明是 Python 执行了函数,不是模型「假装查了天气」。

现在可以回答:三套产品怎么选

你已经亲手跑过 create_agent,这三句话才有意义:

需求
模型 + 工具循环(你现在这样)LangChain create_agent
循环不够,要自己规定每一步(先校验再问模型再发邮件)LangGraph StateGraph(L10)
任务很长,要写文件、派小弟、做计划Deep Agents create_deep_agent(L11)

LangChain 的 agent 底层已经是 LangGraph。用 create_agent 不必先学画图。

常见翻车

现象处理
模型直接口胡天气、不调工具系统提示写明「必须调用」;工具 docstring 写清何时用
tool_choice / thinking 报错模型改回 deepseek-chat
函数没有 docstring@tool 靠 docstring 告诉模型,必须写

练习

  1. 再加一个工具 get_time(city: str) -> str,固定返回 "12:00"。问「杭州现在天气和时间」。确认两个工具都被调用(或至少天气被调用、时间在提示下被调用)。
  2. get_weather 的返回改成 "未知城市",看模型如何把工具结果讲给人听。

本章验收

  •  能从零写出带 @toolcreate_agent 并跑通
  •  能在日志里指出:哪一步是模型、哪一步是你的函数
  •  能用自己的话说清何时还不用 LangGraph

对照仓库:01-快速入门/Overview概览.py03-代理与工具/Agents代理.py

下一课:让 Agent 记住对话


标题:第一个Agent
作者:llp
地址:https://llinp.cn/articles/2026/08/23/1787492583524.html