LangChain工具函数实践:让AI能力连接生活!
引言
在构建AI应用时,我们经常需要让AI模型具备调用外部功能的能力。LangChain提供了强大的工具函数(Tools)机制,使我们能够轻松地扩展AI模型的能力。本文将详细介绍如何在LangChain中实现和使用工具函数。
环境准备
import os
from os import environ
from langchain_core.tools import StructuredTool
from langchain_openai import ChatOpenAI
from langchain.tools import tool
from dotenv import load_dotenv
import datetime
# 加载环境变量
load_dotenv()
配置模型
model = ChatOpenAI(
base_url="https://openrouter.ai/api/v1",
api_key=os.getenv("KEY"),
model="google/gemini-2.0-flash-001"
)
工具函数实现
1. 使用@tool装饰器
这是最简单的工具函数定义方式:
@tool
def get_date():
"""获取当前日期"""
return datetime.datetime.now().strftime("%Y-%m-%d")
@tool
def get_weather(region: str):
"""
获取指定地区的天气
:param region: 地区
:return: 天气信息
"""
return f"{region}晴天,25度"
2. 使用StructuredTool
另一种更灵活的方式:
def get_sunset(region: str):
"""
获取指定地区的日落时间
:param region: 地区
:return: 日落时间
"""
return f"{region}日落时间为18:30"
# 将函数转换为工具
getSunsetTool = StructuredTool.from_function(
func=get_sunset,
description="获取指定地区的日落时间",
name="get_sunset"
)
工具绑定与使用
1. 绑定工具到模型
# 方式1:直接绑定工具列表
llm_with_tools = model.bind_tools([get_date, get_weather, getSunsetTool])
# 方式2:创建工具字典
all_tools = {
"get_date": get_date,
"get_weather": get_weather,
"get_sunset": getSunsetTool
}
2. 使用工具处理查询
def process_query(query):
message = [query]
# 获取AI响应
ai_msg = llm_with_tools.invoke(message)
print(ai_msg)
message.append(ai_msg)
# 处理工具调用
if ai_msg.additional_kwargs:
for tool_call in ai_msg.tool_calls:
tool_result = all_tools[tool_call['name'].lower()]
tool_msg = tool_result.invoke(tool_call)
message.append(tool_msg)
# 获取最终响应
final_response = llm_with_tools.invoke(message).content
return final_response
使用示例
# 查询当前日期
query1 = "今天是几月几号"
# 查询天气
query2 = "上海今天天气怎么样"
# 复合查询
query3 = "上海今天天气怎么样,几点有日落"
# 处理查询
result = process_query(query3)
print(result)
技术要点解析
-
工具函数定义
- 使用
@tool
装饰器 - 使用
StructuredTool.from_function
- 必须提供清晰的文档字符串
- 使用
-
参数类型
- 明确定义参数类型
- 提供参数说明
- 返回值说明
-
工具绑定
- 支持多个工具同时绑定
- 工具名称需要唯一
- 支持动态调用
-
消息处理
- 维护对话上下文
- 处理工具调用结果
- 生成最终响应
最佳实践
1. 工具函数命名和描述
@tool
def get_weather(region: str):
"""
获取指定地区的天气信息
Args:
region: 地区名称(如:北京、上海)
Returns:
str: 天气描述
"""
return f"{region}晴天,25度"
2. 错误处理
@tool
def safe_get_weather(region: str):
try:
# 实际的天气API调用
return f"{region}晴天,25度"
except Exception as e:
return f"获取{region}天气信息失败:{str(e)}"
3. 工具组合使用
def get_weather_report(region: str):
weather = get_weather(region)
sunset = get_sunset(region)
return f"{region}天气报告:{weather},{sunset}"
应用场景
-
信息查询
- 天气查询
- 时间日期
- 地理信息
-
数据处理
- 数据转换
- 计算功能
- 格式化输出
-
系统集成
- API调用
- 数据库操作
- 文件处理
注意事项
-
安全性
- 输入验证
- 权限控制
- 敏感信息保护
-
性能
- 避免耗时操作
- 合理使用缓存
- 异步处理
-
可维护性
- 清晰的文档
- 模块化设计
- 错误处理
结论
LangChain的工具函数机制为AI模型提供了强大的扩展能力,通过合理使用工具函数,我们可以构建更加智能和实用的AI应用。
参考资料
- LangChain官方文档
- Python装饰器文档
- AI工具集成最佳实践
通过本文的介绍,你应该能够掌握如何在LangChain中实现和使用工具函数,为AI模型赋予更多实用的能力。