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

别再死记硬背了!用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装饰器的精妙之处在于它实现了三个自动化函数元数据生成自动从函数文档字符串提取工具描述参数类型转换将Python类型声明转化为JSON Schema调用接口封装生成符合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_nameqwen2.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 常见问题排查遇到工具未调用时检查三个关键点函数文档字符串是否完整参数类型注解是否明确问题描述是否匹配工具功能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(maxsize100) def get_weather(location: str) - str: 查询指定城市的当前天气情况带缓存 # 实现代码同上在实际项目中这种装饰器方案相比传统工具开发方式代码量减少了约70%。我曾在一个客服机器人项目中用这种方式在2小时内接入了8个外部API而团队原先估计需要2天工作量。

相关文章:

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

5分钟玩转LangChain工具装饰器:零基础打造智能天气与冷知识问答机器人 在AI应用开发领域,让大语言模型(LLM)具备实时获取外部信息的能力一直是开发者关注的焦点。传统方法往往需要复杂的API对接和冗长的代码编写,而Lan…...

终极指南:5分钟上手BepInEx,打造你的Unity游戏插件帝国 [特殊字符]

终极指南:5分钟上手BepInEx,打造你的Unity游戏插件帝国 🚀 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx BepInEx是一款专为Unity游戏设计的强…...

如何高效配置Unity插件框架:终极解决方案指南

如何高效配置Unity插件框架:终极解决方案指南 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx BepInEx是一个功能强大的Unity游戏插件框架和模组开发平台,专…...

OpenClaw我的龙虾怎么识别不了图片

问题现象 图片发送给龙虾,要么一直说没收到图片,要么提示不支持,要么提示安装OCR工具,要么就是识别出来的完全牛头不对马嘴。 解决方案 这里面涉及三个因素: 模型是否支撑图片识别配置中的input是否配置了image聊天渠道…...

告别散斑噪声困扰:用PyTorch手把手实现DenoDet的频域去噪模块(附完整代码)

频域魔法:用PyTorch实现SAR图像去噪的工程实践 当你在处理SAR图像时,是否曾被那些恼人的散斑噪声困扰?这些像胡椒粒一样随机分布的噪声点不仅影响视觉效果,更会严重干扰目标检测的准确性。传统方法试图在空间域直接对抗噪声&#…...

OpenClaw 中所有浏览器控制方法总览

OpenClaw 当前支持的浏览器控制方式,本质可以分为 3 种架构路径: Remote CDP(直接协议控制) Managed Browser(托管浏览器) Existing-session via Chrome DevTools MCP(会话接管) …...

5分钟部署清华TurboDiffusion,视频生成加速100倍,小白也能玩转AI视频

5分钟部署清华TurboDiffusion,视频生成加速100倍,小白也能玩转AI视频 1. TurboDiffusion技术背景与核心价值 1.1 技术发展历程 TurboDiffusion是由清华大学等机构联合推出的视频生成加速框架。该框架解决了传统扩散模型在视频生成过程中存在的计算效率…...

Nunchaku FLUX.1-dev多场景实战:游戏原画/产品渲染/艺术创作全覆盖

Nunchaku FLUX.1-dev多场景实战:游戏原画/产品渲染/艺术创作全覆盖 你是不是也遇到过这样的烦恼:想画一张游戏角色概念图,但手绘功底不够;想给产品做个渲染图,3D软件又太复杂;脑子里有绝妙的艺术创意&…...

14届蓝桥杯省赛Java A 组Q4~Q5

题目链接: Q4 蓝桥云课:棋盘 洛谷:P13879 [蓝桥杯 2023 省 Java A] 棋盘 Q5 蓝桥云课:互质数的个数 洛谷:P13880 [蓝桥杯 2023 省 Java A] 互质数的个数 算法原理: Q4解法:前缀和差分 时间…...

3步颠覆传统下载体验:百度网盘直链解析工具让你告别会员枷锁

3步颠覆传统下载体验:百度网盘直链解析工具让你告别会员枷锁 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 从200KB/s到5MB/s的蜕变 你是否也曾遇到这样的困境&a…...

百度网盘直链解析技术全解析:从原理到实践的开源解决方案

百度网盘直链解析技术全解析:从原理到实践的开源解决方案 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 1. 问题本质:云存储限速的技术困局 1.1 限速…...

2000kn四柱式通用液压机设计【说明书 CAD图纸 开题报告】

2000kN四柱式通用液压机作为工业领域中重要的压力加工设备,其核心作用在于通过液压系统传递压力,实现对金属或非金属材料的冲压、拉伸、弯曲及成型等工艺。该设备采用四柱式框架结构,通过上下横梁与四根立柱构成刚性闭合框架,确保…...

Dify工作流集成StructBERT:构建自定义文本智能处理应用

Dify工作流集成StructBERT:构建自定义文本智能处理应用 最近在做一个智能客服系统的升级项目,客户那边提了个挺实际的需求:每天有大量工单进来,希望系统能先自动判断一下问题类型,比如是“账号问题”、“支付故障”还…...

Z-Image-GGUF在软件测试中的应用:自动化生成测试用例示意图

Z-Image-GGUF在软件测试中的应用:自动化生成测试用例示意图 你是不是也遇到过这样的场景?写测试用例文档时,为了描述一个复杂的用户操作流程,绞尽脑汁写了半天文字,结果评审时,开发同事还是没完全看懂&…...

Uncertainty-Aware Pixel-Level Contrastive Learning for Enhanced Semi-Supervised Medical Image Segmen

1. 医学图像分割的挑战与半监督学习机遇 医学图像分割一直是计算机视觉领域的重要研究方向,它能够帮助医生快速定位病灶区域,提高诊断效率。但在实际应用中,我们常常面临标注数据稀缺的问题——专业医生标注一张CT或MRI图像可能需要数小时&am…...

LangChain详解:大模型应用开发框架(通俗理解+专业解析+Python实战)

LangChain详解:大模型应用开发框架(通俗理解专业解析Python实战) 摘要:随着大语言模型(LLM)的普及,单纯调用模型API已无法满足复杂业务需求——如何让大模型“记住”对话历史、“调用”外部工具…...

Leaflet坐标系实战:从设置到动态切换的完整指南

1. Leaflet坐标系基础概念解析 第一次接触Leaflet坐标系时,我也被各种专业术语搞得晕头转向。简单来说,坐标系就是用来确定地图上每个点位置的规则系统。就像我们在地球上使用经纬度定位一样,数字地图也需要明确的坐标参考。 Leaflet默认支持…...

OpCore-Simplify高效配置实战指南:智能适配黑苹果硬件的开源工具

OpCore-Simplify高效配置实战指南:智能适配黑苹果硬件的开源工具 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 当你面对繁杂的黑苹果EFI…...

基础知识:理解虚拟资产 / 数字商品 / 实用代币 / 稳定币 / 资产支持代币 / 数字收藏品 / 数字证券

比特币等虚拟资产全景与深度解析:超越“数字货币”的多元生态比特币等虚拟资产的世界,远比“一种数字货币”要丰富和复杂得多。理解它的第一步,就是先认识这个大家族里都有哪些成员。为了帮你建立清晰的概念,我们可以把虚拟资产看…...

LeetCode 1089 复写零:用双指针从后往前填,保姆级图解避坑指南

LeetCode 1089 复写零:双指针逆向填充的视觉化拆解与实战避坑 当你第一次看到LeetCode 1089题时,可能会觉得"复写零"这个操作听起来简单——不就是遇到0就多写一个吗?但真正动手实现时,很多人会在指针移动、边界处理和数…...

django基于在线音乐分享的社交网站全vue

目录功能模块划分技术架构设计核心功能实现性能优化方案测试策略部署方案项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作功能模块划分 用户模块 注册/登录(邮箱/手机号验证)个人资料管理(头像…...

3倍效率提升的B站视频下载工具:DownKyi如何重构资源获取体验

3倍效率提升的B站视频下载工具:DownKyi如何重构资源获取体验 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等…...

DeEAR镜像免配置实战:无需修改config.py,直接运行app.py启用全部功能模块

DeEAR镜像免配置实战:无需修改config.py,直接运行app.py启用全部功能模块 1. 开篇:语音情感识别的技术革新 语音情感识别技术正在改变我们与机器交互的方式。想象一下,你的智能助手不仅能听懂你说什么,还能理解你说话…...

SerialMP3库:GD3300D/TD5580A串口MP3模块驱动详解

1. SerialMP3 库概述:面向 GD3300D/TD5580A 串口 MP3 播放模块的嵌入式驱动框架SerialMP3 是一个专为基于 GD3300D 或 TD5580A 音频解码芯片的串口 MP3 播放板设计的 Arduino 兼容库。该库并非通用音频处理中间件,而是一个硬件协议抽象层(Har…...

python高校大学生家教平台的设计与开发

目录需求分析与功能规划技术栈选型数据库设计关键功能实现测试与部署持续迭代项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作需求分析与功能规划 明确平台核心需求,包括用户角色划分(学生、教师、管理员…...

如何分析竞争对手的seo关键词

<h2>如何分析竞争对手的SEO关键词</h2> <p>在当今竞争激烈的互联网市场中&#xff0c;了解和分析竞争对手的SEO关键词是提升自己网站排名的关键。SEO关键词分析不仅可以帮助你发现市场上的机会&#xff0c;还能让你更好地了解竞争对手的策略&#xff0c;从而…...

【无标题】260329

一切都只是我想多了么看到你的博文看到你的新年快乐现在看到你删库跑路为什么要这样出现又消失。。。本来就虚无缥缈的一点儿联系又消失殆尽如果现在可以见到你我心里有N个为什么想问你只是觉得憋屈可能是我理解能力不足共情能力有限我猜不到你的心思啊你到底是想联系还是不想联…...

Qwen3-ASR-1.7B多说话人分离展示:会议录音自动分角色

Qwen3-ASR-1.7B多说话人分离展示&#xff1a;会议录音自动分角色 会议记录不再需要人工分辨谁说了什么&#xff0c;AI现在能帮你自动区分每个发言人 1. 引言 想象一下这样的场景&#xff1a;一场两小时的多人会议刚刚结束&#xff0c;你需要整理会议纪要。传统的做法是反复听录…...

各版本易筋经意识层操作的系统动力学分析

——基于同源共律公理与锚序公式的元逻辑推导摘要本报告以同源共律公理与三维解耦框架为分析工具&#xff0c;对易筋经七种主要版本的意识层要求进行系统性拆解与比较。通过将各版本意识操作映射至“意识层类型→能量层共振→物理层显化”的因果链&#xff0c;揭示其内在优劣与…...

Fish Speech-1.5语音合成企业标准:WAV采样率/比特率/声道数配置指南

Fish Speech-1.5语音合成企业标准&#xff1a;WAV采样率/比特率/声道数配置指南 如何在企业级应用中配置Fish Speech-1.5的音频输出参数&#xff0c;获得最佳语音合成效果 语音合成技术在企业应用中越来越重要&#xff0c;从智能客服到有声内容制作&#xff0c;都需要高质量的语…...