如何在wechatSDK中开发自定义天气插件:OpenAI Function Calling函数调用完整教程
2026/9/19 4:48:56 网站建设 项目流程

如何在wechatSDK中开发自定义天气插件:OpenAI Function Calling函数调用完整教程

【免费下载链接】wechatSDK微信机器人是一个创新的基于Python 3.11开发的项目,通过结合ChatGPT模型和微信原生API,为用户提供智能聊天、自动绘画、自动发朋友圈、自动发视频号等多样的API集成服务,旨在提升日常沟通效率和趣味性。项目地址: https://gitcode.com/gh_mirrors/we/wechatSDK

wechatSDK 是一个基于 Python 3.11 的微信机器人项目,将 ChatGPT 模型与微信原生 API 结合,实现智能聊天、AI 绘画、自动发朋友圈等能力。本教程带你走通在 wechatSDK 中开发自定义天气插件的完整流程,掌握OpenAI Function Calling 函数调用的核心机制,让你的微信机器人一句话就能查天气,并轻松扩展更多智能能力。

💡 一句话理解核心思想:给 AI 写一张"函数名片",模型需要时会自动调用它,把真实天气数据变成自然回答。

什么是 OpenAI Function Calling:让 AI 会"动手"的原理

普通的 ChatGPT 只会"说",而 Function Calling 给了 AI 一双手。你告诉模型"有哪些函数可用、各需要什么参数",当用户问"明天北京适合跑步吗"时,模型不会胡编,而是先返回一个函数调用请求,由你的程序执行函数拿到真实数据,再喂回模型组织成自然回答。

在 wechatSDK 中,这条链路已经为你搭好:

用户微信发消息:"明天北京天气怎么样?" ↓ GPT 判断需要数据 → 返回函数调用 get_forecast_weather(...) ↓ wechatSDK 执行天气插件,请求真实天气 API ↓ GPT 拿到数据 → 自然语言回复"明天多云 22℃,适合跑步 ☀️"

其中模型交互与插件调度由bot/infrastructure/chatgpt/OpenAIHelper.py完成,插件统一放在bot/infrastructure/plugins/目录下。

环境准备:5 分钟跑起 wechatSDK

在开发插件前,先把项目跑起来(需要 Windows + Python 3.11):

git clone https://gitcode.com/gh_mirrors/we/wechatSDK cd wechatSDK python -m venv venv # Windows 下用 venv\Scripts\activate,Linux/macOS 用 source venv/bin/activate pip install -r requirements.txt python app.py

依赖清单见requirements.txt,启动入口为app.py

自定义天气插件开发三步法

wechatSDK 的插件都继承同一个接口bot/infrastructure/plugins/Plugin.py,它只定义了 3 个抽象方法:

方法职责生活化比喻
get_source_name()返回插件源名称,如OpenMeteo插件的"开关名",配置用
get_spec()返回函数"名片"(JSON Schema)告诉 AI 你能做什么、要哪些参数
execute()真正执行函数并返回 JSON 结果干活的"手"

第 1 步:继承 Plugin 接口,搭好插件骨架

新建bot/infrastructure/plugins/my_weather.py,定义一个继承Plugin的类,实现上述 3 个方法即可。框架会自动扫描该目录,无需手动注册。

官方天气插件在bot/infrastructure/plugins/weather.py中注册了两个函数:

  • get_current_weather—— 查当前天气
  • get_forecast_weather—— 查未来 N 天预报(最多 14 天)

第 2 步:编写函数规范——给 AI 一张"名片"

get_spec()的精髓是把每个参数描述清楚(类型 + 说明),让模型知道该填什么。weather 插件的核心参数如下:

"latitude": {"type": "string", "description": "Latitude of the location"}, "longitude": {"type": "string", "description": "Longitude of the location"}, "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}

✍️ 小技巧:description写得好,AI 填参才准确;有固定取值时用enum约束,可大幅减少填错。这是 Function Calling 效果好不好的关键。

第 3 步:实现 execute()——真正"动手"的环节

execute()中接收模型填好的参数,去调用真实 API。官方天气插件使用的是免费的 OpenMeteo 服务:

def execute(self, function_name, **kwargs) -> Dict: url = f'https://api.open-meteo.com/v1/forecast?latitude={kwargs["latitude"]}' url += f'&longitude={kwargs["longitude"]}&temperature_unit={kwargs["unit"]}' if function_name == 'get_current_weather': url += '&current_weather=true' return requests.get(url).json() # get_forecast_weather 则追加 daily、forecast_days 等参数

返回 JSON 即可,框架会自动把结果回传给模型。想写个最简单的插件练手?参考零参数的bot/infrastructure/plugins/now_time.py(查询当前时间)。

插件如何被自动发现并启用

bot/infrastructure/PluginManager.py在启动时自动扫描bot/infrastructure/plugins/下所有.py文件,找出继承Plugin的类,并只加载get_source_name()命中的插件。是否启用由两个环境变量控制(读取逻辑见bot/config/config_loader.py):

环境变量作用示例值
PLUGINS启用的插件源名称列表(逗号分隔)OpenMeteo,NowTime
ENABLE_FUNCTIONS是否开启函数调用true

启用后,bot/infrastructure/chatgpt/OpenAIHelper.py会把所有函数的"名片"附加到每次 OpenAI 请求中,并循环调用插件,直到模型不再需要函数(上限由FUNCTIONS_MAX_CONSECUTIVE_CALLS控制,默认 10 次)。

实战效果:查天气、AI 绘画、自动发朋友圈

天气插件跑起来后,在微信里直接问"这周末杭州天气怎么样",机器人就会自动调用get_forecast_weather并回复逐日预报。

更酷的是"组合拳":wechatSDK 可以让模型查完天气后,再调用 AI 绘画能力,根据天气生成图片并自动发布到朋友圈——下面这位歌手就是机器人绘制的作品,展示了同一个 Function Calling 机制驱动 AI 绘图的效果:

新手常见坑与快速排查

  • 🔍插件没生效:检查get_source_name()返回值与PLUGINS环境变量是否完全一致(区分大小写)。
  • 🔍AI 不调用函数:确认ENABLE_FUNCTIONStrue,且所选模型支持函数调用。
  • 🔍AI 填错参数:优化get_spec()中的description,尽量用enum限制取值。
  • 🔍只想测一个插件:先照now_time.py写个零参数插件,跑通后再加复杂逻辑。

总结:你的第一个微信机器人插件已就位

步骤做什么相关文件
1继承Plugin接口,实现 3 个方法bot/infrastructure/plugins/Plugin.py
2编写函数"名片"(JSON Schema)bot/infrastructure/plugins/weather.py
3实现execute()调用真实 APIbot/infrastructure/plugins/weather.py
4配置PLUGINSENABLE_FUNCTIONS环境变量bot/config/config_loader.py

掌握了 OpenAI Function Calling 与 wechatSDK 的插件体系,你的微信机器人就能从"聊天搭子"进化为"全能助手"——接下来不妨试试开发提醒、汇率、新闻搜索等属于自己的新插件!

【免费下载链接】wechatSDK微信机器人是一个创新的基于Python 3.11开发的项目,通过结合ChatGPT模型和微信原生API,为用户提供智能聊天、自动绘画、自动发朋友圈、自动发视频号等多样的API集成服务,旨在提升日常沟通效率和趣味性。项目地址: https://gitcode.com/gh_mirrors/we/wechatSDK

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询