ChatGPT-on-WeChat:全渠道AI对话机器人实战与架构深度解析
摘要
ChatGPT-on-WeChat 是一款支持多渠道(微信、公众号、企业微信、飞书、钉钉、Web等)的开源AI对话机器人框架,集成了OpenAI、百度、讯飞、阿里、Claude等多种大模型,具备文本、语音、图片等多模态交互能力。本文将从架构设计、业务流程、功能模块、实践案例、代码实战、常见问题、最佳实践等方面,系统梳理其实现原理与落地经验,助力中国开发者高效构建AI应用。
目录
- 系统架构总览
- 业务流程详解
- 主要功能模块
- 实践案例与部署方案
- 代码实战与最佳实践
- 常见问题与注意事项
- 总结与实践建议
- 参考资料
系统架构总览
架构图
#mermaid-svg-1B9xP1hUYS6R0w7Q {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-1B9xP1hUYS6R0w7Q .error-icon{fill:#552222;}#mermaid-svg-1B9xP1hUYS6R0w7Q .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-1B9xP1hUYS6R0w7Q .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-1B9xP1hUYS6R0w7Q .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-1B9xP1hUYS6R0w7Q .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-1B9xP1hUYS6R0w7Q .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-1B9xP1hUYS6R0w7Q .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-1B9xP1hUYS6R0w7Q .marker{fill:#333333;stroke:#333333;}#mermaid-svg-1B9xP1hUYS6R0w7Q .marker.cross{stroke:#333333;}#mermaid-svg-1B9xP1hUYS6R0w7Q svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-1B9xP1hUYS6R0w7Q .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-1B9xP1hUYS6R0w7Q .cluster-label text{fill:#333;}#mermaid-svg-1B9xP1hUYS6R0w7Q .cluster-label span{color:#333;}#mermaid-svg-1B9xP1hUYS6R0w7Q .label text,#mermaid-svg-1B9xP1hUYS6R0w7Q span{fill:#333;color:#333;}#mermaid-svg-1B9xP1hUYS6R0w7Q .node rect,#mermaid-svg-1B9xP1hUYS6R0w7Q .node circle,#mermaid-svg-1B9xP1hUYS6R0w7Q .node ellipse,#mermaid-svg-1B9xP1hUYS6R0w7Q .node polygon,#mermaid-svg-1B9xP1hUYS6R0w7Q .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-1B9xP1hUYS6R0w7Q .node .label{text-align:center;}#mermaid-svg-1B9xP1hUYS6R0w7Q .node.clickable{cursor:pointer;}#mermaid-svg-1B9xP1hUYS6R0w7Q .arrowheadPath{fill:#333333;}#mermaid-svg-1B9xP1hUYS6R0w7Q .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-1B9xP1hUYS6R0w7Q .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-1B9xP1hUYS6R0w7Q .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-1B9xP1hUYS6R0w7Q .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-1B9xP1hUYS6R0w7Q .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-1B9xP1hUYS6R0w7Q .cluster text{fill:#333;}#mermaid-svg-1B9xP1hUYS6R0w7Q .cluster span{color:#333;}#mermaid-svg-1B9xP1hUYS6R0w7Q div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-1B9xP1hUYS6R0w7Q :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} 发送消息 消息封装为Context 插件系统事件分发 Bot工厂分发 调用AI模型 生成回复Reply 多渠道返回 用户 多渠道接入层
(微信/公众号/企业微信/飞书/钉钉/终端/Web等) 消息处理核心
(chat_channel.py) 插件系统
(plugins) Bot工厂
(bot_factory.py) 多模型Bot实现
(OpenAI/百度/讯飞/阿里/Claude等) 回复装饰与发送 用户
图1:系统架构总览
主要组件说明
- 多渠道接入层:支持微信个人号、公众号、企业微信、飞书、钉钉、Web等多种入口,灵活适配不同场景。
- 消息处理核心:统一封装消息为Context对象,进行标准化处理。
- 插件系统:支持事件驱动的插件扩展,便于功能定制与二次开发。
- Bot工厂:根据配置动态分发到不同AI模型Bot,支持多模型并存。
- 多模型Bot实现:内置OpenAI、百度、讯飞、阿里、Claude等主流大模型,支持文本、语音、图片等多模态能力。
- 回复装饰与发送:根据消息类型和渠道特性,灵活装饰和发送回复。
技术选型与多模型支持
- Python 3.7~3.10,推荐3.8版本
- 依赖管理:requirements.txt、requirements-optional.txt
- 多模型API:OpenAI、百度文心一言、讯飞星火、阿里通义千问、Claude、Google Gemini等
- 插件机制:事件驱动,支持自定义扩展
业务流程详解
主流程图
#mermaid-svg-fvPRJVP8yPpZnCJD {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-fvPRJVP8yPpZnCJD .error-icon{fill:#552222;}#mermaid-svg-fvPRJVP8yPpZnCJD .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-fvPRJVP8yPpZnCJD .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-fvPRJVP8yPpZnCJD .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-fvPRJVP8yPpZnCJD .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-fvPRJVP8yPpZnCJD .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-fvPRJVP8yPpZnCJD .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-fvPRJVP8yPpZnCJD .marker{fill:#333333;stroke:#333333;}#mermaid-svg-fvPRJVP8yPpZnCJD .marker.cross{stroke:#333333;}#mermaid-svg-fvPRJVP8yPpZnCJD svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-fvPRJVP8yPpZnCJD .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-fvPRJVP8yPpZnCJD .cluster-label text{fill:#333;}#mermaid-svg-fvPRJVP8yPpZnCJD .cluster-label span{color:#333;}#mermaid-svg-fvPRJVP8yPpZnCJD .label text,#mermaid-svg-fvPRJVP8yPpZnCJD span{fill:#333;color:#333;}#mermaid-svg-fvPRJVP8yPpZnCJD .node rect,#mermaid-svg-fvPRJVP8yPpZnCJD .node circle,#mermaid-svg-fvPRJVP8yPpZnCJD .node ellipse,#mermaid-svg-fvPRJVP8yPpZnCJD .node polygon,#mermaid-svg-fvPRJVP8yPpZnCJD .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-fvPRJVP8yPpZnCJD .node .label{text-align:center;}#mermaid-svg-fvPRJVP8yPpZnCJD .node.clickable{cursor:pointer;}#mermaid-svg-fvPRJVP8yPpZnCJD .arrowheadPath{fill:#333333;}#mermaid-svg-fvPRJVP8yPpZnCJD .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-fvPRJVP8yPpZnCJD .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-fvPRJVP8yPpZnCJD .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-fvPRJVP8yPpZnCJD .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-fvPRJVP8yPpZnCJD .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-fvPRJVP8yPpZnCJD .cluster text{fill:#333;}#mermaid-svg-fvPRJVP8yPpZnCJD .cluster span{color:#333;}#mermaid-svg-fvPRJVP8yPpZnCJD div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-fvPRJVP8yPpZnCJD :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} 用户发送消息 接入层(如微信/公众号/企业微信等) 消息封装为Context 插件系统事件分发 Bot工厂分发 AI模型处理(如OpenAI、百度等) 生成Reply 回复装饰 发送回复 用户接收回复
图2:消息处理主流程
事件分发与插件机制
- ON_HANDLE_CONTEXT:收到消息后触发,插件可拦截或修改消息内容。
- ON_DECORATE_REPLY:生成回复后触发,插件可修饰回复内容。
- ON_SEND_REPLY:发送回复前触发,插件可自定义发送逻辑。
重点:插件机制极大提升了系统的可扩展性和定制能力。
主要功能模块
功能思维导图
mindmap root((ChatGPT-on-WeChat知识体系)) 架构设计 多渠道接入 插件系统 Bot工厂 多模型支持 主要功能 文本对话 语音识别与合成 图片生成 插件扩展 实践案例 微信个人号 公众号 企业微信 飞书/钉钉 Web终端 最佳实践 配置优化 依赖管理 多账号部署 安全注意事项 常见问题 登录异常 消息丢失 依赖安装 兼容性问题 扩展阅读 官方文档 社区资源 相关AI模型 插件开发指南
图3:知识体系思维导图
主要功能一览
- 文本对话:支持多轮上下文、群聊/私聊、上下文记忆
- 语音识别与合成:集成百度、讯飞、OpenAI等多家语音API
- 图片生成:支持OpenAI DALL·E、LinkAI MJ绘图等
- 插件扩展:支持自定义插件,丰富功能场景
- 多渠道接入:适配微信、公众号、企业微信、Web等
各渠道用户分布饼图
*图4:各渠道用户分布示意图*
实践案例与部署方案
典型部署方式
- 本地运行
- 克隆代码,安装依赖,配置config.json,直接运行app.py
- 服务器部署
- 支持nohup后台运行,适合长期服务
- Docker部署
- 一键拉取镜像,适合云端/容器化场景
- 多账号/多渠道实践
- 支持多实例并行,适配不同业务需求
实施计划甘特图
#mermaid-svg-KyTCcXrYq2needK2 {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-KyTCcXrYq2needK2 .error-icon{fill:#552222;}#mermaid-svg-KyTCcXrYq2needK2 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-KyTCcXrYq2needK2 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-KyTCcXrYq2needK2 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-KyTCcXrYq2needK2 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-KyTCcXrYq2needK2 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-KyTCcXrYq2needK2 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-KyTCcXrYq2needK2 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-KyTCcXrYq2needK2 .marker.cross{stroke:#333333;}#mermaid-svg-KyTCcXrYq2needK2 svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-KyTCcXrYq2needK2 .mermaid-main-font{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-family:var(--mermaid-font-family);}#mermaid-svg-KyTCcXrYq2needK2 .exclude-range{fill:#eeeeee;}#mermaid-svg-KyTCcXrYq2needK2 .section{stroke:none;opacity:0.2;}#mermaid-svg-KyTCcXrYq2needK2 .section0{fill:rgba(102, 102, 255, 0.49);}#mermaid-svg-KyTCcXrYq2needK2 .section2{fill:#fff400;}#mermaid-svg-KyTCcXrYq2needK2 .section1,#mermaid-svg-KyTCcXrYq2needK2 .section3{fill:white;opacity:0.2;}#mermaid-svg-KyTCcXrYq2needK2 .sectionTitle0{fill:#333;}#mermaid-svg-KyTCcXrYq2needK2 .sectionTitle1{fill:#333;}#mermaid-svg-KyTCcXrYq2needK2 .sectionTitle2{fill:#333;}#mermaid-svg-KyTCcXrYq2needK2 .sectionTitle3{fill:#333;}#mermaid-svg-KyTCcXrYq2needK2 .sectionTitle{text-anchor:start;font-family:\'trebuchet ms\',verdana,arial,sans-serif;font-family:var(--mermaid-font-family);}#mermaid-svg-KyTCcXrYq2needK2 .grid .tick{stroke:lightgrey;opacity:0.8;shape-rendering:crispEdges;}#mermaid-svg-KyTCcXrYq2needK2 .grid .tick text{font-family:\"trebuchet ms\",verdana,arial,sans-serif;fill:#333;}#mermaid-svg-KyTCcXrYq2needK2 .grid path{stroke-width:0;}#mermaid-svg-KyTCcXrYq2needK2 .today{fill:none;stroke:red;stroke-width:2px;}#mermaid-svg-KyTCcXrYq2needK2 .task{stroke-width:2;}#mermaid-svg-KyTCcXrYq2needK2 .taskText{text-anchor:middle;font-family:\'trebuchet ms\',verdana,arial,sans-serif;font-family:var(--mermaid-font-family);}#mermaid-svg-KyTCcXrYq2needK2 .taskTextOutsideRight{fill:black;text-anchor:start;font-family:\'trebuchet ms\',verdana,arial,sans-serif;font-family:var(--mermaid-font-family);}#mermaid-svg-KyTCcXrYq2needK2 .taskTextOutsideLeft{fill:black;text-anchor:end;}#mermaid-svg-KyTCcXrYq2needK2 .task.clickable{cursor:pointer;}#mermaid-svg-KyTCcXrYq2needK2 .taskText.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#mermaid-svg-KyTCcXrYq2needK2 .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#mermaid-svg-KyTCcXrYq2needK2 .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163!important;font-weight:bold;}#mermaid-svg-KyTCcXrYq2needK2 .taskText0,#mermaid-svg-KyTCcXrYq2needK2 .taskText1,#mermaid-svg-KyTCcXrYq2needK2 .taskText2,#mermaid-svg-KyTCcXrYq2needK2 .taskText3{fill:white;}#mermaid-svg-KyTCcXrYq2needK2 .task0,#mermaid-svg-KyTCcXrYq2needK2 .task1,#mermaid-svg-KyTCcXrYq2needK2 .task2,#mermaid-svg-KyTCcXrYq2needK2 .task3{fill:#8a90dd;stroke:#534fbc;}#mermaid-svg-KyTCcXrYq2needK2 .taskTextOutside0,#mermaid-svg-KyTCcXrYq2needK2 .taskTextOutside2{fill:black;}#mermaid-svg-KyTCcXrYq2needK2 .taskTextOutside1,#mermaid-svg-KyTCcXrYq2needK2 .taskTextOutside3{fill:black;}#mermaid-svg-KyTCcXrYq2needK2 .active0,#mermaid-svg-KyTCcXrYq2needK2 .active1,#mermaid-svg-KyTCcXrYq2needK2 .active2,#mermaid-svg-KyTCcXrYq2needK2 .active3{fill:#bfc7ff;stroke:#534fbc;}#mermaid-svg-KyTCcXrYq2needK2 .activeText0,#mermaid-svg-KyTCcXrYq2needK2 .activeText1,#mermaid-svg-KyTCcXrYq2needK2 .activeText2,#mermaid-svg-KyTCcXrYq2needK2 .activeText3{fill:black!important;}#mermaid-svg-KyTCcXrYq2needK2 .done0,#mermaid-svg-KyTCcXrYq2needK2 .done1,#mermaid-svg-KyTCcXrYq2needK2 .done2,#mermaid-svg-KyTCcXrYq2needK2 .done3{stroke:grey;fill:lightgrey;stroke-width:2;}#mermaid-svg-KyTCcXrYq2needK2 .doneText0,#mermaid-svg-KyTCcXrYq2needK2 .doneText1,#mermaid-svg-KyTCcXrYq2needK2 .doneText2,#mermaid-svg-KyTCcXrYq2needK2 .doneText3{fill:black!important;}#mermaid-svg-KyTCcXrYq2needK2 .crit0,#mermaid-svg-KyTCcXrYq2needK2 .crit1,#mermaid-svg-KyTCcXrYq2needK2 .crit2,#mermaid-svg-KyTCcXrYq2needK2 .crit3{stroke:#ff8888;fill:red;stroke-width:2;}#mermaid-svg-KyTCcXrYq2needK2 .activeCrit0,#mermaid-svg-KyTCcXrYq2needK2 .activeCrit1,#mermaid-svg-KyTCcXrYq2needK2 .activeCrit2,#mermaid-svg-KyTCcXrYq2needK2 .activeCrit3{stroke:#ff8888;fill:#bfc7ff;stroke-width:2;}#mermaid-svg-KyTCcXrYq2needK2 .doneCrit0,#mermaid-svg-KyTCcXrYq2needK2 .doneCrit1,#mermaid-svg-KyTCcXrYq2needK2 .doneCrit2,#mermaid-svg-KyTCcXrYq2needK2 .doneCrit3{stroke:#ff8888;fill:lightgrey;stroke-width:2;cursor:pointer;shape-rendering:crispEdges;}#mermaid-svg-KyTCcXrYq2needK2 .milestone{transform:rotate(45deg) scale(0.8,0.8);}#mermaid-svg-KyTCcXrYq2needK2 .milestoneText{font-style:italic;}#mermaid-svg-KyTCcXrYq2needK2 .doneCritText0,#mermaid-svg-KyTCcXrYq2needK2 .doneCritText1,#mermaid-svg-KyTCcXrYq2needK2 .doneCritText2,#mermaid-svg-KyTCcXrYq2needK2 .doneCritText3{fill:black!important;}#mermaid-svg-KyTCcXrYq2needK2 .activeCritText0,#mermaid-svg-KyTCcXrYq2needK2 .activeCritText1,#mermaid-svg-KyTCcXrYq2needK2 .activeCritText2,#mermaid-svg-KyTCcXrYq2needK2 .activeCritText3{fill:black!important;}#mermaid-svg-KyTCcXrYq2needK2 .titleText{text-anchor:middle;font-size:18px;fill:#333;font-family:\'trebuchet ms\',verdana,arial,sans-serif;font-family:var(--mermaid-font-family);}#mermaid-svg-KyTCcXrYq2needK2 :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} 2024-06-01 2024-06-02 2024-06-03 2024-06-04 2024-06-05 2024-06-06 2024-06-07 2024-06-08 2024-06-09 2024-06-10 2024-06-11 2024-06-12 2024-06-13 2024-06-14 依赖安装 配置文件准备 本地运行 服务器部署 Docker部署 多账号支持 插件开发与集成 性能与安全优化 环境准备 部署与测试 实践与优化 ChatGPT-on-WeChat实施计划
图5:项目实施计划甘特图
代码实战与最佳实践
典型Python代码示例
1. 消息处理主流程(简化版)
# -*- coding: utf-8 -*-from channel.chat_channel import ChatChannelfrom bot.bot_factory import create_botfrom bridge.context import Contextfrom bridge.reply import Replyclass MessageHandler: def handle_message(self, raw_msg): \"\"\"处理用户消息,返回AI回复\"\"\" # 封装消息为Context对象 context = Context(type=raw_msg[\'type\'], content=raw_msg[\'content\'], kwargs=raw_msg[\'meta\']) # 事件分发(插件可拦截) context = self._dispatch_plugins(context) # 选择Bot bot = create_bot(context) # 获取AI回复 reply = bot.reply(context) # 回复装饰 reply = self._decorate_reply(reply, context) return reply def _dispatch_plugins(self, context): # 插件事件分发(伪代码) # ... return context def _decorate_reply(self, reply, context): # 回复装饰(伪代码) # ... return reply# 错误处理建议:try: handler = MessageHandler() result = handler.handle_message({ \'type\': \'TEXT\', \'content\': \'你好\', \'meta\': {\'isgroup\': False, \'msg\': None, \'receiver\': \'user1\', \'session_id\': \'user1\'} }) print(result.content)except Exception as e: print(f\"处理消息时发生错误: {e}\")
2. 插件开发范例(Hello插件)
# plugins/hello/hello.pyfrom plugins import Plugin, Event, EventActionfrom bridge.reply import Reply, ReplyType@plugins.register(name=\"Hello\", desc=\"A simple plugin that says hello\", version=\"0.1\", author=\"lanvent\", desire_priority= -1)class Hello(Plugin): def __init__(self): super().__init__() self.handlers[Event.ON_HANDLE_CONTEXT] = self.on_handle_context def on_handle_context(self, e_context): if e_context[\'context\'].type != \'TEXT\': return content = e_context[\'context\'].content if content == \"Hello\": reply = Reply(type=ReplyType.TEXT, content=\"Hello, 用户!\") e_context[\'reply\'] = reply e_context.action = EventAction.BREAK_PASS
最佳实践与注意事项
- 配置优化:根据实际场景调整模型参数、上下文长度、速率限制等
- 依赖管理:优先使用官方推荐的Python版本和依赖
- 多账号部署:建议每个账号单独实例,避免冲突
- 安全注意事项:敏感信息勿硬编码,注意API Key保护
- 插件开发:建议单一职责、优先事件驱动
常见问题可参考官方FAQ和社区Issue
常见问题与注意事项
1. 登录异常
- 检查扫码账号是否实名认证
- 检查依赖和网络环境
2. 依赖安装
- 建议使用
pip3 install -r requirements.txt
,如遇失败可注释掉对应依赖
3. 消息丢失
- 检查消息队列和日志,关注上下文长度限制
4. 兼容性问题
- 推荐Python 3.8,部分依赖对高版本兼容性有限
5. 参考FAQ
- 官方FAQ
如遇未覆盖问题,建议优先搜索Issue和FAQ
总结与实践建议
- ChatGPT-on-WeChat 具备高扩展性、强适配性和丰富的AI能力,适合多场景落地。
- 建议结合自身业务需求,灵活选择部署方式和模型。
- 善用插件机制,快速实现个性化功能。
- 持续关注社区动态,获取最新最佳实践。
参考资料
- ChatGPT-on-WeChat官方文档
- OpenAI API文档
- 百度文心一言API
- 讯飞星火API
- 阿里通义千问API
- CSDN Python专栏
- Mermaid官方文档
扩展阅读:
- 插件开发指南
- 社区优秀实践案例
- AI大模型对比与选型