尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
基于GPT-6 Astra的跨平台GitHub查询机器人:QQ与飞书双端实现
上个月我把公司内部使用的 GitHub 辅助查询机器人从单一聊天工具迁移到了 QQ 和飞书双端同时接入了 GPT-6 Astra 的智能体能力。现在同事在 QQ 群里发一句“帮我看下 fastapi 这个仓库最近的 issue 情况”机器人会自动调用 GitHub API、拉取数据、再交给模型组织成人话回复整个过程不到十秒。这篇文章把我踩过的坑、最终跑通的完整方案整理出来给想搭建跨平台 AI 查询机器人的朋友一个可直接抄作业的参考。这个项目不挑基础只要你写过一点 Python、知道 API 大概是什么就能跟着做下来。我会从整体架构讲起再到 GitHub 查询工具的设计、GPT-6 Astra 函数调用的配置、QQ 和飞书双端接入最后是部署上线和问题排查。整套代码骨架是生产可用的不是 demo 级别的东西。1. 项目概览与方案拆解1.1 这个机器人到底要解决什么问题很多开发团队每天要在 GitHub 上查各种信息仓库的 star 数、某个 issue 的处理进度、用户主页、近期 release、甚至 README 摘要。这些操作单独做都不难但架不住频率高、打断节奏。尤其当你在群里讨论一个开源项目时来回切浏览器、输网址、找数据非常影响思路。我当时的第一版方案是写一个简单的命令机器人比如用户发/repo fastapi机器人直接返回仓库信息。但很快发现问题命令太多记不住参数一复杂就容易报错而且返回结果是纯数据堆砌可读性很差。后来我想到一个更合理的解法把 GitHub 查询能力封装成工具交给大模型做意图理解和参数提取由模型决定调用哪个工具再把结果整理成自然语言回复。用户完全不需要记命令就像跟真人说话一样。把模型换成 GPT-6 Astra 之后效果提升了一个档次。它在 Function Calling 上的稳定度很高工具参数填充基本不会出错多轮对话里也能记住用户之前问过哪个仓库后面说“它”的时候能正确关联到上下文对象。再加上它原生支持较长的上下文窗口适合承载一个群里连续多轮的查询请求。1.2 为什么选择 QQ 和飞书双端团队日常沟通分散在两个工具上一部分人用 QQ一部分人用飞书。QQ 是很多开源社区和外部群的主阵地飞书则是内部项目协作的主要平台。做一个只接一端的机器人总有一部分人用不上。所以从需求出发这个机器人生来就得是双端适配的。双端选择还有一个技术上的好处QQ 侧生态成熟接入方式多样飞书侧官方 API 完善机器人能力开放得很彻底。两边都做到一套逻辑复用真正需要单独写的只是平台适配层。有人问我为什么不用钉钉或 Slack原因很简单团队在用哪个就接哪个不要为了技术炫技去强行多接平台。另外一个考虑是 GitHub 查询这个场景本身跨平台属性很强。开发者在 QQ 群里聊开源项目、在飞书文档里写技术方案都会顺手需要查 GitHub 数据。机器人驻留在消息流里比网页端查询节省大量切换成本。这也是我最终选择做“消息内查询机器人”而不是“网页插件”的核心原因它出现在用户已经聚集的地方。1.3 GPT-6 Astra 在项目里扮演的角色这个项目里模型不是陪聊角色而是一个能自己决定“该做什么”的 Agent 大脑。用户发来一句模糊指令模型要完成三步动作理解意图、判断该调哪个 GitHub 工具、根据工具返回数据组织回复。这三步都依赖模型的工具调用能力和语言组织能力。GPT-6 Astra 在意图判断上做得很好举几个我实测中遇到的输入它全部处理正确“看看 vue 的 star 涨到多少了” → 识别为仓库信息查询提取 ownervuejsrepovue“ant design 这个项目 issue 好多啊最近有人处理吗” → 识别为 issue 列表查询并自动带上筛选条件“帮我查下 torvalds 的主页他最近活跃不” → 识别为用户信息查询这种灵活解析能力是小命令系统完全做不到的。用户不需要知道机器人支持哪些命令只要说出需求剩下的交给模型。2. 环境准备与总体架构2.1 整体架构与消息流转先看整体数据流整个系统的核心是一个 Python 后端服务它同时连接 QQ 和飞书两个平台并统一调用 GPT-6 Astra 和 GitHub API。用户消息 ↓ QQ 消息网关 / 飞书事件订阅 ↓ 平台适配层统一为 Message 对象 ↓ Agent 调度逻辑 ├── 调用 GPT-6 Astra附带工具定义 ├── 模型返回需要调用 GitHub 工具及参数 ├── 后端执行 GitHub API 请求 └── 把结果回传给模型生成最终回复 ↓ 平台适配层格式化回复 ↓ 发送到 QQ 群 / 飞书会话这里的关键点是工具调用由模型做决策但真正的 HTTP 请求由后端执行。这样设计有两个好处一是模型不需要知道 GitHub API 的细节只要学会输出参数即可二是 GitHub API 的鉴权信息留在服务端不会暴露给客户端。实际部署时只需要一个能跑 Python 的服务器内存 1GB 以上即可我的方案在 2C4G 的云服务器上跑得很稳。2.2 账号申请与 API 准备动手写代码前先备齐下面几样东西每一样都有对应的申请入口资源用途申请要点GPT-6 Astra API Key模型推理与函数调用在 OpenAI 平台创建注意账单额度GitHub Token调用 GitHub API 时提高速率限制在 GitHub Settings → Developer settings 生成只要 public_repo 权限QQ 机器人协议端接收和发送 QQ 消息项目采用 OneBot 11 协议可选 NapCat 或 Lagrange飞书自建应用接收飞书事件、发送消息在飞书开放平台创建企业自建应用开启机器人能力GitHub Token 很多人忽略不配也能查 public 仓库但未认证请求的限制是 60 次/小时测试时多调用几次就被限流了。配上 Token 后提升到 5000 次/小时从“够用”变成“随便用”。飞书应用创建后有 App ID 和 App Secret这两个凭证是后续调用飞书 API 的核心。另外需要配置事件订阅的请求地址飞书服务器会往这个地址 POST 消息事件接收 URL 必须是公网可访问的 HTTPS 地址。这一点提前准备好后面接入时会顺畅很多。2.3 本地开发框架选择技术栈我最终选的是 Python FastAPI httpx。FastAPI 用来提供服务端接口给飞书事件订阅回调httpx 用来发异步 HTTP 请求跨平台通信层用统一 SDK 的 WebSocket 客户端。为什么不直接用 Django对这个项目来说 Django 太重了我们只需要一个轻量服务FastAPI 的异步特性在处理 WebSocket 长连接和多平台并发回调时更省资源。QQ 侧我用的是 OneBot 11 协议的上游连接方式也就是机器人框架通过 WebSocket 主动连接我们的后端后端不需要暴露额外端口给 QQ这样少一个公网端口安全风险更小。飞书侧稍有不同飞书是“被动接收模式”飞书服务器把事件 POST 到你配置的回调地址上所以 FastAPI 必须监听一个公网可访问的端口。部署时我会在这个端点前用 Nginx 做反向代理并配好 HTTPS 证书。3. 核心功能实现GitHub 查询工具与模型联动3.1 查询工具层封装 GitHub 常用 API先写工具层把 GitHub 的查询能力封装成一个个纯函数这是整个项目的地基。每个函数都接收明确参数、返回结构化字典后面喂给模型时也方便统一格式化。# github_tool.py import httpx HEADERS {Authorization: ftoken {GITHUB_TOKEN}} async def get_repo(owner: str, repo: str) - dict: async with httpx.AsyncClient(headersHEADERS) as client: resp await client.get(fhttps://api.github.com/repos/{owner}/{repo}) resp.raise_for_status() data resp.json() return { name: data[full_name], stars: data[stargazers_count], forks: data[forks_count], language: data[language], description: data[description], open_issues: data[open_issues_count], updated_at: data[updated_at], }这里我做了精简返回没有把 GitHub 原始 JSON 直接丢给模型。原因很实际原始返回有几十个字段模型处理起来浪费 token还容易理解偏差。精简后只保留用户关心的业务字段模型一眼就能看懂上下文。同理issue 查询和用户查询也是类似结构。查询 issue 时我加了一个state参数用户说“最近的 issue”默认是 open 状态避免把历史遗留的几千个 issue 全拉出来。async def get_issues(owner: str, repo: str, state: str open, limit: int 5) - dict: async with httpx.AsyncClient(headersHEADERS) as client: params {state: state, per_page: limit, sort: created, direction: desc} resp await client.get(fhttps://api.github.com/repos/{owner}/{repo}/issues, paramsparams) resp.raise_for_status() issues resp.json() return [{title: it[title], number: it[number], state: it[state], created_at: it[created_at]} for it in issues]3.2 让模型学会调用工具函数调用配置工具写好后下一步是把工具定义告诉 GPT-6 Astra。这一步是 Agent 化改造的核心我直接贴实际用到的配置。# agent.py from openai import OpenAI client OpenAI(api_keyGPT_API_KEY) TOOLS [ { type: function, function: { name: get_repo, description: 查询 GitHub 仓库的基本信息包括 star 数、fork 数、主要语言、最近更新时间等, parameters: { type: object, properties: { owner: {type: string, description: 仓库所属用户或组织名}, repo: {type: string, description: 仓库名称}, }, required: [owner, repo], }, }, }, { type: function, function: { name: get_issues, description: 查询 GitHub 仓库最近的 issue 列表可指定 open/closed 状态, parameters: { type: object, properties: { owner: {type: string, description: 仓库所属用户或组织名}, repo: {type: string, description: 仓库名称}, state: {type: string, enum: [open, closed, all], description: issue 状态}, limit: {type: integer, description: 返回条数默认 5}, }, required: [owner, repo], }, }, }, ]这里有个细节值得注意description字段不是随便写的它直接决定模型能不能准确填充参数。比如get_repo的 owner 字段我特意写成“仓库所属用户或组织名”因为模型如果不知道仓库的主人是谁就没法从仓库名反推完整参数。把描述写得具体、带例子模型的效果会有肉眼可见的提升。当用户发来“检查下 lodash 的 star 数”时实际请求流程是第一条消息发给模型带toolsTOOLS模型返回finish_reasontool_calls附带的参数是{owner: lodash, repo: lodash}后端执行get_repo(lodash, lodash)把工具执行结果作为新消息回传给模型模型基于返回数据生成最终回复比如“lodash 目前有 60000 多 star主要是 JavaScript 编写……”3.3 多轮对话与上下文管理GPT-6 Astra 在函数调用基础上还需要正确的消息历史管理才能维持多轮体验。我维护了一个chat_history列表按对话 session 存储。每次模型工具调用后我会把“用户消息、模型工具调用消息、工具结果消息”完整附加到历史中保证模型能理解用户说的“它”指代哪个仓库。我之前试过只保存最近一轮消息结果用户第二句说“那它的 issue 呢”模型根本不知道“它”是什么导致工具参数填错。后来改成保存最近 10 条消息大约 3000 token效果稳定多了。考虑到 GPT-6 Astra 的上下文很长群里连续查询完全可以都放在一个 session 里。async def handle_message(text: str, session_id: str) - str: history sessions.get(session_id, []) history.append({role: user, content: text}) response client.responses.create( modelgpt-6-astra, inputhistory, toolsTOOLS, tool_choiceauto, ) while response.finish_reason tool_calls: tool_calls response.tool_calls tool_results [] for tc in tool_calls: args json.loads(tc.function.arguments) result await call_tool(tc.function.name, args) tool_results.append({ type: function_call_output, call_id: tc.id, output: json.dumps(result, ensure_asciiFalse), }) response client.responses.create( modelgpt-6-astra, inputhistory tool_results, toolsTOOLS, ) history.append({role: assistant, content: response.output_text}) sessions[session_id] history[-20:] # 只保留最近 20 条 return response.output_text关键点在于这个while循环。一次工具调用拿到结果后模型可能有后续问题比如先查了仓库又决定查 issue所以要循环处理直到模型没有工具调用需求。我在群聊里实测过用户一句“看看某仓库和某仓库谁的 star 多”模型会自动调两次get_repo再对比给结论这就是 Agent 链式调用的价值。4. QQ 与飞书双端接入4.1 QQ 侧OneBot 11 协议接入QQ 机器人没有官方开放给个人的标准 API社区实际做法是使用 OneBot 11 协议配合各种实现框架。我用的是 WebSocket 反向连接模式OneBot 端启动后主动连到我的后端地址这样 QQ 侧的消息不需要额外公网端口。核心代码是一个长连接客户端收到消息后提取文本内容交给上一节的handle_message处理再把结果发回指定群聊。# qq_bot.py import json, asyncio, websockets async def on_qq_message(message: dict): if message.get(post_type) ! message: return user_text message.get(raw_message, ) group_id message.get(group_id) user_id message.get(user_id) if not user_text.startswith(): return # 只响应 机器人 的消息 reply await handle_message(user_text.lstrip(), fqq_{group_id}) await ws.send(json.dumps({ action: send_group_msg, params: {group_id: group_id, message: reply} }, ensure_asciiFalse))这里我做了两个策略决策一是只响应被 的消息避免机器人对群里所有聊天都插嘴二是 session 按群 ID 隔离不同群之间的对话互不干扰。如果是私聊消息用 user_id 做 session 区分即可。实话说QQ 侧最大的坑不是写代码而是账号稳定性。普通 QQ 账号接入 OneBot 有一定风控几率轻则验证码重则冻结。我的经验是用专门的小号跑别用主号加入协议端开发者推荐的防封策略一旦出现异常登录提示立刻停止并发测试。生产环境强烈建议用官方认可的 QQ 开放平台方案或者只在测试群使用不要大规模拉群。4.2 飞书侧事件订阅与消息卡片飞书侧相对正规走官方开放平台路径。在飞书开发者后台创建应用后开启“机器人”能力配置事件订阅。飞书会把im.message.receive_v1事件 POST 到你的回调地址。# feishu_bot.py from fastapi import FastAPI, Request app FastAPI() FEISHU_APP_ID cli_xxx FEISHU_APP_SECRET xxx app.post(/feishu/event) async def feishu_event(request: Request): data await request.json() # 企业自建应用不需要额外验证 URL只需要处理 event event data.get(event, {}) if event.get(message, {}).get(message_type) text: content json.loads(event[message][content]) text content.get(text, ).strip() open_id event[sender][sender_id][open_id] chat_id event[message][chat_id] reply await handle_message(text, flark_{chat_id}) await send_feishu_text(chat_id, reply) return {code: 0}发消息需要先获取tenant_access_token用 App ID 和 App Secret 换。这里有个细节飞书要求所有 API 调用都在 Header 里带这个 token而且 token 有有效期一般是 2 小时。我封装了一个简单的 token 缓存避免每条消息都重新换取。关于飞书运维的一个硬性要求是回调地址必须在飞书侧配置为 HTTPS并且返回响应不能太慢否则飞书会重试事件。我一开始没注意响应时间有一次 GitHub API 响应慢了飞书回调超时后连发三次重试机器人连续回复了三条同样内容群里瞬间刷屏。解决方法是把消息处理改成异步任务先立刻返回{code: 0}再后台慢慢处理逻辑。4.3 双端消息适配与权限控制两边的消息格式差异很大QQ 是纯文本表情飞书是 JSON 消息还支持富文本卡片。为了让同一套 Agent 逻辑服务两端我定义了一个内部消息模型dataclass class ChatMessage: session_id: str text: str sender_id: str platform: str # qq or feishu平台适配层负责把协议端的原始消息转换成这个统一结构并把handle_message的返回值转换成平台对应格式发送。双端复用 Agent 逻辑后续如果还想接 Slack 或钉钉只需要再写一个适配器核心代码一行业务代码都不用改。权限控制我做得很简单但很实用维护一个允许使用机器人的群列表/用户列表。不在列表里的用户发消息机器人直接忽略。列表通过环境变量配置不写死运维时可以随时改。因为 GitHub 查询本来就是公开信息没有敏感数据所以没必要做细粒度鉴权但总得防止陌生人把机器人当成免费 API 接口来刷。5. 部署上线与踩坑实录5.1 三种部署方式对比部署方式我实际尝试过三种直接在跑协议的机器上裸跑、用 systemd 托管、用 Docker 容器化。每种都有适用场景直接对比说明方式优点缺点我的评价裸跑 nohup简单直接进程挂了没人管只适合本地调试systemd 托管进程守护开机自启环境迁移麻烦单机部署首选Docker 容器环境一致、迁移方便多一层网络配置多机或重部署场景推荐最终我采用的是 systemd 托管。原因很简单我们只有一台服务器进程守护已经足够没必要引入 Docker 增加的抽象层。systemd 配置大概长这样[Unit] DescriptionGitHub Query Bot Afternetwork.target [Service] Userubuntu WorkingDirectory/opt/github-agent-bot EnvironmentFile/opt/github-agent-bot/.env ExecStart/opt/github-agent-bot/.venv/bin/python main.py Restartalways RestartSec5 [Install] WantedBymulti-user.target.env文件里统一管理所有密钥GITHUB_TOKEN、GPT_API_KEY、FEISHU_APP_SECRET等。部署完成后用systemctl enable github-bot设为开机自启再也没有出现过机器人第二天静默掉线的情况。飞书回调端点前面我用 Nginx 做了反向代理和 HTTPS 终结把 80/443 端口的流量转发到本机 8000 端口。配置不复杂重点是把 SSL 证书搞好如果没有现成证书用云厂商免费证书完全够用。5.2 常见问题排查与避坑指南这套系统跑了近一个月我在运维中遇到过不少问题挑重点整理成速查表现象可能原因解决办法模型不调用工具直接瞎答工具 description 写得太模糊把每个参数的具体范围、示例写清楚GitHub API 报 403未配 Token 或额度耗尽配置 Token5000 次/小时仍然不够就加缓存飞书回调重复推送回调返回超时改成异步处理先返回 code0QQ 账号被风控提示异常并发登录或行为异常用小号、降低发送频率、避免频繁测试登录机器人群里不回话session 列表按qq_群号隔离出现问题先看日志确认是否命中 session 隔离逻辑飞书消息发不出去tenant_access_token 缓存过期未刷新检查 token 缓存逻辑2 小时刷新一次中文乱码JSON 未指定 ensure_asciiFalse所有json.dumps都加ensure_asciiFalse最让我头疼的问题是 GPT-6 Astra 的 API 偶发超时。群里有人连续触发查询时模型响应慢会让用户体验变差。我的优化方案分两层一是给每个会话加一个并发锁同一 session 内不并发调用模型避免请求堆积二是在前端加一个简单的“正在处理中”提示让用户知道机器人不是死了而是在干活。另外一个重要经验是 GitHub API 偶尔也会抽风尤其是国内网络环境访问api.github.com并不总是稳定。我在工具层加了重试机制对 5xx 错误和后端临时超时最多重试 2 次同时在 GitHub 数据层做了一个内存缓存对热门仓库的查询结果缓存 5 分钟既缓解了限流压力也减轻了网络波动的影响。提示如果服务器访问 GitHub API 长期不稳定可以把工具层的请求地址切换到https://api.github.com以外的可靠接入点但所有接入方案都建议用环境变量配置保证代码本身不写死域名方便后续迁移。关于日志我从第一周起就养成了记录结构化日志的习惯。每条入站消息、模型响应耗时、工具调用结果都输出成 JSON 单行日志。出了问题时用journalctl -u github-bot --since 10 minutes ago看错误效率非常高。尤其是模型偶尔抽风返回错误格式时日志里能直接看到原始返回定位非常快。踩过一次大坑后我还加了一条规则工具调用失败时不要把这个错误结果直接返回给模型而是让模型重新组织语言告诉用户“这个仓库可能不存在或者 GitHub 暂时无法访问”。原因是模型看到异常返回后容易陷入幻觉编造一套不存在的 star 数误导用户。流程上稳定的一个关键点是把模型上限拉长。GPT-6 Astra 在一次回答里如果既有中文回复又有工具调用结果长文本模式下不容易被截断。我把max_output_tokens设置成 4000足够覆盖带表格和列举的长回复了。6. 经验总结与下一步扩展整个项目从想法到稳定运行前后迭代了三版。第一版是纯命令机器人第二版接入了大模型但工具调用老出错第三版才真正打磨到生产状态。我的体会是AI Agent 项目最大的工作量不在调模型而在工具层和平台适配的鲁棒性。模型负责聪明工程负责可靠两者缺一不可。如果你也想做类似的东西我建议从最小闭环开始先在命令行里跑通 GPT-6 Astra 调用 GitHub 工具再接入一个消息平台最后才考虑第二端。一次贪多很容易在平台适配的细节里耗费大量时间打击继续做下去的动力。这个项目的后续扩展空间还很大。比如给工具层加上 GitHub Actions 的触发能力让用户直接在群里说“帮我在 CI 里跑一次测试”或者加上定时任务每天早上自动汇总关注的仓库动态推送到飞书群里再或者把查询结果结构化存下来做一个团队内部的 GitHub 信息看板。每一块在现有架构下都是新增一个工具方法的事情不需要改动核心框架。最后分享一个小技巧目录里我给所有工具函数都写了清晰的 docstring并在工具定义里反复打磨 description 字段。代码可以丑一点但工具说明必须写到位。模型能不能准确调用工具一半看模型能力一半看你给它看的说明书清不清楚。这个投入的回报立竿见影你也会在调试时少掉一半头发。
RELATED

相关推荐

Python毕业设计:恶意代码检测分类平台搭建与实现

Python毕业设计:恶意代码检测分类平台搭建与实现

简介:面向计算机相关专业毕业设计的高分项目源码包,以Python实现恶意代码检测与分类平台,适用于正在准备毕设、课程设计或期末大作业的学生。项目经导师指导认可,评审分97分,覆盖数据预处理、模型训练、分类识别等完整…

📅 2026/9/14 7:45:45
二分查找算法原理、实现与优化指南

二分查找算法原理、实现与优化指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/14 7:45:45
Doris+Lance实现毫秒级跨模态联合检索

Doris+Lance实现毫秒级跨模态联合检索

1. 这不是又一个“多模态数据库”概念秀,而是智能驾驶与具身智能落地的硬性瓶颈被捅破了我第一次在某头部自动驾驶公司数据平台组看到他们用 Apache Doris Lance 搭建的实时感知日志分析链路时,第一反应是:这玩意儿居然真能跑通?…

📅 2026/9/14 7:45:45
MORE NEWS

更多资讯

📰

深入剖析 ScyllaDB Commitlog 段文件格式:从文件头到碎片化条目的逐字节解析

深入剖析 ScyllaDB Commitlog 段文件格式:从文件头到碎片化条目的逐字节解析 【免费下载链接】scylladb NoSQL data store using the Seastar framework, compatible with Apache Cassandra and Amazon DynamoDB 项目地址: https://gitcode.com/GitHub_Trending/s…

📰

数据驱动MPC与机组组合优化:预测、滚动求解与Matlab实现

简介:针对电力系统机组组合与模型预测控制交叉方向,这份Matlab项目案例提供了完整可运行的代码框架,适合自动化、电气工程、人工智能等相关专业学生与研究人员用于学习或二次开发。资源共29个文件,核心为16个.mat数据文件与11个.m…

📰

MATLAB计算太阳天顶角:从赤纬、时角公式到完整实现

简介:SolarAngle.MATLAB 是一份面向太阳能工程、气象与环境科学研究者的 MATLAB 计算工具,用于根据地理位置、日期和时间精确求取太阳天顶角、太阳高度角与方位角,为光伏电站朝向优化、建筑采光设计及辐射分析提供基础数据。太阳天顶角与高度…

📰

Matlab实现区域能源系统双层优化与需求响应

1. 项目背景与核心价值区域综合能源系统(RIES)作为能源互联网的重要载体,正在推动传统能源系统向低碳化、智能化转型。这个Matlab复现项目源自核心期刊论文,聚焦"需求响应双层优化"这一前沿方向,其核心价值在…

📰

政府科技管理部门技术转移体系构建与实践

1. 政府科技管理部门推动技术转移的现状与挑战技术转移作为科技创新成果转化为现实生产力的关键环节,一直是政府科技管理部门工作的重点。但在实际操作中,我们常常面临以下典型问题:信息不对称:高校科研院所的研究成果与企业需求之…

📰

用Python手写BP神经网络实现鸢尾花分类:从原理到调参

简介:面向Python初学者的人工智能实践项目,使用BP神经网络对经典鸢尾花数据集进行分类,配套完整源码、数据集和文档说明,可满足期末大作业、课程设计等场景。除BP神经网络两个版本(V1/V2)外,还提…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬