YesImBot 是一套基于 Koishi 的群聊 AI 插件与运行时,让大语言模型以自然的方式融入你的群聊。
- 消息优先的运行时 —
@yesimbot/agent-runtime将“观察”与“发言”分离:普通消息进入频道历史,Will 决定等待或触发模型回合;忙时事件加入当前 turn,不创建第二个流消费者。 - 多模型即插即用 — 通过 provider 插件接入 OpenAI、Anthropic、DeepSeek、Google 等模型,并通过
models.json管理模型注册与默认值。 - 强大的插件体系 — 工具、提示词、消息转换、生命周期钩子,每个维度都可扩展。插件按
pre/ normal /post顺序编排。 - 频道存储与资源 — 公开的
ChannelScope只携带当前platform、selfId、channelId与isDirect。Core 在内部由 shared/direct tuple 推导存储目录;不会公开频道 identity。每个频道目录保存channel.json、JSONL、assets、workspace 与插件数据。 - 平台输入边界 — 平台注册
PlatformTranslator;无精确或显式"*"Translator 时,message-created的非空 message ID 默认透传元素,媒体持久化与自定义事件仍需平台 Translator。Translator 在 Session 生命周期内接收频道AssetStore,直接返回最终 Message/Event record,Gateway 负责被动回复。 - 丰富的能力插件 — 虚拟文件系统与 Bash 沙箱、MCP 客户端、Skill 加载、Web 搜索、MemOS Cloud 记忆、OneBot 工具、贴纸处理等。
- Koishi 原生集成 — 作为
koishi-plugin-yesimbot运行,复用 Koishi 生态的适配器、中间件和插件体系。
YesImBot 作为 Koishi 插件运行,安装方式与普通 Koishi 插件一致:
# 使用 yarn(推荐)
yarn add koishi-plugin-yesimbot
# 或使用 npm
npm install koishi-plugin-yesimbot然后在 Koishi 配置文件中启用插件,配置你偏好的模型 provider 即可开始使用。
Tip
想了解详细的配置与使用方式?请查阅官方文档站。
从零创建 Koishi 应用或把 yesimbot dev 分支接入已有 Koishi 应用,可以使用仓库内置脚本,详见 docs/setup-koishi.md。
新版本的 allowedChannels 采用严格的默认拒绝策略。未配置或配置为
allowedChannels: [] 时,不接收任何外部 Session;至少配置一条规则后再
启动。规则按 OR 合并,platform 和 channelId 支持精确值或 *,省略
isDirect 表示同时匹配私聊和群聊。需要限定类型时必须显式写布尔值:
# 精确频道;不限制私聊/群聊
allowedChannels:
- platform: onebot
channelId: "123456"
# 仅私聊、仅群聊
allowedChannels:
- platform: discord
channelId: "dm-123"
isDirect: true
- platform: onebot
channelId: "group-456"
isDirect: false
# 明确允许所有外部平台和频道范围
allowedChannels:
- platform: "*"
channelId: "*"模型图片能力按模型声明,Provider 本身不声明模态能力。缺少或未知图片能力时,模型调用降级为纯文本。当前版本启用图片能力需要直接编辑 models.json。
- 确认模型完整 ID。格式为
providerId:modelId,例如openai:gpt-4o。providerId是 provider 插件配置里的id;modelId必须与 provider 插件的chatModels配置一致。 - 打开
models.json。默认路径是 Koishi 应用根目录下的data/yesimbot/models.json;如果自定义了basePath,则在该目录下。文件不存在时先创建为{}。 - 在
chat对象下添加该模型的覆盖项:
{ "chat": { "openai:gpt-4o": { "modalities": { "input": ["image"] } } } }- 保存并重启 Koishi,或等对应 Runtime 被替换。活动 Runtime 在创建时快照模型能力,不会热更新。
- 检查启动日志。若模型 ID 未注册或拼写错误,该覆盖项会被忽略并记录 warning,此时仍按纯文本处理。
models.json 控制“模型是否支持图片输入”,imageInput 控制模型调用时是否允许图片输入,两者同时生效:
- 模型未声明
image:即使imageInput: true,也只发送文本。 - 模型声明了
image且imageInput: true:模型可通过read工具显式读取图片。 imageInput: false:无论模型是否声明,都禁用图片输入。
模型调用不会自动扫描历史图片;只有模型通过 read 工具显式读取的图片才会投影到当前调用。PlatformTranslator 自己决定入站图片下载与持久化。
活动 Runtime 会在创建时快照模型能力、imageInput、Will、提示词与插件。Core 不提供 reload():配置、模型或插件变化会在 Runtime 因停止或 shared Bot 变更而替换后生效。
YesImBot 的能力通过插件系统按需加载。
| 插件 | 包名 | 能力 |
|---|---|---|
| 控制台 | koishi-plugin-yesimbot-console |
自定义 Koishi 首页与 WebUI |
| 工作区 | koishi-plugin-yesimbot-workspace |
文件操作、命令执行与 Skill 目录访问 |
| MCP 客户端 | koishi-plugin-yesimbot-mcp-client |
通过 MCP 协议接入外部工具服务 |
| MemOS | koishi-plugin-yesimbot-memos-client |
接入 MemOS Cloud 长期记忆 |
| 搜索 | koishi-plugin-yesimbot-search-service |
网络搜索与信息检索 |
| OneBot 工具 | koishi-plugin-yesimbot-onebot-utils |
OneBot 平台工具集成 |
| 贴纸 | koishi-plugin-yesimbot-sticker |
表情与贴纸处理 |
OneBot Translator 内置于 koishi-plugin-yesimbot,通过同一 PlatformTranslator 边界注册,不是可选的平台包。
| Provider | 包名 |
|---|---|
| OpenAI | @yesimbot/koishi-plugin-provider-openai |
| Anthropic | @yesimbot/koishi-plugin-provider-anthropic |
| DeepSeek | @yesimbot/koishi-plugin-provider-deepseek |
@yesimbot/koishi-plugin-provider-google |
Athena 是一个 message-first Koishi agent runtime。入站路径如下:
Session -> allowlist -> shared assignee admission -> AssetStore -> PlatformTranslator
-> final Message/Event Record -> RuntimeManager -> ChannelRuntime FIFO
-> wait | join | one output consumer -> passive Gateway delivery
Gateway 持有 live Session、Translator 调用、canonical record 与被动回复。未注册平台仍可使用默认 message-created 元素透传,但媒体持久化与自定义事件需显式 Translator。ChannelRuntime 持有 FIFO、Agent 状态、JSONL、Will、模型输入投影与 delivery feedback,不保留 Session。参见 Core API、维护者指南 和 架构愿景与演进说明。
本仓库使用 Yarn 4 与 Turborepo 管理。
yarn install
yarn check-types
yarn test
yarn build包级验证使用 Turbo filter:
yarn turbo run test --filter=@yesimbot/agent-runtime
yarn turbo run check-types --filter=koishi-plugin-yesimbot感谢所有为 YesImBot 付出努力的人:
