自定义工具 (Tools)
虽然 LangChain 社区提供了大量现成的工具(如 Google Search, Wikipedia, Calculator),但在实际业务中,你几乎总是需要自定义工具来连接你的内部 API 或数据库。
使用 @tool 装饰器 (推荐)
这是定义工具最简单的方法。LangChain 会自动解析函数的名称、参数类型和文档字符串(Docstring)来生成工具的描述,这对于 LLM 正确使用工具至关重要。
基础示例
python
from langchain_core.tools import tool
@tool
def get_weather(city: str) -> str:
"""查询指定城市的天气情况。"""
# 这里可以是真实的 API 调用
return f"{city} 的天气是晴天,25摄氏度。"
# 查看生成的工具模式 (JSON Schema)
print(get_weather.args)
# 输出: {'city': {'title': 'City', 'type': 'string'}}多参数示例
python
@tool
def calculate_loan(amount: float, rate: float, years: int) -> float:
"""
计算贷款的月供。
Args:
amount: 贷款总额
rate: 年利率 (例如 0.05)
years: 贷款年限
"""
# 简化的计算逻辑
return amount * (1 + rate) / (years * 12)手动绑定工具 (Binding Tools)
在不使用 Agent 的情况下,你也可以直接让 Chat Model 拥有调用工具的能力。这被称为 "Tool Calling" 或 "Function Calling"。
python
from langchain_openai import ChatOpenAI
tools = [get_weather]
llm = ChatOpenAI(model="gpt-3.5-turbo")
# 将工具绑定到模型
llm_with_tools = llm.bind_tools(tools)
# 调用模型
response = llm_with_tools.invoke("北京天气怎么样?")
# 模型不会直接返回文本,而是返回一个 tool_calls 对象
print(response.tool_calls)
# 输出: [{'name': 'get_weather', 'args': {'city': '北京'}, 'id': '...'}]拿到 tool_calls 后,你可以手动执行对应的函数,并将结果再次传回给模型(这就构成了 Agent 的基础循环)。
开发完成后,如何监控和调试?最后一章带你了解:回调与追踪 (Callbacks)。
LangChain中文文档