{"_id":"@emmm3412941994/koishi-plugin-aichat","name":"@emmm3412941994/koishi-plugin-aichat","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@emmm3412941994/koishi-plugin-aichat","version":"1.0.0","description":"Configurable OpenAI and Anthropic chat replies for OneBot v11 QQ groups.","main":"lib/index.js","types":"lib/index.d.ts","scripts":{"build":"tsc -p tsconfig.build.json","test":"vitest run","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm test && npm run build"},"author":{"name":"3412941994"},"homepage":"https://github.com/3412941994/koishi-plugin-aichat#readme","bugs":{"url":"https://github.com/3412941994/koishi-plugin-aichat/issues"},"repository":{"type":"git","url":"git+https://github.com/3412941994/koishi-plugin-aichat.git"},"keywords":["koishi","koishi-plugin","onebot","onebot-v11","qq","openai","anthropic","multimodal","chatbot"],"license":"MIT","engines":{"node":">=18"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"peerDependencies":{"koishi":"^4.18.11"},"devDependencies":{"@koishijs/plugin-adapter-onebot":"^6.0.2","@types/node":"^24.0.0","koishi":"^4.18.11","typescript":"^5.9.2","vitest":"^4.1.10"},"koishi":{"description":{"zh":"在 OneBot v11 QQ 群中使用可配置的大模型进行聊天回复"},"service":{"required":["http"]}},"gitHead":"d29b4335f4f87c74fbf17fd385256fac469346d0","_id":"@emmm3412941994/koishi-plugin-aichat@1.0.0","_nodeVersion":"24.15.0","_npmVersion":"11.18.0","dist":{"integrity":"sha512-+EbqCjDS2jvxrF7keOrWVLQbRSQGQ0NDCxojX5dtu3ohr0W9n2/mcY7loVLfUFd2oI5QaCFU2t4Dqmp5KIrgnw==","shasum":"511250f8f94131098dbc7be5f221d56e5fb136b8","tarball":"https://registry.npmjs.org/@emmm3412941994/koishi-plugin-aichat/-/koishi-plugin-aichat-1.0.0.tgz","fileCount":24,"unpackedSize":72070,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDtPUU8rT7ay8fowZ0rtUZ68L1W9ygEK2XtXXnui2arAQIgLzC8GCclUd77/LIwZw8WhU5zJ+32e4JYhQT6efRrXRE="}]},"_npmUser":{"name":"emmm3412941994","email":"emmm3412941994@gmail.com"},"directories":{},"maintainers":[{"name":"emmm3412941994","email":"emmm3412941994@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/koishi-plugin-aichat_1.0.0_1786041925141_0.9431849598620923"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-06T18:45:24.969Z","1.0.0":"2026-08-06T18:45:25.291Z","modified":"2026-08-06T18:45:25.524Z"},"maintainers":[{"name":"emmm3412941994","email":"emmm3412941994@gmail.com"}],"description":"Configurable OpenAI and Anthropic chat replies for OneBot v11 QQ groups.","homepage":"https://github.com/3412941994/koishi-plugin-aichat#readme","keywords":["koishi","koishi-plugin","onebot","onebot-v11","qq","openai","anthropic","multimodal","chatbot"],"repository":{"type":"git","url":"git+https://github.com/3412941994/koishi-plugin-aichat.git"},"author":{"name":"3412941994"},"bugs":{"url":"https://github.com/3412941994/koishi-plugin-aichat/issues"},"license":"MIT","readme":"# koishi-plugin-aichat\n\n一个面向 OneBot v11 QQ 群聊的 Koishi AI 聊天插件。支持配置多个 OpenAI 兼容或 Anthropic 兼容模型、多个人设、群级行为覆盖、群历史上下文、图片输入和概率主动回复。\n\n## 功能\n\n- 仅处理 OneBot v11 的 QQ 群消息，不处理私聊或其他平台。\n- 支持 OpenAI Chat Completions 和 Anthropic Messages 两种协议。\n- 每个模型独立配置 API Host、API Key、模型名称和输入能力。\n- 为所有群设置默认人设、主模型和回退模型，并可按 QQ 群号覆盖。\n- 支持被 @ 回复和概率主动回复，二者均可全局配置或按群覆盖。\n- 使用 OneBot 群历史消息作为上下文，历史图片也可发送给视觉模型。\n- 同群请求串行处理；主动回复具有概率、冷却和繁忙跳过机制。\n\n## 安装\n\n确保 Koishi 实例已经配置 OneBot v11 适配器和 HTTP 服务，然后安装插件：\n\n```sh\nnpm install @emmm3412941994/koishi-plugin-aichat\n```\n\n在 Koishi 控制台中启用 `ai-chat` 并完成模型配置。插件至少需要两个不同的模型配置，分别作为主模型和回退模型。\n\n## 模型配置\n\n每个模型包含以下字段：\n\n| 字段 | 说明 |\n| --- | --- |\n| `id` | 供其他配置引用的唯一 ID |\n| `name` | 控制台显示名称 |\n| `protocol` | `openai` 或 `anthropic` |\n| `apiHost` | API 根地址、`/v1` 地址或完整接口地址 |\n| `apiKey` | API Key，在控制台中以密码字段显示 |\n| `model` | 提交给服务商的模型名称 |\n| `inputTypes` | 必须包含 `text`，视觉模型额外选择 `image` |\n| `timeout` | 请求超时，单位毫秒 |\n| `maxTokens` | 最大输出 token 数 |\n| `temperature` | 可选；留空时不向 API 发送该参数 |\n\nOpenAI 协议的 Host 示例：\n\n```text\nhttps://api.openai.com\nhttps://api.openai.com/v1\nhttps://example.com/custom/chat/completions\n```\n\nAnthropic 协议的 Host 示例：\n\n```text\nhttps://api.anthropic.com\nhttps://api.anthropic.com/v1\nhttps://example.com/custom/messages\n```\n\n插件会根据协议补全默认接口路径。使用代理或兼容服务时，请确认它实现了对应的请求格式，而不只是接受相同的鉴权方式。\n\n## 模型路由\n\n插件检查当前消息和所选历史上下文构成的完整请求：\n\n1. 请求不含图片，或主模型支持图片时，使用主模型。\n2. 请求含图片且主模型不支持图片时，使用回退模型。\n3. 回退模型也不支持图片时，不调用 API；被 @ 时发送输入不受支持提示，主动触发时保持静默。\n\n网络、超时、限流、HTTP 或 API 错误不会触发回退模型。被 @ 的请求失败时，群内会收到简短失败提示；主动回复失败只写入日志。\n\n## 人设与群配置\n\n人设由唯一 ID、显示名称和 system prompt 组成。默认行为指定：\n\n- 默认人设 ID\n- 主模型 ID 与回退模型 ID\n- 上下文开关和历史消息条数\n- 被 @ 回复开关\n- 主动回复开关、概率和冷却秒数\n\n群聊覆盖表以 QQ 群号为键。覆盖项留空时继承默认行为，因此只需填写该群真正不同的字段。\n\n主动回复概率范围为 `0` 到 `1`，例如 `0.05` 表示每条符合条件的消息有 5% 概率触发。被 @ 的消息优先按 @ 回复处理，不会同时产生主动回复。\n\n## 上下文与图片\n\n上下文通过 OneBot 适配器的 `getMessageList()` 能力读取，并从当前消息向前分页。部分 OneBot v11 实现没有提供 `get_group_msg_history` 扩展接口；遇到这种情况，插件会记录警告并只使用当前消息，不会阻止回答。\n\n历史消息会按时间正序发送给模型：机器人的历史发言作为 `assistant`，其他群成员作为带昵称标识的 `user`。所选历史范围内的图片会被下载并转为 base64 输入。\n\n图片限制可配置：\n\n- 单张图片最大字节数，默认 5 MiB。\n- 单次请求最大图片数，默认 20 张，超过时优先保留较新的图片。\n- 图片下载超时，默认 30 秒。\n\n超限、下载失败或 MIME 类型异常的图片会转换为文本占位。图片内容会发送给配置的模型服务商，请根据群聊隐私要求设置上下文范围和图片限制。\n\n## 调度行为\n\n- 同一群内的模型请求串行执行。\n- 明确的 @ 请求会进入队列，不会因繁忙丢失。\n- 主动回复在同群已有请求时直接跳过。\n- 主动冷却从触发时开始计算，默认 30 秒，可按群覆盖。\n- 所有回答直接发送普通群消息，不引用触发消息。\n\n## 开发\n\n```sh\nnpm install\nnpm run typecheck\nnpm test\nnpm run build\n```\n\n构建产物输出到 `lib/`。\n\n## 限制\n\n- 不提供群内命令；模型、人设和群设置仅在 Koishi 控制台中修改。\n- 不支持私聊、语音模型、文件模型或流式分段回复。\n- 不在本地保存聊天历史，重启后不会保留任何上下文缓存。\n- 不内置联网搜索或模型工具调用。\n\n## License\n\nMIT\n","readmeFilename":"README.md","_rev":"1-902aec6e866b8dc77878c9d697a240b5"}