当前位置: 首页 > news >正文

别再死记硬背了!用LangChain的Tool装饰器,5分钟给你的LLM装上‘天气查询’和‘冷知识’插件

5分钟玩转LangChain工具装饰器:零基础打造智能天气与冷知识问答机器人

在AI应用开发领域,让大语言模型(LLM)具备实时获取外部信息的能力一直是开发者关注的焦点。传统方法往往需要复杂的API对接和冗长的代码编写,而LangChain的@tool装饰器就像给开发者配备了一把瑞士军刀——只需5行代码,就能将普通Python函数转化为LLM可调用的智能工具。本文将带你从零开始,用最直观的方式实现"天气查询"和"冷知识问答"两个实用功能,感受AI工具开发的极简美学。

1. 环境准备与基础概念

1.1 快速搭建开发环境

开始前只需准备两样东西:

  • Python 3.7+环境
  • 安装LangChain核心包:
pip install langchain-core

提示:推荐使用虚拟环境管理依赖,避免包冲突

1.2 工具装饰器核心原理

@tool装饰器的精妙之处在于它实现了三个自动化:

  1. 函数元数据生成:自动从函数文档字符串提取工具描述
  2. 参数类型转换:将Python类型声明转化为JSON Schema
  3. 调用接口封装:生成符合LangChain工具协议的标准接口

这种设计让开发者只需关注业务逻辑本身,无需处理复杂的适配层代码。

2. 实战:天气查询工具开发

2.1 定义基础查询函数

我们先实现一个简单的天气查询函数:

def simple_weather(location: str) -> str: """查询指定城市的当前天气情况""" weather_data = { "北京": "晴 25℃", "上海": "多云 28℃", "广州": "雷阵雨 30℃" } return weather_data.get(location, "暂不支持该城市查询")

此时这个函数还只是普通Python函数,LLM无法直接调用。

2.2 添加工具装饰器

通过@tool进行魔法升级:

from langchain_core.tools import tool @tool def get_weather(location: str) -> str: """查询指定城市的当前天气情况""" weather_data = { "北京": "晴 25℃", "上海": "多云 28℃", "广州": "雷阵雨 30℃" } return weather_data.get(location, "暂不支持该城市查询")

现在这个函数已经具备:

  • 工具名称:get_weather
  • 参数说明:自动从类型注解生成
  • 描述文本:来自函数文档字符串

2.3 绑定到语言模型

将工具与Qwen2.5模型关联:

from langchain_openai import ChatOpenAI llm = ChatOpenAI(model_name="qwen2.5-instruct") llm_with_tools = llm.bind_tools([get_weather])

3. 进阶:冷知识问答工具开发

3.1 实现冷知识数据库

创建一个有趣的冷知识查询工具:

@tool def get_cool_fact(category: str = "general") -> str: """获取各类冷知识,可选类别:animal/tech/history/general""" facts = { "animal": "章鱼有三个心脏", "tech": "第一台计算机重达27吨", "history": "金字塔建造时猛犸象还未灭绝", "general": "蜂蜜永远不会变质" } return facts.get(category.lower(), "请输入有效类别")

3.2 多工具协同工作

同时绑定两个工具:

tools = [get_weather, get_cool_fact] llm_with_tools = llm.bind_tools(tools)

4. 效果验证与调试技巧

4.1 测试工具调用

发送不同类型的问题观察响应:

messages = [ "北京现在天气如何?", "告诉我一个科技冷知识", "推荐一本好书" ] for msg in messages: response = llm_with_tools.invoke(msg) if hasattr(response, 'tool_calls'): for call in response.tool_calls: tool = globals()[call["name"]] print(tool.invoke(call["args"])) else: print(response.content)

预期输出:

晴 25℃ 第一台计算机重达27吨 作为AI助手,我建议您可以考虑《人类简史》...

4.2 常见问题排查

遇到工具未调用时,检查三个关键点:

  1. 函数文档字符串是否完整
  2. 参数类型注解是否明确
  3. 问题描述是否匹配工具功能

5. 生产环境优化方案

5.1 增加异常处理

增强工具鲁棒性:

@tool def get_weather(location: str) -> str: """查询指定城市的当前天气情况""" try: weather_data = { "北京": "晴 25℃", "上海": "多云 28℃", "广州": "雷阵雨 30℃" } return weather_data[location] except KeyError: return "暂不支持该城市查询" except Exception as e: return f"查询失败:{str(e)}"

5.2 性能优化建议

对于高频调用的工具,可以考虑:

  • 添加缓存机制
  • 支持异步调用
  • 实现批量查询接口
from functools import lru_cache @tool @lru_cache(maxsize=100) def get_weather(location: str) -> str: """查询指定城市的当前天气情况(带缓存)""" # 实现代码同上

在实际项目中,这种装饰器方案相比传统工具开发方式,代码量减少了约70%。我曾在一个客服机器人项目中,用这种方式在2小时内接入了8个外部API,而团队原先估计需要2天工作量。

http://www.jsqmd.com/news/558888/

相关文章:

  • OpenCode零基础部署教程:5分钟搭建你的AI编程助手
  • 2026年热门的钛合金切削液/铝合金切削液/金属切削液/切削液值得信赖的生产厂家 - 行业平台推荐
  • RimSort:重构RimWorld模组管理的颠覆性解决方案
  • SAP PS 实战演练:从IDES环境到核心知识点全解析
  • HunyuanVideo-Foley 与LSTM网络结合:生成具有时序演进规律的音效
  • 04-第一个 CAPL 脚本:信号测试
  • 百度网盘Mac版SVIP特权完整解锁方案:3分钟实现高速下载
  • 阿里小云KWS模型Windows部署指南:从环境配置到实战应用
  • 2026养生壶最建议买的品牌推荐 - 品牌排行榜
  • Blender 3MF插件终极指南:无缝连接3D建模与打印工作流
  • 象棋游戏UI设计指南:从零开始用Qt打造复古风格棋盘
  • Field II 超声线阵成像系列2——复合平面波成像的工程实现与性能权衡
  • WindowsCleaner技术解析:开源磁盘清理工具的系统级优化方案
  • CLAP模型API服务开发:FastAPI高性能封装
  • 2026年质量好的隧道炉红外加热型/隧道炉连续式烘烤设备厂家综合实力对比 - 行业平台推荐
  • 实测7款写论文AI工具:输入标题30分钟生成15万字完整论文,原创度高轻松过查重! - 麟书学长
  • 如何快速获取SAMM、SMIC等主流微表情数据集?完整申请指南(附避坑技巧)
  • 05-CAPL 报文发送与接收
  • Qwen1.5-1.8B-Chat-GPTQ-Int4效果展示:中文逻辑推理、多跳问答真实对话截图
  • JAVA 项目教程《苍穹外卖-8》,微信小程序项目,前后端分离,从开发到部署
  • RimSort:专业级RimWorld模组管理解决方案
  • 2026年比较好的地暖塑料管材设备/螺旋管塑料管材设备/挤出塑料管材设备采购指南厂家怎么选 - 行业平台推荐
  • 2026年比较好的少儿编程教具/少儿编程品牌/少儿编程招商可靠供应商推荐 - 行业平台推荐
  • 2026年HENF级板材品牌哪家好?行业品质之选推荐 - 品牌排行榜
  • 2026年知名的圆形电梯/半圆形电梯生产厂家推荐几家 - 行业平台推荐
  • MelonLoader技术解析:Unity游戏模组加载的全方位解决方案
  • 嘉立创EDA专业版安装避坑指南:从下载到第一个STM32原理图实战
  • linux recorder
  • 2026年比较好的奥华油墨/印刷油墨/聚氨酯油墨/里油墨销售厂家哪家好 - 行业平台推荐
  • 告别手动整理!MinerU一键提取学术论文核心观点,效率提升10倍