DSH QQ Framework 0.13.0
⚠️ 开发中,请勿用于生产环境
这是一个仍在开发与验证阶段的项目,不提供任何稳定性或安全承诺。
- 群聊会话连续性、上下文压缩、跨重启恢复等关键能力尚未完成真实环境验收;
- 部分能力(如压缩摘要、真实重启恢复)目前只有代码审计与单元测试支撑,缺少生产证据;
- 配置项、数据结构、插件接口随时可能变更,升级可能不向后兼容;
- 请在隔离环境、测试账号下试用,不要接入真实社群或承载实际业务。
欢迎评审与反馈,但请把它当作实验品,而不是可直接上线的成品。
DeepSeek Harness 0.2.1-rc.2 的原生 QQ 插件框架。入口:账号菜单 → 设置 → QQ 框架;独立管理站点:http://127.0.0.1:3097(「夜航控制台」)。
UI 与插件治理后的开发规范:仓库根目录 docs/ARCHITECTURE.md、DEVELOPMENT.md、CODING_STANDARDS.md、PLUGIN_SYSTEM.md、PLUGIN_DEVELOPMENT.md、UI_GUIDELINES.md、API_CONVENTIONS.md、SECURITY.md、MIGRATION.md。UI 改动前必须先读 UI_GUIDELINES.md。
夜航控制台
暖白、低饱和、固定侧栏的本地管理台。主导航为总览、连接、聊天、监听、权限、插件、日志、安全;「插件」下新增四个独立页面:
- 表情包:真实索引、图片代理、分类筛选、时间筛选、详情/删除、收集概率/冷却/排除词。
- QQ 空间:真实 NapCat 空间读取、目标 QQ、时间排序、分页加载、设置;点赞/评论/图片接口未提供时明确标注。
- 长期记忆:SQLite 记忆库、搜索/范围/类型筛选、详情编辑、关联记录、星图、复习曲线。
- 自主时间:日历/时间线、日记 CRUD、时间汇总、设置、AES-256-GCM 加密的秘密空间。
核心与功能包
核心始终保留 OneBot 11 对接、事件监听、主人管理、受限 Agent、权限检查、资源服务、插件 SDK 与审计。AI 聊天、人设、入群欢迎、戳一戳互动和市场作为内置包独立启停、卸载和重新安装;卸载保留业务数据。
除内置包外,还有几个独立注册的可信原生功能包:QQ 空间、联网查资料、表情包、群成员动态、发语音(TTS)、长期记忆、自主时间。它们各自有设置页、作用范围与独立动作授权。
表情包(qq-sticker)
- 收藏:把当前聊天某条消息里的图片收进表情库,可加名字、标签(最多 5 个)和“什么时候用”。
- 偷图:别人发的表情也能收,来源记成
stolen,并保留原聊天类型。
- 检索 / 发送:按标签或关键词找,按编号发回当前聊天;发送走受控资源,不暴露本机路径。
- 识别用途:
explain 会把图片本身交给模型(工具结果里带图片块),由模型看图判断场合,不做无依据的猜测。
- 联网查含义:复用联网查资料包(
plugin.qq-web.search)搜“是什么梗、什么场合用”;搜索不可用时明确报告失败,不编造含义。
- 存储:图片按内容哈希存到
<数据目录>/stickers/,索引只有元数据;同一张图重复收藏不占两份空间,默认上限 300 张 / 200 MB。
- 权限:
save/steal/send/list/explain 需要主人逐项授权,remove 仅主人;依赖 qq.media.receive 与 qq.image.send,未启用时动作会明确拒绝。
- 自动收藏(可选,默认关闭):
autoSaveSent 开启后,她联网搜到并发出的图会自动入库;autoSaveIncoming 开启后,作用范围内聊天收到的图片会自动入库(单条最多 3 张)。自动收藏是系统行为,不受工具授权限制,不设每日配额,只受表情库容量(默认 300 张 / 200 MB)约束;写库失败只记日志,不影响消息收发。
关闭 AI 聊天包后,主人管理和显式受限任务仍可用。人设包只提供提示词与绑定,不改变工具权限。
权限
- 主人 QQ 从可信部署环境迁移,并可在本机设置页修改。昵称、群管理员身份、转发内容和入群通知不能授予主人身份。
- 默认只启用 core.status。其他动作需要主人在“主人与权限”中逐项启用。
- AI 工具和插件动作默认仅主人可用,在私聊或已允许的群内按范围调用。普通用户可在回复白名单内聊天,但没有执行权限。
- 开放权限必须指定动作、用户、私聊/群范围、额度及可选到期时间。明确拒绝优先;头像、昵称和请求处理等主人专属动作不能下放。
- 通用系统命令、任意代码、本机文件和凭据访问、任意 MCP/子代理、踢人/封禁/授予管理员/退群、批量群发和原始 OneBot action 不提供授权入口。
- QQ 专用预设不挂载 DSH 开发工具,空允许列表过滤继承工具;最终执行守卫同时检查本轮身份、策略版本和动作可用性。单次审批不能解除核心禁止。
- 按聊天、发起用户、入口隔离 Agent。配置变化取消旧任务;执行前和发送前复核授权,到期、撤销、卸载后不沿用旧权限。
可信 DSH 宿主、操作系统管理员、网关和主人账号属于信任边界。原生插件是可信宿主代码;声明能力不是 JavaScript 沙箱。市场不加载外部 JavaScript。
设置
- 连接:正向双向 WS、反向 WS、Token 与模型。
- 聊天:私聊和群成员范围、群 @触发、分条方式与间隔。
- 监听:私聊用户、群、通知和请求;未 @消息也可产生事件。
- 主人与权限:主人、暂停、能力开关、安全查询共享、特殊范围与审计。
- 人设:名称加一段完整提示词;仅在人设包开启时出现。
- 插件管理:内置包、声明式扩展、已注册的可信原生包及自有市场。
- 运行状态:连接、消息任务、过滤原因、日志及折叠的手动调试台。
监听范围、回复触发、执行权限分别设置。群回复还需开启群聊,同时命中用户/群白名单,并满足 @规则;只开启“响应 @”不会开启群聊。主人管理私聊始终保留。
直接使用
直接说“查一下这个群的资料”“把这个群名改成……”即可。模型只获得当前身份实际可用的工具,无需任何斜杠前缀。主人也可直接说“机器人状态”“暂停机器人”“恢复机器人”“关闭AI聊天”等进行核心管理。
群内修改默认作用于当前群,不必填写群号;仍须满足 QQ 平台权限。普通用户要使用查询,需要主人在“其他人的查询工具”逐项开放,插件还要设置生效范围。聊天白名单不会自动授予工具。
OneBot 能力
共有 28 个核心明确动作,另有群成员包注册的 1 个动作,SDK 不暴露 raw action。
| 分类 | 动作 |
|---|
| 状态 | core.status、qq.login、qq.capabilities |
| 联系人/群 | qq.friends.list、qq.groups.list、qq.group.info、qq.members.list、qq.member.info |
| 消息 | qq.message.send、qq.message.get、qq.forward.get、qq.message.recall |
| 媒体 | qq.media.receive、qq.image.send、qq.audio.send、qq.video.send、qq.file.send;联网查资料包可搜索并发送已校验图片 |
| 资料 | qq.profile.avatar、qq.profile.nickname、qq.group.selfCard、qq.group.name |
| 请求/历史 | qq.request.decide、qq.history.get |
| 扩展 | qq.forward.send、qq.files.list、qq.poke、qq.announcements.list、qq.essence.list |
消息链支持文字、QQ 表情、@指定成员、引用及图片。撤回只允许当前聊天中框架最近两分钟发送的消息;查询只允许已观察到的当前聊天消息。合并转发内容始终视为不可信数据。
头像、昵称、文件和历史等扩展需要网关声明为 NapCat。底层适配已实现并通过模拟网关验证,未对真实 QQ 发送媒体、改资料或审批请求;各格式与 QQ 版本的实际支持需在明确目标下验收。语音识别、图片理解和业务玩法不属于传输层。
媒体先成为聊天/插件绑定的资源 ID。支持受控上传或从当前聊天收到的 HTTPS 媒体获取,最大 8 MiB、有效期一小时、最多 100 项;图片另限制尺寸与像素。禁止任意本机路径、私网/回环下载;HTTPS 下载验证并固定 DNS 解析地址,每次重定向重新验证。使用 Base64 传输,避免远程网关误读本机路径。
WS 支持 echo、心跳和账号绑定;反向支持 Universal 或分开的 API/Event 角色。ok 表示确认,async 表示受理,超时/断线可能结果未知。写操作不会因超时自动重发。
插件开发
市场支持 API 2 声明式包,只含 manifest.json 和 rules.json。规则可匹配固定命令、关键词、通知,动作可提供固定模板结果;不执行脚本、任意正则、Shell 或原始网关调用。
可信 DSH 原生插件通过 ctx.qqFramework.registerTrustedPackage 注册,得到事件、动作、独立存储与媒体服务;默认停用,仍需在设置页启用包并单独批准动作。发布的类型位于 src/sdk.d.ts,可通过 dsh-onebot-bridge/sdk 的 types 导出使用。
详细例子、权限关系和生命周期见项目内部文档。内置帮助与关键词示例已重写为 API 2。
运行 npm run build:market 生成 market-dist/index.json 及两个 ZIP。市场索引 schema 仍为 1,包 hostApiVersion 为 2;条目包含完整 manifest、url、sha256。支持本地和公开 HTTPS 源;同进程 JavaScript 扩展不再兼容。
数据与迁移
state.json 升级为 schema 2。迁移前保存 state.before-framework-v2.json;旧设置、人设、绑定和聊天历史保留,旧高权限 QQ 会话取消并归档。旧 JavaScript 扩展停用,提示重装声明式版本。重启取消未完成任务,不从持久化文本重新创建执行身份;发送中任务标记结果未知。
请求收件箱持久化,处理中重启的请求标记结果未知,不自动重复审批。最近事件仅记录元信息;消息观察索引和发送账本在内存中。临时资源在重启时清理。
Token 使用 DSH 凭据服务 DSH_ONEBOT_ACCESS_TOKEN,不写入插件市场包或回显。设置 API 复用 DSH 的管理员认证和来源检查。
验证与范围
npm test:核心回归与本机模拟网关。framework-ui-smoke.cjs、framework-ui-actions.cjs、framework-integration.cjs 依赖本机 Playwright/Edge,用于 UI 与真实 DSH 模型联调。集成脚本切换到本机模拟网关,结束恢复配置;不要在用户聊天期间随意运行。
没有安装或执行参考项目 Derpyu520/qq-bridge,也没有复用其源码、签名实现或提示词;旧 dsh-qqbot 仍保持卸载。
本版已加入合并转发发送、群文件目录浏览、受限戳一戳、公告和精华查询。尚未实现签名/在线状态、好友赞、群头像、群文件下载等。外部脚本沙箱和通用后台自动化也未实现,不会作为已完成能力开放。
0.3.0 功能包开发流程
插件管理增加独立设置页、版本依赖、设置历史、配置迁移与实际包回滚。声明式包保留当前及最近三个历史版本;升级和回滚后停用,需确认后启用。原生包由 DSH 管理宿主代码版本。
新增内置原生包“群成员动态”,默认停用、欢迎关闭,记录范围需单独选择。记录保留 1–90 天、20–250 条,不存聊天正文,支持分页与 CSV。AI 查询只允许主人,仍需单独授权。自动欢迎是有限事件规则,不借用主人执行身份。
原生 SDK 提供 settings、getScope、storage.update、automaticReply、输入拒绝、回调期限和单包故障隔离。完整字段、迁移示例与信任边界见项目内部文档;联合验收说明见项目内部文档。83 项自动测试及实际页面/本地模拟网关联调已通过,真实 QQ 写操作待联合验收。
0.3.1 调整聊天与权限交互,修复内置开关反馈,并支持其他用户的安全查询共享。详细行为与信任边界见 项目内部文档;实际模型和界面联调记录见项目 data/phase3-integration.json。
0.4.0 输入与群聊
所有需要好友/群目标的主要设置复用可搜索选择器,仍可手动填写。群聊支持仅被叫、适度参与、逐条回复;适度参与默认 10%、30 秒冷却、每群每分钟两次随机触发,随机参与不执行工具。私聊保留正常回复。
图片以真实图片块送入 DSH,文本模型回退 OCR;语音用 NapCat 原消息转写,文件原件通过 DSH 会话级 receipt 保存并提取 TXT/DOCX/PDF 等正文;视频附加原件并抽前十五秒最多三帧,不转写视频音轨。Node 至少22.13,视频抽帧需要预装 ffmpeg。大小、页数、时间和身份限制见 项目内部文档。
0.5.0
引用原文与媒体补全;按群共享公共上下文、逐轮隔离执行权限;修复人设最终入模与工作目录上下文;整轮文字与条数预算。详见 项目内部文档。
0.5.1
支持群聊和私聊戳一戳的人设短回复;独立零工具互动、冷却、开关和聊天范围检查。验收步骤已补入 项目内部文档。
0.5.4
默认不附引用框;兼容旧人设的聊天分隔符;降低重复自我对话权重,并对明显复读的纯聊天草稿最多进行一次无工具改写。人设原文保留。已撤下未启用的钱包适配。验收步骤见 项目内部文档。
0.6.0:参与决策与聊天对象
新增同一发起人的连续消息合并、零工具参与判断、最多一次短暂观察、取消和过时回复检查;按群和好友集中配置接收、回复范围、人设、聊天背景与节奏。设置提供总览、搜索、可展开导航、草稿保护和活动原因。明确工具任务继续走原发起人的受限权限。
本次完成交互改版第一轮。持久化话题/成员记忆、表情库、主动定时参与和用量看板属于后续阶段;没有作为已完成能力开放。测试步骤见 项目内部文档。
0.6.1:自然分条
新增 natural 分条方式:短聊天的单次换行发送为不同 QQ 气泡,列表和代码不按每行拆开。保留按空行分段、按字数和整段发送;超过整轮条数时仅合并尾部,不把整轮重新合成一个气泡。已用工具发送的消息仍占用同一轮预算;戳一戳保持单条。
0.6.2:连续交谈与超时取消
续聊窗口默认 120 秒、8 轮,实际回复后滑动延长,单次最长 10 分钟;多人独立、支持戳一戳后的文字、首次回答期间补充及确认的工具发送。注意力元数据可持久化,不携带执行授权。修复 agent.cancel 返回 void 时超时回调导致 DSH 退出的问题。详见 项目内部文档。
0.7.0:独立戳一戳包与统一卸载
戳一戳策略移入 src/builtins/poke/,支持 AI/固定文字、受控回戳、AI 零工具决策、冷却与范围选择;AI 聊天关闭时仍可固定回应。默认不自动回戳,需显式许可并启用核心动作。
所有内置、市场和原生包使用两步卸载确认,默认保留配置,也可按清单删除所属配置;代码目录、人设正文及业务记录保留。重装先保持停用,市场本地重装重新检查完整性。172 项测试和真实 DSH/模拟 OneBot 联调通过。步骤和清理边界见 项目内部文档。
0.8.0:多主人、语义交流与表达偏好
主人设置支持多个 QQ 和好友选择;身份检查统一覆盖管理、事件和最终执行权限。未 @ 群消息先判断交流对象,续聊不再因主人发言而自动接话;明确叫她与随机参与分别处理,判断使用零工具并限制用量。动作描写、语气词分别支持自然表达、关闭及按轮概率允许,保留完整括号或去掉完整动作片段。192 项测试与真实 DSH/模拟 OneBot 六项联合检查通过;步骤见 项目内部文档。
0.9.0:发语音(TTS)
新增独立原生包 发语音(TTS)(qq-tts),默认停用。她把一段文字合成为 QQ 语音消息发到当前聊天:模型调用 plugin.qq-tts.speak,插件把合成结果登记为当前聊天的音频资源,再由核心 qq.audio.send 发出;不接触任意本机路径,也不直接调用网关。
- 本地语音(默认):调用 Windows 内置语音(默认
Microsoft Huihui Desktop),生成 24 kHz 单声道 WAV,再用 ffmpeg 转 64 kbps MP3。离线、不需要密钥;本机需安装 ffmpeg(可用 ffmpegPath 指定完整路径)。
- 硅基流动:向 OpenAI 兼容的
POST /v1/audio/speech 发请求,默认模型 FunAudioLLM/CosyVoice2-0.5B、音色 FunAudioLLM/CosyVoice2-0.5B:alex。密钥填在设置页,或留空读取环境变量 SILICONFLOW_API_KEY(custom 读取 TTS_API_KEY)。
- 自建网络语音:
custom 可指向任意兼容 /v1/audio/speech 的服务(例如本机 GPT-SoVITS、CosyVoice、Kokoro),地址允许 http://127.0.0.1:…。
- 限制与记录:单条字数、同一聊天冷却、本地最长秒数可设;合成或发送失败会报出原因,设置页“最近记录”保留最近 20 条成功/失败与耗时。
- 权限:动作标记为 mutating,不能作为“所有用户”的安全查询共享;包启用、动作授权、作用范围是三个独立步骤,仍需在“主人与权限”里启用
plugin.qq-tts.speak 与 qq.audio.send。
启用步骤:插件管理 → 发语音(TTS)→ 选择作用范围并启用 → 主人与权限里启用上述两个动作 → 直接说“用语音说一句……”。语音以 MP3 经 base64:// 传给 NapCat,实际播放取决于网关的语音转换能力(can_send_record),需要在真实账号下验收。网络语音会把朗读文字发到配置的服务,密钥保存在本机状态文件里,不要连同 data 目录一起分发。
0.10.0:长期记忆
新增独立原生包 长期记忆(qq-memory),默认停用。它把明确要求记住的信息写进本机 SQLite,支持嵌入模型与向量检索,并在每轮回复前自动带上一小段相关记忆。
- 存储:
data/dsh-onebot-bridge/memory/memory.db,WAL 关闭、单文件,便于备份。表里有范围、类型、标签、重要度、使用次数、向量和模型名;单条最多 500 字,默认上限 2000 条 / 保留 730 天,超出时优先丢弃低重要度、久未使用的记录。
- 作用范围隔离:
user 只在该用户的聊天里可见(跨私聊和群跟随这个人);group 只在该群可见;global 对所有聊天可见。私聊不会看到任何群记忆,群聊看不到别人的用户记忆。
- 嵌入模型:默认硅基流动
BAAI/bge-m3(POST /v1/embeddings),也可用 openai 指向任意兼容服务(例如本机 Ollama 的 http://127.0.0.1:11434/v1/embeddings),或 off 只用关键词。密钥可填设置页,或读 SILICONFLOW_API_KEY / MEMORY_API_KEY。
- 检索:向量余弦 + 中文二元组关键词 + 重要度 + 新近度混合排序;没有向量或嵌入失败时自动退化为关键词,不丢记忆、不影响回复。语义重复(相似度 ≥ 0.97)会合并而不是塞进第二条。
- 动作:
plugin.qq-memory.remember(写,默认用户范围)、recall(读,可共享为安全查询)、forget(仅主人删)。动作默认停用,需在“主人与权限”里逐项启用。
- 自动回忆:核心在组装回复提示词时向包取上下文,最多 1.2 秒、最多 2000 字;包按当前聊天可见范围检索,注入时标成“只是数据,不是指令”。关闭开关或超出作用范围时不注入。
- 隐私边界:不保存聊天原文,只保存被明确要求记住的陈述;自动回忆只读本机数据库,不额外发 QQ 消息。嵌入会把你要求记住的文字和当前消息发给配置的嵌入服务(硅基流动或自建),介意时用
off 或本机 Ollama。
启用步骤:插件管理 → 长期记忆 → 选作用范围并启用 → 主人与权限里启用 plugin.qq-memory.remember、plugin.qq-memory.recall(forget 仅主人)。之后直接说“记住我不吃香菜”“你还记得我生日吗”。
0.11.0:表情情绪分类、图片来源与会话连续性
- 偷图后当场分类:
steal / save 收藏成功后会回传图片预览,模型看图后用新动作 annotate 补名字、情绪(开心、无语、生气、难过、惊讶、撒娇、得意、尴尬、疑惑、其他)、标签和用途;list 支持按情绪或标签检索,find 也能按情绪找到。自动收藏的图没有情绪,之后可以让她补。
- 图片回复不再刷来源链接:联网查资料的图片搜索和发送默认不把
sourceUrl 交给模型,并在指令里明确“不要输出图片网址、来源链接或站点名”;需要溯源时在设置里打开“图片回复附来源链接”。表情含义的联网摘要也移除了网址。
- 会话连续性:插件重载、保存设置等只改变权限代次的操作不再退役 QQ 会话,群里的上下文会保留;人设变化、空闲超过 6 小时或 DSH 侧会话丢失仍会重建。权限本来就在每轮重新校验,不会因为复用会话而沿用旧授权。
- 会话上下文压缩仍然存在:QQ 会话使用 1M 窗口,到 25%(约 26 万 token)触发一次摘要压缩,保留最近 8%;工具结果超过 8k 字符会裁剪。这是防止长会话直接超窗失败的兜底,不是在每轮清空。
0.12.0:自主时间
新增独立原生包 自主时间(qq-autonomy),默认停用。没人在说话的时候,她可以自己安排一点事:
- 知道现在几点:只要启用,每轮回复都会带一行“现在 2026-10-31 22:30 星期六 晚上”,不再对时间没概念。
- 自己写日记:默认每天 22 点后写一篇 200–500 字日记,存在
data/dsh-onebot-bridge/autonomy/diary.jsonl;可用 plugin.qq-autonomy.diary-read 让她读日记。
- 自己上网学习:每隔几小时挑一个自己好奇的小知识,先搜索、读正文,再用自己的话写 2–3 句存进长期记忆(tags 带“学习”)。
- 学群里的黑话:内存里保留最近群消息(不落盘),每隔一段时间让模型结合上下文推断新黑话/缩写/梗的意思,有把握的写进本群记忆(tags 带“黑话”),之后的回复会自动回忆。
- 自己发空间:默认关闭;打开后每天最多一条,走 QQ 空间包自己的可见范围、每日上限和冷却。
- 自己翻空间:默认关闭;需要填写“可浏览的 QQ”,只翻这些人的空间。看到有趣的最多评论一条(默认也关闭),评论必须来自本次实际浏览到的 postRef。
- 边界:每次活动都是独立受限会话,只能调用本活动白名单里的动作,不能发 QQ 消息,不能改权限;所有活动有活动时段、每天总次数上限和失败记录,设置页能看到“上次活动”和结果。
启用步骤:插件管理 → 自主时间 → 选作用范围并启用 → 按需打开“自己发空间/自己翻空间/评论” → 主人与权限里启用 plugin.qq-autonomy.diary-write、diary-read、run 以及要用到的空间/联网/记忆动作。之后她会按时间表自己做事;你也可以说“现在写篇日记”“去学点东西”,或者用 run 动作手动安排一次。
0.13.0:独立 Web 管理站点
新增独立管理站点 **http://127.0.0.1:3097**,只监听本机,不需要经过 DSH 设置页就能完成日常管理;DSH 里的“QQ 框架”页提供同一套管理入口(主题跟随 DSH),并加了“独立管理站点”入口。
- 登录安全:首次打开设置管理密码(至少 10 位),scrypt 哈希保存到
data/dsh-onebot-bridge/admin/admin.json;会话 12 小时绝对过期、30 分钟无操作过期,HttpOnly + SameSite=Strict Cookie;所有写操作要求会话内 CSRF 令牌;登录每 IP 15 分钟最多 5 次失败;校验 Host 与 Origin,防 DNS rebinding 与跨站提交;严格 CSP、请求体上限、只监听 127.0.0.1。
- 页面:总览(在线状态、主人、动作、包、最近事件、诊断)、连接(OneBot 地址/Token/模型,测试连接)、聊天(范围、群参与方式、分条与预算)、监听(私聊/群/通知/请求)、权限(主人、逐项动作授权、只读特殊范围)、插件(内置包、原生包、声明式扩展的启停/范围/配置)、日志(运行日志、权限审计)、安全(改密码、会话说明)。
- 安全边界:管理站点只转发白名单内的桥接动作,不暴露
invokeAction、媒体上传、原始网关调用与任意代码执行;没有设置密码前任何人都只能看到设置页,设置后必须登录。
- 反向代理:要在手机或局域网访问,请在前面加 HTTPS 反向代理并保留 Host/Origin 校验;默认不要直接把 3097 暴露到公网。
DSH 页与独立站点共用状态与权限,改任一处另一处刷新即可见。管理站点启动失败只记日志,不影响 QQ 桥接。
管理站点采用「夜航控制台」视觉:暖墨底与灯火色、等宽字承载数据、衬线斜体只做点缀;桌面、窄屏和明暗主题分别排版。所有图形由 CSS 与内联 SVG 绘制,没有外部字体、图片或脚本,仍符合严格 CSP。
参考与致谢
这个框架没有从零发明协议和生态,很多设计是在下面这些项目的基础上学的。只参考协议、思路与公开文档,代码全部独立实现,没有拷贝它们的源码或提示词。
感谢这些项目的作者和维护者把工作公开出来。如果这里有遗漏的致谢,欢迎提 issue 指正。
许可
MIT,见 LICENSE。