LangChain Agent 入门实战:自定义工具实现查天气、查时间
面向新手完整教程复制即可运行包含知识点讲解、完整代码、依赖安装、官方文档地址、每一步拆解。 环境要求Python 3.9‑3.11 推荐LangChain 新版 API使用阿里云通义千问兼容 OpenAI 接口。一、整体知识点总览本篇你会学到LangChain Agent 是什么Agent 大模型 工具 思考决策大模型自己判断什么时候调用工具、调用哪个工具ReAct 思考‑行动‑观察模式tool装饰器如何自定义 LangChain 工具定义工具名字、入参、描述大模型靠描述知道工具能干什么兼容 OpenAI 格式调用第三方大模型阿里云百炼通义 qwen‑pluscreate_agent快速创建 Agent系统提示词约束 Agent 行为Agent 调用invoke()执行对话读取返回结果ReAct 核心逻辑思考 → 选择工具 → 执行工具拿到结果 → 交给大模型整理回答Agent 核心思想大模型不是直接回答遇到自己不能回答的内容主动选择工具调用拿到外部数据再整理输出。示例中时间、天气不属于大模型内部知识交给自定义工具获取。二、前置准备1. 安装依赖库打开终端执行pip install langchain langchain-core langchain-openailangchainAgent 核心库langchain‑core基础抽象、tool、消息对象langchain‑openai封装 ChatOpenAI兼容 OpenAI 接口不仅可以调用 OpenAI也能调用阿里云、DeepSeek 等兼容接口2. 获取阿里云百炼 API‑KEY登录阿里云百炼平台https://www.aliyun.com/product/bailian创建 API‑KEY拿到DASHSCOPE_API_KEY设置环境变量Windows cmdset DASHSCOPE_API_KEY你的keyMac/Linuxexport DASHSCOPE_API_KEY你的key⚠️不要把 key 硬编码写在代码里使用环境变量os.getenv()读取。3. 官方文档地址去哪里查文档LangChain 官方 Agent 文档https://python.langchain.com/docs/modules/agents/create_agent 快速代理https://python.langchain.com/docs/how_to/agent_create_agent/tool 自定义工具https://python.langchain.com/docs/how_to/custom_tools/阿里云百炼 OpenAI 兼容模式文档https://help.aliyun.com/zh/bailian/developer-reference/compatible-with-openai-api三、完整可直接复制全部代码新建文件agent_demo.py把下面全部复制进去。import os from datetime import datetime from langchain.agents import create_agent from langchain_core.tools import tool from langchain_openai import ChatOpenAI # 1.初始化大模型对象 llm ChatOpenAI( modelqwen-plus, temperature0.75, api_keyos.getenv(DASHSCOPE_API_KEY), base_urlhttps://ws-239p9rdg91gdeh5d.cn-beijing.maas.aliyuncs.com/compatible-mode/v1 ) # 2.定义自定义工具 tool 装饰器 tool( description获取指定城市的当前时间,当用户询问时间、现在几点、当前时间等问题时调用此工具。 参数: city,字符串类型,城市,比如:北京,上海 返回值:当前城市的时间字符串 ) def get_current_time(city: str) - str: 获取城市当前时间 now_str datetime.now().strftime(%Y年%m月%d日 %H:%M:%S) return f{city}的当前时间是{now_str} tool( description获取指定城市的当前天气, 当用户询问天气,气温等问题时,调用此工具 参数: city,字符串类型,城市,比如:北京,上海 返回值:当前城市的天气数据字符串 ) def get_current_weather(city: str) - str: 获取城市天气 weather_data { 北京: 晴天温度 28°C湿度 45%空气质量良, 上海: 多云温度 30°C湿度 70%空气质量优, 广州: 阵雨温度 32°C湿度 85%空气质量良, 深圳: 晴天温度 31°C湿度 65%空气质量优, 杭州: 阴天温度 27°C湿度 60%空气质量良, } weather_res weather_data.get(city, f未找到{city}的天气数据请尝试查询: 北京、上海、广州、深圳、杭州) return f{city}的当前天气是{weather_res} # 工具列表Agent只能使用放到这个列表的工具 tools [get_current_time, get_current_weather] # 3.系统提示词约束Agent行为逻辑 system_prompt 你是一个智能助手 你可以使用工具来解决问题 工具列表: 1:当用户询问时间、现在几点、当前时间等问题时,调用get_current_time工具 2:当用户询问天气,气温等问题时,调用get_current_weather工具 请根据用户的问题,自主决定是否调用工具,调用哪个工具,调用顺序 如果不需要工具,直接回答用户的问题 # 创建Agent agent create_agent( modelllm, toolstools, system_promptsystem_prompt, debugTrue # debugTrue打印中间思考、工具调用日志新手强烈建议打开 ) # 4.调用Agent执行对话 invoke result agent.invoke( {messages: [{role: user, content: 北京的天气是什么}]} ) # 打印完整返回对象 print(完整返回结果) print(result) # 取出最后一条AI回复内容 print(\n最终AI回答) print(result.get(messages)[-1].content)运行命令python agent_demo.py四、逐块知识点讲解①导入模块import os from datetime import datetime from langchain.agents import create_agent from langchain_core.tools import tool from langchain_openai import ChatOpenAIos读取环境变量保护密钥不硬编码密钥datetime获取系统当前时间给工具使用create_agentLangChain 新版快速创建 Agent封装好 ReAct 逻辑不用手写复杂提示词tool装饰器把普通 Python 函数包装成 LangChain 可识别的工具对象大模型完全依靠 description 知道工具功能、参数描述写的差 Agent 就不会调用工具。ChatOpenAI标准 OpenAI 对话模型类base_url修改即可对接阿里云、DeepSeek、OpenAI 等兼容接口。②初始化大模型 llm 对象llm ChatOpenAI( modelqwen-plus, temperature0.75, api_keyos.getenv(DASHSCOPE_API_KEY), base_urlxxx )model模型名称阿里云百炼上面模型标识temperature0‑1越低回答越确定越高越有创造性Agent 场景一般 0‑0.8api_keyos.getenv(DASHSCOPE_API_KEY)从系统环境变量读取密钥禁止直接写字符串密钥到代码上传代码会泄露密钥base_url兼容 OpenAI 的接口地址换成 OpenAI 官方就填https://api.openai.com/v1关键点不是只能调用 OpenAI只要接口兼容 OpenAI 格式都能用 ChatOpenAI。③tool 自定义工具Agent 最重要知识点tool( description获取指定城市的当前时间,当用户询问时间、现在几点、当前时间等问题时调用此工具。 参数: city,字符串类型,城市,比如:北京,上海 返回值:当前城市的时间字符串 ) def get_current_time(city: str) - str: now_str datetime.now().strftime(%Y年%m月%d日 %H:%M:%S) return f{city}的当前时间是{now_str}tool装饰器把普通 Python 函数转为 LangChainTool对象Agent 才能识别description至关重要大模型看不到你的函数代码只能看描述文本描述要写清楚什么时候调用、参数是什么、返回什么。描述写模糊 Agent 就不会触发工具调用。函数参数必须写类型注解city:strAgent 需要知道参数类型返回值也要标注。工具函数写普通业务逻辑return 返回字符串结果Agent 拿到 return 的字符串再交给大模型整理。工具就是一段 Python 代码Agent 决定调用 → 传入参数执行函数 → 获取返回文本 → 把文本塞回大模型上下文。把所有工具放入列表tools [get_current_time, get_current_weather]Agent只能使用列表里面注册过的工具写了装饰器不放进列表Agent 看不见。④system_prompt 系统提示词system_prompt 你是一个智能助手 你可以使用工具来解决问题 工具列表: 1:当用户询问时间、现在几点、当前时间等问题时,调用get_current_time工具 2:当用户询问天气,气温等问题时,调用get_current_weather工具 请根据用户的问题,自主决定是否调用工具,调用哪个工具,调用顺序 如果不需要工具,直接回答用户的问题 系统提示词给大模型设定角色与规则辅助 Agent 判断什么时候触发工具。create_agent内部会自动拼接工具元信息你也可以额外写业务约束。⑤创建 Agent 对象 create_agentagent create_agent( modelllm, toolstools, system_promptsystem_prompt, debugTrue )model大模型实例tools可用工具列表system_prompt系统提示词debugTrue打印完整中间过程日志思考、选择工具、入参、工具返回新手调试必须打开排查为什么不调用工具。create_agent是 LangChain 新版高层封装底层就是 ReAct Agent省去手动构建 ReAct prompt。⑥agent.invoke () 发起对话result agent.invoke( {messages: [{role: user, content: 北京的天气是什么}]} )invoke()传入消息列表格式和 OpenAI messages 完全一样。 执行流程 ReAct思考‑行动‑观察用户提问北京天气是什么大模型思考我需要调用get_current_weather参数 city北京Agent 执行工具函数拿到工具返回字符串将工具返回结果塞回对话上下文大模型整理工具结果输出自然语言回答读取结果print(result.get(messages)[-1].content)result[messages]保存完整对话全部消息用户消息、大模型思考、工具调用消息、工具返回、AI 最终回复最后一条消息就是最终 AI 输出。五、新手常见踩坑清单工具tool的description写的不清楚 → Agent 不调用工具。✅解决描述写清楚触发条件参数说明。写了 tool但是没有放到tools [...]列表 → Agent 看不到工具。API_KEY 硬编码写在代码提交 git 泄露密钥 → 使用os.getenv()。base_url 写错网络不通阿里云权限没开通模型调用 → 报错 401、404。关闭 debugTrue看不到中间日志不知道为什么没有调用工具 → 开发阶段打开 debug。工具函数返回不要返回对象 / 字典尽量返回字符串。Agent 工具输出建议返回 str。六、扩展练习自己动手改代码修改用户提问测试现在北京几点观察 Agent 是否调用 get_current_time。新增一个工具获取今天星期几仿照上面格式写一个新 tool 函数加入 tools 列表。修改 temperature对比 Agent 输出变化。七、文档链接汇总方便后续查阅create_agent 快速代理https://python.langchain.com/docs/how_to/agent_create_agent/自定义工具 toolhttps://python.langchain.com/docs/how_to/custom_tools/LangChain Agent 总文档https://python.langchain.com/docs/modules/agents/阿里云百炼 OpenAI 兼容接口文档https://help.aliyun.com/zh/bailian/developer-reference/compatible-with-openai-api

相关新闻

小米手机救砖全攻略:Fastboot与Recovery模式修复指南

小米手机救砖全攻略:Fastboot与Recovery模式修复指南

1. 项目概述:当小米手机“变砖”时,我们到底在做什么?“救砖”这个词,在玩机圈里听起来挺吓人,好像手机彻底变成了一块砖头。但根据我这些年折腾过不下几十台小米/红米手机的经验,绝大多数情况下&#xff0…

2026/8/11 4:31:57 阅读更多 →
Unity跨平台加载外部图片:权限、CORS与性能优化全解析

Unity跨平台加载外部图片:权限、CORS与性能优化全解析

1. 项目概述:Unity加载外部图片的权限“雷区”在Unity项目开发中,尤其是涉及用户自定义头像、动态加载网络图片、读取本地相册资源等功能时,加载外部图片是一个高频需求。听起来很简单,不就是一行WWW或者UnityWebRequest吗&#x…

2026/8/11 4:30:57 阅读更多 →
留学生毕业留外还是回国?用时间线与资源对齐做决策「蒸汽求职分享」

留学生毕业留外还是回国?用时间线与资源对齐做决策「蒸汽求职分享」

【摘要】面对临近的毕业季,不少留学生正深陷于“留在海外还是回国发展”的纠结中。许多人之所以遭遇“想留留不下,想回错失期”的困境,根本原因是对海外签证节点与国内秋招/春招的时间差缺乏清晰认知。如何做好留学生回国求职规划&#xff1f…

2026/8/11 4:30:56 阅读更多 →

最新新闻

Django连接MySQL全攻略:跨平台环境配置与避坑指南

Django连接MySQL全攻略:跨平台环境配置与避坑指南

1. 项目概述与核心价值 搞Python Web开发,Django绝对是绕不开的框架,而数据库选型里,MySQL又是最经典、应用最广的关系型数据库之一。把这两者顺畅地连接起来,是每个Django开发者入门后要跨过的第一道“实战坎”。这个项目标题“…

2026/8/11 5:19:49 阅读更多 →
Unity插件选型与实战指南:50款热门工具提升开发效率

Unity插件选型与实战指南:50款热门工具提升开发效率

1. 项目概述:为什么你需要一份Unity插件“藏宝图”?做Unity开发这些年,我最大的感受就是:一个项目能不能高效、高质量地完成,很多时候不取决于你写了多少行代码,而在于你是否知道并善用那些“神器”级别的插…

2026/8/11 5:19:49 阅读更多 →
Node.js文件下载被IDM拦截?详解HTTP下载机制与前后端解决方案

Node.js文件下载被IDM拦截?详解HTTP下载机制与前后端解决方案

1. 问题缘起:当Node.js遇上IDM,一个下载请求的“罗生门”最近在做一个后端数据归档的功能,需要从我们的服务端批量下载一些由Node.js生成的报告文件,这些报告被打包成了ZIP格式。代码很简单,就是最经典的http模块或者a…

2026/8/11 5:19:49 阅读更多 →
Google C++代码规范:变量与函数命名最佳实践

Google C++代码规范:变量与函数命名最佳实践

1. Google C代码规范的核心价值Google C风格指南作为业界公认的代码规范标杆,其核心价值在于建立统一的代码语言。想象一下,当五位工程师面对同一个变量名data时,可能产生五种不同理解:可能是临时缓存、核心业务对象或未处理的输入…

2026/8/11 5:19:49 阅读更多 →
基于Django的物联网平台核心架构:融合IoT与IBMS的双核驱动设计

基于Django的物联网平台核心架构:融合IoT与IBMS的双核驱动设计

1. 项目概述:一个“双核驱动”的物联网平台 最近在整理过去几年的项目代码,决定把之前做的一个物联网平台核心框架开源出来。这个项目有点特殊,它不是一个单纯的设备管理后台,而是从一开始就设计成了“双核”架构:一边…

2026/8/11 5:19:49 阅读更多 →
一键式生成AI漫剧怎么选?知漫剧模型聚合方案与传统管线成本对比

一键式生成AI漫剧怎么选?知漫剧模型聚合方案与传统管线成本对比

在当下的内容自动化生产实践中,AI漫剧已经从原先繁琐的本地多节点串联,转向更高集成度的端到端工作流,不少创作者开始借助工具整合站点知漫剧( qq.jiaxunai.cn )这类AI模型聚合平台,将生图、动态扩展与TTS语音合成统一调度&#x…

2026/8/11 5:18:48 阅读更多 →

日新闻

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/v…

2026/8/11 0:00:02 阅读更多 →
前后端分离项目中控制台与接口工具数据差异排查指南

前后端分离项目中控制台与接口工具数据差异排查指南

1. 问题现象解析:控制台与Apifox的数据差异 最近在调试一个前后端分离项目时,遇到了一个典型问题:后端服务在本地开发环境控制台能正常输出查询数据,但通过Apifox测试时却返回空结果。这种"控制台有数据,接口工具…

2026/8/11 0:00:03 阅读更多 →
AI编程实战:从Claude Code踩坑到游戏开发入门

AI编程实战:从Claude Code踩坑到游戏开发入门

1. 从“AI能帮我做游戏”到“AI让我重新学编程”最近身边不少朋友,尤其是一些非技术背景、但对游戏开发有浓厚兴趣的朋友,都在问我同一个问题:“听说现在用Claude Code这种AI编程工具,小白也能做游戏了,是真的吗&#…

2026/8/11 0:00:03 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/11 1:08:05 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/11 1:08:05 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/11 1:08:05 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/10 17:07:33 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/11 1:08:06 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/10 17:07:33 阅读更多 →