第 02 课,共 7 课
看懂模型和工具
理解统一模型接口和工具定义规则,让 Agent 正确调用带参数的业务函数。
完成本课后
你应该能做到
- 分清聊天模型和 Agent
- 用类型标注定义工具参数
- 知道工具说明为什么会影响调用结果
模型不是 Agent
聊天模型接收消息并生成消息。Agent 在模型外增加工具循环,让模型可以选择工具、读取工具结果,再继续推理。
LangChain 的统一模型接口让上层 Agent 不依赖某一个提供商。更换模型时,工具和业务流程通常不需要重写。
- 模型回答问题
- 工具执行确定性的代码
- Agent 决定何时调用哪个工具
定义一个有真实参数的工具
官方 Tools 文档强调,函数名、docstring、参数名和类型都会进入模型看到的工具描述。含糊的说明会直接导致错误调用。
下面的工具计算订单总价。模型必须从用户输入中提取 price 和 quantity。
order_agent.py
from langchain.agents import create_agent
from langchain_deepseek import ChatDeepSeek
def calculate_total(price: float, quantity: int) -> float:
"""计算订单总价。
Args:
price: 单件商品价格,单位为元。
quantity: 购买数量,必须是整数。
"""
return round(price * quantity, 2)
agent = create_agent(
model=ChatDeepSeek(model="deepseek-chat", temperature=0),
tools=[calculate_total],
system_prompt="你是订单助手。涉及总价时必须调用计算工具。",
)
result = agent.invoke(
{"messages": [{"role": "user", "content": "单价 19.9 元,买 3 件,一共多少钱?"}]}
)
print(result["messages"][-1].content)
什么时候只用模型
解释概念、改写文本或总结已有内容时,模型通常可以直接回答。涉及价格、数据库、文件、网络请求或任何需要真实数据的任务时,应该使用工具。
不要让模型猜测可以由代码确定的结果。工具调用的价值是把自然语言决策和确定性执行分开。
本课完成标准
- 工具参数同时包含 float 和 int 类型
- 最终总价为 59.7 元
- 修改数量后结果会同步变化
常见错误
检查参数类型标注是否完整,并在 docstring 中解释单位和限制。
在 system_prompt 中明确规定涉及总价必须调用工具。
内容来源
依据官方文档中文整理
代码和概念来自 LangChain 官方固定提交。中文解释用于降低学习门槛,英文原文只作为核对入口。
固定提交 08ae2610bd712a4a340d59f27122bea97a0a598d