{"repo": "asukaneko/nekobot", "files": {"README.md": {"baf33f971374a72268434abc18c1128d57ed7cbd": {"t": 1785747249.5942163, "n": 9378, "h": "c4bb6c15dd085c72", "c": "# NekoBot\n\n![cover](docs/cover.png)\n\n
\n\n![Python](https://img.shields.io/badge/Python-3.10%2B-3776AB?style=flat&logo=python&logoColor=white)\n![License](https://img.shields.io/badge/License-MIT-2ea043?style=flat)\n![Web](https://img.shields.io/badge/Web-Dashboard-ec4899?style=flat)\n![QQ](https://img.shields.io/badge/QQ-NapCat%20%2B%20ncatbot-58a6ff?style=flat)\n![MCP](https://img.shields.io/badge/MCP-AI%20Agent%20Interface-8b5cf6?style=flat)\n![Docker](https://img.shields.io/badge/Docker-ghcr.io-2496ED?style=flat&logo=docker&logoColor=white)\n\n面向 Web 的多渠道 AI 角色扮演系统,包含Web、QQ、CLI、Telegram、Feishu等频道。\n\nNekoBot Android 客户端:[Nekobot-Android](https://github.com/asukaneko/Nekobot-Android)\n\n
\n\n## Overview\n\nNekoBot 是一个面向角色扮演与长期互动场景的 AI 系统。项目采用统一 AI 内核与频道适配层分离的架构,提供完整的 Web 管理后台、角色运行时、记忆系统、工具调用与工作区能力。\n\n它的核心目标不是单纯提供“聊天接口”,而是提供一套可持续运行、可配置、可观测、可扩展的角色型智能体基础设施。 \n\n## Core Capabilities\n\n- 多渠道接入:支持 QQ、Web、CLI、Telegram、Feishu,共用统一的 `ChatRequest / ChatResponse` 处理链路。\n- 角色运行时:内置实时情感引擎、六维关系模型、动态 PromptStack、自动状态评估与角色记忆。\n- Web 控制台:提供会话管理、角色管理、模型配置、工作流、知识库、记忆、日志与调试界面。\n- 工具与工作区:支持工具调用、文件读写、共享/私有工作区、文件变更预览与任务执行。\n- 模型适配:兼容 OpenAI Chat Completions/Responses , Anthropic , Gemini接口,可接入 Deepseek、GLM、Kimi、Mimo及其他兼容服务。\n- 插件与技能:支持通过插件与技能系统扩展能力,而不破坏核心处理流程。\n- MCP 接口:通过 Model Context Protocol 暴露 Gateway 能力,支持 Claude Code、Cursor、ChatGPT Agent 等 AI 智能体直接调用。\n- 语音能力:内置可插拔 TTS/STT 适配器架构,TTS 支持 OpenAI 兼容、小米 MiMo、豆包(火山引擎)等提供商,STT 支持 OpenAI 兼容、小米 MiMo 及本地 faster-whisper 离线识别。\n\n## Architecture\n\n项目围绕“统一 AI 内核 + 多渠道适配”的原则组织:\n\n```text\nbot.py\n└── nbot/\n ├── commands.py # QQ command handlers, BotClient init\n ├── core/ # Unified AI pipeline\n │ ├── chat_models.py # ChatRequest / ChatResponse\n │ ├── agent_service.py # Main AI entry\n │ ├── ai_pipeline.py # Pre-process -> chat -> post-process\n │ ├── session_store.py # Unified session state\n │ ├── model_adapter.py # Cross-provider model adapter\n │ ├── workspace.py # Per-session file workspace\n │ ├── auto_memory.py # Automatic memory extraction\n │ └── workflow.py # Workflow executor\n ├── character/ # Affective runtime and relationship model\n ├── channels/ # QQ, Web, Telegram, Feishu adapters\n ├── services/ # AI client, chat service, tools, TTS/STT\n ├── plugins/ # Plugin and skill system\n ├── hooks/ # Hook Runtime (event-driven conversation hooks)\n ├── gateway/ # Message bus, routing, delivery, dedupe\n │ └── facade.py # Gateway service facade for MCP\n ├── web/ # Flask blueprints, Socket.IO events, dashboard\n ├── mcp/ # MCP Server (AI Agent interface)\n │ ├── server.py # FastMCP entry point\n │ ├── tools/ # MCP Tools\n │ ├── resources/ # MCP Resources\n │ └── prompts/ # MCP Prompts\n └── cli/ # Terminal UI\n```\n\n请求流如下:\n\n```text\nChannel Adapter\n -> ChatRequest\n -> Agent Service / AI Pipeline\n -> Character Runtime (before_turn / after_turn)\n -> Model Adapter / AI Client\n -> ChatResponse\n -> Channel Adapter\n```\n\n## Runtime Features\n\n### Character Runtime\n\n`nbot/character/` 提供角色运行时,用于把“角色设定”转化为持续一致的对话行为:\n\n- `PromptStack`:按优先级动态拼装提示词,而不是把所有状态污染进历史消息。\n- `StateMachine`:控制情绪惯性与关系平滑变化,避免单轮输入导致剧烈失真。\n- `AutoState`:定期总结近期互动,自动调整情绪强度、精力与六维关系值。\n- `Memory`:支持按角色、按用户隔离的长期与短期记忆。\n- `ReactionPlan`:在每轮回复前生成风格与行为策略,约束角色输出。\n\n### Workspace and Tools\n\n系统支持私有工作区与共享工作区:\n\n- 私有工作区绑定当前会话。\n- 共享工作区可被多个会话访问。\n- 文件创建、修改、删除、传输与差异预览可通过 Web 界面管理。\n- 工具系统支持在对话中触发文件、搜索、执行等能力。\n\n### Web Dashboard\n\nWeb 后台覆盖日常运维与调试需求:\n\n- 会话与聊天管理\n- 角色卡创建、编辑、导入、导出\n- AI 模型配置与切换\n- 记忆、知识库、技能、工具管理\n- 工作流与定时任务\n- Token 统计、日志、调试与运行状态查看\n\n## Requirements\n\n- Python 3.10+\n- NapCatQQ\n- ncatbot 3.8.5\n- 可用的 OpenAI-compatible API 服务\n\n说明:\n\n- `.env` 是首选配置来源。\n- `config.ini` 仍作为 QQ 连接参数的兼容回退。\n- 项目默认使用 Flask + Flask-SocketIO + Eventlet 提供 Web 服务。\n\n## Installation\n\n```bash\ngit clone https://github.com/asukaneko/nekobot.git\ncd nekobot\n```\n\n```bash\n#配置虚拟环境(可选)\npython -m venv venv\nsource venv/bin/activate\n# windows: venv\\Scripts\\activate.bat\npython -m pip install -r requirements.txt\n```\n\n复制环境变量模板并填写必要配置:\n\n```bash\ncp .env.example .env\n```\n\n至少建议先配置:\n\n```env\nWEB_PASSWORD=your_web_password\n```\n\n如需启用 QQ Bot,还需要补充:\n\n```env\nBOT_UIN=your_qq_number\nROOT=your_admin_qq_number\nWS_URI=ws://your_napcat_host:port\nTOKEN=your_napcat_token\n```\n\nAI 服务的最小示例:\n\n```env\nAPI_KEY=your_api_key\nBASE_URL=https://your-openai-compatible-endpoint/v1\nMODEL=your_model_name\n```\n\n但你仍然可以通过web界面来配置你的模型\n\n### Docker 快速部署\n\n官方镜像发布在 GitHub Container Registry (ghcr.io),支持 `linux/amd64` 与 `linux/arm64`:\n\n```bash\n# 准备配置\nmkdir -p nekobot/data && cd nekobot\ncp .env.example .env # 编辑 .env,至少填 WEB_PASSWORD\n\n# 拉取并运行\ndocker run -d --name nekobot --restart unless-stopped \\\n -p 5000:5000 \\\n -v \"$(pwd)/data:/app/data\" \\\n -v \"$(pwd)/.env:/app/.env:ro\" \\\n --env-file .env \\\n ghcr.io/asukaneko/nekobot:latest\n```\n\n启动后访问 `http://<服务器IP>:5000`。\n\n> **提示**\n> - 必须挂载 `data/` 卷以持久化会话 / 角色卡 / Web 配置\n> - NapCatQQ 需独立部署,通过 `WS_URI` 连接(详见 Docker Compose 示例)\n> - 生产环境建议使用精确版本号(如 `:3.1.2`)而非 `latest`,便于回滚\n\n完整部署说明(Compose、升级、与 NapCatQQ 协同、HTTPS 等)见 [Docker 部署指南](docs/docs/guide/docker-deploy.md)。\n\n## Running\n\n```bash\n# QQ + Web\npython bot.py\n\n# Web only\npython bot.py --only-web\n\n# Web only on custom host/port\npython bot.py --only-web --web-host 0.0.0.0 --web-port 5000\n\n# CLI only\npython bot.py --cli\n\n# CLI + Web\npython bot.py --cli-and-web\n\n# QQ only\npython bot.py --no-web\n```\n\n默认情况下:\n\n- 若检测到 QQ 相关配置,启动 `QQ + Web`。\n- 若未检测到 QQ 配置,项目可仅以 Web 模式运行。\n\n## Development Notes\n\n- 目标 Python 版本为 `3.10`。\n- 代码风格使用 Ruff,行宽 100,双引号,空格缩进。\n- `nbot/core/` 不应依赖频道层模块。\n- 所有新频道都应通过 `BaseChannelAdapter` 接入,而不是直接调用模型。\n- 角色逻辑应通过 `before_turn()` / `after_turn()` 挂入统一流水线。\n\n常用检查命令:\n\n```bash\nruff check .\npython -m compileall -q bot.py nbot tools\npython -m pytest -q\n```\n\nCI 主要执行:\n\n1. `ruff check . --select E9,F63,F7,F82`\n2. `python -m compileall -q bot.py nbot tools`\n3. `python -m pip install -r requirements.txt`\n4. `python -m pytest -q`\n\n## Documentation\n\n更详细的使用与开发文档位于 `docs/`:\n\n- 快速开始:[docs/docs/guide/quick-start.md](docs/docs/guide/quick-start.md)\n- Docker 部署:[docs/docs/guide/docker-deploy.md](docs/docs/guide/docker-deploy.md)\n- 命令说明:[docs/docs/guide/commands.md](docs/docs/guide/commands.md)\n- 频道接入:[docs/docs/guide/channels.md](docs/docs/guide/channels.md)\n- 语音合成 (TTS):[docs/docs/guide/nbot/services/tts.md](docs/docs/guide/nbot/services/tts.md)\n- 语音识别 (STT):[docs/docs/guide/nbot/services/stt.md](docs/docs/guide/nbot/services/stt.md)\n- 贡献指南:[docs/CONTRIBUTING.md](docs/CONTRIBUTING.md)\n- 更新记录:[docs/CHANGELOG.md](docs/CHANGELOG.md)\n\n\n## MCP (Model Context Protocol)\n\nNekoBot 内置 MCP Server,可以将 Gateway 的消息、事件、队列、节点等能力以标准 MCP 协议暴露给 AI 智能体。\n\n### 支持的能力\n\n| 类型 | 说明 |\n|------|------|\n| Tools | 查询状态、查询事件链路、查询队列、模拟消息、触发任务、重试死信、节点管理 |\n| Resources | Gateway 状态、统计数据、能力清单、队列状态、节点列表 |\n| Prompts | 故障诊断、频道测试、节点健康检查 |\n\n### 快速开始\n\n```bash\n# 启动 Bot + MCP\npython bot.py --mcp\n```\n\n### Claude Code 配置\n\n在项目根目录创建 `.mcp.json`:\n\n```json\n{\n \"mcpServers\": {\n \"nekobot\": {\n \"command\": \"python\",\n \"args\": [\"bot.py\", \"--mcp-only\"],\n \"env\": {\n \"PYTHONPATH\": \".\"\n }\n }\n }\n}\n```\n\n> **提示**:`bot.py` 是相对路径,会从当前工作目录查找。如果 Claude Code 不在项目根目录启动,需要通过 `cwd` 指定项目路径,或将 `args` 改为绝对路径。\n\n### Cursor 配置\n\n在项目根目录创建 `.cursor/mcp.json`:\n\n```json\n{\n \"mcpServers\": {\n \"nekobot\": {\n \"command\": \"python\",\n \"args\": [\"bot.py\", \"--mcp-only\"],\n \"env\": {\n \"PYTHONPATH\": \".\"\n }\n }\n }\n}\n```\n\n### MCP 配置项\n\n在 `config.ini` 中配置 MCP 行为:\n\n```ini\n[mcp]\n; 是否允许 MCP 发送真实消息(高危,默认关闭)\nsend_message_enabled = false\n; 重试死信是否需要确认\nretry_require_confirmation = true\n; 审计日志\naudit_enabled = true\n; 授予 MCP 全部权限(本地使用建议开启)\nadmin = true\n; 传输模式: stdio (本地) | streamable-http (远程)\ntransport = stdio\n; 服务端配置(streamable-http 模式)\nhost = 127.0.0.1\nport = 5001\n; 远程连接 URL(--mcp-connect 使用)\nconnect_url = http://127.0.0.1:5001/mcp\n\n[gateway]\n; Gateway 持久化存储(启用后可查询历史事件)\nstorage_enabled = true\ndata_dir = data/web\n```\n\n### 远程连接\n\nMCP Server 支持 `streamable-http` 远程访问:\n\n```bash\n# 服务端:config.ini 设置 transport = streamable-http,然后启动\npython bot.py --mcp-only\n\n# 客户端:连接远程 MCP Server\npython bot.py --mcp-connect http://192.168.1.100:5001/mcp\n```\n\nClaude Code 远程连接配置(`.mcp.json`):\n\n```json\n{\n \"mcpServers\": {\n \"nekobot\": {\n \"url\": \"http://192.168.1.100:5001/mcp\"\n }\n }\n}\n```\n\n### 可用 Tools\n\n| Tool | 说明 | 风险 |\n|------|------|------|\n| `gateway_get_status` | Gateway 健康状态 | 只读 |\n| `gateway_get_stats` | 事件/投递/去重统计 | 只读 |\n| `gateway_query_trace` | 查询 trace 完整链路 | 只读 |\n| `gateway_query_events` | 按条件查询事件 | 只读 |\n| `gateway_query_deliveries` | 查询投递记录 | 只读 |\n| `gateway_get_queue_stats` | 队列状态 | 只读 |\n| `gateway_list_nodes` | 节点列表 | 只读 |\n| `gateway_get_node` | 节点详情 | 只读 |\n| `gateway_receive_message` | 模拟频道消息 | 操作 |\n| `gateway_send_message` | 发送真实消息 | 高危 |\n| `gateway_submit_internal_task` | 触发内部任务 | 操作 |\n| `gateway_retry_dead_letter` | 重试死信 | 高危 |\n| `gateway_register_node` | 注册节点 | 操作 |\n \n查看详细文档:[docs/MCP](./docs/docs/guide/nbot/mcp/index.md)\n\n## Security Notes\n\n- 不要将 Web 后台直接暴露到公网且不做额外防护。\n- 请为 `WEB_PASSWORD`、API Key、NapCat Token 设置有效且独立的密钥。\n- 不要提交 `.env`、真实凭据或运行时敏感数据到仓库。\n- 机器人运行期间,不要手动修改 `data/character/` 下的持久化文件。\n\n## License\n\n本项目基于 MIT License 发布,详见 [LICENSE](LICENSE)。\n\n"}, "ddf97ec6f6f734dd74bb660e39a901be8aeaf2aa": {"t": 1785771766.8541832, "n": 9378, "h": "c4bb6c15dd085c72", "c": "# NekoBot\n\n![cover](docs/cover.png)\n\n
\n\n![Python](https://img.shields.io/badge/Python-3.10%2B-3776AB?style=flat&logo=python&logoColor=white)\n![License](https://img.shields.io/badge/License-MIT-2ea043?style=flat)\n![Web](https://img.shields.io/badge/Web-Dashboard-ec4899?style=flat)\n![QQ](https://img.shields.io/badge/QQ-NapCat%20%2B%20ncatbot-58a6ff?style=flat)\n![MCP](https://img.shields.io/badge/MCP-AI%20Agent%20Interface-8b5cf6?style=flat)\n![Docker](https://img.shields.io/badge/Docker-ghcr.io-2496ED?style=flat&logo=docker&logoColor=white)\n\n面向 Web 的多渠道 AI 角色扮演系统,包含Web、QQ、CLI、Telegram、Feishu等频道。\n\nNekoBot Android 客户端:[Nekobot-Android](https://github.com/asukaneko/Nekobot-Android)\n\n
\n\n## Overview\n\nNekoBot 是一个面向角色扮演与长期互动场景的 AI 系统。项目采用统一 AI 内核与频道适配层分离的架构,提供完整的 Web 管理后台、角色运行时、记忆系统、工具调用与工作区能力。\n\n它的核心目标不是单纯提供“聊天接口”,而是提供一套可持续运行、可配置、可观测、可扩展的角色型智能体基础设施。 \n\n## Core Capabilities\n\n- 多渠道接入:支持 QQ、Web、CLI、Telegram、Feishu,共用统一的 `ChatRequest / ChatResponse` 处理链路。\n- 角色运行时:内置实时情感引擎、六维关系模型、动态 PromptStack、自动状态评估与角色记忆。\n- Web 控制台:提供会话管理、角色管理、模型配置、工作流、知识库、记忆、日志与调试界面。\n- 工具与工作区:支持工具调用、文件读写、共享/私有工作区、文件变更预览与任务执行。\n- 模型适配:兼容 OpenAI Chat Completions/Responses , Anthropic , Gemini接口,可接入 Deepseek、GLM、Kimi、Mimo及其他兼容服务。\n- 插件与技能:支持通过插件与技能系统扩展能力,而不破坏核心处理流程。\n- MCP 接口:通过 Model Context Protocol 暴露 Gateway 能力,支持 Claude Code、Cursor、ChatGPT Agent 等 AI 智能体直接调用。\n- 语音能力:内置可插拔 TTS/STT 适配器架构,TTS 支持 OpenAI 兼容、小米 MiMo、豆包(火山引擎)等提供商,STT 支持 OpenAI 兼容、小米 MiMo 及本地 faster-whisper 离线识别。\n\n## Architecture\n\n项目围绕“统一 AI 内核 + 多渠道适配”的原则组织:\n\n```text\nbot.py\n└── nbot/\n ├── commands.py # QQ command handlers, BotClient init\n ├── core/ # Unified AI pipeline\n │ ├── chat_models.py # ChatRequest / ChatResponse\n │ ├── agent_service.py # Main AI entry\n │ ├── ai_pipeline.py # Pre-process -> chat -> post-process\n │ ├── session_store.py # Unified session state\n │ ├── model_adapter.py # Cross-provider model adapter\n │ ├── workspace.py # Per-session file workspace\n │ ├── auto_memory.py # Automatic memory extraction\n │ └── workflow.py # Workflow executor\n ├── character/ # Affective runtime and relationship model\n ├── channels/ # QQ, Web, Telegram, Feishu adapters\n ├── services/ # AI client, chat service, tools, TTS/STT\n ├── plugins/ # Plugin and skill system\n ├── hooks/ # Hook Runtime (event-driven conversation hooks)\n ├── gateway/ # Message bus, routing, delivery, dedupe\n │ └── facade.py # Gateway service facade for MCP\n ├── web/ # Flask blueprints, Socket.IO events, dashboard\n ├── mcp/ # MCP Server (AI Agent interface)\n │ ├── server.py # FastMCP entry point\n │ ├── tools/ # MCP Tools\n │ ├── resources/ # MCP Resources\n │ └── prompts/ # MCP Prompts\n └── cli/ # Terminal UI\n```\n\n请求流如下:\n\n```text\nChannel Adapter\n -> ChatRequest\n -> Agent Service / AI Pipeline\n -> Character Runtime (before_turn / after_turn)\n -> Model Adapter / AI Client\n -> ChatResponse\n -> Channel Adapter\n```\n\n## Runtime Features\n\n### Character Runtime\n\n`nbot/character/` 提供角色运行时,用于把“角色设定”转化为持续一致的对话行为:\n\n- `PromptStack`:按优先级动态拼装提示词,而不是把所有状态污染进历史消息。\n- `StateMachine`:控制情绪惯性与关系平滑变化,避免单轮输入导致剧烈失真。\n- `AutoState`:定期总结近期互动,自动调整情绪强度、精力与六维关系值。\n- `Memory`:支持按角色、按用户隔离的长期与短期记忆。\n- `ReactionPlan`:在每轮回复前生成风格与行为策略,约束角色输出。\n\n### Workspace and Tools\n\n系统支持私有工作区与共享工作区:\n\n- 私有工作区绑定当前会话。\n- 共享工作区可被多个会话访问。\n- 文件创建、修改、删除、传输与差异预览可通过 Web 界面管理。\n- 工具系统支持在对话中触发文件、搜索、执行等能力。\n\n### Web Dashboard\n\nWeb 后台覆盖日常运维与调试需求:\n\n- 会话与聊天管理\n- 角色卡创建、编辑、导入、导出\n- AI 模型配置与切换\n- 记忆、知识库、技能、工具管理\n- 工作流与定时任务\n- Token 统计、日志、调试与运行状态查看\n\n## Requirements\n\n- Python 3.10+\n- NapCatQQ\n- ncatbot 3.8.5\n- 可用的 OpenAI-compatible API 服务\n\n说明:\n\n- `.env` 是首选配置来源。\n- `config.ini` 仍作为 QQ 连接参数的兼容回退。\n- 项目默认使用 Flask + Flask-SocketIO + Eventlet 提供 Web 服务。\n\n## Installation\n\n```bash\ngit clone https://github.com/asukaneko/nekobot.git\ncd nekobot\n```\n\n```bash\n#配置虚拟环境(可选)\npython -m venv venv\nsource venv/bin/activate\n# windows: venv\\Scripts\\activate.bat\npython -m pip install -r requirements.txt\n```\n\n复制环境变量模板并填写必要配置:\n\n```bash\ncp .env.example .env\n```\n\n至少建议先配置:\n\n```env\nWEB_PASSWORD=your_web_password\n```\n\n如需启用 QQ Bot,还需要补充:\n\n```env\nBOT_UIN=your_qq_number\nROOT=your_admin_qq_number\nWS_URI=ws://your_napcat_host:port\nTOKEN=your_napcat_token\n```\n\nAI 服务的最小示例:\n\n```env\nAPI_KEY=your_api_key\nBASE_URL=https://your-openai-compatible-endpoint/v1\nMODEL=your_model_name\n```\n\n但你仍然可以通过web界面来配置你的模型\n\n### Docker 快速部署\n\n官方镜像发布在 GitHub Container Registry (ghcr.io),支持 `linux/amd64` 与 `linux/arm64`:\n\n```bash\n# 准备配置\nmkdir -p nekobot/data && cd nekobot\ncp .env.example .env # 编辑 .env,至少填 WEB_PASSWORD\n\n# 拉取并运行\ndocker run -d --name nekobot --restart unless-stopped \\\n -p 5000:5000 \\\n -v \"$(pwd)/data:/app/data\" \\\n -v \"$(pwd)/.env:/app/.env:ro\" \\\n --env-file .env \\\n ghcr.io/asukaneko/nekobot:latest\n```\n\n启动后访问 `http://<服务器IP>:5000`。\n\n> **提示**\n> - 必须挂载 `data/` 卷以持久化会话 / 角色卡 / Web 配置\n> - NapCatQQ 需独立部署,通过 `WS_URI` 连接(详见 Docker Compose 示例)\n> - 生产环境建议使用精确版本号(如 `:3.1.2`)而非 `latest`,便于回滚\n\n完整部署说明(Compose、升级、与 NapCatQQ 协同、HTTPS 等)见 [Docker 部署指南](docs/docs/guide/docker-deploy.md)。\n\n## Running\n\n```bash\n# QQ + Web\npython bot.py\n\n# Web only\npython bot.py --only-web\n\n# Web only on custom host/port\npython bot.py --only-web --web-host 0.0.0.0 --web-port 5000\n\n# CLI only\npython bot.py --cli\n\n# CLI + Web\npython bot.py --cli-and-web\n\n# QQ only\npython bot.py --no-web\n```\n\n默认情况下:\n\n- 若检测到 QQ 相关配置,启动 `QQ + Web`。\n- 若未检测到 QQ 配置,项目可仅以 Web 模式运行。\n\n## Development Notes\n\n- 目标 Python 版本为 `3.10`。\n- 代码风格使用 Ruff,行宽 100,双引号,空格缩进。\n- `nbot/core/` 不应依赖频道层模块。\n- 所有新频道都应通过 `BaseChannelAdapter` 接入,而不是直接调用模型。\n- 角色逻辑应通过 `before_turn()` / `after_turn()` 挂入统一流水线。\n\n常用检查命令:\n\n```bash\nruff check .\npython -m compileall -q bot.py nbot tools\npython -m pytest -q\n```\n\nCI 主要执行:\n\n1. `ruff check . --select E9,F63,F7,F82`\n2. `python -m compileall -q bot.py nbot tools`\n3. `python -m pip install -r requirements.txt`\n4. `python -m pytest -q`\n\n## Documentation\n\n更详细的使用与开发文档位于 `docs/`:\n\n- 快速开始:[docs/docs/guide/quick-start.md](docs/docs/guide/quick-start.md)\n- Docker 部署:[docs/docs/guide/docker-deploy.md](docs/docs/guide/docker-deploy.md)\n- 命令说明:[docs/docs/guide/commands.md](docs/docs/guide/commands.md)\n- 频道接入:[docs/docs/guide/channels.md](docs/docs/guide/channels.md)\n- 语音合成 (TTS):[docs/docs/guide/nbot/services/tts.md](docs/docs/guide/nbot/services/tts.md)\n- 语音识别 (STT):[docs/docs/guide/nbot/services/stt.md](docs/docs/guide/nbot/services/stt.md)\n- 贡献指南:[docs/CONTRIBUTING.md](docs/CONTRIBUTING.md)\n- 更新记录:[docs/CHANGELOG.md](docs/CHANGELOG.md)\n\n\n## MCP (Model Context Protocol)\n\nNekoBot 内置 MCP Server,可以将 Gateway 的消息、事件、队列、节点等能力以标准 MCP 协议暴露给 AI 智能体。\n\n### 支持的能力\n\n| 类型 | 说明 |\n|------|------|\n| Tools | 查询状态、查询事件链路、查询队列、模拟消息、触发任务、重试死信、节点管理 |\n| Resources | Gateway 状态、统计数据、能力清单、队列状态、节点列表 |\n| Prompts | 故障诊断、频道测试、节点健康检查 |\n\n### 快速开始\n\n```bash\n# 启动 Bot + MCP\npython bot.py --mcp\n```\n\n### Claude Code 配置\n\n在项目根目录创建 `.mcp.json`:\n\n```json\n{\n \"mcpServers\": {\n \"nekobot\": {\n \"command\": \"python\",\n \"args\": [\"bot.py\", \"--mcp-only\"],\n \"env\": {\n \"PYTHONPATH\": \".\"\n }\n }\n }\n}\n```\n\n> **提示**:`bot.py` 是相对路径,会从当前工作目录查找。如果 Claude Code 不在项目根目录启动,需要通过 `cwd` 指定项目路径,或将 `args` 改为绝对路径。\n\n### Cursor 配置\n\n在项目根目录创建 `.cursor/mcp.json`:\n\n```json\n{\n \"mcpServers\": {\n \"nekobot\": {\n \"command\": \"python\",\n \"args\": [\"bot.py\", \"--mcp-only\"],\n \"env\": {\n \"PYTHONPATH\": \".\"\n }\n }\n }\n}\n```\n\n### MCP 配置项\n\n在 `config.ini` 中配置 MCP 行为:\n\n```ini\n[mcp]\n; 是否允许 MCP 发送真实消息(高危,默认关闭)\nsend_message_enabled = false\n; 重试死信是否需要确认\nretry_require_confirmation = true\n; 审计日志\naudit_enabled = true\n; 授予 MCP 全部权限(本地使用建议开启)\nadmin = true\n; 传输模式: stdio (本地) | streamable-http (远程)\ntransport = stdio\n; 服务端配置(streamable-http 模式)\nhost = 127.0.0.1\nport = 5001\n; 远程连接 URL(--mcp-connect 使用)\nconnect_url = http://127.0.0.1:5001/mcp\n\n[gateway]\n; Gateway 持久化存储(启用后可查询历史事件)\nstorage_enabled = true\ndata_dir = data/web\n```\n\n### 远程连接\n\nMCP Server 支持 `streamable-http` 远程访问:\n\n```bash\n# 服务端:config.ini 设置 transport = streamable-http,然后启动\npython bot.py --mcp-only\n\n# 客户端:连接远程 MCP Server\npython bot.py --mcp-connect http://192.168.1.100:5001/mcp\n```\n\nClaude Code 远程连接配置(`.mcp.json`):\n\n```json\n{\n \"mcpServers\": {\n \"nekobot\": {\n \"url\": \"http://192.168.1.100:5001/mcp\"\n }\n }\n}\n```\n\n### 可用 Tools\n\n| Tool | 说明 | 风险 |\n|------|------|------|\n| `gateway_get_status` | Gateway 健康状态 | 只读 |\n| `gateway_get_stats` | 事件/投递/去重统计 | 只读 |\n| `gateway_query_trace` | 查询 trace 完整链路 | 只读 |\n| `gateway_query_events` | 按条件查询事件 | 只读 |\n| `gateway_query_deliveries` | 查询投递记录 | 只读 |\n| `gateway_get_queue_stats` | 队列状态 | 只读 |\n| `gateway_list_nodes` | 节点列表 | 只读 |\n| `gateway_get_node` | 节点详情 | 只读 |\n| `gateway_receive_message` | 模拟频道消息 | 操作 |\n| `gateway_send_message` | 发送真实消息 | 高危 |\n| `gateway_submit_internal_task` | 触发内部任务 | 操作 |\n| `gateway_retry_dead_letter` | 重试死信 | 高危 |\n| `gateway_register_node` | 注册节点 | 操作 |\n \n查看详细文档:[docs/MCP](./docs/docs/guide/nbot/mcp/index.md)\n\n## Security Notes\n\n- 不要将 Web 后台直接暴露到公网且不做额外防护。\n- 请为 `WEB_PASSWORD`、API Key、NapCat Token 设置有效且独立的密钥。\n- 不要提交 `.env`、真实凭据或运行时敏感数据到仓库。\n- 机器人运行期间,不要手动修改 `data/character/` 下的持久化文件。\n\n## License\n\n本项目基于 MIT License 发布,详见 [LICENSE](LICENSE)。\n\n"}, "59528695a574ca1b4d5678204362ab5f1e17e23a": {"t": 1785771768.304088, "n": 8518, "h": "ac9f896ba79cccc4", "c": "# NekoBot\n\n![cover](docs/cover.png)\n\n
\n\n![Python](https://img.shields.io/badge/Python-3.10%2B-3776AB?style=flat&logo=python&logoColor=white)\n![License](https://img.shields.io/badge/License-MIT-2ea043?style=flat)\n![Web](https://img.shields.io/badge/Web-Dashboard-ec4899?style=flat)\n![QQ](https://img.shields.io/badge/QQ-NapCat%20%2B%20ncatbot-58a6ff?style=flat)\n![MCP](https://img.shields.io/badge/MCP-AI%20Agent%20Interface-8b5cf6?style=flat)\n\n面向 Web 的多渠道 AI 角色扮演系统,包含Web、QQ、CLI、Telegram、Feishu等频道。\n\nNekoBot Android 客户端:[Nekobot-Android](https://github.com/asukaneko/Nekobot-Android)\n\n
\n\n## Overview\n\nNekoBot 是一个面向角色扮演与长期互动场景的 AI 系统。项目采用统一 AI 内核与频道适配层分离的架构,提供完整的 Web 管理后台、角色运行时、记忆系统、工具调用与工作区能力。\n\n它的核心目标不是单纯提供“聊天接口”,而是提供一套可持续运行、可配置、可观测、可扩展的角色型智能体基础设施。 \n\n## Core Capabilities\n\n- 多渠道接入:支持 QQ、Web、CLI、Telegram、Feishu,共用统一的 `ChatRequest / ChatResponse` 处理链路。\n- 角色运行时:内置实时情感引擎、六维关系模型、动态 PromptStack、自动状态评估与角色记忆。\n- Web 控制台:提供会话管理、角色管理、模型配置、工作流、知识库、记忆、日志与调试界面。\n- 工具与工作区:支持工具调用、文件读写、共享/私有工作区、文件变更预览与任务执行。\n- 模型适配:兼容 OpenAI Chat Completions/Responses , Anthropic , Gemini接口,可接入 Deepseek、GLM、Kimi、Mimo及其他兼容服务。\n- 插件与技能:支持通过插件与技能系统扩展能力,而不破坏核心处理流程。\n- MCP 接口:通过 Model Context Protocol 暴露 Gateway 能力,支持 Claude Code、Cursor、ChatGPT Agent 等 AI 智能体直接调用。\n- 语音能力:内置可插拔 TTS/STT 适配器架构,TTS 支持 OpenAI 兼容、小米 MiMo、豆包(火山引擎)等提供商,STT 支持 OpenAI 兼容、小米 MiMo 及本地 faster-whisper 离线识别。\n\n## Architecture\n\n项目围绕“统一 AI 内核 + 多渠道适配”的原则组织:\n\n```text\nbot.py\n└── nbot/\n ├── commands.py # QQ command handlers, BotClient init\n ├── core/ # Unified AI pipeline\n │ ├── chat_models.py # ChatRequest / ChatResponse\n │ ├── agent_service.py # Main AI entry\n │ ├── ai_pipeline.py # Pre-process -> chat -> post-process\n │ ├── session_store.py # Unified session state\n │ ├── model_adapter.py # Cross-provider model adapter\n │ ├── workspace.py # Per-session file workspace\n │ ├── auto_memory.py # Automatic memory extraction\n │ └── workflow.py # Workflow executor\n ├── character/ # Affective runtime and relationship model\n ├── channels/ # QQ, Web, Telegram, Feishu adapters\n ├── services/ # AI client, chat service, tools, TTS/STT\n ├── plugins/ # Plugin and skill system\n ├── hooks/ # Hook Runtime (event-driven conversation hooks)\n ├── gateway/ # Message bus, routing, delivery, dedupe\n │ └── facade.py # Gateway service facade for MCP\n ├── web/ # Flask blueprints, Socket.IO events, dashboard\n ├── mcp/ # MCP Server (AI Agent interface)\n │ ├── server.py # FastMCP entry point\n │ ├── tools/ # MCP Tools\n │ ├── resources/ # MCP Resources\n │ └── prompts/ # MCP Prompts\n └── cli/ # Terminal UI\n```\n\n请求流如下:\n\n```text\nChannel Adapter\n -> ChatRequest\n -> Agent Service / AI Pipeline\n -> Character Runtime (before_turn / after_turn)\n -> Model Adapter / AI Client\n -> ChatResponse\n -> Channel Adapter\n```\n\n## Runtime Features\n\n### Character Runtime\n\n`nbot/character/` 提供角色运行时,用于把“角色设定”转化为持续一致的对话行为:\n\n- `PromptStack`:按优先级动态拼装提示词,而不是把所有状态污染进历史消息。\n- `StateMachine`:控制情绪惯性与关系平滑变化,避免单轮输入导致剧烈失真。\n- `AutoState`:定期总结近期互动,自动调整情绪强度、精力与六维关系值。\n- `Memory`:支持按角色、按用户隔离的长期与短期记忆。\n- `ReactionPlan`:在每轮回复前生成风格与行为策略,约束角色输出。\n\n### Workspace and Tools\n\n系统支持私有工作区与共享工作区:\n\n- 私有工作区绑定当前会话。\n- 共享工作区可被多个会话访问。\n- 文件创建、修改、删除、传输与差异预览可通过 Web 界面管理。\n- 工具系统支持在对话中触发文件、搜索、执行等能力。\n\n### Web Dashboard\n\nWeb 后台覆盖日常运维与调试需求:\n\n- 会话与聊天管理\n- 角色卡创建、编辑、导入、导出\n- AI 模型配置与切换\n- 记忆、知识库、技能、工具管理\n- 工作流与定时任务\n- Token 统计、日志、调试与运行状态查看\n\n## Requirements\n\n- Python 3.10+\n- NapCatQQ\n- ncatbot 3.8.5\n- 可用的 OpenAI-compatible API 服务\n\n说明:\n\n- `.env` 是首选配置来源。\n- `config.ini` 仍作为 QQ 连接参数的兼容回退。\n- 项目默认使用 Flask + Flask-SocketIO + Eventlet 提供 Web 服务。\n\n## Installation\n\n```bash\ngit clone https://github.com/asukaneko/nekobot.git\ncd nekobot\n```\n\n```bash\n#配置虚拟环境(可选)\npython -m venv venv\nsource venv/bin/activate\n# windows: venv\\Scripts\\activate.bat\npython -m pip install -r requirements.txt\n```\n\n复制环境变量模板并填写必要配置:\n\n```bash\ncp .env.example .env\n```\n\n至少建议先配置:\n\n```env\nWEB_PASSWORD=your_web_password\n```\n\n如需启用 QQ Bot,还需要补充:\n\n```env\nBOT_UIN=your_qq_number\nROOT=your_admin_qq_number\nWS_URI=ws://your_napcat_host:port\nTOKEN=your_napcat_token\n```\n\nAI 服务的最小示例:\n\n```env\nAPI_KEY=your_api_key\nBASE_URL=https://your-openai-compatible-endpoint/v1\nMODEL=your_model_name\n```\n\n但你仍然可以通过web界面来配置你的模型\n\n## Running\n\n```bash\n# QQ + Web\npython bot.py\n\n# Web only\npython bot.py --only-web\n\n# Web only on custom host/port\npython bot.py --only-web --web-host 0.0.0.0 --web-port 5000\n\n# CLI only\npython bot.py --cli\n\n# CLI + Web\npython bot.py --cli-and-web\n\n# QQ only\npython bot.py --no-web\n```\n\n默认情况下:\n\n- 若检测到 QQ 相关配置,启动 `QQ + Web`。\n- 若未检测到 QQ 配置,项目可仅以 Web 模式运行。\n\n## Development Notes\n\n- 目标 Python 版本为 `3.10`。\n- 代码风格使用 Ruff,行宽 100,双引号,空格缩进。\n- `nbot/core/` 不应依赖频道层模块。\n- 所有新频道都应通过 `BaseChannelAdapter` 接入,而不是直接调用模型。\n- 角色逻辑应通过 `before_turn()` / `after_turn()` 挂入统一流水线。\n\n常用检查命令:\n\n```bash\nruff check .\npython -m compileall -q bot.py nbot tools\npython -m pytest -q\n```\n\nCI 主要执行:\n\n1. `ruff check . --select E9,F63,F7,F82`\n2. `python -m compileall -q bot.py nbot tools`\n3. `python -m pip install -r requirements.txt`\n4. `python -m pytest -q`\n\n## Documentation\n\n更详细的使用与开发文档位于 `docs/`:\n\n- 快速开始:[docs/docs/guide/quick-start.md](docs/docs/guide/quick-start.md)\n- 命令说明:[docs/docs/guide/commands.md](docs/docs/guide/commands.md)\n- 频道接入:[docs/docs/guide/channels.md](docs/docs/guide/channels.md)\n- 语音合成 (TTS):[docs/docs/guide/nbot/services/tts.md](docs/docs/guide/nbot/services/tts.md)\n- 语音识别 (STT):[docs/docs/guide/nbot/services/stt.md](docs/docs/guide/nbot/services/stt.md)\n- 贡献指南:[docs/CONTRIBUTING.md](docs/CONTRIBUTING.md)\n- 更新记录:[docs/CHANGELOG.md](docs/CHANGELOG.md)\n\n\n## MCP (Model Context Protocol)\n\nNekoBot 内置 MCP Server,可以将 Gateway 的消息、事件、队列、节点等能力以标准 MCP 协议暴露给 AI 智能体。\n\n### 支持的能力\n\n| 类型 | 说明 |\n|------|------|\n| Tools | 查询状态、查询事件链路、查询队列、模拟消息、触发任务、重试死信、节点管理 |\n| Resources | Gateway 状态、统计数据、能力清单、队列状态、节点列表 |\n| Prompts | 故障诊断、频道测试、节点健康检查 |\n\n### 快速开始\n\n```bash\n# 启动 Bot + MCP\npython bot.py --mcp\n```\n\n### Claude Code 配置\n\n在项目根目录创建 `.mcp.json`:\n\n```json\n{\n \"mcpServers\": {\n \"nekobot\": {\n \"command\": \"python\",\n \"args\": [\"bot.py\", \"--mcp-only\"],\n \"env\": {\n \"PYTHONPATH\": \".\"\n }\n }\n }\n}\n```\n\n> **提示**:`bot.py` 是相对路径,会从当前工作目录查找。如果 Claude Code 不在项目根目录启动,需要通过 `cwd` 指定项目路径,或将 `args` 改为绝对路径。\n\n### Cursor 配置\n\n在项目根目录创建 `.cursor/mcp.json`:\n\n```json\n{\n \"mcpServers\": {\n \"nekobot\": {\n \"command\": \"python\",\n \"args\": [\"bot.py\", \"--mcp-only\"],\n \"env\": {\n \"PYTHONPATH\": \".\"\n }\n }\n }\n}\n```\n\n### MCP 配置项\n\n在 `config.ini` 中配置 MCP 行为:\n\n```ini\n[mcp]\n; 是否允许 MCP 发送真实消息(高危,默认关闭)\nsend_message_enabled = false\n; 重试死信是否需要确认\nretry_require_confirmation = true\n; 审计日志\naudit_enabled = true\n; 授予 MCP 全部权限(本地使用建议开启)\nadmin = true\n; 传输模式: stdio (本地) | streamable-http (远程)\ntransport = stdio\n; 服务端配置(streamable-http 模式)\nhost = 127.0.0.1\nport = 5001\n; 远程连接 URL(--mcp-connect 使用)\nconnect_url = http://127.0.0.1:5001/mcp\n\n[gateway]\n; Gateway 持久化存储(启用后可查询历史事件)\nstorage_enabled = true\ndata_dir = data/web\n```\n\n### 远程连接\n\nMCP Server 支持 `streamable-http` 远程访问:\n\n```bash\n# 服务端:config.ini 设置 transport = streamable-http,然后启动\npython bot.py --mcp-only\n\n# 客户端:连接远程 MCP Server\npython bot.py --mcp-connect http://192.168.1.100:5001/mcp\n```\n\nClaude Code 远程连接配置(`.mcp.json`):\n\n```json\n{\n \"mcpServers\": {\n \"nekobot\": {\n \"url\": \"http://192.168.1.100:5001/mcp\"\n }\n }\n}\n```\n\n### 可用 Tools\n\n| Tool | 说明 | 风险 |\n|------|------|------|\n| `gateway_get_status` | Gateway 健康状态 | 只读 |\n| `gateway_get_stats` | 事件/投递/去重统计 | 只读 |\n| `gateway_query_trace` | 查询 trace 完整链路 | 只读 |\n| `gateway_query_events` | 按条件查询事件 | 只读 |\n| `gateway_query_deliveries` | 查询投递记录 | 只读 |\n| `gateway_get_queue_stats` | 队列状态 | 只读 |\n| `gateway_list_nodes` | 节点列表 | 只读 |\n| `gateway_get_node` | 节点详情 | 只读 |\n| `gateway_receive_message` | 模拟频道消息 | 操作 |\n| `gateway_send_message` | 发送真实消息 | 高危 |\n| `gateway_submit_internal_task` | 触发内部任务 | 操作 |\n| `gateway_retry_dead_letter` | 重试死信 | 高危 |\n| `gateway_register_node` | 注册节点 | 操作 |\n \n查看详细文档:[docs/MCP](./docs/docs/guide/nbot/mcp/index.md)\n\n## Security Notes\n\n- 不要将 Web 后台直接暴露到公网且不做额外防护。\n- 请为 `WEB_PASSWORD`、API Key、NapCat Token 设置有效且独立的密钥。\n- 不要提交 `.env`、真实凭据或运行时敏感数据到仓库。\n- 机器人运行期间,不要手动修改 `data/character/` 下的持久化文件。\n\n## License\n\n本项目基于 MIT License 发布,详见 [LICENSE](LICENSE)。\n\n"}, "d14ab63122b75c417a9936d42901996cda81fc8b": {"t": 1785771769.6809685, "n": 8431, "h": "090590ebeb882737", "c": "# NekoBot\n\n![cover](docs/cover.png)\n\n
\n\n![Python](https://img.shields.io/badge/Python-3.10%2B-3776AB?style=flat&logo=python&logoColor=white)\n![License](https://img.shields.io/badge/License-MIT-2ea043?style=flat)\n![Web](https://img.shields.io/badge/Web-Dashboard-ec4899?style=flat)\n![QQ](https://img.shields.io/badge/QQ-NapCat%20%2B%20ncatbot-58a6ff?style=flat)\n![MCP](https://img.shields.io/badge/MCP-AI%20Agent%20Interface-8b5cf6?style=flat)\n\n面向 Web 的多渠道 AI 角色扮演系统,包含Web、QQ、CLI、Telegram、Feishu等频道。\n\n
\n\n## Overview\n\nNekoBot 是一个面向角色扮演与长期互动场景的 AI 系统。项目采用统一 AI 内核与频道适配层分离的架构,提供完整的 Web 管理后台、角色运行时、记忆系统、工具调用与工作区能力。\n\n它的核心目标不是单纯提供“聊天接口”,而是提供一套可持续运行、可配置、可观测、可扩展的角色型智能体基础设施。\n\n## Core Capabilities\n\n- 多渠道接入:支持 QQ、Web、CLI、Telegram、Feishu,共用统一的 `ChatRequest / ChatResponse` 处理链路。\n- 角色运行时:内置实时情感引擎、六维关系模型、动态 PromptStack、自动状态评估与角色记忆。\n- Web 控制台:提供会话管理、角色管理、模型配置、工作流、知识库、记忆、日志与调试界面。\n- 工具与工作区:支持工具调用、文件读写、共享/私有工作区、文件变更预览与任务执行。\n- 模型适配:兼容 OpenAI Chat Completions/Responses , Anthropic , Gemini接口,可接入 Deepseek、GLM、Kimi、Mimo及其他兼容服务。\n- 插件与技能:支持通过插件与技能系统扩展能力,而不破坏核心处理流程。\n- MCP 接口:通过 Model Context Protocol 暴露 Gateway 能力,支持 Claude Code、Cursor、ChatGPT Agent 等 AI 智能体直接调用。\n- 语音能力:内置可插拔 TTS/STT 适配器架构,TTS 支持 OpenAI 兼容、小米 MiMo、豆包(火山引擎)等提供商,STT 支持 OpenAI 兼容、小米 MiMo 及本地 faster-whisper 离线识别。\n\n## Architecture\n\n项目围绕“统一 AI 内核 + 多渠道适配”的原则组织:\n\n```text\nbot.py\n└── nbot/\n ├── commands.py # QQ command handlers, BotClient init\n ├── core/ # Unified AI pipeline\n │ ├── chat_models.py # ChatRequest / ChatResponse\n │ ├── agent_service.py # Main AI entry\n │ ├── ai_pipeline.py # Pre-process -> chat -> post-process\n │ ├── session_store.py # Unified session state\n │ ├── model_adapter.py # Cross-provider model adapter\n │ ├── workspace.py # Per-session file workspace\n │ ├── auto_memory.py # Automatic memory extraction\n │ └── workflow.py # Workflow executor\n ├── character/ # Affective runtime and relationship model\n ├── channels/ # QQ, Web, Telegram, Feishu adapters\n ├── services/ # AI client, chat service, tools, TTS/STT\n ├── plugins/ # Plugin and skill system\n ├── hooks/ # Hook Runtime (event-driven conversation hooks)\n ├── gateway/ # Message bus, routing, delivery, dedupe\n │ └── facade.py # Gateway service facade for MCP\n ├── web/ # Flask blueprints, Socket.IO events, dashboard\n ├── mcp/ # MCP Server (AI Agent interface)\n │ ├── server.py # FastMCP entry point\n │ ├── tools/ # MCP Tools\n │ ├── resources/ # MCP Resources\n │ └── prompts/ # MCP Prompts\n └── cli/ # Terminal UI\n```\n\n请求流如下:\n\n```text\nChannel Adapter\n -> ChatRequest\n -> Agent Service / AI Pipeline\n -> Character Runtime (before_turn / after_turn)\n -> Model Adapter / AI Client\n -> ChatResponse\n -> Channel Adapter\n```\n\n## Runtime Features\n\n### Character Runtime\n\n`nbot/character/` 提供角色运行时,用于把“角色设定”转化为持续一致的对话行为:\n\n- `PromptStack`:按优先级动态拼装提示词,而不是把所有状态污染进历史消息。\n- `StateMachine`:控制情绪惯性与关系平滑变化,避免单轮输入导致剧烈失真。\n- `AutoState`:定期总结近期互动,自动调整情绪强度、精力与六维关系值。\n- `Memory`:支持按角色、按用户隔离的长期与短期记忆。\n- `ReactionPlan`:在每轮回复前生成风格与行为策略,约束角色输出。\n\n### Workspace and Tools\n\n系统支持私有工作区与共享工作区:\n\n- 私有工作区绑定当前会话。\n- 共享工作区可被多个会话访问。\n- 文件创建、修改、删除、传输与差异预览可通过 Web 界面管理。\n- 工具系统支持在对话中触发文件、搜索、执行等能力。\n\n### Web Dashboard\n\nWeb 后台覆盖日常运维与调试需求:\n\n- 会话与聊天管理\n- 角色卡创建、编辑、导入、导出\n- AI 模型配置与切换\n- 记忆、知识库、技能、工具管理\n- 工作流与定时任务\n- Token 统计、日志、调试与运行状态查看\n\n## Requirements\n\n- Python 3.10+\n- NapCatQQ\n- ncatbot 3.8.5\n- 可用的 OpenAI-compatible API 服务\n\n说明:\n\n- `.env` 是首选配置来源。\n- `config.ini` 仍作为 QQ 连接参数的兼容回退。\n- 项目默认使用 Flask + Flask-SocketIO + Eventlet 提供 Web 服务。\n\n## Installation\n\n```bash\ngit clone https://github.com/asukaneko/nekobot.git\ncd nekobot\n```\n\n```bash\n#配置虚拟环境(可选)\npython -m venv venv\nsource venv/bin/activate\n# windows: venv\\Scripts\\activate.bat\npython -m pip install -r requirements.txt\n```\n\n复制环境变量模板并填写必要配置:\n\n```bash\ncp .env.example .env\n```\n\n至少建议先配置:\n\n```env\nWEB_PASSWORD=your_web_password\n```\n\n如需启用 QQ Bot,还需要补充:\n\n```env\nBOT_UIN=your_qq_number\nROOT=your_admin_qq_number\nWS_URI=ws://your_napcat_host:port\nTOKEN=your_napcat_token\n```\n\nAI 服务的最小示例:\n\n```env\nAPI_KEY=your_api_key\nBASE_URL=https://your-openai-compatible-endpoint/v1\nMODEL=your_model_name\n```\n\n但你仍然可以通过web界面来配置你的模型\n\n## Running\n\n```bash\n# QQ + Web\npython bot.py\n\n# Web only\npython bot.py --only-web\n\n# Web only on custom host/port\npython bot.py --only-web --web-host 0.0.0.0 --web-port 5000\n\n# CLI only\npython bot.py --cli\n\n# CLI + Web\npython bot.py --cli-and-web\n\n# QQ only\npython bot.py --no-web\n```\n\n默认情况下:\n\n- 若检测到 QQ 相关配置,启动 `QQ + Web`。\n- 若未检测到 QQ 配置,项目可仅以 Web 模式运行。\n\n## Development Notes\n\n- 目标 Python 版本为 `3.10`。\n- 代码风格使用 Ruff,行宽 100,双引号,空格缩进。\n- `nbot/core/` 不应依赖频道层模块。\n- 所有新频道都应通过 `BaseChannelAdapter` 接入,而不是直接调用模型。\n- 角色逻辑应通过 `before_turn()` / `after_turn()` 挂入统一流水线。\n\n常用检查命令:\n\n```bash\nruff check .\npython -m compileall -q bot.py nbot tools\npython -m pytest -q\n```\n\nCI 主要执行:\n\n1. `ruff check . --select E9,F63,F7,F82`\n2. `python -m compileall -q bot.py nbot tools`\n3. `python -m pip install -r requirements.txt`\n4. `python -m pytest -q`\n\n## Documentation\n\n更详细的使用与开发文档位于 `docs/`:\n\n- 快速开始:[docs/docs/guide/quick-start.md](docs/docs/guide/quick-start.md)\n- 命令说明:[docs/docs/guide/commands.md](docs/docs/guide/commands.md)\n- 频道接入:[docs/docs/guide/channels.md](docs/docs/guide/channels.md)\n- 语音合成 (TTS):[docs/docs/guide/nbot/services/tts.md](docs/docs/guide/nbot/services/tts.md)\n- 语音识别 (STT):[docs/docs/guide/nbot/services/stt.md](docs/docs/guide/nbot/services/stt.md)\n- 贡献指南:[docs/CONTRIBUTING.md](docs/CONTRIBUTING.md)\n- 更新记录:[docs/CHANGELOG.md](docs/CHANGELOG.md)\n\n\n## MCP (Model Context Protocol)\n\nNekoBot 内置 MCP Server,可以将 Gateway 的消息、事件、队列、节点等能力以标准 MCP 协议暴露给 AI 智能体。\n\n### 支持的能力\n\n| 类型 | 说明 |\n|------|------|\n| Tools | 查询状态、查询事件链路、查询队列、模拟消息、触发任务、重试死信、节点管理 |\n| Resources | Gateway 状态、统计数据、能力清单、队列状态、节点列表 |\n| Prompts | 故障诊断、频道测试、节点健康检查 |\n\n### 快速开始\n\n```bash\n# 启动 Bot + MCP\npython bot.py --mcp\n```\n\n### Claude Code 配置\n\n在项目根目录创建 `.mcp.json`:\n\n```json\n{\n \"mcpServers\": {\n \"nekobot\": {\n \"command\": \"python\",\n \"args\": [\"bot.py\", \"--mcp-only\"],\n \"env\": {\n \"PYTHONPATH\": \".\"\n }\n }\n }\n}\n```\n\n> **提示**:`bot.py` 是相对路径,会从当前工作目录查找。如果 Claude Code 不在项目根目录启动,需要通过 `cwd` 指定项目路径,或将 `args` 改为绝对路径。\n\n### Cursor 配置\n\n在项目根目录创建 `.cursor/mcp.json`:\n\n```json\n{\n \"mcpServers\": {\n \"nekobot\": {\n \"command\": \"python\",\n \"args\": [\"bot.py\", \"--mcp-only\"],\n \"env\": {\n \"PYTHONPATH\": \".\"\n }\n }\n }\n}\n```\n\n### MCP 配置项\n\n在 `config.ini` 中配置 MCP 行为:\n\n```ini\n[mcp]\n; 是否允许 MCP 发送真实消息(高危,默认关闭)\nsend_message_enabled = false\n; 重试死信是否需要确认\nretry_require_confirmation = true\n; 审计日志\naudit_enabled = true\n; 授予 MCP 全部权限(本地使用建议开启)\nadmin = true\n; 传输模式: stdio (本地) | streamable-http (远程)\ntransport = stdio\n; 服务端配置(streamable-http 模式)\nhost = 127.0.0.1\nport = 5001\n; 远程连接 URL(--mcp-connect 使用)\nconnect_url = http://127.0.0.1:5001/mcp\n\n[gateway]\n; Gateway 持久化存储(启用后可查询历史事件)\nstorage_enabled = true\ndata_dir = data/web\n```\n\n### 远程连接\n\nMCP Server 支持 `streamable-http` 远程访问:\n\n```bash\n# 服务端:config.ini 设置 transport = streamable-http,然后启动\npython bot.py --mcp-only\n\n# 客户端:连接远程 MCP Server\npython bot.py --mcp-connect http://192.168.1.100:5001/mcp\n```\n\nClaude Code 远程连接配置(`.mcp.json`):\n\n```json\n{\n \"mcpServers\": {\n \"nekobot\": {\n \"url\": \"http://192.168.1.100:5001/mcp\"\n }\n }\n}\n```\n\n### 可用 Tools\n\n| Tool | 说明 | 风险 |\n|------|------|------|\n| `gateway_get_status` | Gateway 健康状态 | 只读 |\n| `gateway_get_stats` | 事件/投递/去重统计 | 只读 |\n| `gateway_query_trace` | 查询 trace 完整链路 | 只读 |\n| `gateway_query_events` | 按条件查询事件 | 只读 |\n| `gateway_query_deliveries` | 查询投递记录 | 只读 |\n| `gateway_get_queue_stats` | 队列状态 | 只读 |\n| `gateway_list_nodes` | 节点列表 | 只读 |\n| `gateway_get_node` | 节点详情 | 只读 |\n| `gateway_receive_message` | 模拟频道消息 | 操作 |\n| `gateway_send_message` | 发送真实消息 | 高危 |\n| `gateway_submit_internal_task` | 触发内部任务 | 操作 |\n| `gateway_retry_dead_letter` | 重试死信 | 高危 |\n| `gateway_register_node` | 注册节点 | 操作 |\n \n查看详细文档:[docs/MCP](./docs/docs/guide/nbot/mcp/index.md)\n\n## Security Notes\n\n- 不要将 Web 后台直接暴露到公网且不做额外防护。\n- 请为 `WEB_PASSWORD`、API Key、NapCat Token 设置有效且独立的密钥。\n- 不要提交 `.env`、真实凭据或运行时敏感数据到仓库。\n- 机器人运行期间,不要手动修改 `data/character/` 下的持久化文件。\n\n## License\n\n本项目基于 MIT License 发布,详见 [LICENSE](LICENSE)。\n\n"}, "4fdac1604585c17e7b9ad5e0dcf9006b20d50710": {"t": 1785771771.2723007, "n": 8350, "h": "dd5033eeaf33ed7c", "c": "# NekoBot\n\n![cover](docs/cover.png)\n\n
\n\n![Python](https://img.shields.io/badge/Python-3.10%2B-3776AB?style=flat&logo=python&logoColor=white)\n![License](https://img.shields.io/badge/License-MIT-2ea043?style=flat)\n![Web](https://img.shields.io/badge/Web-Dashboard-ec4899?style=flat)\n![QQ](https://img.shields.io/badge/QQ-NapCat%20%2B%20ncatbot-58a6ff?style=flat)\n![MCP](https://img.shields.io/badge/MCP-AI%20Agent%20Interface-8b5cf6?style=flat)\n\n面向 Web 的多渠道 AI 角色扮演系统,包含Web、QQ、CLI、Telegram、Feishu等频道。\n\n
\n\n## Overview\n\nNekoBot 是一个面向角色扮演与长期互动场景的 AI 系统。项目采用统一 AI 内核与频道适配层分离的架构,提供完整的 Web 管理后台、角色运行时、记忆系统、工具调用与工作区能力。\n\n它的核心目标不是单纯提供“聊天接口”,而是提供一套可持续运行、可配置、可观测、可扩展的角色型智能体基础设施。\n\n## Core Capabilities\n\n- 多渠道接入:支持 QQ、Web、CLI、Telegram、Feishu,共用统一的 `ChatRequest / ChatResponse` 处理链路。\n- 角色运行时:内置实时情感引擎、六维关系模型、动态 PromptStack、自动状态评估与角色记忆。\n- Web 控制台:提供会话管理、角色管理、模型配置、工作流、知识库、记忆、日志与调试界面。\n- 工具与工作区:支持工具调用、文件读写、共享/私有工作区、文件变更预览与任务执行。\n- 模型适配:兼容 OpenAI Chat Completions/Responses , Anthropic , Gemini接口,可接入 Deepseek、GLM、Kimi、Mimo及其他兼容服务。\n- 插件与技能:支持通过插件与技能系统扩展能力,而不破坏核心处理流程。\n- MCP 接口:通过 Model Context Protocol 暴露 Gateway 能力,支持 Claude Code、Cursor、ChatGPT Agent 等 AI 智能体直接调用。\n- 语音能力:内置可插拔 TTS/STT 适配器架构,TTS 支持 OpenAI 兼容、小米 MiMo、豆包(火山引擎)等提供商,STT 支持 OpenAI 兼容、小米 MiMo 及本地 faster-whisper 离线识别。\n\n## Architecture\n\n项目围绕“统一 AI 内核 + 多渠道适配”的原则组织:\n\n```text\nbot.py\n└── nbot/\n ├── commands.py # QQ command handlers, BotClient init\n ├── core/ # Unified AI pipeline\n │ ├── chat_models.py # ChatRequest / ChatResponse\n │ ├── agent_service.py # Main AI entry\n │ ├── ai_pipeline.py # Pre-process -> chat -> post-process\n │ ├── session_store.py # Unified session state\n │ ├── model_adapter.py # Cross-provider model adapter\n │ ├── workspace.py # Per-session file workspace\n │ ├── auto_memory.py # Automatic memory extraction\n │ └── workflow.py # Workflow executor\n ├── character/ # Affective runtime and relationship model\n ├── channels/ # QQ, Web, Telegram, Feishu adapters\n ├── services/ # AI client, chat service, tools, TTS/STT\n ├── plugins/ # Plugin and skill system\n ├── gateway/ # Message bus, routing, delivery, dedupe\n │ └── facade.py # Gateway service facade for MCP\n ├── web/ # Flask blueprints, Socket.IO events, dashboard\n ├── mcp/ # MCP Server (AI Agent interface)\n │ ├── server.py # FastMCP entry point\n │ ├── tools/ # MCP Tools\n │ ├── resources/ # MCP Resources\n │ └── prompts/ # MCP Prompts\n └── cli/ # Terminal UI\n```\n\n请求流如下:\n\n```text\nChannel Adapter\n -> ChatRequest\n -> Agent Service / AI Pipeline\n -> Character Runtime (before_turn / after_turn)\n -> Model Adapter / AI Client\n -> ChatResponse\n -> Channel Adapter\n```\n\n## Runtime Features\n\n### Character Runtime\n\n`nbot/character/` 提供角色运行时,用于把“角色设定”转化为持续一致的对话行为:\n\n- `PromptStack`:按优先级动态拼装提示词,而不是把所有状态污染进历史消息。\n- `StateMachine`:控制情绪惯性与关系平滑变化,避免单轮输入导致剧烈失真。\n- `AutoState`:定期总结近期互动,自动调整情绪强度、精力与六维关系值。\n- `Memory`:支持按角色、按用户隔离的长期与短期记忆。\n- `ReactionPlan`:在每轮回复前生成风格与行为策略,约束角色输出。\n\n### Workspace and Tools\n\n系统支持私有工作区与共享工作区:\n\n- 私有工作区绑定当前会话。\n- 共享工作区可被多个会话访问。\n- 文件创建、修改、删除、传输与差异预览可通过 Web 界面管理。\n- 工具系统支持在对话中触发文件、搜索、执行等能力。\n\n### Web Dashboard\n\nWeb 后台覆盖日常运维与调试需求:\n\n- 会话与聊天管理\n- 角色卡创建、编辑、导入、导出\n- AI 模型配置与切换\n- 记忆、知识库、技能、工具管理\n- 工作流与定时任务\n- Token 统计、日志、调试与运行状态查看\n\n## Requirements\n\n- Python 3.10+\n- NapCatQQ\n- ncatbot 3.8.5\n- 可用的 OpenAI-compatible API 服务\n\n说明:\n\n- `.env` 是首选配置来源。\n- `config.ini` 仍作为 QQ 连接参数的兼容回退。\n- 项目默认使用 Flask + Flask-SocketIO + Eventlet 提供 Web 服务。\n\n## Installation\n\n```bash\ngit clone https://github.com/asukaneko/nekobot.git\ncd nekobot\n```\n\n```bash\n#配置虚拟环境(可选)\npython -m venv venv\nsource venv/bin/activate\n# windows: venv\\Scripts\\activate.bat\npython -m pip install -r requirements.txt\n```\n\n复制环境变量模板并填写必要配置:\n\n```bash\ncp .env.example .env\n```\n\n至少建议先配置:\n\n```env\nWEB_PASSWORD=your_web_password\n```\n\n如需启用 QQ Bot,还需要补充:\n\n```env\nBOT_UIN=your_qq_number\nROOT=your_admin_qq_number\nWS_URI=ws://your_napcat_host:port\nTOKEN=your_napcat_token\n```\n\nAI 服务的最小示例:\n\n```env\nAPI_KEY=your_api_key\nBASE_URL=https://your-openai-compatible-endpoint/v1\nMODEL=your_model_name\n```\n\n但你仍然可以通过web界面来配置你的模型\n\n## Running\n\n```bash\n# QQ + Web\npython bot.py\n\n# Web only\npython bot.py --only-web\n\n# Web only on custom host/port\npython bot.py --only-web --web-host 0.0.0.0 --web-port 5000\n\n# CLI only\npython bot.py --cli\n\n# CLI + Web\npython bot.py --cli-and-web\n\n# QQ only\npython bot.py --no-web\n```\n\n默认情况下:\n\n- 若检测到 QQ 相关配置,启动 `QQ + Web`。\n- 若未检测到 QQ 配置,项目可仅以 Web 模式运行。\n\n## Development Notes\n\n- 目标 Python 版本为 `3.10`。\n- 代码风格使用 Ruff,行宽 100,双引号,空格缩进。\n- `nbot/core/` 不应依赖频道层模块。\n- 所有新频道都应通过 `BaseChannelAdapter` 接入,而不是直接调用模型。\n- 角色逻辑应通过 `before_turn()` / `after_turn()` 挂入统一流水线。\n\n常用检查命令:\n\n```bash\nruff check .\npython -m compileall -q bot.py nbot tools\npython -m pytest -q\n```\n\nCI 主要执行:\n\n1. `ruff check . --select E9,F63,F7,F82`\n2. `python -m compileall -q bot.py nbot tools`\n3. `python -m pip install -r requirements.txt`\n4. `python -m pytest -q`\n\n## Documentation\n\n更详细的使用与开发文档位于 `docs/`:\n\n- 快速开始:[docs/docs/guide/quick-start.md](docs/docs/guide/quick-start.md)\n- 命令说明:[docs/docs/guide/commands.md](docs/docs/guide/commands.md)\n- 频道接入:[docs/docs/guide/channels.md](docs/docs/guide/channels.md)\n- 语音合成 (TTS):[docs/docs/guide/nbot/services/tts.md](docs/docs/guide/nbot/services/tts.md)\n- 语音识别 (STT):[docs/docs/guide/nbot/services/stt.md](docs/docs/guide/nbot/services/stt.md)\n- 贡献指南:[docs/CONTRIBUTING.md](docs/CONTRIBUTING.md)\n- 更新记录:[docs/CHANGELOG.md](docs/CHANGELOG.md)\n\n\n## MCP (Model Context Protocol)\n\nNekoBot 内置 MCP Server,可以将 Gateway 的消息、事件、队列、节点等能力以标准 MCP 协议暴露给 AI 智能体。\n\n### 支持的能力\n\n| 类型 | 说明 |\n|------|------|\n| Tools | 查询状态、查询事件链路、查询队列、模拟消息、触发任务、重试死信、节点管理 |\n| Resources | Gateway 状态、统计数据、能力清单、队列状态、节点列表 |\n| Prompts | 故障诊断、频道测试、节点健康检查 |\n\n### 快速开始\n\n```bash\n# 启动 Bot + MCP\npython bot.py --mcp\n```\n\n### Claude Code 配置\n\n在项目根目录创建 `.mcp.json`:\n\n```json\n{\n \"mcpServers\": {\n \"nekobot\": {\n \"command\": \"python\",\n \"args\": [\"bot.py\", \"--mcp-only\"],\n \"env\": {\n \"PYTHONPATH\": \".\"\n }\n }\n }\n}\n```\n\n> **提示**:`bot.py` 是相对路径,会从当前工作目录查找。如果 Claude Code 不在项目根目录启动,需要通过 `cwd` 指定项目路径,或将 `args` 改为绝对路径。\n\n### Cursor 配置\n\n在项目根目录创建 `.cursor/mcp.json`:\n\n```json\n{\n \"mcpServers\": {\n \"nekobot\": {\n \"command\": \"python\",\n \"args\": [\"bot.py\", \"--mcp-only\"],\n \"env\": {\n \"PYTHONPATH\": \".\"\n }\n }\n }\n}\n```\n\n### MCP 配置项\n\n在 `config.ini` 中配置 MCP 行为:\n\n```ini\n[mcp]\n; 是否允许 MCP 发送真实消息(高危,默认关闭)\nsend_message_enabled = false\n; 重试死信是否需要确认\nretry_require_confirmation = true\n; 审计日志\naudit_enabled = true\n; 授予 MCP 全部权限(本地使用建议开启)\nadmin = true\n; 传输模式: stdio (本地) | streamable-http (远程)\ntransport = stdio\n; 服务端配置(streamable-http 模式)\nhost = 127.0.0.1\nport = 5001\n; 远程连接 URL(--mcp-connect 使用)\nconnect_url = http://127.0.0.1:5001/mcp\n\n[gateway]\n; Gateway 持久化存储(启用后可查询历史事件)\nstorage_enabled = true\ndata_dir = data/web\n```\n\n### 远程连接\n\nMCP Server 支持 `streamable-http` 远程访问:\n\n```bash\n# 服务端:config.ini 设置 transport = streamable-http,然后启动\npython bot.py --mcp-only\n\n# 客户端:连接远程 MCP Server\npython bot.py --mcp-connect http://192.168.1.100:5001/mcp\n```\n\nClaude Code 远程连接配置(`.mcp.json`):\n\n```json\n{\n \"mcpServers\": {\n \"nekobot\": {\n \"url\": \"http://192.168.1.100:5001/mcp\"\n }\n }\n}\n```\n\n### 可用 Tools\n\n| Tool | 说明 | 风险 |\n|------|------|------|\n| `gateway_get_status` | Gateway 健康状态 | 只读 |\n| `gateway_get_stats` | 事件/投递/去重统计 | 只读 |\n| `gateway_query_trace` | 查询 trace 完整链路 | 只读 |\n| `gateway_query_events` | 按条件查询事件 | 只读 |\n| `gateway_query_deliveries` | 查询投递记录 | 只读 |\n| `gateway_get_queue_stats` | 队列状态 | 只读 |\n| `gateway_list_nodes` | 节点列表 | 只读 |\n| `gateway_get_node` | 节点详情 | 只读 |\n| `gateway_receive_message` | 模拟频道消息 | 操作 |\n| `gateway_send_message` | 发送真实消息 | 高危 |\n| `gateway_submit_internal_task` | 触发内部任务 | 操作 |\n| `gateway_retry_dead_letter` | 重试死信 | 高危 |\n| `gateway_register_node` | 注册节点 | 操作 |\n \n查看详细文档:[docs/MCP](./docs/docs/guide/nbot/mcp/index.md)\n\n## Security Notes\n\n- 不要将 Web 后台直接暴露到公网且不做额外防护。\n- 请为 `WEB_PASSWORD`、API Key、NapCat Token 设置有效且独立的密钥。\n- 不要提交 `.env`、真实凭据或运行时敏感数据到仓库。\n- 机器人运行期间,不要手动修改 `data/character/` 下的持久化文件。\n\n## License\n\n本项目基于 MIT License 发布,详见 [LICENSE](LICENSE)。\n\n"}, "9abf33460a49f35ea9834b3ded7bb7b0addb4f33": {"t": 1785771772.617998, "n": 8055, "h": "ef43ab1f095ddf98", "c": "# NekoBot\n\n![cover](docs/cover.png)\n\n
\n\n![Python](https://img.shields.io/badge/Python-3.10%2B-3776AB?style=flat&logo=python&logoColor=white)\n![License](https://img.shields.io/badge/License-MIT-2ea043?style=flat)\n![Web](https://img.shields.io/badge/Web-Dashboard-ec4899?style=flat)\n![QQ](https://img.shields.io/badge/QQ-NapCat%20%2B%20ncatbot-58a6ff?style=flat)\n![MCP](https://img.shields.io/badge/MCP-AI%20Agent%20Interface-8b5cf6?style=flat)\n\n面向 Web 的多渠道 AI 角色扮演系统,包含Web、QQ、CLI、Telegram、Feishu等频道。\n\n
\n\n## Overview\n\nNekoBot 是一个面向角色扮演与长期互动场景的 AI 系统。项目采用统一 AI 内核与频道适配层分离的架构,提供完整的 Web 管理后台、角色运行时、记忆系统、工具调用与工作区能力。\n\n它的核心目标不是单纯提供“聊天接口”,而是提供一套可持续运行、可配置、可观测、可扩展的角色型智能体基础设施。\n\n## Core Capabilities\n\n- 多渠道接入:支持 QQ、Web、CLI、Telegram、Feishu,共用统一的 `ChatRequest / ChatResponse` 处理链路。\n- 角色运行时:内置实时情感引擎、六维关系模型、动态 PromptStack、自动状态评估与角色记忆。\n- Web 控制台:提供会话管理、角色管理、模型配置、工作流、知识库、记忆、日志与调试界面。\n- 工具与工作区:支持工具调用、文件读写、共享/私有工作区、文件变更预览与任务执行。\n- 模型适配:兼容 OpenAI Chat Completions/Responses , Anthropic , Gemini接口,可接入 Deepseek、GLM、Kimi、Mimo及其他兼容服务。\n- 插件与技能:支持通过插件与技能系统扩展能力,而不破坏核心处理流程。\n- MCP 接口:通过 Model Context Protocol 暴露 Gateway 能力,支持 Claude Code、Cursor、ChatGPT Agent 等 AI 智能体直接调用。\n\n## Architecture\n\n项目围绕“统一 AI 内核 + 多渠道适配”的原则组织:\n\n```text\nbot.py\n└── nbot/\n ├── commands.py # QQ command handlers, BotClient init\n ├── core/ # Unified AI pipeline\n │ ├── chat_models.py # ChatRequest / ChatResponse\n │ ├── agent_service.py # Main AI entry\n │ ├── ai_pipeline.py # Pre-process -> chat -> post-process\n │ ├── session_store.py # Unified session state\n │ ├── model_adapter.py # Cross-provider model adapter\n │ ├── workspace.py # Per-session file workspace\n │ ├── auto_memory.py # Automatic memory extraction\n │ └── workflow.py # Workflow executor\n ├── character/ # Affective runtime and relationship model\n ├── channels/ # QQ, Web, Telegram, Feishu adapters\n ├── services/ # AI client, chat service, tools, TTS/STT\n ├── plugins/ # Plugin and skill system\n ├── gateway/ # Message bus, routing, delivery, dedupe\n │ └── facade.py # Gateway service facade for MCP\n ├── web/ # Flask blueprints, Socket.IO events, dashboard\n ├── mcp/ # MCP Server (AI Agent interface)\n │ ├── server.py # FastMCP entry point\n │ ├── tools/ # MCP Tools\n │ ├── resources/ # MCP Resources\n │ └── prompts/ # MCP Prompts\n └── cli/ # Terminal UI\n```\n\n请求流如下:\n\n```text\nChannel Adapter\n -> ChatRequest\n -> Agent Service / AI Pipeline\n -> Character Runtime (before_turn / after_turn)\n -> Model Adapter / AI Client\n -> ChatResponse\n -> Channel Adapter\n```\n\n## Runtime Features\n\n### Character Runtime\n\n`nbot/character/` 提供角色运行时,用于把“角色设定”转化为持续一致的对话行为:\n\n- `PromptStack`:按优先级动态拼装提示词,而不是把所有状态污染进历史消息。\n- `StateMachine`:控制情绪惯性与关系平滑变化,避免单轮输入导致剧烈失真。\n- `AutoState`:定期总结近期互动,自动调整情绪强度、精力与六维关系值。\n- `Memory`:支持按角色、按用户隔离的长期与短期记忆。\n- `ReactionPlan`:在每轮回复前生成风格与行为策略,约束角色输出。\n\n### Workspace and Tools\n\n系统支持私有工作区与共享工作区:\n\n- 私有工作区绑定当前会话。\n- 共享工作区可被多个会话访问。\n- 文件创建、修改、删除、传输与差异预览可通过 Web 界面管理。\n- 工具系统支持在对话中触发文件、搜索、执行等能力。\n\n### Web Dashboard\n\nWeb 后台覆盖日常运维与调试需求:\n\n- 会话与聊天管理\n- 角色卡创建、编辑、导入、导出\n- AI 模型配置与切换\n- 记忆、知识库、技能、工具管理\n- 工作流与定时任务\n- Token 统计、日志、调试与运行状态查看\n\n## Requirements\n\n- Python 3.10+\n- NapCatQQ\n- ncatbot 3.8.5\n- 可用的 OpenAI-compatible API 服务\n\n说明:\n\n- `.env` 是首选配置来源。\n- `config.ini` 仍作为 QQ 连接参数的兼容回退。\n- 项目默认使用 Flask + Flask-SocketIO + Eventlet 提供 Web 服务。\n\n## Installation\n\n```bash\ngit clone https://github.com/asukaneko/nekobot.git\ncd nekobot\n```\n\n```bash\n#配置虚拟环境(可选)\npython -m venv venv\nsource venv/bin/activate\n# windows: venv\\Scripts\\activate.bat\npython -m pip install -r requirements.txt\n```\n\n复制环境变量模板并填写必要配置:\n\n```bash\ncp .env.example .env\n```\n\n至少建议先配置:\n\n```env\nWEB_PASSWORD=your_web_password\n```\n\n如需启用 QQ Bot,还需要补充:\n\n```env\nBOT_UIN=your_qq_number\nROOT=your_admin_qq_number\nWS_URI=ws://your_napcat_host:port\nTOKEN=your_napcat_token\n```\n\nAI 服务的最小示例:\n\n```env\nAPI_KEY=your_api_key\nBASE_URL=https://your-openai-compatible-endpoint/v1\nMODEL=your_model_name\n```\n\n但你仍然可以通过web界面来配置你的模型\n\n## Running\n\n```bash\n# QQ + Web\npython bot.py\n\n# Web only\npython bot.py --only-web\n\n# Web only on custom host/port\npython bot.py --only-web --web-host 0.0.0.0 --web-port 5000\n\n# CLI only\npython bot.py --cli\n\n# CLI + Web\npython bot.py --cli-and-web\n\n# QQ only\npython bot.py --no-web\n```\n\n默认情况下:\n\n- 若检测到 QQ 相关配置,启动 `QQ + Web`。\n- 若未检测到 QQ 配置,项目可仅以 Web 模式运行。\n\n## Development Notes\n\n- 目标 Python 版本为 `3.10`。\n- 代码风格使用 Ruff,行宽 100,双引号,空格缩进。\n- `nbot/core/` 不应依赖频道层模块。\n- 所有新频道都应通过 `BaseChannelAdapter` 接入,而不是直接调用模型。\n- 角色逻辑应通过 `before_turn()` / `after_turn()` 挂入统一流水线。\n\n常用检查命令:\n\n```bash\nruff check .\npython -m compileall -q bot.py nbot tools\npython -m pytest -q\n```\n\nCI 主要执行:\n\n1. `ruff check . --select E9,F63,F7,F82`\n2. `python -m compileall -q bot.py nbot tools`\n3. `python -m pip install -r requirements.txt`\n4. `python -m pytest -q`\n\n## Documentation\n\n更详细的使用与开发文档位于 `docs/`:\n\n- 快速开始:[docs/docs/guide/quick-start.md](docs/docs/guide/quick-start.md)\n- 命令说明:[docs/docs/guide/commands.md](docs/docs/guide/commands.md)\n- 频道接入:[docs/docs/guide/channels.md](docs/docs/guide/channels.md)\n- 贡献指南:[docs/CONTRIBUTING.md](docs/CONTRIBUTING.md)\n- 更新记录:[docs/CHANGELOG.md](docs/CHANGELOG.md)\n\n\n## MCP (Model Context Protocol)\n\nNekoBot 内置 MCP Server,可以将 Gateway 的消息、事件、队列、节点等能力以标准 MCP 协议暴露给 AI 智能体。\n\n### 支持的能力\n\n| 类型 | 说明 |\n|------|------|\n| Tools | 查询状态、查询事件链路、查询队列、模拟消息、触发任务、重试死信、节点管理 |\n| Resources | Gateway 状态、统计数据、能力清单、队列状态、节点列表 |\n| Prompts | 故障诊断、频道测试、节点健康检查 |\n\n### 快速开始\n\n```bash\n# 启动 Bot + MCP\npython bot.py --mcp\n```\n\n### Claude Code 配置\n\n在项目根目录创建 `.mcp.json`:\n\n```json\n{\n \"mcpServers\": {\n \"nekobot\": {\n \"command\": \"python\",\n \"args\": [\"bot.py\", \"--mcp-only\"],\n \"env\": {\n \"PYTHONPATH\": \".\"\n }\n }\n }\n}\n```\n\n> **提示**:`bot.py` 是相对路径,会从当前工作目录查找。如果 Claude Code 不在项目根目录启动,需要通过 `cwd` 指定项目路径,或将 `args` 改为绝对路径。\n\n### Cursor 配置\n\n在项目根目录创建 `.cursor/mcp.json`:\n\n```json\n{\n \"mcpServers\": {\n \"nekobot\": {\n \"command\": \"python\",\n \"args\": [\"bot.py\", \"--mcp-only\"],\n \"env\": {\n \"PYTHONPATH\": \".\"\n }\n }\n }\n}\n```\n\n### MCP 配置项\n\n在 `config.ini` 中配置 MCP 行为:\n\n```ini\n[mcp]\n; 是否允许 MCP 发送真实消息(高危,默认关闭)\nsend_message_enabled = false\n; 重试死信是否需要确认\nretry_require_confirmation = true\n; 审计日志\naudit_enabled = true\n; 授予 MCP 全部权限(本地使用建议开启)\nadmin = true\n; 传输模式: stdio (本地) | streamable-http (远程)\ntransport = stdio\n; 服务端配置(streamable-http 模式)\nhost = 127.0.0.1\nport = 5001\n; 远程连接 URL(--mcp-connect 使用)\nconnect_url = http://127.0.0.1:5001/mcp\n\n[gateway]\n; Gateway 持久化存储(启用后可查询历史事件)\nstorage_enabled = true\ndata_dir = data/web\n```\n\n### 远程连接\n\nMCP Server 支持 `streamable-http` 远程访问:\n\n```bash\n# 服务端:config.ini 设置 transport = streamable-http,然后启动\npython bot.py --mcp-only\n\n# 客户端:连接远程 MCP Server\npython bot.py --mcp-connect http://192.168.1.100:5001/mcp\n```\n\nClaude Code 远程连接配置(`.mcp.json`):\n\n```json\n{\n \"mcpServers\": {\n \"nekobot\": {\n \"url\": \"http://192.168.1.100:5001/mcp\"\n }\n }\n}\n```\n\n### 可用 Tools\n\n| Tool | 说明 | 风险 |\n|------|------|------|\n| `gateway_get_status` | Gateway 健康状态 | 只读 |\n| `gateway_get_stats` | 事件/投递/去重统计 | 只读 |\n| `gateway_query_trace` | 查询 trace 完整链路 | 只读 |\n| `gateway_query_events` | 按条件查询事件 | 只读 |\n| `gateway_query_deliveries` | 查询投递记录 | 只读 |\n| `gateway_get_queue_stats` | 队列状态 | 只读 |\n| `gateway_list_nodes` | 节点列表 | 只读 |\n| `gateway_get_node` | 节点详情 | 只读 |\n| `gateway_receive_message` | 模拟频道消息 | 操作 |\n| `gateway_send_message` | 发送真实消息 | 高危 |\n| `gateway_submit_internal_task` | 触发内部任务 | 操作 |\n| `gateway_retry_dead_letter` | 重试死信 | 高危 |\n| `gateway_register_node` | 注册节点 | 操作 |\n \n查看详细文档:[docs/MCP](./docs/docs/guide/nbot/mcp/index.md)\n\n## Security Notes\n\n- 不要将 Web 后台直接暴露到公网且不做额外防护。\n- 请为 `WEB_PASSWORD`、API Key、NapCat Token 设置有效且独立的密钥。\n- 不要提交 `.env`、真实凭据或运行时敏感数据到仓库。\n- 机器人运行期间,不要手动修改 `data/character/` 下的持久化文件。\n\n## License\n\n本项目基于 MIT License 发布,详见 [LICENSE](LICENSE)。\n\n"}, "6b8713448f7c2b2f1c9a4b2d0c2af679c0b1eb09": {"t": 1785771774.412192, "n": 7449, "h": "91d83a7233d4beaf", "c": "# NekoBot\n\n![cover](docs/cover.png)\n\n
\n\n![Python](https://img.shields.io/badge/Python-3.10%2B-3776AB?style=flat&logo=python&logoColor=white)\n![License](https://img.shields.io/badge/License-MIT-2ea043?style=flat)\n![Web](https://img.shields.io/badge/Web-Dashboard-ec4899?style=flat)\n![QQ](https://img.shields.io/badge/QQ-NapCat%20%2B%20ncatbot-58a6ff?style=flat)\n![MCP](https://img.shields.io/badge/MCP-AI%20Agent%20Interface-8b5cf6?style=flat)\n\n面向 Web 的多渠道 AI 角色扮演系统,包含Web、QQ、CLI、Telegram、Feishu等频道。\n\n
\n\n## Overview\n\nNekoBot 是一个面向角色扮演与长期互动场景的 AI 系统。项目采用统一 AI 内核与频道适配层分离的架构,提供完整的 Web 管理后台、角色运行时、记忆系统、工具调用与工作区能力。\n\n它的核心目标不是单纯提供“聊天接口”,而是提供一套可持续运行、可配置、可观测、可扩展的角色型智能体基础设施。\n\n## Core Capabilities\n\n- 多渠道接入:支持 QQ、Web、CLI、Telegram、Feishu,共用统一的 `ChatRequest / ChatResponse` 处理链路。\n- 角色运行时:内置实时情感引擎、六维关系模型、动态 PromptStack、自动状态评估与角色记忆。\n- Web 控制台:提供会话管理、角色管理、模型配置、工作流、知识库、记忆、日志与调试界面。\n- 工具与工作区:支持工具调用、文件读写、共享/私有工作区、文件变更预览与任务执行。\n- 模型适配:兼容 OpenAI Chat Completions/Responses , Anthropic , Gemini接口,可接入 Deepseek、GLM、Kimi、Mimo及其他兼容服务。\n- 插件与技能:支持通过插件与技能系统扩展能力,而不破坏核心处理流程。\n- MCP 接口:通过 Model Context Protocol 暴露 Gateway 能力,支持 Claude Code、Cursor、ChatGPT Agent 等 AI 智能体直接调用。\n\n## Architecture\n\n项目围绕“统一 AI 内核 + 多渠道适配”的原则组织:\n\n```text\nbot.py\n└── nbot/\n ├── commands.py # QQ command handlers, BotClient init\n ├── core/ # Unified AI pipeline\n │ ├── chat_models.py # ChatRequest / ChatResponse\n │ ├── agent_service.py # Main AI entry\n │ ├── ai_pipeline.py # Pre-process -> chat -> post-process\n │ ├── session_store.py # Unified session state\n │ ├── model_adapter.py # Cross-provider model adapter\n │ ├── workspace.py # Per-session file workspace\n │ ├── auto_memory.py # Automatic memory extraction\n │ └── workflow.py # Workflow executor\n ├── character/ # Affective runtime and relationship model\n ├── channels/ # QQ, Web, Telegram, Feishu adapters\n ├── services/ # AI client, chat service, tools, TTS/STT\n ├── plugins/ # Plugin and skill system\n ├── gateway/ # Message bus, routing, delivery, dedupe\n │ └── facade.py # Gateway service facade for MCP\n ├── web/ # Flask blueprints, Socket.IO events, dashboard\n ├── mcp/ # MCP Server (AI Agent interface)\n │ ├── server.py # FastMCP entry point\n │ ├── tools/ # MCP Tools\n │ ├── resources/ # MCP Resources\n │ └── prompts/ # MCP Prompts\n └── cli/ # Terminal UI\n```\n\n请求流如下:\n\n```text\nChannel Adapter\n -> ChatRequest\n -> Agent Service / AI Pipeline\n -> Character Runtime (before_turn / after_turn)\n -> Model Adapter / AI Client\n -> ChatResponse\n -> Channel Adapter\n```\n\n## Runtime Features\n\n### Character Runtime\n\n`nbot/character/` 提供角色运行时,用于把“角色设定”转化为持续一致的对话行为:\n\n- `PromptStack`:按优先级动态拼装提示词,而不是把所有状态污染进历史消息。\n- `StateMachine`:控制情绪惯性与关系平滑变化,避免单轮输入导致剧烈失真。\n- `AutoState`:定期总结近期互动,自动调整情绪强度、精力与六维关系值。\n- `Memory`:支持按角色、按用户隔离的长期与短期记忆。\n- `ReactionPlan`:在每轮回复前生成风格与行为策略,约束角色输出。\n\n### Workspace and Tools\n\n系统支持私有工作区与共享工作区:\n\n- 私有工作区绑定当前会话。\n- 共享工作区可被多个会话访问。\n- 文件创建、修改、删除、传输与差异预览可通过 Web 界面管理。\n- 工具系统支持在对话中触发文件、搜索、执行等能力。\n\n### Web Dashboard\n\nWeb 后台覆盖日常运维与调试需求:\n\n- 会话与聊天管理\n- 角色卡创建、编辑、导入、导出\n- AI 模型配置与切换\n- 记忆、知识库、技能、工具管理\n- 工作流与定时任务\n- Token 统计、日志、调试与运行状态查看\n\n## Requirements\n\n- Python 3.10+\n- NapCatQQ\n- ncatbot 3.8.5\n- 可用的 OpenAI-compatible API 服务\n\n说明:\n\n- `.env` 是首选配置来源。\n- `config.ini` 仍作为 QQ 连接参数的兼容回退。\n- 项目默认使用 Flask + Flask-SocketIO + Eventlet 提供 Web 服务。\n\n## Installation\n\n```bash\ngit clone https://github.com/asukaneko/nekobot.git\ncd nekobot\n```\n\n```bash\n#配置虚拟环境(可选)\npython -m venv venv\nsource venv/bin/activate\n# windows: venv\\Scripts\\activate.bat\npython -m pip install -r requirements.txt\n```\n\n复制环境变量模板并填写必要配置:\n\n```bash\ncp .env.example .env\n```\n\n至少建议先配置:\n\n```env\nWEB_PASSWORD=your_web_password\n```\n\n如需启用 QQ Bot,还需要补充:\n\n```env\nBOT_UIN=your_qq_number\nROOT=your_admin_qq_number\nWS_URI=ws://your_napcat_host:port\nTOKEN=your_napcat_token\n```\n\nAI 服务的最小示例:\n\n```env\nAPI_KEY=your_api_key\nBASE_URL=https://your-openai-compatible-endpoint/v1\nMODEL=your_model_name\n```\n\n但你仍然可以通过web界面来配置你的模型\n\n## Running\n\n```bash\n# QQ + Web\npython bot.py\n\n# Web only\npython bot.py --only-web\n\n# Web only on custom host/port\npython bot.py --only-web --web-host 0.0.0.0 --web-port 5000\n\n# CLI only\npython bot.py --cli\n\n# CLI + Web\npython bot.py --cli-and-web\n\n# QQ only\npython bot.py --no-web\n```\n\n默认情况下:\n\n- 若检测到 QQ 相关配置,启动 `QQ + Web`。\n- 若未检测到 QQ 配置,项目可仅以 Web 模式运行。\n\n## Development Notes\n\n- 目标 Python 版本为 `3.10`。\n- 代码风格使用 Ruff,行宽 100,双引号,空格缩进。\n- `nbot/core/` 不应依赖频道层模块。\n- 所有新频道都应通过 `BaseChannelAdapter` 接入,而不是直接调用模型。\n- 角色逻辑应通过 `before_turn()` / `after_turn()` 挂入统一流水线。\n\n常用检查命令:\n\n```bash\nruff check .\npython -m compileall -q bot.py nbot tools\npython -m pytest -q\n```\n\nCI 主要执行:\n\n1. `ruff check . --select E9,F63,F7,F82`\n2. `python -m compileall -q bot.py nbot tools`\n3. `python -m pip install -r requirements.txt`\n4. `python -m pytest -q`\n\n## Documentation\n\n更详细的使用与开发文档位于 `docs/`:\n\n- 快速开始:[docs/docs/guide/quick-start.md](docs/docs/guide/quick-start.md)\n- 命令说明:[docs/docs/guide/commands.md](docs/docs/guide/commands.md)\n- 频道接入:[docs/docs/guide/channels.md](docs/docs/guide/channels.md)\n- 贡献指南:[docs/CONTRIBUTING.md](docs/CONTRIBUTING.md)\n- 更新记录:[docs/CHANGELOG.md](docs/CHANGELOG.md)\n\n\n## MCP (Model Context Protocol)\n\nNekoBot 内置 MCP Server,可以将 Gateway 的消息、事件、队列、节点等能力以标准 MCP 协议暴露给 AI 智能体。\n\n### 支持的能力\n\n| 类型 | 说明 |\n|------|------|\n| Tools | 查询状态、查询事件链路、查询队列、模拟消息、触发任务、重试死信、节点管理 |\n| Resources | Gateway 状态、统计数据、能力清单、队列状态、节点列表 |\n| Prompts | 故障诊断、频道测试、节点健康检查 |\n\n### 快速开始\n\n```bash\n# 启动 Bot + MCP\npython bot.py --mcp\n```\n\n### Claude Code 配置\n\n在项目根目录创建 `.mcp.json`:\n\n```json\n{\n \"mcpServers\": {\n \"nekobot\": {\n \"command\": \"python\",\n \"args\": [\"bot.py\", \"--mcp-only\"],\n \"env\": {\n \"PYTHONPATH\": \".\"\n }\n }\n }\n}\n```\n\n> **提示**:`bot.py` 是相对路径,会从当前工作目录查找。如果 Claude Code 不在项目根目录启动,需要通过 `cwd` 指定项目路径,或将 `args` 改为绝对路径。\n\n### Cursor 配置\n\n在项目根目录创建 `.cursor/mcp.json`:\n\n```json\n{\n \"mcpServers\": {\n \"nekobot\": {\n \"command\": \"python\",\n \"args\": [\"bot.py\", \"--mcp-only\"],\n \"env\": {\n \"PYTHONPATH\": \".\"\n }\n }\n }\n}\n```\n\n### MCP 配置项\n\n在 `config.ini` 中配置 MCP 行为:\n\n```ini\n[mcp]\n; 是否允许 MCP 发送真实消息(高危,默认关闭)\nsend_message_enabled = false\n; 重试死信是否需要确认\nretry_require_confirmation = true\n; 审计日志\naudit_enabled = true\n; 授予 MCP 全部权限(本地使用建议开启)\nadmin = true\n\n[gateway]\n; Gateway 持久化存储(启用后可查询历史事件)\nstorage_enabled = true\ndata_dir = data/web\n```\n\n### 可用 Tools\n\n| Tool | 说明 | 风险 |\n|------|------|------|\n| `gateway_get_status` | Gateway 健康状态 | 只读 |\n| `gateway_get_stats` | 事件/投递/去重统计 | 只读 |\n| `gateway_query_trace` | 查询 trace 完整链路 | 只读 |\n| `gateway_query_events` | 按条件查询事件 | 只读 |\n| `gateway_query_deliveries` | 查询投递记录 | 只读 |\n| `gateway_get_queue_stats` | 队列状态 | 只读 |\n| `gateway_list_nodes` | 节点列表 | 只读 |\n| `gateway_get_node` | 节点详情 | 只读 |\n| `gateway_receive_message` | 模拟频道消息 | 操作 |\n| `gateway_send_message` | 发送真实消息 | 高危 |\n| `gateway_submit_internal_task` | 触发内部任务 | 操作 |\n| `gateway_retry_dead_letter` | 重试死信 | 高危 |\n| `gateway_register_node` | 注册节点 | 操作 |\n\n## Security Notes\n\n- 不要将 Web 后台直接暴露到公网且不做额外防护。\n- 请为 `WEB_PASSWORD`、API Key、NapCat Token 设置有效且独立的密钥。\n- 不要提交 `.env`、真实凭据或运行时敏感数据到仓库。\n- 机器人运行期间,不要手动修改 `data/character/` 下的持久化文件。\n\n## License\n\n本项目基于 MIT License 发布,详见 [LICENSE](LICENSE)。\n\n"}, "134745649d62252fd270e702a62aab6d2b94bc6c": {"t": 1785771775.7283986, "n": 7412, "h": "5aa7538c07783870", "c": "# NekoBot\n\n![cover](docs/cover.png)\n\n
\n\n![Python](https://img.shields.io/badge/Python-3.10%2B-3776AB?style=flat&logo=python&logoColor=white)\n![License](https://img.shields.io/badge/License-MIT-2ea043?style=flat)\n![Web](https://img.shields.io/badge/Web-Dashboard-ec4899?style=flat)\n![QQ](https://img.shields.io/badge/QQ-NapCat%20%2B%20ncatbot-58a6ff?style=flat)\n![MCP](https://img.shields.io/badge/MCP-AI%20Agent%20Interface-8b5cf6?style=flat)\n\n面向 Web 的多渠道 AI 角色扮演系统,包含Web、QQ、CLI、Telegram、Feishu等频道。\n\n
\n\n## Overview\n\nNekoBot 是一个面向角色扮演与长期互动场景的 AI 系统。项目采用统一 AI 内核与频道适配层分离的架构,提供完整的 Web 管理后台、角色运行时、记忆系统、工具调用与工作区能力。\n\n它的核心目标不是单纯提供“聊天接口”,而是提供一套可持续运行、可配置、可观测、可扩展的角色型智能体基础设施。\n\n## Core Capabilities\n\n- 多渠道接入:支持 QQ、Web、CLI、Telegram、Feishu,共用统一的 `ChatRequest / ChatResponse` 处理链路。\n- 角色运行时:内置实时情感引擎、六维关系模型、动态 PromptStack、自动状态评估与角色记忆。\n- Web 控制台:提供会话管理、角色管理、模型配置、工作流、知识库、记忆、日志与调试界面。\n- 工具与工作区:支持工具调用、文件读写、共享/私有工作区、文件变更预览与任务执行。\n- 模型适配:兼容 OpenAI Chat Completions/Responses , Anthropic , Gemini接口,可接入 Deepseek、GLM、Kimi、Mimo及其他兼容服务。\n- 插件与技能:支持通过插件与技能系统扩展能力,而不破坏核心处理流程。\n- MCP 接口:通过 Model Context Protocol 暴露 Gateway 能力,支持 Claude Code、Cursor、ChatGPT Agent 等 AI 智能体直接调用。\n\n## Architecture\n\n项目围绕“统一 AI 内核 + 多渠道适配”的原则组织:\n\n```text\nbot.py\n└── nbot/\n ├── commands.py # QQ command handlers, BotClient init\n ├── core/ # Unified AI pipeline\n │ ├── chat_models.py # ChatRequest / ChatResponse\n │ ├── agent_service.py # Main AI entry\n │ ├── ai_pipeline.py # Pre-process -> chat -> post-process\n │ ├── session_store.py # Unified session state\n │ ├── model_adapter.py # Cross-provider model adapter\n │ ├── workspace.py # Per-session file workspace\n │ ├── auto_memory.py # Automatic memory extraction\n │ └── workflow.py # Workflow executor\n ├── character/ # Affective runtime and relationship model\n ├── channels/ # QQ, Web, Telegram, Feishu adapters\n ├── services/ # AI client, chat service, tools, TTS/STT\n ├── plugins/ # Plugin and skill system\n ├── gateway/ # Message bus, routing, delivery, dedupe\n │ └── facade.py # Gateway service facade for MCP\n ├── web/ # Flask blueprints, Socket.IO events, dashboard\n ├── mcp/ # MCP Server (AI Agent interface)\n │ ├── server.py # FastMCP entry point\n │ ├── tools/ # MCP Tools\n │ ├── resources/ # MCP Resources\n │ └── prompts/ # MCP Prompts\n └── cli/ # Terminal UI\n```\n\n请求流如下:\n\n```text\nChannel Adapter\n -> ChatRequest\n -> Agent Service / AI Pipeline\n -> Character Runtime (before_turn / after_turn)\n -> Model Adapter / AI Client\n -> ChatResponse\n -> Channel Adapter\n```\n\n## Runtime Features\n\n### Character Runtime\n\n`nbot/character/` 提供角色运行时,用于把“角色设定”转化为持续一致的对话行为:\n\n- `PromptStack`:按优先级动态拼装提示词,而不是把所有状态污染进历史消息。\n- `StateMachine`:控制情绪惯性与关系平滑变化,避免单轮输入导致剧烈失真。\n- `AutoState`:定期总结近期互动,自动调整情绪强度、精力与六维关系值。\n- `Memory`:支持按角色、按用户隔离的长期与短期记忆。\n- `ReactionPlan`:在每轮回复前生成风格与行为策略,约束角色输出。\n\n### Workspace and Tools\n\n系统支持私有工作区与共享工作区:\n\n- 私有工作区绑定当前会话。\n- 共享工作区可被多个会话访问。\n- 文件创建、修改、删除、传输与差异预览可通过 Web 界面管理。\n- 工具系统支持在对话中触发文件、搜索、执行等能力。\n\n### Web Dashboard\n\nWeb 后台覆盖日常运维与调试需求:\n\n- 会话与聊天管理\n- 角色卡创建、编辑、导入、导出\n- AI 模型配置与切换\n- 记忆、知识库、技能、工具管理\n- 工作流与定时任务\n- Token 统计、日志、调试与运行状态查看\n\n## Requirements\n\n- Python 3.10+\n- NapCatQQ\n- ncatbot 3.8.5\n- 可用的 OpenAI-compatible API 服务\n\n说明:\n\n- `.env` 是首选配置来源。\n- `config.ini` 仍作为 QQ 连接参数的兼容回退。\n- 项目默认使用 Flask + Flask-SocketIO + Eventlet 提供 Web 服务。\n\n## Installation\n\n```bash\ngit clone https://github.com/asukaneko/nekobot.git\ncd nekobot\n```\n\n```bash\n#配置虚拟环境(可选)\npython -m venv venv\nsource venv/bin/activate\n# windows: venv\\Scripts\\activate.bat\npython -m pip install -r requirements.txt\n```\n\n复制环境变量模板并填写必要配置:\n\n```bash\ncp .env.example .env\n```\n\n至少建议先配置:\n\n```env\nWEB_PASSWORD=your_web_password\n```\n\n如需启用 QQ Bot,还需要补充:\n\n```env\nBOT_UIN=your_qq_number\nROOT=your_admin_qq_number\nWS_URI=ws://your_napcat_host:port\nTOKEN=your_napcat_token\n```\n\nAI 服务的最小示例:\n\n```env\nAPI_KEY=your_api_key\nBASE_URL=https://your-openai-compatible-endpoint/v1\nMODEL=your_model_name\n```\n\n但你仍然可以通过web界面来配置你的模型\n\n## Running\n\n```bash\n# QQ + Web\npython bot.py\n\n# Web only\npython bot.py --only-web\n\n# Web only on custom host/port\npython bot.py --only-web --web-host 0.0.0.0 --web-port 5000\n\n# CLI only\npython bot.py --cli\n\n# CLI + Web\npython bot.py --cli-and-web\n\n# QQ only\npython bot.py --no-web\n```\n\n默认情况下:\n\n- 若检测到 QQ 相关配置,启动 `QQ + Web`。\n- 若未检测到 QQ 配置,项目可仅以 Web 模式运行。\n\n## Development Notes\n\n- 目标 Python 版本为 `3.10`。\n- 代码风格使用 Ruff,行宽 100,双引号,空格缩进。\n- `nbot/core/` 不应依赖频道层模块。\n- 所有新频道都应通过 `BaseChannelAdapter` 接入,而不是直接调用模型。\n- 角色逻辑应通过 `before_turn()` / `after_turn()` 挂入统一流水线。\n\n常用检查命令:\n\n```bash\nruff check .\npython -m compileall -q bot.py nbot tools\npython -m pytest -q\n```\n\nCI 主要执行:\n\n1. `ruff check . --select E9,F63,F7,F82`\n2. `python -m compileall -q bot.py nbot tools`\n3. `python -m pip install -r requirements.txt`\n4. `python -m pytest -q`\n\n## Documentation\n\n更详细的使用与开发文档位于 `docs/`:\n\n- 快速开始:[docs/docs/guide/quick-start.md](docs/docs/guide/quick-start.md)\n- 命令说明:[docs/docs/guide/commands.md](docs/docs/guide/commands.md)\n- 频道接入:[docs/docs/guide/channels.md](docs/docs/guide/channels.md)\n- 贡献指南:[docs/CONTRIBUTING.md](docs/CONTRIBUTING.md)\n- 更新记录:[docs/CHANGELOG.md](docs/CHANGELOG.md)\n\n\n## MCP (Model Context Protocol)\n\nNekoBot 内置 MCP Server,可以将 Gateway 的消息、事件、队列、节点等能力以标准 MCP 协议暴露给 AI 智能体。\n\n### 支持的能力\n\n| 类型 | 说明 |\n|------|------|\n| Tools | 查询状态、查询事件链路、查询队列、模拟消息、触发任务、重试死信、节点管理 |\n| Resources | Gateway 状态、统计数据、能力清单、队列状态、节点列表 |\n| Prompts | 故障诊断、频道测试、节点健康检查 |\n\n### 快速开始\n\n```bash\n# 启动 Bot + MCP\npython bot.py --mcp\n```\n\n### Claude Code 配置\n\n在项目根目录创建 `.mcp.json`:\n\n```json\n{\n \"mcpServers\": {\n \"nekobot\": {\n \"command\": \"python\",\n \"args\": [\"bot.py\", \"--mcp-only\"],\n \"env\": {\n \"PYTHONPATH\": \".\"\n }\n }\n }\n}\n```\n\n> **提示**:`bot.py` 是相对路径,会从当前工作目录查找。如果 Claude Code 不在项目根目录启动,需要通过 `cwd` 指定项目路径,或将 `args` 改为绝对路径。\n\n### Cursor 配置\n\n在项目根目录创建 `.cursor/mcp.json`:\n\n```json\n{\n \"mcpServers\": {\n \"nekobot\": {\n \"command\": \"python\",\n \"args\": [\"bot.py\", \"--mcp-only\"],\n \"env\": {\n \"PYTHONPATH\": \".\"\n }\n }\n }\n}\n```\n\n### MCP 配置项\n\n在 `config.ini` 中配置 MCP 行为:\n\n```ini\n[mcp]\n; 是否允许 MCP 发送真实消息(高危,默认关闭)\nsend_message_enabled = false\n; 重试死信是否需要确认\nretry_require_confirmation = true\n; 审计日志\naudit_enabled = true\n\n[gateway]\n; Gateway 持久化存储(启用后可查询历史事件)\nstorage_enabled = true\ndata_dir = data/web\n```\n\n### 可用 Tools\n\n| Tool | 说明 | 风险 |\n|------|------|------|\n| `gateway_get_status` | Gateway 健康状态 | 只读 |\n| `gateway_get_stats` | 事件/投递/去重统计 | 只读 |\n| `gateway_query_trace` | 查询 trace 完整链路 | 只读 |\n| `gateway_query_events` | 按条件查询事件 | 只读 |\n| `gateway_query_deliveries` | 查询投递记录 | 只读 |\n| `gateway_get_queue_stats` | 队列状态 | 只读 |\n| `gateway_list_nodes` | 节点列表 | 只读 |\n| `gateway_get_node` | 节点详情 | 只读 |\n| `gateway_receive_message` | 模拟频道消息 | 操作 |\n| `gateway_send_message` | 发送真实消息 | 高危 |\n| `gateway_submit_internal_task` | 触发内部任务 | 操作 |\n| `gateway_retry_dead_letter` | 重试死信 | 高危 |\n| `gateway_register_node` | 注册节点 | 操作 |\n\n## Security Notes\n\n- 不要将 Web 后台直接暴露到公网且不做额外防护。\n- 请为 `WEB_PASSWORD`、API Key、NapCat Token 设置有效且独立的密钥。\n- 不要提交 `.env`、真实凭据或运行时敏感数据到仓库。\n- 机器人运行期间,不要手动修改 `data/character/` 下的持久化文件。\n\n## License\n\n本项目基于 MIT License 发布,详见 [LICENSE](LICENSE)。\n\n"}, "9381a8903a9305b224abca3f1b4d6d844c96cb7f": {"t": 1785771777.6303816, "n": 7408, "h": "8a5316e052612a57", "c": "# NekoBot\n\n![cover](docs/cover.png)\n\n
\n\n![Python](https://img.shields.io/badge/Python-3.10%2B-3776AB?style=flat&logo=python&logoColor=white)\n![License](https://img.shields.io/badge/License-MIT-2ea043?style=flat)\n![Web](https://img.shields.io/badge/Web-Dashboard-ec4899?style=flat)\n![QQ](https://img.shields.io/badge/QQ-NapCat%20%2B%20ncatbot-58a6ff?style=flat)\n![MCP](https://img.shields.io/badge/MCP-AI%20Agent%20Interface-8b5cf6?style=flat)\n\n面向 Web 的多渠道 AI 角色扮演系统,包含Web、QQ、CLI、Telegram、Feishu等频道。\n\n
\n\n## Overview\n\nNekoBot 是一个面向角色扮演与长期互动场景的 AI 系统。项目采用统一 AI 内核与频道适配层分离的架构,提供完整的 Web 管理后台、角色运行时、记忆系统、工具调用与工作区能力。\n\n它的核心目标不是单纯提供“聊天接口”,而是提供一套可持续运行、可配置、可观测、可扩展的角色型智能体基础设施。\n\n## Core Capabilities\n\n- 多渠道接入:支持 QQ、Web、CLI、Telegram、Feishu,共用统一的 `ChatRequest / ChatResponse` 处理链路。\n- 角色运行时:内置实时情感引擎、六维关系模型、动态 PromptStack、自动状态评估与角色记忆。\n- Web 控制台:提供会话管理、角色管理、模型配置、工作流、知识库、记忆、日志与调试界面。\n- 工具与工作区:支持工具调用、文件读写、共享/私有工作区、文件变更预览与任务执行。\n- 模型适配:兼容 OpenAI Chat Completions/Responses , Anthropic , Gemini接口,可接入 Deepseek、GLM、Kimi、Mimo及其他兼容服务。\n- 插件与技能:支持通过插件与技能系统扩展能力,而不破坏核心处理流程。\n- MCP 接口:通过 Model Context Protocol 暴露 Gateway 能力,支持 Claude Code、Cursor、ChatGPT Agent 等 AI 智能体直接调用。\n\n## Architecture\n\n项目围绕“统一 AI 内核 + 多渠道适配”的原则组织:\n\n```text\nbot.py\n└── nbot/\n ├── commands.py # QQ command handlers, BotClient init\n ├── core/ # Unified AI pipeline\n │ ├── chat_models.py # ChatRequest / ChatResponse\n │ ├── agent_service.py # Main AI entry\n │ ├── ai_pipeline.py # Pre-process -> chat -> post-process\n │ ├── session_store.py # Unified session state\n │ ├── model_adapter.py # Cross-provider model adapter\n │ ├── workspace.py # Per-session file workspace\n │ ├── auto_memory.py # Automatic memory extraction\n │ └── workflow.py # Workflow executor\n ├── character/ # Affective runtime and relationship model\n ├── channels/ # QQ, Web, Telegram, Feishu adapters\n ├── services/ # AI client, chat service, tools, TTS/STT\n ├── plugins/ # Plugin and skill system\n ├── gateway/ # Message bus, routing, delivery, dedupe\n │ └── facade.py # Gateway service facade for MCP\n ├── web/ # Flask blueprints, Socket.IO events, dashboard\n ├── mcp/ # MCP Server (AI Agent interface)\n │ ├── server.py # FastMCP entry point\n │ ├── tools/ # MCP Tools\n │ ├── resources/ # MCP Resources\n │ └── prompts/ # MCP Prompts\n └── cli/ # Terminal UI\n```\n\n请求流如下:\n\n```text\nChannel Adapter\n -> ChatRequest\n -> Agent Service / AI Pipeline\n -> Character Runtime (before_turn / after_turn)\n -> Model Adapter / AI Client\n -> ChatResponse\n -> Channel Adapter\n```\n\n## Runtime Features\n\n### Character Runtime\n\n`nbot/character/` 提供角色运行时,用于把“角色设定”转化为持续一致的对话行为:\n\n- `PromptStack`:按优先级动态拼装提示词,而不是把所有状态污染进历史消息。\n- `StateMachine`:控制情绪惯性与关系平滑变化,避免单轮输入导致剧烈失真。\n- `AutoState`:定期总结近期互动,自动调整情绪强度、精力与六维关系值。\n- `Memory`:支持按角色、按用户隔离的长期与短期记忆。\n- `ReactionPlan`:在每轮回复前生成风格与行为策略,约束角色输出。\n\n### Workspace and Tools\n\n系统支持私有工作区与共享工作区:\n\n- 私有工作区绑定当前会话。\n- 共享工作区可被多个会话访问。\n- 文件创建、修改、删除、传输与差异预览可通过 Web 界面管理。\n- 工具系统支持在对话中触发文件、搜索、执行等能力。\n\n### Web Dashboard\n\nWeb 后台覆盖日常运维与调试需求:\n\n- 会话与聊天管理\n- 角色卡创建、编辑、导入、导出\n- AI 模型配置与切换\n- 记忆、知识库、技能、工具管理\n- 工作流与定时任务\n- Token 统计、日志、调试与运行状态查看\n\n## Requirements\n\n- Python 3.10+\n- NapCatQQ\n- ncatbot 3.8.5\n- 可用的 OpenAI-compatible API 服务\n\n说明:\n\n- `.env` 是首选配置来源。\n- `config.ini` 仍作为 QQ 连接参数的兼容回退。\n- 项目默认使用 Flask + Flask-SocketIO + Eventlet 提供 Web 服务。\n\n## Installation\n\n```bash\ngit clone https://github.com/asukaneko/nekobot.git\ncd nekobot\n```\n\n```bash\n#配置虚拟环境(可选)\npython -m venv venv\nsource venv/bin/activate\n# windows: venv\\Scripts\\activate.bat\npython -m pip install -r requirements.txt\n```\n\n复制环境变量模板并填写必要配置:\n\n```bash\ncp .env.example .env\n```\n\n至少建议先配置:\n\n```env\nWEB_PASSWORD=your_web_password\n```\n\n如需启用 QQ Bot,还需要补充:\n\n```env\nBOT_UIN=your_qq_number\nROOT=your_admin_qq_number\nWS_URI=ws://your_napcat_host:port\nTOKEN=your_napcat_token\n```\n\nAI 服务的最小示例:\n\n```env\nAPI_KEY=your_api_key\nBASE_URL=https://your-openai-compatible-endpoint/v1\nMODEL=your_model_name\n```\n\n但你仍然可以通过web界面来配置你的模型\n\n## Running\n\n```bash\n# QQ + Web\npython bot.py\n\n# Web only\npython bot.py --only-web\n\n# Web only on custom host/port\npython bot.py --only-web --web-host 0.0.0.0 --web-port 5000\n\n# CLI only\npython bot.py --cli\n\n# CLI + Web\npython bot.py --cli-and-web\n\n# QQ only\npython bot.py --no-web\n```\n\n默认情况下:\n\n- 若检测到 QQ 相关配置,启动 `QQ + Web`。\n- 若未检测到 QQ 配置,项目可仅以 Web 模式运行。\n\n## Development Notes\n\n- 目标 Python 版本为 `3.10`。\n- 代码风格使用 Ruff,行宽 100,双引号,空格缩进。\n- `nbot/core/` 不应依赖频道层模块。\n- 所有新频道都应通过 `BaseChannelAdapter` 接入,而不是直接调用模型。\n- 角色逻辑应通过 `before_turn()` / `after_turn()` 挂入统一流水线。\n\n常用检查命令:\n\n```bash\nruff check .\npython -m compileall -q bot.py nbot tools\npython -m pytest -q\n```\n\nCI 主要执行:\n\n1. `ruff check . --select E9,F63,F7,F82`\n2. `python -m compileall -q bot.py nbot tools`\n3. `python -m pip install -r requirements.txt`\n4. `python -m pytest -q`\n\n## Documentation\n\n更详细的使用与开发文档位于 `docs/`:\n\n- 快速开始:[docs/docs/guide/quick-start.md](docs/docs/guide/quick-start.md)\n- 命令说明:[docs/docs/guide/commands.md](docs/docs/guide/commands.md)\n- 频道接入:[docs/docs/guide/channels.md](docs/docs/guide/channels.md)\n- 贡献指南:[docs/CONTRIBUTING.md](docs/CONTRIBUTING.md)\n- 更新记录:[docs/CHANGELOG.md](docs/CHANGELOG.md)\n\n\n## MCP (Model Context Protocol)\n\nNekoBot 内置 MCP Server,可以将 Gateway 的消息、事件、队列、节点等能力以标准 MCP 协议暴露给 AI 智能体。\n\n### 支持的能力\n\n| 类型 | 说明 |\n|------|------|\n| Tools | 查询状态、查询事件链路、查询队列、模拟消息、触发任务、重试死信、节点管理 |\n| Resources | Gateway 状态、统计数据、能力清单、队列状态、节点列表 |\n| Prompts | 故障诊断、频道测试、节点健康检查 |\n\n### 快速开始\n\n```bash\n# 启动 Bot + MCP\npython bot.py --mcp\n```\n\n### Claude Code 配置\n\n在项目根目录创建 `.mcp.json`:\n\n```json\n{\n \"mcpServers\": {\n \"nekobot\": {\n \"command\": \"python\",\n \"args\": [\"bot.py\", \"--mcp-only\"],\n \"env\": {\n \"PYTHONPATH\": \".\"\n }\n }\n }\n}\n```\n\n> **提示**:`bot.py` 是相对路径,会从当前工作目录查找。如果 Claude Code 不在项目根目录启动,需要通过 `cwd` 指定项目路径,或将 `args` 改为绝对路径。\n\n### Cursor 配置\n\n在项目根目录创建 `.cursor/mcp.json`:\n\n```json\n{\n \"mcpServers\": {\n \"nekobot\": {\n \"command\": \"python\",\n \"args\": [\"bot.py\", \"--mcp-only\"],\n \"env\": {\n \"PYTHONPATH\": \".\"\n }\n }\n }\n}\n```\n\n### MCP 配置项\n\n在 `config.ini` 中配置 MCP 行为:\n\n```ini\n[mcp]\n; 是否允许 MCP 发送真实消息(高危,默认关闭)\nsend_message_enabled = false\n; 重试死信是否需要确认\nretry_require_confirmation = true\n; 审计日志\naudit_enabled = true\n\n[gateway]\n; Gateway 持久化存储(启用后可查询历史事件)\nstorage_enabled = true\ndata_dir = data\n```\n\n### 可用 Tools\n\n| Tool | 说明 | 风险 |\n|------|------|------|\n| `gateway_get_status` | Gateway 健康状态 | 只读 |\n| `gateway_get_stats` | 事件/投递/去重统计 | 只读 |\n| `gateway_query_trace` | 查询 trace 完整链路 | 只读 |\n| `gateway_query_events` | 按条件查询事件 | 只读 |\n| `gateway_query_deliveries` | 查询投递记录 | 只读 |\n| `gateway_get_queue_stats` | 队列状态 | 只读 |\n| `gateway_list_nodes` | 节点列表 | 只读 |\n| `gateway_get_node` | 节点详情 | 只读 |\n| `gateway_receive_message` | 模拟频道消息 | 操作 |\n| `gateway_send_message` | 发送真实消息 | 高危 |\n| `gateway_submit_internal_task` | 触发内部任务 | 操作 |\n| `gateway_retry_dead_letter` | 重试死信 | 高危 |\n| `gateway_register_node` | 注册节点 | 操作 |\n\n## Security Notes\n\n- 不要将 Web 后台直接暴露到公网且不做额外防护。\n- 请为 `WEB_PASSWORD`、API Key、NapCat Token 设置有效且独立的密钥。\n- 不要提交 `.env`、真实凭据或运行时敏感数据到仓库。\n- 机器人运行期间,不要手动修改 `data/character/` 下的持久化文件。\n\n## License\n\n本项目基于 MIT License 发布,详见 [LICENSE](LICENSE)。\n\n"}, "bfcc1d50bd53ac4bf88c46dcf126d45b776899c6": {"t": 1785771780.155833, "n": 5149, "h": "bd18d8e22128a307", "c": "# NekoBot\n\n![cover](docs/cover.png)\n\n
\n\n![Python](https://img.shields.io/badge/Python-3.10%2B-3776AB?style=flat&logo=python&logoColor=white)\n![License](https://img.shields.io/badge/License-MIT-2ea043?style=flat)\n![Web](https://img.shields.io/badge/Web-Dashboard-ec4899?style=flat)\n![QQ](https://img.shields.io/badge/QQ-NapCat%20%2B%20ncatbot-58a6ff?style=flat)\n\n面向 Web 的多渠道 AI 角色扮演系统,包含Web、QQ、CLI、Telegram、Feishu等频道。\n\n
\n\n## Overview\n\nNekoBot 是一个面向角色扮演与长期互动场景的 AI 系统。项目采用统一 AI 内核与频道适配层分离的架构,提供完整的 Web 管理后台、角色运行时、记忆系统、工具调用与工作区能力。\n\n它的核心目标不是单纯提供“聊天接口”,而是提供一套可持续运行、可配置、可观测、可扩展的角色型智能体基础设施。\n\n## Core Capabilities\n\n- 多渠道接入:支持 QQ、Web、CLI、Telegram、Feishu,共用统一的 `ChatRequest / ChatResponse` 处理链路。\n- 角色运行时:内置实时情感引擎、六维关系模型、动态 PromptStack、自动状态评估与角色记忆。\n- Web 控制台:提供会话管理、角色管理、模型配置、工作流、知识库、记忆、日志与调试界面。\n- 工具与工作区:支持工具调用、文件读写、共享/私有工作区、文件变更预览与任务执行。\n- 模型适配:兼容 OpenAI Chat Completions/Responses , Anthropic , Gemini接口,可接入 Deepseek、GLM、Kimi、Mimo及其他兼容服务。\n- 插件与技能:支持通过插件与技能系统扩展能力,而不破坏核心处理流程。\n\n## Architecture\n\n项目围绕“统一 AI 内核 + 多渠道适配”的原则组织:\n\n```text\nbot.py\n└── nbot/\n ├── commands.py # QQ command handlers, BotClient init\n ├── core/ # Unified AI pipeline\n │ ├── chat_models.py # ChatRequest / ChatResponse\n │ ├── agent_service.py # Main AI entry\n │ ├── ai_pipeline.py # Pre-process -> chat -> post-process\n │ ├── session_store.py # Unified session state\n │ ├── model_adapter.py # Cross-provider model adapter\n │ ├── workspace.py # Per-session file workspace\n │ ├── auto_memory.py # Automatic memory extraction\n │ └── workflow.py # Workflow executor\n ├── character/ # Affective runtime and relationship model\n ├── channels/ # QQ, Web, Telegram, Feishu adapters\n ├── services/ # AI client, chat service, tools, TTS/STT\n ├── plugins/ # Plugin and skill system\n ├── gateway/ # Message bus, routing, delivery, dedupe\n ├── web/ # Flask blueprints, Socket.IO events, dashboard\n └── cli/ # Terminal UI\n```\n\n请求流如下:\n\n```text\nChannel Adapter\n -> ChatRequest\n -> Agent Service / AI Pipeline\n -> Character Runtime (before_turn / after_turn)\n -> Model Adapter / AI Client\n -> ChatResponse\n -> Channel Adapter\n```\n\n## Runtime Features\n\n### Character Runtime\n\n`nbot/character/` 提供角色运行时,用于把“角色设定”转化为持续一致的对话行为:\n\n- `PromptStack`:按优先级动态拼装提示词,而不是把所有状态污染进历史消息。\n- `StateMachine`:控制情绪惯性与关系平滑变化,避免单轮输入导致剧烈失真。\n- `AutoState`:定期总结近期互动,自动调整情绪强度、精力与六维关系值。\n- `Memory`:支持按角色、按用户隔离的长期与短期记忆。\n- `ReactionPlan`:在每轮回复前生成风格与行为策略,约束角色输出。\n\n### Workspace and Tools\n\n系统支持私有工作区与共享工作区:\n\n- 私有工作区绑定当前会话。\n- 共享工作区可被多个会话访问。\n- 文件创建、修改、删除、传输与差异预览可通过 Web 界面管理。\n- 工具系统支持在对话中触发文件、搜索、执行等能力。\n\n### Web Dashboard\n\nWeb 后台覆盖日常运维与调试需求:\n\n- 会话与聊天管理\n- 角色卡创建、编辑、导入、导出\n- AI 模型配置与切换\n- 记忆、知识库、技能、工具管理\n- 工作流与定时任务\n- Token 统计、日志、调试与运行状态查看\n\n## Requirements\n\n- Python 3.10+\n- NapCatQQ\n- ncatbot 3.8.5\n- 可用的 OpenAI-compatible API 服务\n\n说明:\n\n- `.env` 是首选配置来源。\n- `config.ini` 仍作为 QQ 连接参数的兼容回退。\n- 项目默认使用 Flask + Flask-SocketIO + Eventlet 提供 Web 服务。\n\n## Installation\n\n```bash\ngit clone https://github.com/asukaneko/nekobot.git\ncd nekobot\n```\n\n```bash\n#配置虚拟环境(可选)\npython -m venv venv\nsource venv/bin/activate\n# windows: venv\\Scripts\\activate.bat\npython -m pip install -r requirements.txt\n```\n\n复制环境变量模板并填写必要配置:\n\n```bash\ncp .env.example .env\n```\n\n至少建议先配置:\n\n```env\nWEB_PASSWORD=your_web_password\n```\n\n如需启用 QQ Bot,还需要补充:\n\n```env\nBOT_UIN=your_qq_number\nROOT=your_admin_qq_number\nWS_URI=ws://your_napcat_host:port\nTOKEN=your_napcat_token\n```\n\nAI 服务的最小示例:\n\n```env\nAPI_KEY=your_api_key\nBASE_URL=https://your-openai-compatible-endpoint/v1\nMODEL=your_model_name\n```\n\n但你仍然可以通过web界面来配置你的模型\n\n## Running\n\n```bash\n# QQ + Web\npython bot.py\n\n# Web only\npython bot.py --only-web\n\n# Web only on custom host/port\npython bot.py --only-web --web-host 0.0.0.0 --web-port 5000\n\n# CLI only\npython bot.py --cli\n\n# CLI + Web\npython bot.py --cli-and-web\n\n# QQ only\npython bot.py --no-web\n```\n\n默认情况下:\n\n- 若检测到 QQ 相关配置,启动 `QQ + Web`。\n- 若未检测到 QQ 配置,项目可仅以 Web 模式运行。\n\n## Development Notes\n\n- 目标 Python 版本为 `3.10`。\n- 代码风格使用 Ruff,行宽 100,双引号,空格缩进。\n- `nbot/core/` 不应依赖频道层模块。\n- 所有新频道都应通过 `BaseChannelAdapter` 接入,而不是直接调用模型。\n- 角色逻辑应通过 `before_turn()` / `after_turn()` 挂入统一流水线。\n\n常用检查命令:\n\n```bash\nruff check .\npython -m compileall -q bot.py nbot tools\npython -m pytest -q\n```\n\nCI 主要执行:\n\n1. `ruff check . --select E9,F63,F7,F82`\n2. `python -m compileall -q bot.py nbot tools`\n3. `python -m pip install -r requirements.txt`\n4. `python -m pytest -q`\n\n## Documentation\n\n更详细的使用与开发文档位于 `docs/`:\n\n- 快速开始:[docs/docs/guide/quick-start.md](docs/docs/guide/quick-start.md)\n- 命令说明:[docs/docs/guide/commands.md](docs/docs/guide/commands.md)\n- 频道接入:[docs/docs/guide/channels.md](docs/docs/guide/channels.md)\n- 贡献指南:[docs/CONTRIBUTING.md](docs/CONTRIBUTING.md)\n- 更新记录:[docs/CHANGELOG.md](docs/CHANGELOG.md)\n\n## Security Notes\n\n- 不要将 Web 后台直接暴露到公网且不做额外防护。\n- 请为 `WEB_PASSWORD`、API Key、NapCat Token 设置有效且独立的密钥。\n- 不要提交 `.env`、真实凭据或运行时敏感数据到仓库。\n- 机器人运行期间,不要手动修改 `data/character/` 下的持久化文件。\n\n## License\n\n本项目基于 MIT License 发布,详见 [LICENSE](LICENSE)。\n\n"}, "54ee18720736c00ca55c77692a24c27da8768190": {"t": 1785771781.7687774, "n": 5133, "h": "23b9728fea3fb878", "c": "# NekoBot\n\n![cover](docs/cover.png)\n\n
\n\n![Python](https://img.shields.io/badge/Python-3.10%2B-3776AB?style=flat&logo=python&logoColor=white)\n![License](https://img.shields.io/badge/License-MIT-2ea043?style=flat)\n![Web](https://img.shields.io/badge/Web-Dashboard-ec4899?style=flat)\n![QQ](https://img.shields.io/badge/QQ-NapCat%20%2B%20ncatbot-58a6ff?style=flat)\n\n面向 Web 的多渠道 AI 角色扮演系统,围绕 QQ Bot 构建,并扩展到 Web、CLI、Telegram 与 Feishu。\n\n
\n\n## Overview\n\nNekoBot 是一个面向角色扮演与长期互动场景的 AI 系统。项目采用统一 AI 内核与频道适配层分离的架构,在保留 QQ Bot 使用方式的同时,提供完整的 Web 管理后台、角色运行时、记忆系统、工具调用与工作区能力。\n\n它的核心目标不是单纯提供“聊天接口”,而是提供一套可持续运行、可配置、可观测、可扩展的角色型智能体基础设施。\n\n## Core Capabilities\n\n- 多渠道接入:支持 QQ、Web、CLI、Telegram、Feishu,共用统一的 `ChatRequest / ChatResponse` 处理链路。\n- 角色运行时:内置实时情感引擎、六维关系模型、动态 PromptStack、自动状态评估与角色记忆。\n- Web 控制台:提供会话管理、角色管理、模型配置、工作流、知识库、记忆、日志与调试界面。\n- 工具与工作区:支持工具调用、文件读写、共享/私有工作区、文件变更预览与任务执行。\n- 模型适配:兼容 OpenAI 风格接口,可接入 MiniMax、SiliconFlow、Anthropic 及其他兼容服务。\n- 插件与技能:支持通过插件与技能系统扩展能力,而不破坏核心处理流程。\n\n## Architecture\n\n项目围绕“统一 AI 内核 + 多渠道适配”的原则组织:\n\n```text\nbot.py\n└── nbot/\n ├── commands.py # QQ command handlers, BotClient init\n ├── core/ # Unified AI pipeline\n │ ├── chat_models.py # ChatRequest / ChatResponse\n │ ├── agent_service.py # Main AI entry\n │ ├── ai_pipeline.py # Pre-process -> chat -> post-process\n │ ├── session_store.py # Unified session state\n │ ├── model_adapter.py # Cross-provider model adapter\n │ ├── workspace.py # Per-session file workspace\n │ ├── auto_memory.py # Automatic memory extraction\n │ └── workflow.py # Workflow executor\n ├── character/ # Affective runtime and relationship model\n ├── channels/ # QQ, Web, Telegram, Feishu adapters\n ├── services/ # AI client, chat service, tools, TTS/STT\n ├── plugins/ # Plugin and skill system\n ├── gateway/ # Message bus, routing, delivery, dedupe\n ├── web/ # Flask blueprints, Socket.IO events, dashboard\n └── cli/ # Terminal UI\n```\n\n请求流如下:\n\n```text\nChannel Adapter\n -> ChatRequest\n -> Agent Service / AI Pipeline\n -> Character Runtime (before_turn / after_turn)\n -> Model Adapter / AI Client\n -> ChatResponse\n -> Channel Adapter\n```\n\n## Runtime Features\n\n### Character Runtime\n\n`nbot/character/` 提供角色运行时,用于把“角色设定”转化为持续一致的对话行为:\n\n- `PromptStack`:按优先级动态拼装提示词,而不是把所有状态污染进历史消息。\n- `StateMachine`:控制情绪惯性与关系平滑变化,避免单轮输入导致剧烈失真。\n- `AutoState`:定期总结近期互动,自动调整情绪强度、精力与六维关系值。\n- `Memory`:支持按角色、按用户隔离的长期与短期记忆。\n- `ReactionPlan`:在每轮回复前生成风格与行为策略,约束角色输出。\n\n### Workspace and Tools\n\n系统支持私有工作区与共享工作区:\n\n- 私有工作区绑定当前会话。\n- 共享工作区可被多个会话访问。\n- 文件创建、修改、删除、传输与差异预览可通过 Web 界面管理。\n- 工具系统支持在对话中触发文件、搜索、执行等能力。\n\n### Web Dashboard\n\nWeb 后台覆盖日常运维与调试需求:\n\n- 会话与聊天管理\n- 角色卡创建、编辑、导入、导出\n- AI 模型配置与切换\n- 记忆、知识库、技能、工具管理\n- 工作流与定时任务\n- Token 统计、日志、调试与运行状态查看\n\n## Requirements\n\n- Python 3.10+\n- NapCatQQ\n- ncatbot 3.8.5\n- 可用的 OpenAI-compatible API 服务\n\n说明:\n\n- `.env` 是首选配置来源。\n- `config.ini` 仍作为 QQ 连接参数的兼容回退。\n- 项目默认使用 Flask + Flask-SocketIO + Eventlet 提供 Web 服务。\n\n## Installation\n\n```bash\ngit clone https://github.com/asukaneko/nekobot.git\ncd nekobot\npython -m pip install -r requirements.txt\n```\n\n复制环境变量模板并填写必要配置:\n\n```bash\ncp .env.example .env\n```\n\n至少建议先配置:\n\n```env\nWEB_PASSWORD=your_web_password\n```\n\n如需启用 QQ Bot,还需要补充:\n\n```env\nBOT_UIN=your_qq_number\nROOT=your_admin_qq_number\nWS_URI=ws://your_napcat_host:port\nTOKEN=your_napcat_token\n```\n\nAI 服务的最小示例:\n\n```env\nAPI_KEY=your_api_key\nBASE_URL=https://your-openai-compatible-endpoint/v1\nMODEL=your_model_name\n```\n\n## Running\n\n```bash\n# QQ + Web\npython bot.py\n\n# Web only\npython bot.py --only-web\n\n# Web only on custom host/port\npython bot.py --only-web --web-host 0.0.0.0 --web-port 5000\n\n# CLI only\npython bot.py --cli\n\n# CLI + Web\npython bot.py --cli-and-web\n\n# QQ only\npython bot.py --no-web\n```\n\n默认情况下:\n\n- 若检测到 QQ 相关配置,启动 `QQ + Web`。\n- 若未检测到 QQ 配置,项目可仅以 Web 模式运行。\n\n## Development Notes\n\n- 目标 Python 版本为 `3.10`。\n- 代码风格使用 Ruff,行宽 100,双引号,空格缩进。\n- `nbot/core/` 不应依赖频道层模块。\n- 所有新频道都应通过 `BaseChannelAdapter` 接入,而不是直接调用模型。\n- 角色逻辑应通过 `before_turn()` / `after_turn()` 挂入统一流水线。\n\n常用检查命令:\n\n```bash\nruff check .\npython -m compileall -q bot.py nbot tools\npython -m pytest -q\n```\n\nCI 主要执行:\n\n1. `ruff check . --select E9,F63,F7,F82`\n2. `python -m compileall -q bot.py nbot tools`\n3. `python -m pip install -r requirements.txt`\n4. `python -m pytest -q`\n\n## Documentation\n\n更详细的使用与开发文档位于 `docs/`:\n\n- 快速开始:[docs/docs/guide/quick-start.md](docs/docs/guide/quick-start.md)\n- 命令说明:[docs/docs/guide/commands.md](docs/docs/guide/commands.md)\n- 频道接入:[docs/docs/guide/channels.md](docs/docs/guide/channels.md)\n- 贡献指南:[docs/CONTRIBUTING.md](docs/CONTRIBUTING.md)\n- 更新记录:[docs/CHANGELOG.md](docs/CHANGELOG.md)\n\n## Security Notes\n\n- 不要将 Web 后台直接暴露到公网且不做额外防护。\n- 请为 `WEB_PASSWORD`、API Key、NapCat Token 设置有效且独立的密钥。\n- 不要提交 `.env`、真实凭据或运行时敏感数据到仓库。\n- 机器人运行期间,不要手动修改 `data/character/` 下的持久化文件。\n\n## License\n\n本项目基于 MIT License 发布,详见 [LICENSE](LICENSE)。\n\n## Acknowledgements\n\n- [NapCatQQ](https://github.com/NapNeko/NapCatQQ)\n- [ncatbot](https://github.com/NapNeko/NcatBot)\n"}, "895f041aea899515eae6d71b6f75e88834d8bf17": {"t": 1785771785.256521, "n": 9254, "h": "86b274c628c7f9c4", "c": "# NekoBot\n![cover](docs/cover.png)\n\n
\n\n![Python](https://img.shields.io/badge/Python-3.11+-3776AB?style=flat&logo=python&logoColor=white)\n![License](https://img.shields.io/badge/License-MIT-2ea043?style=flat)\n![Web](https://img.shields.io/badge/Web-Dashboard-ec4899?style=flat)\n![QQ](https://img.shields.io/badge/QQ-NapCat%20%2B%20ncatbot-58a6ff?style=flat)\n\n一个面向Web的多频道 AI 角色扮演项目,集成角色卡系统、聊天、工作区、工具调用、知识库、记忆、工作流与可视化管理后台。\n\n
\n\n---\n\n## 项目简介\n\nNekoBot是一个多频道 AI 角色扮演系统:\n\n- **角色扮演系统** - 支持创建、导入/导出角色卡,AI辅助生成角色,角色立绘AI生成\n- **实时情感引擎** - 独立角色运行时,支持情绪惯性、6 回合 AI 状态评估、关系系统、动态提示词栈、ReactionPlan \n- 拥有AI管道,支持多频道接入\n- 支持会话级与共享工作区\n- 支持工具调用、文件读写、搜索、知识库检索\n- 提供 Web 仪表盘、AI 配置中心、工作流、日志与调试界面\n- 支持保存多模型配置,并在运行时切换\n\n---\n\n## 当前能力\n\n### 角色扮演系统\n\nNekoBot 提供完整的 AI 角色扮演解决方案:\n\n**角色卡管理**\n- 可视化角色卡编辑器,支持角色名称、描述、性格、背景故事等详细设定\n- 角色立绘支持本地上传或 AI 生成(需配置图片生成模型)\n- 角色卡导入/导出功能,支持单角色 ZIP 格式和批量导入导出\n- AI 辅助创建角色,根据描述自动生成完整的角色设定\n\n**实时情感引擎(Character Runtime)**\n- 动态提示词栈(PromptStack) - 支持多模块动态注册提示词注入项,按优先级合成,不污染历史消息\n- 角色运行时状态- 每个会话/用户独立的角色状态(心情、情绪强度、精力、场景)\n- 关系系统 - 六维关系模型:好感、信任、熟悉、依赖、安全感、嫉妒\n- 信号分析器 - 分析用户输入中的情绪信号(夸奖、拒绝、亲密、敌意、关心等)\n- 反应计划(ReactionPlan) - 每轮动态生成回复策略,控制情绪表达和回复风格\n- 状态机 - 情绪惯性更新,关系值平滑变化,避免暴涨暴跌\n- 自动状态评估 - 类似自动记忆,每 6 回合调用当前 AI 汇总近期互动,调整情绪强度、精力和六维关系\n- 角色记忆服务 - 按角色+用户隔离的记忆检索与存储\n\n**记忆系统(按角色隔离)**\n- 每个角色拥有独立的记忆空间,不同角色的记忆互不干扰\n- 支持长期记忆和短期记忆(可设置过期时间)\n- 记忆与角色绑定,切换角色时自动加载对应记忆\n- 工具调用(save_to_memory / read_memory)自动关联当前角色\n\n**多角色切换**\n- Web 端支持多角色会话,每个会话可指定不同角色\n- QQ 端支持全局角色切换\n- 角色状态(好感度、心情等)独立保存\n\n### 核心 AI 能力\n\n- 统一的 `ChatRequest / ChatResponse` 处理链路\n- 支持普通聊天与工具调用聊天\n- 支持继续执行、上下文裁剪、消息历史管理\n- 支持多模型配置与运行时切换\n- 支持不同厂商模型的适配层\n- 支持 7 种模型用途:对话、图片理解、视频理解、语音合成、语音识别、向量嵌入、图片生成\n\n### Web 管理后台\n\n- 仪表盘首页\n- **角色卡管理** - 创建、编辑、导入/导出角色,AI辅助生成角色\n- Web 会话与 QQ 会话管理\n- AI 配置中心与模型卡片\n- 工具、技能、知识库、记忆管理\n- 工作流与定时任务\n- Token 用量、日志、调试面板\n- 文件变更卡片、进度卡片、步骤详情弹窗\n\n![控制台仪表盘](docs/msedge_jjN8tZ3X5i.png)\n*控制台仪表盘 - 监控机器人状态、消息趋势和系统健康*\n\n![AI配置中心](docs/msedge_9lvKu4CpVu.png)\n*AI配置中心 - 配置模型、API密钥和高级设置*\n\n**角色卡编辑器**\n- 完整的角色设定:名称、描述、性格、背景故事、开场白等\n- 角色立绘:支持本地上传或 AI 生成\n- 角色状态:好感度、心情等动态属性\n- 批量导入导出:支持 ZIP 格式,方便分享角色卡\n\n### 工作区能力\n\n- 私有工作区:当前会话独享\n- 共享工作区:所有会话可访问\n- 文件创建、修改、删除、发送\n- 文件变更预览与 diff 展示\n\n### QQ 侧能力\n\n- 命令系统\n- AI 对话(支持角色扮演模式)\n- 漫画相关功能\n- 轻小说相关功能\n- 定时任务与提醒\n- 群聊和私聊场景支持\n- 全局角色切换,所有会话共享同一角色设定\n\n---\n\n## 架构概览\n\n当前项目为\"统一 AI 内核 + 频道适配层\"的结构。\n\n### 启动层\n\n- `bot.py`\n 负责加载环境变量、注入运行时配置、启动 QQ 服务与 Web 服务。\n\n### 统一核心层\n\n- `nbot/core/chat_models.py`\n 统一 `ChatRequest` / `ChatResponse`\n- `nbot/core/agent_service.py`\n 统一 AI 处理入口\n- `nbot/core/session_store.py`\n 统一会话读写\n- `nbot/core/model_adapter.py`\n 统一模型请求与响应适配\n\n### 角色运行时层\n\n- `nbot/character/`\n 独立的实时情感引擎\n\n```\nnbot/character/\n├── models.py # 数据模型:角色卡、状态、关系、记忆、ReactionPlan\n├── compiler.py # 角色提示词编译器\n├── prompt_stack.py # 动态提示词栈\n├── prompt_builder.py # 提示词构建器\n├── runtime.py # 角色运行时引擎(before_turn / after_turn)\n├── auto_state.py # 6 回合 AI 状态评估(情绪强度、精力、六维关系)\n├── planner.py # 反应计划生成器\n├── state_machine.py # 状态机(情绪惯性、关系更新)\n├── policies.py # 信号分析器\n├── memory.py # 角色记忆服务\n├── repository.py # 数据仓库接口\n├── events.py # 事件系统与调试快照\n├── storage/ # 存储实现\n│ └── json_store.py # JSON 文件存储\n└── adapters/ # 适配器\n └── nekobot.py # NekoBot 桥接适配器\n```\n\n**角色运行时位置:**\n\n```\nChatRequest\n ↓\nAIPipeline\n ↓\nCharacterRuntime.before_turn()\n ├── 读取角色卡\n ├── 读取角色状态\n ├── 读取关系状态\n ├── 检索相关记忆\n ├── 分析用户输入信号\n ├── 生成 ReactionPlan\n └── 注册 PromptStack 注入项\n ↓\n模型调用 / 工具调用\n ↓\nCharacterRuntime.after_turn()\n ├── StateMachine 每轮更新情绪/关系\n ├── AutoState 每 6 回合调用 AI 更新情绪强度/六维关系\n ├── 保存运行时状态与关系状态\n └── 角色记忆服务抽取\n ↓\nPipeline AutoMemory\n └── 每 6 回合总结长期记忆\n ↓\nChatResponse\n```\n\n### 频道适配层\n\n- `nbot/channels/base.py`\n- `nbot/channels/qq.py`\n- `nbot/channels/web.py`\n\nQQ 与 Web 在这里完成输入输出归一化,而不是各自维护一套聊天内核。\n\n### 业务实现层\n\n- `nbot/services/`\n AI、工具、QQ 聊天主链\n- `nbot/web/`\n Web 服务、路由、Socket 事件、前端模板\n\n---\n\n## 目录结构\n\n```text\nNcatbot-comic-QQbot/\n├─ bot.py\n├─ config.ini\n├─ .env.example\n├─ requirements.txt\n├─ nbot/\n│ ├─ channels/ # 频道适配层(QQ / Web)\n│ ├─ core/ # 统一 AI 核心\n│ ├─ character/ # 实时情感引擎\n│ │ ├─ models.py # 数据模型\n│ │ ├─ runtime.py # 运行时引擎\n│ │ ├─ prompt_stack.py # 动态提示词栈\n│ │ ├─ planner.py # 反应计划生成器\n│ │ ├─ state_machine.py# 状态机\n│ │ ├─ repository.py # 数据仓库\n│ │ ├─ storage/ # 存储实现\n│ │ └─ adapters/ # 适配器\n│ ├─ plugins/ # 插件\n│ ├─ services/ # AI、工具、聊天服务\n│ └─ web/ # Web 后台与前端\n│ ├─ routes/ # API 路由\n│ │ ├─ personality.py # 角色卡管理\n│ │ ├─ ai_models.py # AI模型配置\n│ │ └─ memory.py # 记忆管理\n│ └─ templates/ # 前端模板\n├─ data/\n│ ├─ qq/ # QQ 相关运行数据\n│ ├─ character/ # 角色运行时数据(新增)\n│ │ ├─ profiles.json # 角色卡\n│ │ ├─ states.json # 角色状态\n│ │ ├─ relationships.json # 关系状态\n│ │ ├─ memories.json # 角色记忆\n│ │ ├─ events.json # 事件记录\n│ │ └─ debug_snapshots.json # 调试快照\n│ ├─ skills/ # Skills 存储\n│ ├─ web/ # Web 会话、模型、配置数据\n│ │ ├─ personality_presets.json # 系统角色预设\n│ │ ├─ custom_personality_presets.json # 自定义角色卡\n│ │ └─ memories.json # 记忆数据\n│ └─ workspaces/ # 私有 / 共享工作区\n├─ docs/\n│ ├─ README.md\n│ ├─ Chinese.md\n│ ├─ CHANGELOG.md\n│ └─ docs/\n└─ resources/\n ├─ config/\n └─ prompts/\n```\n\n---\n\n## 环境要求\n\n- Python 3.11+\n- NapCat\n- 可用的模型 API Key\n\n推荐先准备好:\n\n- NapCat 的 WebSocket 地址\n- 机器人 QQ 号\n- 管理员 QQ 号\n- 模型 API Key(对话模型)\n\n---\n\n## 安装\n\n### 1. 克隆仓库\n\n```bash\ngit clone https://github.com/asukaneko/nekobot.git\ncd nekobot\n```\n\n### 2. 安装依赖\n\n```bash\npip install -r requirements.txt\n```\n\n### 3. 配置环境变量\n\n优先推荐使用 `.env`,项目启动时会读取 `.env` 并注入运行时配置,不会自动回写 `config.ini`。\n\n你可以参考:\n\n- [`.env.example`](./.env.example)\n- [`config.ini`](./config.ini)\n\n和AI相关的配置都可以在Web端进行配置。\n一个最小可运行示例:\n\n```env\nWEB_PASSWORD=你的Web登录密码\n```\n\n---\n\n## 启动方式\n\n### 同时启动 QQ + Web\n\n```bash\npython bot.py\n```\n\n### 只启动 Web\n\n```bash\npython bot.py --only-web\n```\n\n### 禁用 Web,仅启动 QQ\n\n```bash\npython bot.py --no-web\n```\n\n### 自定义 Web 地址\n\n```bash\npython bot.py --web-host 0.0.0.0 --web-port 5000\n```\n\n---\n\n## 配置说明\n\n### 1. `.env` 与 `config.ini`\n\n当前推荐策略:\n\n- `.env` 作为运行时优先配置来源\n- `config.ini` 作为兼容和兜底配置\n- 启动时不会把 `.env` 反向写回 `config.ini`\n\n### 2. AI 模型配置\n\nWeb 端支持:\n\n- 保存多个模型配置\n- 应用指定模型配置到运行时\n- 测试连接\n- 显式声明模型能力\n - `supports_tools`\n - `supports_reasoning`\n - `supports_stream`\n\n### 3. 工作区\n\n工作区分为两种:\n\n- `private`\n 当前会话私有\n- `shared`\n 全局共享\n\n共享工作区默认位于:\n\n```text\ndata/workspaces/_shared\n```\n\n---\n\n## Web 后台功能一览\n\n进入 Web 后台后,可以直接使用这些模块:\n\n- 仪表盘\n- 聊天\n- 会话管理\n- AI 配置\n- 记忆管理\n- 知识库\n- Skills 配置\n- Tools 配置\n- 工作流\n- 定时任务\n- Token 用量\n- 系统日志\n- 调试台\n\n最近版本里,Web 会话侧还加入了:\n\n- 流式回复显示优化\n- `/命令` 候选面板\n- 文件变更卡片与差异预览\n- 移动端竖屏聊天输入区适配\n\n---\n\n## 实时情感引擎详解\n\n### PromptStack 动态提示词栈\n\n允许任意模块在任意阶段注册提示词注入项,最终统一合成为本轮顶部 system prompt。\n\n**核心原则:**\n- 动态注入只在本轮请求生效,不写入历史消息\n- 按优先级排序合成\n- 可调试、可观察\n\n**推荐优先级:**\n```\n10 global.safety\n20 app.behavior\n30 character.profile\n40 character.runtime_state\n50 character.relationship\n60 character.memories\n70 knowledge.rag\n80 tool.instructions\n90 character.reaction_plan\n```\n\n### 关系系统(六维模型)\n\n```python\naffection # 好感/亲密倾向 (0-100)\ntrust # 信任度 (0-100)\nfamiliarity # 熟悉度,影响随便程度和玩笑强度 (0-100)\ndependency # 依赖度,影响黏人程度 (0-100)\nsecurity # 安全感,低时更容易不安/试探 (0-100)\njealousy # 嫉妒,占有欲相关 (0-100)\n```\n\n### 情绪系统\n\n- **心情(mood)**: 开心、委屈、害羞、受伤、感动、幸福、不安、平静、生气等\n- **情绪强度(mood_intensity)**: 0.0 - 1.0\n- **情绪惯性**: 新情绪 = 旧情绪 × 0.75 + 信号 × 0.25,避免一句话突变\n- **周期 AI 评估**: 每 6 回合汇总近期对话,让 AI 输出 mood、mood_intensity_delta、energy_delta 和六维关系增量;系统会限幅到安全范围后保存\n- **精力(energy)**: 每轮微减,影响角色活跃度\n\n### ReactionPlan 反应计划\n\n每轮对话前生成,控制角色的回复策略:\n\n```python\nintent: str # 意图:respond / ask / initiate 等\ntone: str # 语气:natural / happy_clingy / hurt_but_soft 等\nvisible_emotion: str # 表面情绪\nhidden_emotion: str # 内心情绪\nstyle_controls: dict # 风格控制:长度、动作描写、主动性\nstate_deltas: dict # 状态变化量\nrelationship_deltas: dict # 关系变化量\n```\n\n### 调试与观察\n\n角色运行时支持完整的调试能力:\n\n```python\n# 每轮保存调试快照\n{\n \"prompt_injections\": [], # 本轮注入的提示词\n \"reaction_plan\": {}, # 反应计划\n \"state_before\": {}, # 变化前状态\n \"state_after\": {}, # 变化后状态\n \"relationship_before\": {},\n \"relationship_after\": {},\n \"retrieved_memories\": [], # 命中的记忆\n \"signals\": {} # 检测到的信号\n}\n```\n\n---\n\n## 常用命令示例\n\n项目的 QQ 命令较多,完整命令建议直接查看:\n\n- [docs/docs/guide/commands.md](./docs/docs/guide/commands.md)\n\n常见示例:\n\n```text\n/help\n/workspace\n/model # 切换模型\n/character # 切换角色\n/resume # 继承web端的会话\n/push # 推送当前会话到web端\n\n```\n\n---\n\n## 文档入口\n\n仓库内还保留了更细的文档:\n\n- [docs/CHANGELOG.md](./docs/CHANGELOG.md)\n- [docs/CONTRIBUTING.md](./docs/CONTRIBUTING.md)\n- [docs/docs/guide/quick-start.md](./docs/docs/guide/quick-start.md)\n\n如果你只想快速上手,优先看本 README 和 `quick-start`。\n\n---\n\n## 开发建议\n\n如果你要继续扩展这个项目,建议优先沿着当前架构走:\n\n- 新频道接入放到 `nbot/channels/`\n- 新的统一能力放到 `nbot/core/`\n- 角色相关扩展放到 `nbot/character/`\n- QQ / Web 特有逻辑尽量留在适配层\n- 工具、AI 服务和工作区能力放在 `nbot/services/`\n\n这样可以保持\"统一 AI 内核,多频道适配\"的结构不再回退。\n\n---\n\n## 安全提示\n\n- 不要直接把 Web 后台暴露到公网\n- 请为 `WEB_PASSWORD` 设置强密码\n- 不要把 API Key、NapCat Token、管理员 QQ 号提交到仓库\n- 对共享工作区中的写文件能力保持谨慎\n\n---\n\n## License\n\n本项目使用 MIT License。\n\n相关文件见:\n\n- [LICENSE](./LICENSE)\n\n---\n\n## 致谢\n\n- [NapCatQQ](https://github.com/NapNeko/NapCatQQ)\n- [ncatbot](https://github.com/NapNeko/NcatBot)\n\n
\n\nMade with care by [AsukaNeko](https://github.com/asukaneko)\n\n
\n"}, "fb935e4d8e2aa8b5ba48363482f57589e3d16b99": {"t": 1785771787.7804956, "n": 8949, "h": "b64e83c4bc0df278", "c": "# NekoBot\n![cover](docs/cover.png)\n\n
\n\n![Python](https://img.shields.io/badge/Python-3.11+-3776AB?style=flat&logo=python&logoColor=white)\n![License](https://img.shields.io/badge/License-MIT-2ea043?style=flat)\n![Web](https://img.shields.io/badge/Web-Dashboard-ec4899?style=flat)\n![QQ](https://img.shields.io/badge/QQ-NapCat%20%2B%20ncatbot-58a6ff?style=flat)\n\n一个面向Web的多频道 AI 角色扮演项目,集成角色卡系统、聊天、工作区、工具调用、知识库、记忆、工作流与可视化管理后台。\n\n
\n\n---\n\n## 项目简介\n\nNekoBot是一个多频道 AI 角色扮演系统:\n\n- **角色扮演系统** - 支持创建、导入/导出角色卡,AI辅助生成角色,角色立绘AI生成\n- **实时情感引擎** - 独立角色运行时,支持情绪惯性、关系系统、动态提示词栈、ReactionPlan \n- 拥有AI管道,支持多频道接入\n- 支持会话级与共享工作区\n- 支持工具调用、文件读写、搜索、知识库检索\n- 提供 Web 仪表盘、AI 配置中心、工作流、日志与调试界面\n- 支持保存多模型配置,并在运行时切换\n\n---\n\n## 当前能力\n\n### 角色扮演系统\n\nNekoBot 提供完整的 AI 角色扮演解决方案:\n\n**角色卡管理**\n- 可视化角色卡编辑器,支持角色名称、描述、性格、背景故事等详细设定\n- 角色立绘支持本地上传或 AI 生成(需配置图片生成模型)\n- 角色卡导入/导出功能,支持单角色 ZIP 格式和批量导入导出\n- AI 辅助创建角色,根据描述自动生成完整的角色设定\n\n**实时情感引擎(Character Runtime)**\n- 动态提示词栈(PromptStack) - 支持多模块动态注册提示词注入项,按优先级合成,不污染历史消息\n- 角色运行时状态- 每个会话/用户独立的角色状态(心情、情绪强度、精力、场景)\n- 关系系统 - 六维关系模型:好感、信任、熟悉、依赖、安全感、嫉妒\n- 信号分析器 - 分析用户输入中的情绪信号(夸奖、拒绝、亲密、敌意、关心等)\n- 反应计划(ReactionPlan) - 每轮动态生成回复策略,控制情绪表达和回复风格\n- 状态机 - 情绪惯性更新,关系值平滑变化,避免暴涨暴跌\n- 角色记忆服务 - 按角色+用户隔离的记忆检索与存储\n\n**记忆系统(按角色隔离)**\n- 每个角色拥有独立的记忆空间,不同角色的记忆互不干扰\n- 支持长期记忆和短期记忆(可设置过期时间)\n- 记忆与角色绑定,切换角色时自动加载对应记忆\n- 工具调用(save_to_memory / read_memory)自动关联当前角色\n\n**多角色切换**\n- Web 端支持多角色会话,每个会话可指定不同角色\n- QQ 端支持全局角色切换\n- 角色状态(好感度、心情等)独立保存\n\n### 核心 AI 能力\n\n- 统一的 `ChatRequest / ChatResponse` 处理链路\n- 支持普通聊天与工具调用聊天\n- 支持继续执行、上下文裁剪、消息历史管理\n- 支持多模型配置与运行时切换\n- 支持不同厂商模型的适配层\n- 支持 7 种模型用途:对话、图片理解、视频理解、语音合成、语音识别、向量嵌入、图片生成\n\n### Web 管理后台\n\n- 仪表盘首页\n- **角色卡管理** - 创建、编辑、导入/导出角色,AI辅助生成角色\n- Web 会话与 QQ 会话管理\n- AI 配置中心与模型卡片\n- 工具、技能、知识库、记忆管理\n- 工作流与定时任务\n- Token 用量、日志、调试面板\n- 文件变更卡片、进度卡片、步骤详情弹窗\n\n![控制台仪表盘](docs/msedge_jjN8tZ3X5i.png)\n*控制台仪表盘 - 监控机器人状态、消息趋势和系统健康*\n\n![AI配置中心](docs/msedge_9lvKu4CpVu.png)\n*AI配置中心 - 配置模型、API密钥和高级设置*\n\n**角色卡编辑器**\n- 完整的角色设定:名称、描述、性格、背景故事、开场白等\n- 角色立绘:支持本地上传或 AI 生成\n- 角色状态:好感度、心情等动态属性\n- 批量导入导出:支持 ZIP 格式,方便分享角色卡\n\n### 工作区能力\n\n- 私有工作区:当前会话独享\n- 共享工作区:所有会话可访问\n- 文件创建、修改、删除、发送\n- 文件变更预览与 diff 展示\n\n### QQ 侧能力\n\n- 命令系统\n- AI 对话(支持角色扮演模式)\n- 漫画相关功能\n- 轻小说相关功能\n- 定时任务与提醒\n- 群聊和私聊场景支持\n- 全局角色切换,所有会话共享同一角色设定\n\n---\n\n## 架构概览\n\n当前项目为\"统一 AI 内核 + 频道适配层\"的结构。\n\n### 启动层\n\n- `bot.py`\n 负责加载环境变量、注入运行时配置、启动 QQ 服务与 Web 服务。\n\n### 统一核心层\n\n- `nbot/core/chat_models.py`\n 统一 `ChatRequest` / `ChatResponse`\n- `nbot/core/agent_service.py`\n 统一 AI 处理入口\n- `nbot/core/session_store.py`\n 统一会话读写\n- `nbot/core/model_adapter.py`\n 统一模型请求与响应适配\n\n### 角色运行时层\n\n- `nbot/character/`\n 独立的实时情感引擎\n\n```\nnbot/character/\n├── models.py # 数据模型:角色卡、状态、关系、记忆、ReactionPlan\n├── compiler.py # 角色提示词编译器\n├── prompt_stack.py # 动态提示词栈\n├── prompt_builder.py # 提示词构建器\n├── runtime.py # 角色运行时引擎(before_turn / after_turn)\n├── planner.py # 反应计划生成器\n├── state_machine.py # 状态机(情绪惯性、关系更新)\n├── policies.py # 信号分析器\n├── memory.py # 角色记忆服务\n├── repository.py # 数据仓库接口\n├── events.py # 事件系统与调试快照\n├── storage/ # 存储实现\n│ └── json_store.py # JSON 文件存储\n└── adapters/ # 适配器\n └── nekobot.py # NekoBot 桥接适配器\n```\n\n**角色运行时位置:**\n\n```\nChatRequest\n ↓\nAIPipeline\n ↓\nCharacterRuntime.before_turn()\n ├── 读取角色卡\n ├── 读取角色状态\n ├── 读取关系状态\n ├── 检索相关记忆\n ├── 分析用户输入信号\n ├── 生成 ReactionPlan\n └── 注册 PromptStack 注入项\n ↓\n模型调用 / 工具调用\n ↓\nCharacterRuntime.after_turn()\n ├── 更新情绪\n ├── 更新关系\n ├── 写入事件\n ├── 抽取记忆\n └── 保存运行时状态\n ↓\nChatResponse\n```\n\n### 频道适配层\n\n- `nbot/channels/base.py`\n- `nbot/channels/qq.py`\n- `nbot/channels/web.py`\n\nQQ 与 Web 在这里完成输入输出归一化,而不是各自维护一套聊天内核。\n\n### 业务实现层\n\n- `nbot/services/`\n AI、工具、QQ 聊天主链\n- `nbot/web/`\n Web 服务、路由、Socket 事件、前端模板\n\n---\n\n## 目录结构\n\n```text\nNcatbot-comic-QQbot/\n├─ bot.py\n├─ config.ini\n├─ .env.example\n├─ requirements.txt\n├─ nbot/\n│ ├─ channels/ # 频道适配层(QQ / Web)\n│ ├─ core/ # 统一 AI 核心\n│ ├─ character/ # 实时情感引擎\n│ │ ├─ models.py # 数据模型\n│ │ ├─ runtime.py # 运行时引擎\n│ │ ├─ prompt_stack.py # 动态提示词栈\n│ │ ├─ planner.py # 反应计划生成器\n│ │ ├─ state_machine.py# 状态机\n│ │ ├─ repository.py # 数据仓库\n│ │ ├─ storage/ # 存储实现\n│ │ └─ adapters/ # 适配器\n│ ├─ plugins/ # 插件\n│ ├─ services/ # AI、工具、聊天服务\n│ └─ web/ # Web 后台与前端\n│ ├─ routes/ # API 路由\n│ │ ├─ personality.py # 角色卡管理\n│ │ ├─ ai_models.py # AI模型配置\n│ │ └─ memory.py # 记忆管理\n│ └─ templates/ # 前端模板\n├─ data/\n│ ├─ qq/ # QQ 相关运行数据\n│ ├─ character/ # 角色运行时数据(新增)\n│ │ ├─ profiles.json # 角色卡\n│ │ ├─ states.json # 角色状态\n│ │ ├─ relationships.json # 关系状态\n│ │ ├─ memories.json # 角色记忆\n│ │ ├─ events.json # 事件记录\n│ │ └─ debug_snapshots.json # 调试快照\n│ ├─ skills/ # Skills 存储\n│ ├─ web/ # Web 会话、模型、配置数据\n│ │ ├─ personality_presets.json # 系统角色预设\n│ │ ├─ custom_personality_presets.json # 自定义角色卡\n│ │ └─ memories.json # 记忆数据\n│ └─ workspaces/ # 私有 / 共享工作区\n├─ docs/\n│ ├─ README.md\n│ ├─ Chinese.md\n│ ├─ CHANGELOG.md\n│ └─ docs/\n└─ resources/\n ├─ config/\n └─ prompts/\n```\n\n---\n\n## 环境要求\n\n- Python 3.11+\n- NapCat\n- 可用的模型 API Key\n\n推荐先准备好:\n\n- NapCat 的 WebSocket 地址\n- 机器人 QQ 号\n- 管理员 QQ 号\n- 模型 API Key(对话模型)\n\n---\n\n## 安装\n\n### 1. 克隆仓库\n\n```bash\ngit clone https://github.com/asukaneko/nekobot.git\ncd nekobot\n```\n\n### 2. 安装依赖\n\n```bash\npip install -r requirements.txt\n```\n\n### 3. 配置环境变量\n\n优先推荐使用 `.env`,项目启动时会读取 `.env` 并注入运行时配置,不会自动回写 `config.ini`。\n\n你可以参考:\n\n- [`.env.example`](./.env.example)\n- [`config.ini`](./config.ini)\n\n和AI相关的配置都可以在Web端进行配置。\n一个最小可运行示例:\n\n```env\nWEB_PASSWORD=你的Web登录密码\n```\n\n---\n\n## 启动方式\n\n### 同时启动 QQ + Web\n\n```bash\npython bot.py\n```\n\n### 只启动 Web\n\n```bash\npython bot.py --only-web\n```\n\n### 禁用 Web,仅启动 QQ\n\n```bash\npython bot.py --no-web\n```\n\n### 自定义 Web 地址\n\n```bash\npython bot.py --web-host 0.0.0.0 --web-port 5000\n```\n\n---\n\n## 配置说明\n\n### 1. `.env` 与 `config.ini`\n\n当前推荐策略:\n\n- `.env` 作为运行时优先配置来源\n- `config.ini` 作为兼容和兜底配置\n- 启动时不会把 `.env` 反向写回 `config.ini`\n\n### 2. AI 模型配置\n\nWeb 端支持:\n\n- 保存多个模型配置\n- 应用指定模型配置到运行时\n- 测试连接\n- 显式声明模型能力\n - `supports_tools`\n - `supports_reasoning`\n - `supports_stream`\n\n### 3. 工作区\n\n工作区分为两种:\n\n- `private`\n 当前会话私有\n- `shared`\n 全局共享\n\n共享工作区默认位于:\n\n```text\ndata/workspaces/_shared\n```\n\n---\n\n## Web 后台功能一览\n\n进入 Web 后台后,可以直接使用这些模块:\n\n- 仪表盘\n- 聊天\n- 会话管理\n- AI 配置\n- 记忆管理\n- 知识库\n- Skills 配置\n- Tools 配置\n- 工作流\n- 定时任务\n- Token 用量\n- 系统日志\n- 调试台\n\n最近版本里,Web 会话侧还加入了:\n\n- 流式回复显示优化\n- `/命令` 候选面板\n- 文件变更卡片与差异预览\n- 移动端竖屏聊天输入区适配\n\n---\n\n## 实时情感引擎详解\n\n### PromptStack 动态提示词栈\n\n允许任意模块在任意阶段注册提示词注入项,最终统一合成为本轮顶部 system prompt。\n\n**核心原则:**\n- 动态注入只在本轮请求生效,不写入历史消息\n- 按优先级排序合成\n- 可调试、可观察\n\n**推荐优先级:**\n```\n10 global.safety\n20 app.behavior\n30 character.profile\n40 character.runtime_state\n50 character.relationship\n60 character.memories\n70 knowledge.rag\n80 tool.instructions\n90 character.reaction_plan\n```\n\n### 关系系统(六维模型)\n\n```python\naffection # 好感/亲密倾向 (0-100)\ntrust # 信任度 (0-100)\nfamiliarity # 熟悉度,影响随便程度和玩笑强度 (0-100)\ndependency # 依赖度,影响黏人程度 (0-100)\nsecurity # 安全感,低时更容易不安/试探 (0-100)\njealousy # 嫉妒,占有欲相关 (0-100)\n```\n\n### 情绪系统\n\n- **心情(mood)**: 开心、委屈、害羞、受伤、感动、幸福、不安、平静、生气等\n- **情绪强度(mood_intensity)**: 0.0 - 1.0\n- **情绪惯性**: 新情绪 = 旧情绪 × 0.75 + 信号 × 0.25,避免一句话突变\n- **精力(energy)**: 每轮微减,影响角色活跃度\n\n### ReactionPlan 反应计划\n\n每轮对话前生成,控制角色的回复策略:\n\n```python\nintent: str # 意图:respond / ask / initiate 等\ntone: str # 语气:natural / happy_clingy / hurt_but_soft 等\nvisible_emotion: str # 表面情绪\nhidden_emotion: str # 内心情绪\nstyle_controls: dict # 风格控制:长度、动作描写、主动性\nstate_deltas: dict # 状态变化量\nrelationship_deltas: dict # 关系变化量\n```\n\n### 调试与观察\n\n角色运行时支持完整的调试能力:\n\n```python\n# 每轮保存调试快照\n{\n \"prompt_injections\": [], # 本轮注入的提示词\n \"reaction_plan\": {}, # 反应计划\n \"state_before\": {}, # 变化前状态\n \"state_after\": {}, # 变化后状态\n \"relationship_before\": {},\n \"relationship_after\": {},\n \"retrieved_memories\": [], # 命中的记忆\n \"signals\": {} # 检测到的信号\n}\n```\n\n---\n\n## 常用命令示例\n\n项目的 QQ 命令较多,完整命令建议直接查看:\n\n- [docs/docs/guide/commands.md](./docs/docs/guide/commands.md)\n\n常见示例:\n\n```text\n/help\n/workspace\n/model # 切换模型\n/character # 切换角色\n/resume # 继承web端的会话\n/push # 推送当前会话到web端\n\n```\n\n---\n\n## 文档入口\n\n仓库内还保留了更细的文档:\n\n- [docs/CHANGELOG.md](./docs/CHANGELOG.md)\n- [docs/CONTRIBUTING.md](./docs/CONTRIBUTING.md)\n- [docs/docs/guide/quick-start.md](./docs/docs/guide/quick-start.md)\n\n如果你只想快速上手,优先看本 README 和 `quick-start`。\n\n---\n\n## 开发建议\n\n如果你要继续扩展这个项目,建议优先沿着当前架构走:\n\n- 新频道接入放到 `nbot/channels/`\n- 新的统一能力放到 `nbot/core/`\n- 角色相关扩展放到 `nbot/character/`\n- QQ / Web 特有逻辑尽量留在适配层\n- 工具、AI 服务和工作区能力放在 `nbot/services/`\n\n这样可以保持\"统一 AI 内核,多频道适配\"的结构不再回退。\n\n---\n\n## 安全提示\n\n- 不要直接把 Web 后台暴露到公网\n- 请为 `WEB_PASSWORD` 设置强密码\n- 不要把 API Key、NapCat Token、管理员 QQ 号提交到仓库\n- 对共享工作区中的写文件能力保持谨慎\n\n---\n\n## License\n\n本项目使用 MIT License。\n\n相关文件见:\n\n- [LICENSE](./LICENSE)\n\n---\n\n## 致谢\n\n- [NapCatQQ](https://github.com/NapNeko/NapCatQQ)\n- [ncatbot](https://github.com/NapNeko/NcatBot)\n\n
\n\nMade with care by [AsukaNeko](https://github.com/asukaneko)\n\n
\n"}, "e32ab86c4763a8b54114c7ab03112690ad837c42": {"t": 1785771790.022163, "n": 8924, "h": "f597a359a8b3aa3d", "c": "# NekoBot\n![cover](docs/cover.png)\n\n
\n\n![Python](https://img.shields.io/badge/Python-3.11+-3776AB?style=flat&logo=python&logoColor=white)\n![License](https://img.shields.io/badge/License-MIT-2ea043?style=flat)\n![Web](https://img.shields.io/badge/Web-Dashboard-ec4899?style=flat)\n![QQ](https://img.shields.io/badge/QQ-NapCat%20%2B%20ncatbot-58a6ff?style=flat)\n\n一个面向Web的多频道 AI 角色扮演项目,集成角色卡系统、聊天、工作区、工具调用、知识库、记忆、工作流与可视化管理后台。\n\n
\n\n---\n\n## 项目简介\n\nNekoBot是一个多频道 AI 角色扮演系统:\n\n- **角色扮演系统** - 支持创建、导入/导出角色卡,AI辅助生成角色,角色立绘AI生成\n- **实时情感引擎** - 独立角色运行时,支持情绪惯性、关系系统、动态提示词栈、ReactionPlan \n- 拥有AI管道,支持多频道接入\n- 支持会话级与共享工作区\n- 支持工具调用、文件读写、搜索、知识库检索\n- 提供 Web 仪表盘、AI 配置中心、工作流、日志与调试界面\n- 支持保存多模型配置,并在运行时切换\n\n---\n\n## 当前能力\n\n### 角色扮演系统\n\nNekoBot 提供完整的 AI 角色扮演解决方案:\n\n**角色卡管理**\n- 可视化角色卡编辑器,支持角色名称、描述、性格、背景故事等详细设定\n- 角色立绘支持本地上传或 AI 生成(需配置图片生成模型)\n- 角色卡导入/导出功能,支持单角色 ZIP 格式和批量导入导出\n- AI 辅助创建角色,根据描述自动生成完整的角色设定\n\n**实时情感引擎(Character Runtime)**\n- 动态提示词栈(PromptStack) - 支持多模块动态注册提示词注入项,按优先级合成,不污染历史消息\n- 角色运行时状态- 每个会话/用户独立的角色状态(心情、情绪强度、精力、场景)\n- 关系系统 - 六维关系模型:好感、信任、熟悉、依赖、安全感、嫉妒\n- 信号分析器 - 分析用户输入中的情绪信号(夸奖、拒绝、亲密、敌意、关心等)\n- 反应计划(ReactionPlan) - 每轮动态生成回复策略,控制情绪表达和回复风格\n- 状态机 - 情绪惯性更新,关系值平滑变化,避免暴涨暴跌\n- 角色记忆服务 - 按角色+用户隔离的记忆检索与存储\n\n**记忆系统(按角色隔离)**\n- 每个角色拥有独立的记忆空间,不同角色的记忆互不干扰\n- 支持长期记忆和短期记忆(可设置过期时间)\n- 记忆与角色绑定,切换角色时自动加载对应记忆\n- 工具调用(save_to_memory / read_memory)自动关联当前角色\n\n**多角色切换**\n- Web 端支持多角色会话,每个会话可指定不同角色\n- QQ 端支持全局角色切换\n- 角色状态(好感度、心情等)独立保存\n\n### 核心 AI 能力\n\n- 统一的 `ChatRequest / ChatResponse` 处理链路\n- 支持普通聊天与工具调用聊天\n- 支持继续执行、上下文裁剪、消息历史管理\n- 支持多模型配置与运行时切换\n- 支持不同厂商模型的适配层\n- 支持 7 种模型用途:对话、图片理解、视频理解、语音合成、语音识别、向量嵌入、图片生成\n\n### Web 管理后台\n\n- 仪表盘首页\n- **角色卡管理** - 创建、编辑、导入/导出角色,AI辅助生成角色\n- Web 会话与 QQ 会话管理\n- AI 配置中心与模型卡片\n- 工具、技能、知识库、记忆管理\n- 工作流与定时任务\n- Token 用量、日志、调试面板\n- 文件变更卡片、进度卡片、步骤详情弹窗\n\n![控制台仪表盘](docs/msedge_jjN8tZ3X5i.png)\n*控制台仪表盘 - 监控机器人状态、消息趋势和系统健康*\n\n![AI配置中心](docs/msedge_9lvKu4CpVu.png)\n*AI配置中心 - 配置模型、API密钥和高级设置*\n\n**角色卡编辑器**\n- 完整的角色设定:名称、描述、性格、背景故事、开场白等\n- 角色立绘:支持本地上传或 AI 生成\n- 角色状态:好感度、心情等动态属性\n- 批量导入导出:支持 ZIP 格式,方便分享角色卡\n\n### 工作区能力\n\n- 私有工作区:当前会话独享\n- 共享工作区:所有会话可访问\n- 文件创建、修改、删除、发送\n- 文件变更预览与 diff 展示\n\n### QQ 侧能力\n\n- 命令系统\n- AI 对话(支持角色扮演模式)\n- 漫画相关功能\n- 轻小说相关功能\n- 定时任务与提醒\n- 群聊和私聊场景支持\n- 全局角色切换,所有会话共享同一角色设定\n\n---\n\n## 架构概览\n\n当前项目为\"统一 AI 内核 + 频道适配层\"的结构。\n\n### 启动层\n\n- `bot.py`\n 负责加载环境变量、注入运行时配置、启动 QQ 服务与 Web 服务。\n\n### 统一核心层\n\n- `nbot/core/chat_models.py`\n 统一 `ChatRequest` / `ChatResponse`\n- `nbot/core/agent_service.py`\n 统一 AI 处理入口\n- `nbot/core/session_store.py`\n 统一会话读写\n- `nbot/core/model_adapter.py`\n 统一模型请求与响应适配\n\n### 角色运行时层\n\n- `nbot/character/`\n 独立的实时情感引擎\n\n```\nnbot/character/\n├── models.py # 数据模型:角色卡、状态、关系、记忆、ReactionPlan\n├── compiler.py # 角色提示词编译器\n├── prompt_stack.py # 动态提示词栈\n├── prompt_builder.py # 提示词构建器\n├── runtime.py # 角色运行时引擎(before_turn / after_turn)\n├── planner.py # 反应计划生成器\n├── state_machine.py # 状态机(情绪惯性、关系更新)\n├── policies.py # 信号分析器\n├── memory.py # 角色记忆服务\n├── repository.py # 数据仓库接口\n├── events.py # 事件系统与调试快照\n├── storage/ # 存储实现\n│ └── json_store.py # JSON 文件存储\n└── adapters/ # 适配器\n └── nekobot.py # NekoBot 桥接适配器\n```\n\n**角色运行时位置:**\n\n```\nChatRequest\n ↓\nAIPipeline\n ↓\nCharacterRuntime.before_turn()\n ├── 读取角色卡\n ├── 读取角色状态\n ├── 读取关系状态\n ├── 检索相关记忆\n ├── 分析用户输入信号\n ├── 生成 ReactionPlan\n └── 注册 PromptStack 注入项\n ↓\n模型调用 / 工具调用\n ↓\nCharacterRuntime.after_turn()\n ├── 更新情绪\n ├── 更新关系\n ├── 写入事件\n ├── 抽取记忆\n └── 保存运行时状态\n ↓\nChatResponse\n```\n\n### 频道适配层\n\n- `nbot/channels/base.py`\n- `nbot/channels/qq.py`\n- `nbot/channels/web.py`\n\nQQ 与 Web 在这里完成输入输出归一化,而不是各自维护一套聊天内核。\n\n### 业务实现层\n\n- `nbot/services/`\n AI、工具、QQ 聊天主链\n- `nbot/web/`\n Web 服务、路由、Socket 事件、前端模板\n\n---\n\n## 目录结构\n\n```text\nNcatbot-comic-QQbot/\n├─ bot.py\n├─ config.ini\n├─ .env.example\n├─ requirements.txt\n├─ nbot/\n│ ├─ channels/ # 频道适配层(QQ / Web)\n│ ├─ core/ # 统一 AI 核心\n│ ├─ character/ # 实时情感引擎\n│ │ ├─ models.py # 数据模型\n│ │ ├─ runtime.py # 运行时引擎\n│ │ ├─ prompt_stack.py # 动态提示词栈\n│ │ ├─ planner.py # 反应计划生成器\n│ │ ├─ state_machine.py# 状态机\n│ │ ├─ repository.py # 数据仓库\n│ │ ├─ storage/ # 存储实现\n│ │ └─ adapters/ # 适配器\n│ ├─ plugins/ # 插件\n│ ├─ services/ # AI、工具、聊天服务\n│ └─ web/ # Web 后台与前端\n│ ├─ routes/ # API 路由\n│ │ ├─ personality.py # 角色卡管理\n│ │ ├─ ai_models.py # AI模型配置\n│ │ └─ memory.py # 记忆管理\n│ └─ templates/ # 前端模板\n├─ data/\n│ ├─ qq/ # QQ 相关运行数据\n│ ├─ character/ # 角色运行时数据(新增)\n│ │ ├─ profiles.json # 角色卡\n│ │ ├─ states.json # 角色状态\n│ │ ├─ relationships.json # 关系状态\n│ │ ├─ memories.json # 角色记忆\n│ │ ├─ events.json # 事件记录\n│ │ └─ debug_snapshots.json # 调试快照\n│ ├─ skills/ # Skills 存储\n│ ├─ web/ # Web 会话、模型、配置数据\n│ │ ├─ personality_presets.json # 系统角色预设\n│ │ ├─ custom_personality_presets.json # 自定义角色卡\n│ │ └─ memories.json # 记忆数据\n│ └─ workspaces/ # 私有 / 共享工作区\n├─ docs/\n│ ├─ README.md\n│ ├─ Chinese.md\n│ ├─ CHANGELOG.md\n│ └─ docs/\n└─ resources/\n ├─ config/\n └─ prompts/\n```\n\n---\n\n## 环境要求\n\n- Python 3.11+\n- NapCat\n- 可用的模型 API Key\n\n推荐先准备好:\n\n- NapCat 的 WebSocket 地址\n- 机器人 QQ 号\n- 管理员 QQ 号\n- 模型 API Key(对话模型)\n\n---\n\n## 安装\n\n### 1. 克隆仓库\n\n```bash\ngit clone https://github.com/asukaneko/nekobot.git\ncd nekobot\n```\n\n### 2. 安装依赖\n\n```bash\npip install -r requirements.txt\n```\n\n### 3. 配置环境变量\n\n优先推荐使用 `.env`,项目启动时会读取 `.env` 并注入运行时配置,不会自动回写 `config.ini`。\n\n你可以参考:\n\n- [`.env.example`](./.env.example)\n- [`config.ini`](./config.ini)\n\n和AI相关的配置都可以在Web端进行配置。\n一个最小可运行示例:\n\n```env\nWEB_PASSWORD=你的Web登录密码\n```\n\n---\n\n## 启动方式\n\n### 同时启动 QQ + Web\n\n```bash\npython bot.py\n```\n\n### 只启动 Web\n\n```bash\npython bot.py --only-web\n```\n\n### 禁用 Web,仅启动 QQ\n\n```bash\npython bot.py --no-web\n```\n\n### 自定义 Web 地址\n\n```bash\npython bot.py --web-host 0.0.0.0 --web-port 5000\n```\n\n---\n\n## 配置说明\n\n### 1. `.env` 与 `config.ini`\n\n当前推荐策略:\n\n- `.env` 作为运行时优先配置来源\n- `config.ini` 作为兼容和兜底配置\n- 启动时不会把 `.env` 反向写回 `config.ini`\n\n### 2. AI 模型配置\n\nWeb 端支持:\n\n- 保存多个模型配置\n- 应用指定模型配置到运行时\n- 测试连接\n- 显式声明模型能力\n - `supports_tools`\n - `supports_reasoning`\n - `supports_stream`\n\n### 3. 工作区\n\n工作区分为两种:\n\n- `private`\n 当前会话私有\n- `shared`\n 全局共享\n\n共享工作区默认位于:\n\n```text\ndata/workspaces/_shared\n```\n\n---\n\n## Web 后台功能一览\n\n进入 Web 后台后,可以直接使用这些模块:\n\n- 仪表盘\n- 聊天\n- 会话管理\n- AI 配置\n- 记忆管理\n- 知识库\n- Skills 配置\n- Tools 配置\n- 工作流\n- 定时任务\n- Token 用量\n- 系统日志\n- 调试台\n\n最近版本里,Web 会话侧还加入了:\n\n- 流式回复显示优化\n- `/命令` 候选面板\n- 文件变更卡片与差异预览\n- 移动端竖屏聊天输入区适配\n\n---\n\n## 实时情感引擎详解\n\n### PromptStack 动态提示词栈\n\n允许任意模块在任意阶段注册提示词注入项,最终统一合成为本轮顶部 system prompt。\n\n**核心原则:**\n- 动态注入只在本轮请求生效,不写入历史消息\n- 按优先级排序合成\n- 可调试、可观察\n\n**推荐优先级:**\n```\n10 global.safety\n20 app.behavior\n30 character.profile\n40 character.runtime_state\n50 character.relationship\n60 character.memories\n70 knowledge.rag\n80 tool.instructions\n90 character.reaction_plan\n```\n\n### 关系系统(六维模型)\n\n```python\naffection # 好感/亲密倾向 (0-100)\ntrust # 信任度 (0-100)\nfamiliarity # 熟悉度,影响随便程度和玩笑强度 (0-100)\ndependency # 依赖度,影响黏人程度 (0-100)\nsecurity # 安全感,低时更容易不安/试探 (0-100)\njealousy # 嫉妒,占有欲相关 (0-100)\n```\n\n### 情绪系统\n\n- **心情(mood)**: 开心、委屈、害羞、受伤、感动、幸福、不安、平静、生气等\n- **情绪强度(mood_intensity)**: 0.0 - 1.0\n- **情绪惯性**: 新情绪 = 旧情绪 × 0.75 + 信号 × 0.25,避免一句话突变\n- **精力(energy)**: 每轮微减,影响角色活跃度\n\n### ReactionPlan 反应计划\n\n每轮对话前生成,控制角色的回复策略:\n\n```python\nintent: str # 意图:respond / ask / initiate 等\ntone: str # 语气:natural / happy_clingy / hurt_but_soft 等\nvisible_emotion: str # 表面情绪\nhidden_emotion: str # 内心情绪\nstyle_controls: dict # 风格控制:长度、动作描写、主动性\nstate_deltas: dict # 状态变化量\nrelationship_deltas: dict # 关系变化量\n```\n\n### 调试与观察\n\n角色运行时支持完整的调试能力:\n\n```python\n# 每轮保存调试快照\n{\n \"prompt_injections\": [], # 本轮注入的提示词\n \"reaction_plan\": {}, # 反应计划\n \"state_before\": {}, # 变化前状态\n \"state_after\": {}, # 变化后状态\n \"relationship_before\": {},\n \"relationship_after\": {},\n \"retrieved_memories\": [], # 命中的记忆\n \"signals\": {} # 检测到的信号\n}\n```\n\n---\n\n## 常用命令示例\n\n项目的 QQ 命令较多,完整命令建议直接查看:\n\n- [docs/docs/guide/commands.md](./docs/docs/guide/commands.md)\n\n常见示例:\n\n```text\n/help\n/workspace\n/ws_send <文件名>\n/summary_recent\n/summary_today\n/findbook <书名>\n/jm <漫画ID>\n```\n\n---\n\n## 文档入口\n\n仓库内还保留了更细的文档:\n\n- [docs/CHANGELOG.md](./docs/CHANGELOG.md)\n- [docs/CONTRIBUTING.md](./docs/CONTRIBUTING.md)\n- [docs/docs/guide/quick-start.md](./docs/docs/guide/quick-start.md)\n\n如果你只想快速上手,优先看本 README 和 `quick-start`。\n\n---\n\n## 开发建议\n\n如果你要继续扩展这个项目,建议优先沿着当前架构走:\n\n- 新频道接入放到 `nbot/channels/`\n- 新的统一能力放到 `nbot/core/`\n- 角色相关扩展放到 `nbot/character/`\n- QQ / Web 特有逻辑尽量留在适配层\n- 工具、AI 服务和工作区能力放在 `nbot/services/`\n\n这样可以保持\"统一 AI 内核,多频道适配\"的结构不再回退。\n\n---\n\n## 安全提示\n\n- 不要直接把 Web 后台暴露到公网\n- 请为 `WEB_PASSWORD` 设置强密码\n- 不要把 API Key、NapCat Token、管理员 QQ 号提交到仓库\n- 对共享工作区中的写文件能力保持谨慎\n\n---\n\n## License\n\n本项目使用 MIT License。\n\n相关文件见:\n\n- [LICENSE](./LICENSE)\n\n---\n\n## 致谢\n\n- [NapCatQQ](https://github.com/NapNeko/NapCatQQ)\n- [ncatbot](https://github.com/NapNeko/NcatBot)\n\n
\n\nMade with care by [AsukaNeko](https://github.com/asukaneko)\n\n
\n"}, "f314656e391cb23c5e051041377a659db0acdfab": {"t": 1785771791.4784737, "n": 5856, "h": "5869225d363229ee", "c": "# NekoBot\n![cover](docs/cover.png)\n\n
\n\n![Python](https://img.shields.io/badge/Python-3.11+-3776AB?style=flat&logo=python&logoColor=white)\n![License](https://img.shields.io/badge/License-MIT-2ea043?style=flat)\n![Web](https://img.shields.io/badge/Web-Dashboard-ec4899?style=flat)\n![QQ](https://img.shields.io/badge/QQ-NapCat%20%2B%20ncatbot-58a6ff?style=flat)\n\n一个面向 QQ 与 Web 的多频道 AI 角色扮演项目,集成角色卡系统、聊天、工作区、工具调用、知识库、记忆、工作流与可视化管理后台。\n\n
\n\n---\n\n## 项目简介\n\nNekoBot 最初是一个面向 QQ 的聊天机器人项目,现在已经演进为一套更完整的多频道 AI 角色扮演系统:\n\n- **角色扮演系统** - 支持创建、导入/导出角色卡,AI辅助生成角色,角色立绘AI生成\n- QQ 与 Web 共用同一套 AI 核心\n- 支持会话级与共享工作区\n- 支持工具调用、文件读写、搜索、知识库检索\n- 提供 Web 仪表盘、AI 配置中心、工作流、日志与调试界面\n- 支持保存多模型配置,并在运行时切换\n\n如果你想要的是:\n\n- 一个可以接入 NapCat 的 QQ 机器人\n- 一个带 Web 管理后台的 AI 助手\n- 一个支持角色扮演和角色卡管理的系统\n- 一个支持工作区操作和多轮工具调用的项目骨架\n\n这个项目已经具备这些能力。\n\n---\n\n## 当前能力\n\n### 角色扮演系统\n\nNekoBot 提供完整的 AI 角色扮演解决方案:\n\n**角色卡管理**\n- 可视化角色卡编辑器,支持角色名称、描述、性格、背景故事等详细设定\n- 角色立绘支持本地上传或 AI 生成(需配置图片生成模型)\n- 角色卡导入/导出功能,支持单角色 ZIP 格式和批量导入导出\n- AI 辅助创建角色,根据描述自动生成完整的角色设定\n\n**记忆系统(按角色隔离)**\n- 每个角色拥有独立的记忆空间,不同角色的记忆互不干扰\n- 支持长期记忆和短期记忆(可设置过期时间)\n- 记忆与角色绑定,切换角色时自动加载对应记忆\n- 工具调用(save_to_memory / read_memory)自动关联当前角色\n\n**多角色切换**\n- Web 端支持多角色会话,每个会话可指定不同角色\n- QQ 端支持全局角色切换\n- 角色状态(好感度、心情等)独立保存\n\n### 核心 AI 能力\n\n- 统一的 `ChatRequest / ChatResponse` 处理链路\n- 支持普通聊天与工具调用聊天\n- 支持继续执行、上下文裁剪、消息历史管理\n- 支持多模型配置与运行时切换\n- 支持不同厂商模型的适配层\n- 支持 7 种模型用途:对话、图片理解、视频理解、语音合成、语音识别、向量嵌入、图片生成\n\n### Web 管理后台\n\n- 仪表盘首页\n- **角色卡管理** - 创建、编辑、导入/导出角色,AI辅助生成角色\n- Web 会话与 QQ 会话管理\n- AI 配置中心与模型卡片\n- 工具、技能、知识库、记忆管理\n- 工作流与定时任务\n- Token 用量、日志、调试面板\n- 文件变更卡片、进度卡片、步骤详情弹窗\n\n![控制台仪表盘](docs/msedge_jjN8tZ3X5i.png)\n*控制台仪表盘 - 监控机器人状态、消息趋势和系统健康*\n\n![AI配置中心](docs/msedge_9lvKu4CpVu.png)\n*AI配置中心 - 配置模型、API密钥和高级设置*\n\n**角色卡编辑器**\n- 完整的角色设定:名称、描述、性格、背景故事、开场白等\n- 角色立绘:支持本地上传或 AI 生成\n- 角色状态:好感度、心情等动态属性\n- 批量导入导出:支持 ZIP 格式,方便分享角色卡\n\n### 工作区能力\n\n- 私有工作区:当前会话独享\n- 共享工作区:所有会话可访问\n- 文件创建、修改、删除、发送\n- 文件变更预览与 diff 展示\n\n### QQ 侧能力\n\n- 命令系统\n- AI 对话(支持角色扮演模式)\n- 漫画相关功能\n- 轻小说相关功能\n- 定时任务与提醒\n- 群聊和私聊场景支持\n- 全局角色切换,所有会话共享同一角色设定\n\n---\n\n## 架构概览\n\n当前项目已经从“QQ bot + Web 页面”演进为“统一 AI 内核 + 频道适配层”的结构。\n\n### 启动层\n\n- `bot.py`\n 负责加载环境变量、注入运行时配置、启动 QQ 服务与 Web 服务。\n\n### 统一核心层\n\n- `nbot/core/chat_models.py`\n 统一 `ChatRequest` / `ChatResponse`\n- `nbot/core/agent_service.py`\n 统一 AI 处理入口\n- `nbot/core/session_store.py`\n 统一会话读写\n- `nbot/core/model_adapter.py`\n 统一模型请求与响应适配\n\n### 频道适配层\n\n- `nbot/channels/base.py`\n- `nbot/channels/qq.py`\n- `nbot/channels/web.py`\n\nQQ 与 Web 在这里完成输入输出归一化,而不是各自维护一套聊天内核。\n\n### 业务实现层\n\n- `nbot/services/`\n AI、工具、QQ 聊天主链\n- `nbot/web/`\n Web 服务、路由、Socket 事件、前端模板\n\n---\n\n## 目录结构\n\n```text\nNcatbot-comic-QQbot/\n├─ bot.py\n├─ config.ini\n├─ .env.example\n├─ requirements.txt\n├─ nbot/\n│ ├─ channels/ # 频道适配层(QQ / Web)\n│ ├─ core/ # 统一 AI 核心\n│ ├─ plugins/ # 插件\n│ ├─ services/ # AI、工具、聊天服务\n│ └─ web/ # Web 后台与前端\n│ ├─ routes/ # API 路由\n│ │ ├─ personality.py # 角色卡管理\n│ │ ├─ ai_models.py # AI模型配置\n│ │ └─ memory.py # 记忆管理\n│ └─ templates/ # 前端模板\n├─ data/\n│ ├─ qq/ # QQ 相关运行数据\n│ ├─ skills/ # Skills 存储\n│ ├─ web/ # Web 会话、模型、配置数据\n│ │ ├─ personality_presets.json # 系统角色预设\n│ │ ├─ custom_personality_presets.json # 自定义角色卡\n│ │ └─ memories.json # 记忆数据\n│ └─ workspaces/ # 私有 / 共享工作区\n├─ docs/\n│ ├─ README.md\n│ ├─ Chinese.md\n│ ├─ CHANGELOG.md\n│ └─ docs/\n└─ resources/\n ├─ config/\n └─ prompts/\n```\n\n---\n\n## 环境要求\n\n- Python 3.11+\n- NapCat\n- 可用的模型 API Key\n\n推荐先准备好:\n\n- NapCat 的 WebSocket 地址\n- 机器人 QQ 号\n- 管理员 QQ 号\n- 模型 API Key(对话模型)\n\n---\n\n## 安装\n\n### 1. 克隆仓库\n\n```bash\ngit clone https://github.com/asukaneko/nekobot.git\ncd nekobot\n```\n\n### 2. 安装依赖\n\n```bash\npip install -r requirements.txt\n```\n\n### 3. 配置环境变量\n\n优先推荐使用 `.env`,项目启动时会读取 `.env` 并注入运行时配置,不会自动回写 `config.ini`。\n\n你可以参考:\n\n- [`.env.example`](./.env.example)\n- [`config.ini`](./config.ini)\n\n和AI相关的配置都可以在Web端进行配置。\n一个最小可运行示例:\n\n```env\nWEB_PASSWORD=你的Web登录密码\n```\n\n---\n\n## 启动方式\n\n### 同时启动 QQ + Web\n\n```bash\npython bot.py\n```\n\n### 只启动 Web\n\n```bash\npython bot.py --only-web\n```\n\n### 禁用 Web,仅启动 QQ\n\n```bash\npython bot.py --no-web\n```\n\n### 自定义 Web 地址\n\n```bash\npython bot.py --web-host 0.0.0.0 --web-port 5000\n```\n\n---\n\n## 配置说明\n\n### 1. `.env` 与 `config.ini`\n\n当前推荐策略:\n\n- `.env` 作为运行时优先配置来源\n- `config.ini` 作为兼容和兜底配置\n- 启动时不会把 `.env` 反向写回 `config.ini`\n\n### 2. AI 模型配置\n\nWeb 端支持:\n\n- 保存多个模型配置\n- 应用指定模型配置到运行时\n- 测试连接\n- 显式声明模型能力\n - `supports_tools`\n - `supports_reasoning`\n - `supports_stream`\n\n### 3. 工作区\n\n工作区分为两种:\n\n- `private`\n 当前会话私有\n- `shared`\n 全局共享\n\n共享工作区默认位于:\n\n```text\ndata/workspaces/_shared\n```\n\n---\n\n## Web 后台功能一览\n\n进入 Web 后台后,可以直接使用这些模块:\n\n- 仪表盘\n- 聊天\n- 会话管理\n- AI 配置\n- 记忆管理\n- 知识库\n- Skills 配置\n- Tools 配置\n- 工作流\n- 定时任务\n- Token 用量\n- 系统日志\n- 调试台\n\n最近版本里,Web 会话侧还加入了:\n\n- 流式回复显示优化\n- `/命令` 候选面板\n- 文件变更卡片与差异预览\n- 移动端竖屏聊天输入区适配\n\n---\n\n## 常用命令示例\n\n项目的 QQ 命令较多,完整命令建议直接查看:\n\n- [docs/docs/guide/commands.md](./docs/docs/guide/commands.md)\n\n常见示例:\n\n```text\n/help\n/workspace\n/ws_send <文件名>\n/summary_recent\n/summary_today\n/findbook <书名>\n/jm <漫画ID>\n```\n\n---\n\n## 文档入口\n\n仓库内还保留了更细的文档:\n\n- [docs/README.md](./docs/README.md)\n- [docs/Chinese.md](./docs/Chinese.md)\n- [docs/CHANGELOG.md](./docs/CHANGELOG.md)\n- [docs/CONTRIBUTING.md](./docs/CONTRIBUTING.md)\n- [docs/docs/guide/quick-start.md](./docs/docs/guide/quick-start.md)\n\n如果你只想快速上手,优先看本 README 和 `quick-start`。\n\n---\n\n## 开发建议\n\n如果你要继续扩展这个项目,建议优先沿着当前架构走:\n\n- 新频道接入放到 `nbot/channels/`\n- 新的统一能力放到 `nbot/core/`\n- QQ / Web 特有逻辑尽量留在适配层\n- 工具、AI 服务和工作区能力放在 `nbot/services/`\n\n这样可以保持“统一 AI 内核,多频道适配”的结构不再回退。\n\n---\n\n## 安全提示\n\n- 不要直接把 Web 后台暴露到公网\n- 请为 `WEB_PASSWORD` 设置强密码\n- 不要把 API Key、NapCat Token、管理员 QQ 号提交到仓库\n- 对共享工作区中的写文件能力保持谨慎\n\n---\n\n## License\n\n本项目使用 MIT License。\n\n相关文件见:\n\n- [LICENSE](./LICENSE)\n\n---\n\n## 致谢\n\n- [NapCatQQ](https://github.com/NapNeko/NapCatQQ)\n- [ncatbot](https://github.com/NapNeko/NcatBot)\n\n
\n\nMade with care by [AsukaNeko](https://github.com/asukaneko)\n\n
\n"}, "8438ff3c309432a3c77109c0934d395516765dc3": {"t": 1785771792.8432868, "n": 5856, "h": "94bcc4c30d6e5aaf", "c": "# NekoBot\n![cover](docs/cover.png)\n\n
\n\n![Python](https://img.shields.io/badge/Python-3.11+-3776AB?style=flat&logo=python&logoColor=white)\n![License](https://img.shields.io/badge/License-MIT-2ea043?style=flat)\n![Web](https://img.shields.io/badge/Web-Dashboard-ec4899?style=flat)\n![QQ](https://img.shields.io/badge/QQ-NapCat%20%2B%20ncatbot-58a6ff?style=flat)\n\n一个面向 QQ 与 Web 双频道的 AI 角色扮演项目,集成角色卡系统、聊天、工作区、工具调用、知识库、记忆、工作流与可视化管理后台。\n\n
\n\n---\n\n## 项目简介\n\nNekoBot 最初是一个面向 QQ 的聊天机器人项目,现在已经演进为一套更完整的多频道 AI 角色扮演系统:\n\n- **角色扮演系统** - 支持创建、导入/导出角色卡,AI辅助生成角色,角色立绘AI生成\n- QQ 与 Web 共用同一套 AI 核心\n- 支持会话级与共享工作区\n- 支持工具调用、文件读写、搜索、知识库检索\n- 提供 Web 仪表盘、AI 配置中心、工作流、日志与调试界面\n- 支持保存多模型配置,并在运行时切换\n\n如果你想要的是:\n\n- 一个可以接入 NapCat 的 QQ 机器人\n- 一个带 Web 管理后台的 AI 助手\n- 一个支持角色扮演和角色卡管理的系统\n- 一个支持工作区操作和多轮工具调用的项目骨架\n\n这个项目已经具备这些能力。\n\n---\n\n## 当前能力\n\n### 角色扮演系统\n\nNekoBot 提供完整的 AI 角色扮演解决方案:\n\n**角色卡管理**\n- 可视化角色卡编辑器,支持角色名称、描述、性格、背景故事等详细设定\n- 角色立绘支持本地上传或 AI 生成(需配置图片生成模型)\n- 角色卡导入/导出功能,支持单角色 ZIP 格式和批量导入导出\n- AI 辅助创建角色,根据描述自动生成完整的角色设定\n\n**记忆系统(按角色隔离)**\n- 每个角色拥有独立的记忆空间,不同角色的记忆互不干扰\n- 支持长期记忆和短期记忆(可设置过期时间)\n- 记忆与角色绑定,切换角色时自动加载对应记忆\n- 工具调用(save_to_memory / read_memory)自动关联当前角色\n\n**多角色切换**\n- Web 端支持多角色会话,每个会话可指定不同角色\n- QQ 端支持全局角色切换\n- 角色状态(好感度、心情等)独立保存\n\n### 核心 AI 能力\n\n- 统一的 `ChatRequest / ChatResponse` 处理链路\n- 支持普通聊天与工具调用聊天\n- 支持继续执行、上下文裁剪、消息历史管理\n- 支持多模型配置与运行时切换\n- 支持不同厂商模型的适配层\n- 支持 7 种模型用途:对话、图片理解、视频理解、语音合成、语音识别、向量嵌入、图片生成\n\n### Web 管理后台\n\n- 仪表盘首页\n- **角色卡管理** - 创建、编辑、导入/导出角色,AI辅助生成角色\n- Web 会话与 QQ 会话管理\n- AI 配置中心与模型卡片\n- 工具、技能、知识库、记忆管理\n- 工作流与定时任务\n- Token 用量、日志、调试面板\n- 文件变更卡片、进度卡片、步骤详情弹窗\n\n![控制台仪表盘](docs/msedge_jjN8tZ3X5i.png)\n*控制台仪表盘 - 监控机器人状态、消息趋势和系统健康*\n\n![AI配置中心](docs/msedge_9lvKu4CpVu.png)\n*AI配置中心 - 配置模型、API密钥和高级设置*\n\n**角色卡编辑器**\n- 完整的角色设定:名称、描述、性格、背景故事、开场白等\n- 角色立绘:支持本地上传或 AI 生成\n- 角色状态:好感度、心情等动态属性\n- 批量导入导出:支持 ZIP 格式,方便分享角色卡\n\n### 工作区能力\n\n- 私有工作区:当前会话独享\n- 共享工作区:所有会话可访问\n- 文件创建、修改、删除、发送\n- 文件变更预览与 diff 展示\n\n### QQ 侧能力\n\n- 命令系统\n- AI 对话(支持角色扮演模式)\n- 漫画相关功能\n- 轻小说相关功能\n- 定时任务与提醒\n- 群聊和私聊场景支持\n- 全局角色切换,所有会话共享同一角色设定\n\n---\n\n## 架构概览\n\n当前项目已经从“QQ bot + Web 页面”演进为“统一 AI 内核 + 频道适配层”的结构。\n\n### 启动层\n\n- `bot.py`\n 负责加载环境变量、注入运行时配置、启动 QQ 服务与 Web 服务。\n\n### 统一核心层\n\n- `nbot/core/chat_models.py`\n 统一 `ChatRequest` / `ChatResponse`\n- `nbot/core/agent_service.py`\n 统一 AI 处理入口\n- `nbot/core/session_store.py`\n 统一会话读写\n- `nbot/core/model_adapter.py`\n 统一模型请求与响应适配\n\n### 频道适配层\n\n- `nbot/channels/base.py`\n- `nbot/channels/qq.py`\n- `nbot/channels/web.py`\n\nQQ 与 Web 在这里完成输入输出归一化,而不是各自维护一套聊天内核。\n\n### 业务实现层\n\n- `nbot/services/`\n AI、工具、QQ 聊天主链\n- `nbot/web/`\n Web 服务、路由、Socket 事件、前端模板\n\n---\n\n## 目录结构\n\n```text\nNcatbot-comic-QQbot/\n├─ bot.py\n├─ config.ini\n├─ .env.example\n├─ requirements.txt\n├─ nbot/\n│ ├─ channels/ # 频道适配层(QQ / Web)\n│ ├─ core/ # 统一 AI 核心\n│ ├─ plugins/ # 插件\n│ ├─ services/ # AI、工具、聊天服务\n│ └─ web/ # Web 后台与前端\n│ ├─ routes/ # API 路由\n│ │ ├─ personality.py # 角色卡管理\n│ │ ├─ ai_models.py # AI模型配置\n│ │ └─ memory.py # 记忆管理\n│ └─ templates/ # 前端模板\n├─ data/\n│ ├─ qq/ # QQ 相关运行数据\n│ ├─ skills/ # Skills 存储\n│ ├─ web/ # Web 会话、模型、配置数据\n│ │ ├─ personality_presets.json # 系统角色预设\n│ │ ├─ custom_personality_presets.json # 自定义角色卡\n│ │ └─ memories.json # 记忆数据\n│ └─ workspaces/ # 私有 / 共享工作区\n├─ docs/\n│ ├─ README.md\n│ ├─ Chinese.md\n│ ├─ CHANGELOG.md\n│ └─ docs/\n└─ resources/\n ├─ config/\n └─ prompts/\n```\n\n---\n\n## 环境要求\n\n- Python 3.11+\n- NapCat\n- 可用的模型 API Key\n\n推荐先准备好:\n\n- NapCat 的 WebSocket 地址\n- 机器人 QQ 号\n- 管理员 QQ 号\n- 模型 API Key(对话模型)\n\n---\n\n## 安装\n\n### 1. 克隆仓库\n\n```bash\ngit clone https://github.com/asukaneko/nekobot.git\ncd nekobot\n```\n\n### 2. 安装依赖\n\n```bash\npip install -r requirements.txt\n```\n\n### 3. 配置环境变量\n\n优先推荐使用 `.env`,项目启动时会读取 `.env` 并注入运行时配置,不会自动回写 `config.ini`。\n\n你可以参考:\n\n- [`.env.example`](./.env.example)\n- [`config.ini`](./config.ini)\n\n和AI相关的配置都可以在Web端进行配置。\n一个最小可运行示例:\n\n```env\nWEB_PASSWORD=你的Web登录密码\n```\n\n---\n\n## 启动方式\n\n### 同时启动 QQ + Web\n\n```bash\npython bot.py\n```\n\n### 只启动 Web\n\n```bash\npython bot.py --only-web\n```\n\n### 禁用 Web,仅启动 QQ\n\n```bash\npython bot.py --no-web\n```\n\n### 自定义 Web 地址\n\n```bash\npython bot.py --web-host 0.0.0.0 --web-port 5000\n```\n\n---\n\n## 配置说明\n\n### 1. `.env` 与 `config.ini`\n\n当前推荐策略:\n\n- `.env` 作为运行时优先配置来源\n- `config.ini` 作为兼容和兜底配置\n- 启动时不会把 `.env` 反向写回 `config.ini`\n\n### 2. AI 模型配置\n\nWeb 端支持:\n\n- 保存多个模型配置\n- 应用指定模型配置到运行时\n- 测试连接\n- 显式声明模型能力\n - `supports_tools`\n - `supports_reasoning`\n - `supports_stream`\n\n### 3. 工作区\n\n工作区分为两种:\n\n- `private`\n 当前会话私有\n- `shared`\n 全局共享\n\n共享工作区默认位于:\n\n```text\ndata/workspaces/_shared\n```\n\n---\n\n## Web 后台功能一览\n\n进入 Web 后台后,可以直接使用这些模块:\n\n- 仪表盘\n- 聊天\n- 会话管理\n- AI 配置\n- 记忆管理\n- 知识库\n- Skills 配置\n- Tools 配置\n- 工作流\n- 定时任务\n- Token 用量\n- 系统日志\n- 调试台\n\n最近版本里,Web 会话侧还加入了:\n\n- 流式回复显示优化\n- `/命令` 候选面板\n- 文件变更卡片与差异预览\n- 移动端竖屏聊天输入区适配\n\n---\n\n## 常用命令示例\n\n项目的 QQ 命令较多,完整命令建议直接查看:\n\n- [docs/docs/guide/commands.md](./docs/docs/guide/commands.md)\n\n常见示例:\n\n```text\n/help\n/workspace\n/ws_send <文件名>\n/summary_recent\n/summary_today\n/findbook <书名>\n/jm <漫画ID>\n```\n\n---\n\n## 文档入口\n\n仓库内还保留了更细的文档:\n\n- [docs/README.md](./docs/README.md)\n- [docs/Chinese.md](./docs/Chinese.md)\n- [docs/CHANGELOG.md](./docs/CHANGELOG.md)\n- [docs/CONTRIBUTING.md](./docs/CONTRIBUTING.md)\n- [docs/docs/guide/quick-start.md](./docs/docs/guide/quick-start.md)\n\n如果你只想快速上手,优先看本 README 和 `quick-start`。\n\n---\n\n## 开发建议\n\n如果你要继续扩展这个项目,建议优先沿着当前架构走:\n\n- 新频道接入放到 `nbot/channels/`\n- 新的统一能力放到 `nbot/core/`\n- QQ / Web 特有逻辑尽量留在适配层\n- 工具、AI 服务和工作区能力放在 `nbot/services/`\n\n这样可以保持“统一 AI 内核,多频道适配”的结构不再回退。\n\n---\n\n## 安全提示\n\n- 不要直接把 Web 后台暴露到公网\n- 请为 `WEB_PASSWORD` 设置强密码\n- 不要把 API Key、NapCat Token、管理员 QQ 号提交到仓库\n- 对共享工作区中的写文件能力保持谨慎\n\n---\n\n## License\n\n本项目使用 MIT License。\n\n相关文件见:\n\n- [LICENSE](./LICENSE)\n\n---\n\n## 致谢\n\n- [NapCatQQ](https://github.com/NapNeko/NapCatQQ)\n- [ncatbot](https://github.com/NapNeko/NcatBot)\n\n
\n\nMade with care by [AsukaNeko](https://github.com/asukaneko)\n\n
\n"}, "898af204f0ea333c5539d4233f86c875b32ed3e7": {"t": 1785771795.2579439, "n": 4836, "h": "b47149247b6c92fb", "c": "# NekoBot\n![cover](docs/cover.png)\n\n
\n\n![Python](https://img.shields.io/badge/Python-3.11+-3776AB?style=flat&logo=python&logoColor=white)\n![License](https://img.shields.io/badge/License-MIT-2ea043?style=flat)\n![Web](https://img.shields.io/badge/Web-Dashboard-ec4899?style=flat)\n![QQ](https://img.shields.io/badge/QQ-NapCat%20%2B%20ncatbot-58a6ff?style=flat)\n\n一个面向 QQ 与 Web 双频道的 AI 机器人项目,集成聊天、工作区、工具调用、知识库、记忆、工作流与可视化管理后台。\n\n
\n\n---\n\n## 项目简介\n\nNekoBot 最初是一个面向 QQ 的机器人项目,现在已经演进为一套更完整的多频道 AI 助手系统:\n\n- QQ 与 Web 共用同一套 AI 核心\n- 支持会话级与共享工作区\n- 支持工具调用、文件读写、搜索、知识库检索\n- 提供 Web 仪表盘、AI 配置中心、工作流、日志与调试界面\n- 支持保存多模型配置,并在运行时切换\n\n如果你想要的是:\n\n- 一个可以接入 NapCat 的 QQ 机器人\n- 一个带 Web 管理后台的 AI 助手\n- 一个支持工作区操作和多轮工具调用的项目骨架\n\n这个项目已经具备这些能力。\n\n---\n\n## 当前能力\n\n### 核心 AI 能力\n\n- 统一的 `ChatRequest / ChatResponse` 处理链路\n- 支持普通聊天与工具调用聊天\n- 支持继续执行、上下文裁剪、消息历史管理\n- 支持多模型配置与运行时切换\n- 支持不同厂商模型的适配层\n\n### Web 管理后台\n\n- 仪表盘首页\n- Web 会话与 QQ 会话管理\n- AI 配置中心与模型卡片\n- 工具、技能、知识库、记忆管理\n- 工作流与定时任务\n- Token 用量、日志、调试面板\n- 文件变更卡片、进度卡片、步骤详情弹窗\n\n![控制台仪表盘](docs/msedge_jjN8tZ3X5i.png)\n*控制台仪表盘 - 监控机器人状态、消息趋势和系统健康*\n\n![AI配置中心](docs/msedge_9lvKu4CpVu.png)\n*AI配置中心 - 配置模型、API密钥和高级设置*\n\n### 工作区能力\n\n- 私有工作区:当前会话独享\n- 共享工作区:所有会话可访问\n- 文件创建、修改、删除、发送\n- 文件变更预览与 diff 展示\n\n### QQ 侧能力\n\n- 命令系统\n- AI 对话\n- 漫画相关功能\n- 轻小说相关功能\n- 定时任务与提醒\n- 群聊和私聊场景支持\n\n---\n\n## 架构概览\n\n当前项目已经从“QQ bot + Web 页面”演进为“统一 AI 内核 + 频道适配层”的结构。\n\n### 启动层\n\n- `bot.py`\n 负责加载环境变量、注入运行时配置、启动 QQ 服务与 Web 服务。\n\n### 统一核心层\n\n- `nbot/core/chat_models.py`\n 统一 `ChatRequest` / `ChatResponse`\n- `nbot/core/agent_service.py`\n 统一 AI 处理入口\n- `nbot/core/session_store.py`\n 统一会话读写\n- `nbot/core/model_adapter.py`\n 统一模型请求与响应适配\n\n### 频道适配层\n\n- `nbot/channels/base.py`\n- `nbot/channels/qq.py`\n- `nbot/channels/web.py`\n\nQQ 与 Web 在这里完成输入输出归一化,而不是各自维护一套聊天内核。\n\n### 业务实现层\n\n- `nbot/services/`\n AI、工具、QQ 聊天主链\n- `nbot/web/`\n Web 服务、路由、Socket 事件、前端模板\n\n---\n\n## 目录结构\n\n```text\nNcatbot-comic-QQbot/\n├─ bot.py\n├─ config.ini\n├─ .env.example\n├─ requirements.txt\n├─ nbot/\n│ ├─ channels/ # 频道适配层(QQ / Web)\n│ ├─ core/ # 统一 AI 核心\n│ ├─ plugins/ # 插件\n│ ├─ services/ # AI、工具、聊天服务\n│ └─ web/ # Web 后台与前端\n├─ data/\n│ ├─ qq/ # QQ 相关运行数据\n│ ├─ skills/ # Skills 存储\n│ ├─ web/ # Web 会话、模型、配置数据\n│ └─ workspaces/ # 私有 / 共享工作区\n├─ docs/\n│ ├─ README.md\n│ ├─ Chinese.md\n│ ├─ CHANGELOG.md\n│ └─ docs/\n└─ resources/\n ├─ config/\n └─ prompts/\n```\n\n---\n\n## 环境要求\n\n- Python 3.11+\n- NapCat\n- 可用的模型 API Key\n\n推荐先准备好:\n\n- NapCat 的 WebSocket 地址\n- 机器人 QQ 号\n- 管理员 QQ 号\n- 模型 API Key\n\n---\n\n## 安装\n\n### 1. 克隆仓库\n\n```bash\ngit clone https://github.com/asukaneko/nekobot.git\ncd nekobot\n```\n\n### 2. 安装依赖\n\n```bash\npip install -r requirements.txt\n```\n\n### 3. 配置环境变量\n\n优先推荐使用 `.env`,项目启动时会读取 `.env` 并注入运行时配置,不会自动回写 `config.ini`。\n\n你可以参考:\n\n- [`.env.example`](./.env.example)\n- [`config.ini`](./config.ini)\n\n和AI相关的配置都可以在Web端进行配置。\n一个最小可运行示例:\n\n```env\nWEB_PASSWORD=你的Web登录密码\n```\n\n---\n\n## 启动方式\n\n### 同时启动 QQ + Web\n\n```bash\npython bot.py\n```\n\n### 只启动 Web\n\n```bash\npython bot.py --only-web\n```\n\n### 禁用 Web,仅启动 QQ\n\n```bash\npython bot.py --no-web\n```\n\n### 自定义 Web 地址\n\n```bash\npython bot.py --web-host 0.0.0.0 --web-port 5000\n```\n\n---\n\n## 配置说明\n\n### 1. `.env` 与 `config.ini`\n\n当前推荐策略:\n\n- `.env` 作为运行时优先配置来源\n- `config.ini` 作为兼容和兜底配置\n- 启动时不会把 `.env` 反向写回 `config.ini`\n\n### 2. AI 模型配置\n\nWeb 端支持:\n\n- 保存多个模型配置\n- 应用指定模型配置到运行时\n- 测试连接\n- 显式声明模型能力\n - `supports_tools`\n - `supports_reasoning`\n - `supports_stream`\n\n### 3. 工作区\n\n工作区分为两种:\n\n- `private`\n 当前会话私有\n- `shared`\n 全局共享\n\n共享工作区默认位于:\n\n```text\ndata/workspaces/_shared\n```\n\n---\n\n## Web 后台功能一览\n\n进入 Web 后台后,可以直接使用这些模块:\n\n- 仪表盘\n- 聊天\n- 会话管理\n- AI 配置\n- 记忆管理\n- 知识库\n- Skills 配置\n- Tools 配置\n- 工作流\n- 定时任务\n- Token 用量\n- 系统日志\n- 调试台\n\n最近版本里,Web 会话侧还加入了:\n\n- 流式回复显示优化\n- `/命令` 候选面板\n- 文件变更卡片与差异预览\n- 移动端竖屏聊天输入区适配\n\n---\n\n## 常用命令示例\n\n项目的 QQ 命令较多,完整命令建议直接查看:\n\n- [docs/docs/guide/commands.md](./docs/docs/guide/commands.md)\n\n常见示例:\n\n```text\n/help\n/workspace\n/ws_send <文件名>\n/summary_recent\n/summary_today\n/findbook <书名>\n/jm <漫画ID>\n```\n\n---\n\n## 文档入口\n\n仓库内还保留了更细的文档:\n\n- [docs/README.md](./docs/README.md)\n- [docs/Chinese.md](./docs/Chinese.md)\n- [docs/CHANGELOG.md](./docs/CHANGELOG.md)\n- [docs/CONTRIBUTING.md](./docs/CONTRIBUTING.md)\n- [docs/docs/guide/quick-start.md](./docs/docs/guide/quick-start.md)\n\n如果你只想快速上手,优先看本 README 和 `quick-start`。\n\n---\n\n## 开发建议\n\n如果你要继续扩展这个项目,建议优先沿着当前架构走:\n\n- 新频道接入放到 `nbot/channels/`\n- 新的统一能力放到 `nbot/core/`\n- QQ / Web 特有逻辑尽量留在适配层\n- 工具、AI 服务和工作区能力放在 `nbot/services/`\n\n这样可以保持“统一 AI 内核,多频道适配”的结构不再回退。\n\n---\n\n## 安全提示\n\n- 不要直接把 Web 后台暴露到公网\n- 请为 `WEB_PASSWORD` 设置强密码\n- 不要把 API Key、NapCat Token、管理员 QQ 号提交到仓库\n- 对共享工作区中的写文件能力保持谨慎\n\n---\n\n## License\n\n本项目使用 MIT License。\n\n相关文件见:\n\n- [LICENSE](./LICENSE)\n\n---\n\n## 致谢\n\n- [NapCatQQ](https://github.com/NapNeko/NapCatQQ)\n- [ncatbot](https://github.com/NapNeko/NcatBot)\n\n
\n\nMade with care by [AsukaNeko](https://github.com/asukaneko)\n\n
\n"}, "ecd9fc23dab1ba94a43e5089d698ac8ef2d803aa": {"t": 1785771796.6251626, "n": 4811, "h": "18c0d06a9c395e52", "c": "# NekoBot\n\n
\n\n![Python](https://img.shields.io/badge/Python-3.11+-3776AB?style=flat&logo=python&logoColor=white)\n![License](https://img.shields.io/badge/License-MIT-2ea043?style=flat)\n![Web](https://img.shields.io/badge/Web-Dashboard-ec4899?style=flat)\n![QQ](https://img.shields.io/badge/QQ-NapCat%20%2B%20ncatbot-58a6ff?style=flat)\n\n一个面向 QQ 与 Web 双频道的 AI 机器人项目,集成聊天、工作区、工具调用、知识库、记忆、工作流与可视化管理后台。\n\n
\n\n---\n\n## 项目简介\n\nNekoBot 最初是一个面向 QQ 的机器人项目,现在已经演进为一套更完整的多频道 AI 助手系统:\n\n- QQ 与 Web 共用同一套 AI 核心\n- 支持会话级与共享工作区\n- 支持工具调用、文件读写、搜索、知识库检索\n- 提供 Web 仪表盘、AI 配置中心、工作流、日志与调试界面\n- 支持保存多模型配置,并在运行时切换\n\n如果你想要的是:\n\n- 一个可以接入 NapCat 的 QQ 机器人\n- 一个带 Web 管理后台的 AI 助手\n- 一个支持工作区操作和多轮工具调用的项目骨架\n\n这个项目已经具备这些能力。\n\n---\n\n## 当前能力\n\n### 核心 AI 能力\n\n- 统一的 `ChatRequest / ChatResponse` 处理链路\n- 支持普通聊天与工具调用聊天\n- 支持继续执行、上下文裁剪、消息历史管理\n- 支持多模型配置与运行时切换\n- 支持不同厂商模型的适配层\n\n### Web 管理后台\n\n- 仪表盘首页\n- Web 会话与 QQ 会话管理\n- AI 配置中心与模型卡片\n- 工具、技能、知识库、记忆管理\n- 工作流与定时任务\n- Token 用量、日志、调试面板\n- 文件变更卡片、进度卡片、步骤详情弹窗\n\n![控制台仪表盘](docs/msedge_jjN8tZ3X5i.png)\n*控制台仪表盘 - 监控机器人状态、消息趋势和系统健康*\n\n![AI配置中心](docs/msedge_9lvKu4CpVu.png)\n*AI配置中心 - 配置模型、API密钥和高级设置*\n\n### 工作区能力\n\n- 私有工作区:当前会话独享\n- 共享工作区:所有会话可访问\n- 文件创建、修改、删除、发送\n- 文件变更预览与 diff 展示\n\n### QQ 侧能力\n\n- 命令系统\n- AI 对话\n- 漫画相关功能\n- 轻小说相关功能\n- 定时任务与提醒\n- 群聊和私聊场景支持\n\n---\n\n## 架构概览\n\n当前项目已经从“QQ bot + Web 页面”演进为“统一 AI 内核 + 频道适配层”的结构。\n\n### 启动层\n\n- `bot.py`\n 负责加载环境变量、注入运行时配置、启动 QQ 服务与 Web 服务。\n\n### 统一核心层\n\n- `nbot/core/chat_models.py`\n 统一 `ChatRequest` / `ChatResponse`\n- `nbot/core/agent_service.py`\n 统一 AI 处理入口\n- `nbot/core/session_store.py`\n 统一会话读写\n- `nbot/core/model_adapter.py`\n 统一模型请求与响应适配\n\n### 频道适配层\n\n- `nbot/channels/base.py`\n- `nbot/channels/qq.py`\n- `nbot/channels/web.py`\n\nQQ 与 Web 在这里完成输入输出归一化,而不是各自维护一套聊天内核。\n\n### 业务实现层\n\n- `nbot/services/`\n AI、工具、QQ 聊天主链\n- `nbot/web/`\n Web 服务、路由、Socket 事件、前端模板\n\n---\n\n## 目录结构\n\n```text\nNcatbot-comic-QQbot/\n├─ bot.py\n├─ config.ini\n├─ .env.example\n├─ requirements.txt\n├─ nbot/\n│ ├─ channels/ # 频道适配层(QQ / Web)\n│ ├─ core/ # 统一 AI 核心\n│ ├─ plugins/ # 插件\n│ ├─ services/ # AI、工具、聊天服务\n│ └─ web/ # Web 后台与前端\n├─ data/\n│ ├─ qq/ # QQ 相关运行数据\n│ ├─ skills/ # Skills 存储\n│ ├─ web/ # Web 会话、模型、配置数据\n│ └─ workspaces/ # 私有 / 共享工作区\n├─ docs/\n│ ├─ README.md\n│ ├─ Chinese.md\n│ ├─ CHANGELOG.md\n│ └─ docs/\n└─ resources/\n ├─ config/\n └─ prompts/\n```\n\n---\n\n## 环境要求\n\n- Python 3.11+\n- NapCat\n- 可用的模型 API Key\n\n推荐先准备好:\n\n- NapCat 的 WebSocket 地址\n- 机器人 QQ 号\n- 管理员 QQ 号\n- 模型 API Key\n\n---\n\n## 安装\n\n### 1. 克隆仓库\n\n```bash\ngit clone https://github.com/asukaneko/nekobot.git\ncd nekobot\n```\n\n### 2. 安装依赖\n\n```bash\npip install -r requirements.txt\n```\n\n### 3. 配置环境变量\n\n优先推荐使用 `.env`,项目启动时会读取 `.env` 并注入运行时配置,不会自动回写 `config.ini`。\n\n你可以参考:\n\n- [`.env.example`](./.env.example)\n- [`config.ini`](./config.ini)\n\n和AI相关的配置都可以在Web端进行配置。\n一个最小可运行示例:\n\n```env\nWEB_PASSWORD=你的Web登录密码\n```\n\n---\n\n## 启动方式\n\n### 同时启动 QQ + Web\n\n```bash\npython bot.py\n```\n\n### 只启动 Web\n\n```bash\npython bot.py --only-web\n```\n\n### 禁用 Web,仅启动 QQ\n\n```bash\npython bot.py --no-web\n```\n\n### 自定义 Web 地址\n\n```bash\npython bot.py --web-host 0.0.0.0 --web-port 5000\n```\n\n---\n\n## 配置说明\n\n### 1. `.env` 与 `config.ini`\n\n当前推荐策略:\n\n- `.env` 作为运行时优先配置来源\n- `config.ini` 作为兼容和兜底配置\n- 启动时不会把 `.env` 反向写回 `config.ini`\n\n### 2. AI 模型配置\n\nWeb 端支持:\n\n- 保存多个模型配置\n- 应用指定模型配置到运行时\n- 测试连接\n- 显式声明模型能力\n - `supports_tools`\n - `supports_reasoning`\n - `supports_stream`\n\n### 3. 工作区\n\n工作区分为两种:\n\n- `private`\n 当前会话私有\n- `shared`\n 全局共享\n\n共享工作区默认位于:\n\n```text\ndata/workspaces/_shared\n```\n\n---\n\n## Web 后台功能一览\n\n进入 Web 后台后,可以直接使用这些模块:\n\n- 仪表盘\n- 聊天\n- 会话管理\n- AI 配置\n- 记忆管理\n- 知识库\n- Skills 配置\n- Tools 配置\n- 工作流\n- 定时任务\n- Token 用量\n- 系统日志\n- 调试台\n\n最近版本里,Web 会话侧还加入了:\n\n- 流式回复显示优化\n- `/命令` 候选面板\n- 文件变更卡片与差异预览\n- 移动端竖屏聊天输入区适配\n\n---\n\n## 常用命令示例\n\n项目的 QQ 命令较多,完整命令建议直接查看:\n\n- [docs/docs/guide/commands.md](./docs/docs/guide/commands.md)\n\n常见示例:\n\n```text\n/help\n/workspace\n/ws_send <文件名>\n/summary_recent\n/summary_today\n/findbook <书名>\n/jm <漫画ID>\n```\n\n---\n\n## 文档入口\n\n仓库内还保留了更细的文档:\n\n- [docs/README.md](./docs/README.md)\n- [docs/Chinese.md](./docs/Chinese.md)\n- [docs/CHANGELOG.md](./docs/CHANGELOG.md)\n- [docs/CONTRIBUTING.md](./docs/CONTRIBUTING.md)\n- [docs/docs/guide/quick-start.md](./docs/docs/guide/quick-start.md)\n\n如果你只想快速上手,优先看本 README 和 `quick-start`。\n\n---\n\n## 开发建议\n\n如果你要继续扩展这个项目,建议优先沿着当前架构走:\n\n- 新频道接入放到 `nbot/channels/`\n- 新的统一能力放到 `nbot/core/`\n- QQ / Web 特有逻辑尽量留在适配层\n- 工具、AI 服务和工作区能力放在 `nbot/services/`\n\n这样可以保持“统一 AI 内核,多频道适配”的结构不再回退。\n\n---\n\n## 安全提示\n\n- 不要直接把 Web 后台暴露到公网\n- 请为 `WEB_PASSWORD` 设置强密码\n- 不要把 API Key、NapCat Token、管理员 QQ 号提交到仓库\n- 对共享工作区中的写文件能力保持谨慎\n\n---\n\n## License\n\n本项目使用 MIT License。\n\n相关文件见:\n\n- [LICENSE](./LICENSE)\n\n---\n\n## 致谢\n\n- [NapCatQQ](https://github.com/NapNeko/NapCatQQ)\n- [ncatbot](https://github.com/NapNeko/NcatBot)\n\n
\n\nMade with care by [AsukaNeko](https://github.com/asukaneko)\n\n
\n"}, "3eb006efba44453862b4ebe0f577f8e1cdfca9b0": {"t": 1785771800.0361655, "n": 4829, "h": "2386c8bcc2566084", "c": "# NekoBot\n\n
\n\n![Python](https://img.shields.io/badge/Python-3.11+-3776AB?style=flat&logo=python&logoColor=white)\n![License](https://img.shields.io/badge/License-MIT-2ea043?style=flat)\n![Web](https://img.shields.io/badge/Web-Dashboard-ec4899?style=flat)\n![QQ](https://img.shields.io/badge/QQ-NapCat%20%2B%20ncatbot-58a6ff?style=flat)\n\n一个面向 QQ 与 Web 双频道的 AI 机器人项目,集成聊天、工作区、工具调用、知识库、记忆、工作流与可视化管理后台。\n\n
\n\n---\n\n## 项目简介\n\nNekoBot 最初是一个面向 QQ 的机器人项目,现在已经演进为一套更完整的多频道 AI 助手系统:\n\n- QQ 与 Web 共用同一套 AI 核心\n- 支持会话级与共享工作区\n- 支持工具调用、文件读写、搜索、知识库检索\n- 提供 Web 仪表盘、AI 配置中心、工作流、日志与调试界面\n- 支持保存多模型配置,并在运行时切换\n\n如果你想要的是:\n\n- 一个可以接入 NapCat 的 QQ 机器人\n- 一个带 Web 管理后台的 AI 助手\n- 一个支持工作区操作和多轮工具调用的项目骨架\n\n这个项目已经具备这些能力。\n\n---\n\n## 当前能力\n\n### 核心 AI 能力\n\n- 统一的 `ChatRequest / ChatResponse` 处理链路\n- 支持普通聊天与工具调用聊天\n- 支持继续执行、上下文裁剪、消息历史管理\n- 支持多模型配置与运行时切换\n- 支持不同厂商模型的适配层\n\n### Web 管理后台\n\n- 仪表盘首页\n- Web 会话与 QQ 会话管理\n- AI 配置中心与模型卡片\n- 工具、技能、知识库、记忆管理\n- 工作流与定时任务\n- Token 用量、日志、调试面板\n- 文件变更卡片、进度卡片、步骤详情弹窗\n\n![控制台仪表盘](docs/msedge_jjN8tZ3X5i.png)\n*控制台仪表盘 - 监控机器人状态、消息趋势和系统健康*\n\n![AI配置中心](docs/msedge_9lvKu4CpVu.png)\n*AI配置中心 - 配置模型、API密钥和高级设置*\n\n### 工作区能力\n\n- 私有工作区:当前会话独享\n- 共享工作区:所有会话可访问\n- 文件创建、修改、删除、发送\n- 文件变更预览与 diff 展示\n\n### QQ 侧能力\n\n- 命令系统\n- AI 对话\n- 漫画相关功能\n- 轻小说相关功能\n- 定时任务与提醒\n- 群聊和私聊场景支持\n\n---\n\n## 架构概览\n\n当前项目已经从“QQ bot + Web 页面”演进为“统一 AI 内核 + 频道适配层”的结构。\n\n### 启动层\n\n- `bot.py`\n 负责加载环境变量、注入运行时配置、启动 QQ 服务与 Web 服务。\n\n### 统一核心层\n\n- `nbot/core/chat_models.py`\n 统一 `ChatRequest` / `ChatResponse`\n- `nbot/core/agent_service.py`\n 统一 AI 处理入口\n- `nbot/core/session_store.py`\n 统一会话读写\n- `nbot/core/model_adapter.py`\n 统一模型请求与响应适配\n\n### 频道适配层\n\n- `nbot/channels/base.py`\n- `nbot/channels/qq.py`\n- `nbot/channels/web.py`\n\nQQ 与 Web 在这里完成输入输出归一化,而不是各自维护一套聊天内核。\n\n### 业务实现层\n\n- `nbot/services/`\n AI、工具、QQ 聊天主链\n- `nbot/web/`\n Web 服务、路由、Socket 事件、前端模板\n\n---\n\n## 目录结构\n\n```text\nNcatbot-comic-QQbot/\n├─ bot.py\n├─ config.ini\n├─ .env.example\n├─ requirements.txt\n├─ nbot/\n│ ├─ channels/ # 频道适配层(QQ / Web)\n│ ├─ core/ # 统一 AI 核心\n│ ├─ plugins/ # 插件\n│ ├─ services/ # AI、工具、聊天服务\n│ └─ web/ # Web 后台与前端\n├─ data/\n│ ├─ qq/ # QQ 相关运行数据\n│ ├─ skills/ # Skills 存储\n│ ├─ web/ # Web 会话、模型、配置数据\n│ └─ workspaces/ # 私有 / 共享工作区\n├─ docs/\n│ ├─ README.md\n│ ├─ Chinese.md\n│ ├─ CHANGELOG.md\n│ └─ docs/\n└─ resources/\n ├─ config/\n └─ prompts/\n```\n\n---\n\n## 环境要求\n\n- Python 3.11+\n- NapCat\n- 可用的模型 API Key\n\n推荐先准备好:\n\n- NapCat 的 WebSocket 地址\n- 机器人 QQ 号\n- 管理员 QQ 号\n- 模型 API Key\n\n---\n\n## 安装\n\n### 1. 克隆仓库\n\n```bash\ngit clone https://github.com/asukaneko/comic-downloader.git\ncd comic-downloader\n```\n\n### 2. 安装依赖\n\n```bash\npip install -r requirements.txt\n```\n\n### 3. 配置环境变量\n\n优先推荐使用 `.env`,项目启动时会读取 `.env` 并注入运行时配置,不会自动回写 `config.ini`。\n\n你可以参考:\n\n- [`.env.example`](./.env.example)\n- [`config.ini`](./config.ini)\n\n和AI相关的配置都可以在Web端进行配置。\n一个最小可运行示例:\n\n```env\nWEB_PASSWORD=你的Web登录密码\n```\n\n---\n\n## 启动方式\n\n### 同时启动 QQ + Web\n\n```bash\npython bot.py\n```\n\n### 只启动 Web\n\n```bash\npython bot.py --only-web\n```\n\n### 禁用 Web,仅启动 QQ\n\n```bash\npython bot.py --no-web\n```\n\n### 自定义 Web 地址\n\n```bash\npython bot.py --web-host 0.0.0.0 --web-port 5000\n```\n\n---\n\n## 配置说明\n\n### 1. `.env` 与 `config.ini`\n\n当前推荐策略:\n\n- `.env` 作为运行时优先配置来源\n- `config.ini` 作为兼容和兜底配置\n- 启动时不会把 `.env` 反向写回 `config.ini`\n\n### 2. AI 模型配置\n\nWeb 端支持:\n\n- 保存多个模型配置\n- 应用指定模型配置到运行时\n- 测试连接\n- 显式声明模型能力\n - `supports_tools`\n - `supports_reasoning`\n - `supports_stream`\n\n### 3. 工作区\n\n工作区分为两种:\n\n- `private`\n 当前会话私有\n- `shared`\n 全局共享\n\n共享工作区默认位于:\n\n```text\ndata/workspaces/_shared\n```\n\n---\n\n## Web 后台功能一览\n\n进入 Web 后台后,可以直接使用这些模块:\n\n- 仪表盘\n- 聊天\n- 会话管理\n- AI 配置\n- 记忆管理\n- 知识库\n- Skills 配置\n- Tools 配置\n- 工作流\n- 定时任务\n- Token 用量\n- 系统日志\n- 调试台\n\n最近版本里,Web 会话侧还加入了:\n\n- 流式回复显示优化\n- `/命令` 候选面板\n- 文件变更卡片与差异预览\n- 移动端竖屏聊天输入区适配\n\n---\n\n## 常用命令示例\n\n项目的 QQ 命令较多,完整命令建议直接查看:\n\n- [docs/docs/guide/commands.md](./docs/docs/guide/commands.md)\n\n常见示例:\n\n```text\n/help\n/workspace\n/ws_send <文件名>\n/summary_recent\n/summary_today\n/findbook <书名>\n/jm <漫画ID>\n```\n\n---\n\n## 文档入口\n\n仓库内还保留了更细的文档:\n\n- [docs/README.md](./docs/README.md)\n- [docs/Chinese.md](./docs/Chinese.md)\n- [docs/CHANGELOG.md](./docs/CHANGELOG.md)\n- [docs/CONTRIBUTING.md](./docs/CONTRIBUTING.md)\n- [docs/docs/guide/quick-start.md](./docs/docs/guide/quick-start.md)\n\n如果你只想快速上手,优先看本 README 和 `quick-start`。\n\n---\n\n## 开发建议\n\n如果你要继续扩展这个项目,建议优先沿着当前架构走:\n\n- 新频道接入放到 `nbot/channels/`\n- 新的统一能力放到 `nbot/core/`\n- QQ / Web 特有逻辑尽量留在适配层\n- 工具、AI 服务和工作区能力放在 `nbot/services/`\n\n这样可以保持“统一 AI 内核,多频道适配”的结构不再回退。\n\n---\n\n## 安全提示\n\n- 不要直接把 Web 后台暴露到公网\n- 请为 `WEB_PASSWORD` 设置强密码\n- 不要把 API Key、NapCat Token、管理员 QQ 号提交到仓库\n- 对共享工作区中的写文件能力保持谨慎\n\n---\n\n## License\n\n本项目使用 MIT License。\n\n相关文件见:\n\n- [LICENSE](./LICENSE)\n\n---\n\n## 致谢\n\n- [NapCatQQ](https://github.com/NapNeko/NapCatQQ)\n- [ncatbot](https://github.com/NapNeko/NcatBot)\n\n
\n\nMade with care by [AsukaNeko](https://github.com/asukaneko)\n\n
\n"}, "567c7942b7fe764f90294131b82559bd44d55e01": {"t": 1785771802.3970203, "n": 4847, "h": "2e9d251a9c75b73b", "c": "# NekoBot\n\n
\n\n![Python](https://img.shields.io/badge/Python-3.11+-3776AB?style=flat&logo=python&logoColor=white)\n![License](https://img.shields.io/badge/License-MIT-2ea043?style=flat)\n![Web](https://img.shields.io/badge/Web-Dashboard-ec4899?style=flat)\n![QQ](https://img.shields.io/badge/QQ-NapCat%20%2B%20ncatbot-58a6ff?style=flat)\n\n一个面向 QQ 与 Web 双频道的 AI 机器人项目,集成聊天、工作区、工具调用、知识库、记忆、工作流与可视化管理后台。\n\n
\n\n---\n\n## 项目简介\n\nNekoBot 最初是一个面向 QQ 的机器人项目,现在已经演进为一套更完整的多频道 AI 助手系统:\n\n- QQ 与 Web 共用同一套 AI 核心\n- 支持会话级与共享工作区\n- 支持工具调用、文件读写、搜索、知识库检索\n- 提供 Web 仪表盘、AI 配置中心、工作流、日志与调试界面\n- 支持保存多模型配置,并在运行时切换\n\n如果你想要的是:\n\n- 一个可以接入 NapCat 的 QQ 机器人\n- 一个带 Web 管理后台的 AI 助手\n- 一个支持工作区操作和多轮工具调用的项目骨架\n\n这个项目已经具备这些能力。\n\n---\n\n## 当前能力\n\n### 核心 AI 能力\n\n- 统一的 `ChatRequest / ChatResponse` 处理链路\n- 支持普通聊天与工具调用聊天\n- 支持继续执行、上下文裁剪、消息历史管理\n- 支持多模型配置与运行时切换\n- 支持不同厂商模型的适配层\n\n### Web 管理后台\n\n- 仪表盘首页\n- Web 会话与 QQ 会话管理\n- AI 配置中心与模型卡片\n- 工具、技能、知识库、记忆管理\n- 工作流与定时任务\n- Token 用量、日志、调试面板\n- 文件变更卡片、进度卡片、步骤详情弹窗\n\n### 工作区能力\n\n- 私有工作区:当前会话独享\n- 共享工作区:所有会话可访问\n- 文件创建、修改、删除、发送\n- 文件变更预览与 diff 展示\n\n### QQ 侧能力\n\n- 命令系统\n- AI 对话\n- 漫画相关功能\n- 轻小说相关功能\n- 定时任务与提醒\n- 群聊和私聊场景支持\n\n---\n\n## 架构概览\n\n当前项目已经从“QQ bot + Web 页面”演进为“统一 AI 内核 + 频道适配层”的结构。\n\n### 启动层\n\n- `bot.py`\n 负责加载环境变量、注入运行时配置、启动 QQ 服务与 Web 服务。\n\n### 统一核心层\n\n- `nbot/core/chat_models.py`\n 统一 `ChatRequest` / `ChatResponse`\n- `nbot/core/agent_service.py`\n 统一 AI 处理入口\n- `nbot/core/session_store.py`\n 统一会话读写\n- `nbot/core/model_adapter.py`\n 统一模型请求与响应适配\n\n### 频道适配层\n\n- `nbot/channels/base.py`\n- `nbot/channels/qq.py`\n- `nbot/channels/web.py`\n\nQQ 与 Web 在这里完成输入输出归一化,而不是各自维护一套聊天内核。\n\n### 业务实现层\n\n- `nbot/services/`\n AI、工具、QQ 聊天主链\n- `nbot/web/`\n Web 服务、路由、Socket 事件、前端模板\n\n---\n\n## 目录结构\n\n```text\nNcatbot-comic-QQbot/\n├─ bot.py\n├─ config.ini\n├─ .env.example\n├─ requirements.txt\n├─ nbot/\n│ ├─ channels/ # 频道适配层(QQ / Web)\n│ ├─ core/ # 统一 AI 核心\n│ ├─ plugins/ # 插件\n│ ├─ services/ # AI、工具、聊天服务\n│ └─ web/ # Web 后台与前端\n├─ data/\n│ ├─ qq/ # QQ 相关运行数据\n│ ├─ skills/ # Skills 存储\n│ ├─ web/ # Web 会话、模型、配置数据\n│ └─ workspaces/ # 私有 / 共享工作区\n├─ docs/\n│ ├─ README.md\n│ ├─ Chinese.md\n│ ├─ CHANGELOG.md\n│ └─ docs/\n└─ resources/\n ├─ config/\n └─ prompts/\n```\n\n---\n\n## 环境要求\n\n- Python 3.11+\n- NapCat\n- 可用的模型 API Key\n\n推荐先准备好:\n\n- NapCat 的 WebSocket 地址\n- 机器人 QQ 号\n- 管理员 QQ 号\n- 模型 API Key\n\n---\n\n## 安装\n\n### 1. 克隆仓库\n\n```bash\ngit clone https://github.com/asukaneko/comic-downloader.git\ncd comic-downloader\n```\n\n### 2. 安装依赖\n\n```bash\npip install -r requirements.txt\n```\n\n### 3. 配置环境变量\n\n优先推荐使用 `.env`,项目启动时会读取 `.env` 并注入运行时配置,不会自动回写 `config.ini`。\n\n你可以参考:\n\n- [`.env.example`](./.env.example)\n- [`config.ini`](./config.ini)\n\n一个最小可运行示例:\n\n```env\nBOT_UIN=你的机器人QQ号\nROOT=管理员QQ号\nWS_URI=ws://127.0.0.1:3001\nTOKEN=你的NapCat令牌\n\nAPI_KEY=你的模型API_KEY\nBASE_URL=https://api.minimaxi.com/v1/text/chatcompletion_v2\nMODEL=MiniMax-M2.7\n\nWEB_PASSWORD=你的Web登录密码\n```\n\n---\n\n## 启动方式\n\n### 同时启动 QQ + Web\n\n```bash\npython bot.py\n```\n\n### 只启动 Web\n\n```bash\npython bot.py --only-web\n```\n\n### 禁用 Web,仅启动 QQ\n\n```bash\npython bot.py --no-web\n```\n\n### 自定义 Web 地址\n\n```bash\npython bot.py --web-host 0.0.0.0 --web-port 5000\n```\n\n---\n\n## 配置说明\n\n### 1. `.env` 与 `config.ini`\n\n当前推荐策略:\n\n- `.env` 作为运行时优先配置来源\n- `config.ini` 作为兼容和兜底配置\n- 启动时不会把 `.env` 反向写回 `config.ini`\n\n### 2. AI 模型配置\n\nWeb 端支持:\n\n- 保存多个模型配置\n- 应用指定模型配置到运行时\n- 测试连接\n- 显式声明模型能力\n - `supports_tools`\n - `supports_reasoning`\n - `supports_stream`\n\n### 3. 工作区\n\n工作区分为两种:\n\n- `private`\n 当前会话私有\n- `shared`\n 全局共享\n\n共享工作区默认位于:\n\n```text\ndata/workspaces/_shared\n```\n\n---\n\n## Web 后台功能一览\n\n进入 Web 后台后,可以直接使用这些模块:\n\n- 仪表盘\n- 聊天\n- 会话管理\n- AI 配置\n- 记忆管理\n- 知识库\n- Skills 配置\n- Tools 配置\n- 工作流\n- 定时任务\n- Token 用量\n- 系统日志\n- 调试台\n\n最近版本里,Web 会话侧还加入了:\n\n- 流式回复显示优化\n- `/命令` 候选面板\n- 文件变更卡片与差异预览\n- 移动端竖屏聊天输入区适配\n\n---\n\n## 常用命令示例\n\n项目的 QQ 命令较多,完整命令建议直接查看:\n\n- [docs/docs/guide/commands.md](./docs/docs/guide/commands.md)\n\n常见示例:\n\n```text\n/help\n/workspace\n/ws_send <文件名>\n/summary_recent\n/summary_today\n/findbook <书名>\n/jm <漫画ID>\n```\n\n---\n\n## 文档入口\n\n仓库内还保留了更细的文档:\n\n- [docs/README.md](./docs/README.md)\n- [docs/Chinese.md](./docs/Chinese.md)\n- [docs/CHANGELOG.md](./docs/CHANGELOG.md)\n- [docs/CONTRIBUTING.md](./docs/CONTRIBUTING.md)\n- [docs/docs/guide/quick-start.md](./docs/docs/guide/quick-start.md)\n\n如果你只想快速上手,优先看本 README 和 `quick-start`。\n\n---\n\n## 开发建议\n\n如果你要继续扩展这个项目,建议优先沿着当前架构走:\n\n- 新频道接入放到 `nbot/channels/`\n- 新的统一能力放到 `nbot/core/`\n- QQ / Web 特有逻辑尽量留在适配层\n- 工具、AI 服务和工作区能力放在 `nbot/services/`\n\n这样可以保持“统一 AI 内核,多频道适配”的结构不再回退。\n\n---\n\n## 安全提示\n\n- 不要直接把 Web 后台暴露到公网\n- 请为 `WEB_PASSWORD` 设置强密码\n- 不要把 API Key、NapCat Token、管理员 QQ 号提交到仓库\n- 对共享工作区中的写文件能力保持谨慎\n\n---\n\n## License\n\n本项目使用 MIT License。\n\n相关文件见:\n\n- [LICENSE](./LICENSE)\n\n---\n\n## 致谢\n\n- [NapCatQQ](https://github.com/NapNeko/NapCatQQ)\n- [ncatbot](https://github.com/NapNeko/NcatBot)\n\n
\n\nMade with care by [AsukaNeko](https://github.com/asukaneko)\n\n
\n"}, "07190e56197c415c1b6623f38cf1bc928e8f1b10": {"t": 1785771804.6092048, "n": 3469, "h": "cd1b4b23b83ecb33", "c": "# 🤖 NekoBot\n\n
\n\n![Python](https://img.shields.io/badge/Python-3.11+-blue?style=flat&logo=python)\n![License](https://img.shields.io/badge/License-MIT-green?style=flat)\n![Version](https://img.shields.io/badge/Version-2.1.0-purple?style=flat)\n\n**一个可以下载本子和 AI 聊天的 QQ 猫娘机器人**\n\n[快速开始](#-快速开始) · [文档](http://nekodocs.s.odn.cc/)\n\n
\n\n---\n\n## ✨ 特性\n\n\n\n\n\n\n
\n\n### 🎨 核心功能\n\n- 📚 **漫画下载** - 支持 JMComic 漫画下载\n- 💬 **AI 聊天** - 基于大模型的智能对话\n- 🎵 **多媒体** - 音乐、图片、视频识别\n- 📖 **轻小说** - 搜索和下载轻小说\n- 🎮 **娱乐功能** - 随机图片、表情包、抽卡\n- 📁 **工作区** - 私有和共享文件管理\n\n\n\n### 🛠️ 技术特性\n\n- 🔌 **插件系统** - 灵活的技能扩展\n- 🧠 **记忆系统** - 用户个性化记忆\n- 📚 **知识库** - RAG 智能问答\n- ⚡ **工作流** - 自动化任务编排\n- 🌐 **Web 界面** - 在线聊天和配置\n- 🔄 **私有/共享工作区** - AI 工具区分文件来源\n\n
\n\n---\n\n## 🚀 快速开始\n\n### 1️⃣ 克隆项目\n\n```bash\ngit clone https://github.com/asukaneko/Ncatbot-comic-QQbot.git\ncd Ncatbot-comic-QQbot\n```\n\n### 2️⃣ 安装依赖\n\n```bash\npip install -r requirements.txt\n```\n\n### 3️⃣ 配置\n\n编辑 `config.ini`:\n\n```ini\n[BotConfig]\nbot_uin = 你的QQ号\nws_uri = ws://localhost:3001\nroot = 管理员QQ号\n\n[ApiKey]\napi_key = 你的API密钥\nbase_url = https://api.minimaxi.com/v1\nmodel = M2-her\n```\n\n### 4️⃣ 运行\n\n```bash\n# 启动机器人\npython bot.py\n\n# 或启动 Web 界面\npython bot.py --web\n```\n\n---\n\n## 📁 工作区系统\n\n项目包含完整的文件管理工作区系统:\n\n### 私有工作区\n- 每个会话独立的文件存储空间\n- AI 工具可创建、读取、编辑、删除文件\n- 支持拖拽移动文件\n\n### 共享工作区\n- 所有会话共享的工作区 (`data/workspaces/_shared`)\n- AI 工具通过 `scope` 参数区分\n- 适合存放通用配置文件、素材等\n\n### AI 工具使用\n\n```python\n# 列出文件(支持递归)\nworkspace_list_files(scope=\"all\", recursive=true)\n\n# 读取文件(区分来源)\nworkspace_read_file(filename=\"config.json\", scope=\"shared\")\n\n# 创建文件\nworkspace_create_file(filename=\"notes.txt\", content=\"...\", scope=\"private\")\n```\n\n---\n\n## 📖 文档\n\n| 文档 | 说明 |\n|------|------|\n| [快速开始](https://docs.ncatbot.xyz/guide/quick-start) | 完整的安装配置指南 |\n| [命令列表](https://docs.ncatbot.xyz/guide/commands) | 所有可用命令 |\n| [API 文档](https://docs.ncatbot.xyz/napcat/api) | NapCat 接口 |\n| [开发指南](https://docs.ncatbot.xyz/guide/dev) | 开发文档 |\n\n---\n\n## 📁 项目结构\n\n```\nNcatbot-comic-QQbot/\n├── bot.py # 入口文件\n│\n├── nbot/ # 核心模块\n│ ├── commands.py # 命令处理\n│ ├── chat.py # 聊天服务\n│ ├── config.py # 配置加载\n│ ├── web/ # Web 界面\n│ ├── core/ # 核心功能\n│ │ ├── heartbeat.py # 心跳\n│ │ ├── memory.py # 记忆系统\n│ │ ├── knowledge.py # 知识库\n│ │ ├── workflow.py # 工作流\n│ │ └── workspace.py # 工作区管理\n│ ├── plugins/ # 插件系统\n│ └── services/ # 服务层\n│ └── tools.py # AI 工具\n│\n├── data/ # 数据目录\n│ ├── sessions/ # 会话数据\n│ ├── memories/ # 记忆数据\n│ ├── workspaces/ # 工作区\n│ │ └── _shared/ # 共享工作区\n│ └── web/ # Web 数据\n│\n├── resources/ # 静态资源\n│ ├── config/ # 配置文件\n│ └── prompts/ # 提示词\n│\n└── tools/ # 工具脚本\n```\n\n---\n\n## ⌨️ 常用命令\n\n| 命令 | 说明 |\n|------|------|\n| `/jm ` | 下载漫画 |\n| `/search <关键词>` | 搜索漫画 |\n| `/chat` 或 `@机器人` | AI 对话 |\n| `/gf <描述>` | AI 生成图片 |\n| `/help` | 查看帮助 |\n\n---\n\n## 💡 提示\n\n- 登录后在 `napcat/logs` 文件夹可找到 WebUI 登录地址\n- 可修改 `resources/prompts/neko.txt` 定制角色\n- 工作区工具支持 `scope` 参数区分私有/共享文件\n- 详细功能说明请查看 [docs](./docs/) 目录\n\n---\n\n## 📄 许可证\n\nMIT License - 查看 [LICENSE](./docs/CODE_OF_CONDUCT.md)\n\n---\n\n## 🤝 贡献\n\n欢迎提交 Issue 和 Pull Request!\n\n查看 [贡献指南](./docs/CONTRIBUTING.md)\n\n---\n\n
\n\nMade with ❤️ by [AsukaNeko](https://github.com/asukaneko)\n\n
\n"}, "4311e4286f620d59fc7250d95d892048a037a21d": {"t": 1785771805.8096292, "n": 2884, "h": "97410d205df854f0", "c": "# 🤖 NekoBot\n\n
\n\n![Python](https://img.shields.io/badge/Python-3.11+-blue?style=flat&logo=python)\n![License](https://img.shields.io/badge/License-MIT-green?style=flat)\n![Version](https://img.shields.io/badge/Version-2.0.0-purple?style=flat)\n\n**一个可以下载本子和 AI 聊天的 QQ 猫娘机器人**\n\n[快速开始](#-快速开始) · [文档](http://nekodocs.s.odn.cc/)\n\n
\n\n---\n\n## ✨ 特性\n\n\n\n\n\n\n
\n\n### 🎨 核心功能\n\n- 📚 **漫画下载** - 支持 JMComic 漫画下载\n- 💬 **AI 聊天** - 基于大模型的智能对话\n- 🎵 **多媒体** - 音乐、图片、视频识别\n- 📖 **轻小说** - 搜索和下载轻小说\n- 🎮 **娱乐功能** - 随机图片、表情包、抽卡\n\n\n\n### 🛠️ 技术特性\n\n- 🔌 **插件系统** - 灵活的技能扩展\n- 🧠 **记忆系统** - 用户个性化记忆\n- 📚 **知识库** - RAG 智能问答\n- ⚡ **工作流** - 自动化任务编排\n- 🌐 **Web 界面** - 在线聊天和配置\n\n
\n\n---\n\n## 🚀 快速开始\n\n### 1️⃣ 克隆项目\n\n```bash\ngit clone https://github.com/asukaneko/Ncatbot-comic-QQbot.git\ncd Ncatbot-comic-QQbot\n```\n\n### 2️⃣ 安装依赖\n\n```bash\npip install -r requirements.txt\n```\n\n### 3️⃣ 配置\n\n编辑 `config.ini`:\n\n```ini\n[BotConfig]\nbot_uin = 你的QQ号\nws_uri = ws://localhost:3001\nroot = 管理员QQ号\n\n[ApiKey]\napi_key = 你的API密钥\nbase_url = https://api.minimaxi.com/v1\nmodel = M2-her\n```\n\n### 4️⃣ 运行\n\n```bash\n# 启动机器人\npython bot.py\n\n# 或启动 Web 界面\npython bot.py --web\n```\n\n---\n\n## 📖 文档\n\n| 文档 | 说明 |\n|------|------|\n| [快速开始](https://docs.ncatbot.xyz/guide/quick-start) | 完整的安装配置指南 |\n| [命令列表](https://docs.ncatbot.xyz/guide/commands) | 所有可用命令 |\n| [API 文档](https://docs.ncatbot.xyz/napcat/api) | NapCat 接口 |\n| [开发指南](https://docs.ncatbot.xyz/guide/dev) | 开发文档 |\n\n---\n\n## 📁 项目结构\n\n```\nNcatbot-comic-QQbot/\n├── bot.py # 入口文件\n│\n├── nbot/ # 核心模块\n│ ├── commands.py # 命令处理\n│ ├── chat.py # 聊天服务\n│ ├── config.py # 配置加载\n│ ├── web/ # Web 界面\n│ ├── core/ # 核心功能\n│ │ ├── heartbeat.py # 心跳\n│ │ ├── memory.py # 记忆系统\n│ │ ├── knowledge.py # 知识库\n│ │ └── workflow.py # 工作流\n│ ├── plugins/ # 插件系统\n│ └── services/ # 服务层\n│\n├── resources/ # 静态资源\n│ ├── config/ # 配置文件\n│ └── prompts/ # 提示词\n│\n├── docs/ # 详细文档\n│ ├── README.md # 英文文档\n│ ├── Chinese.md # 中文文档\n│ ├── CHANGELOG.md # 更新日志\n│ └── docs/ # VitePress 文档\n│\n└── tools/ # 工具脚本\n```\n\n---\n\n## ⌨️ 常用命令\n\n| 命令 | 说明 |\n|------|------|\n| `/jm ` | 下载漫画 |\n| `/search <关键词>` | 搜索漫画 |\n| `/chat` 或 `@机器人` | AI 对话 |\n| `/st <标签>` | 随机涩图 |\n| `/gf <描述>` | AI 生成图片 |\n| `/help` | 查看帮助 |\n\n---\n\n## 💡 提示\n\n- 登录后在 `napcat/logs` 文件夹可找到 WebUI 登录地址\n- 默认使用硅基流动 API,新用户免费赠送 15 元\n- 可修改 `resources/prompts/neko.txt` 定制角色\n- 详细功能说明请查看 [docs](./docs/) 目录\n\n---\n\n## 📄 许可证\n\nMIT License - 查看 [LICENSE](./docs/CODE_OF_CONDUCT.md)\n\n---\n\n## 🤝 贡献\n\n欢迎提交 Issue 和 Pull Request!\n\n查看 [贡献指南](./docs/CONTRIBUTING.md)\n\n---\n\n
\n\nMade with ❤️ by [AsukaNeko](https://github.com/asukaneko)\n\n
\n"}, "13d87310d5b77f834c2dbedb462f1141dfc0889b": {"t": 1785771808.186902, "n": 8541, "h": "bbe23d970edc7816", "c": "
\n

🚀A Comic Downloader & AI Chatbot for QQ

\n
\n\n[![Contributors][contributors-shield]][contributors-url]\n[![Forks][forks-shield]][forks-url]\n[![Stargazers][stars-shield]][stars-url]\n![](https://visitor-badge.laobi.icu/badge?page_id=asukaneko.NapCat-jmcomic_download-bot)\n[![Issues][issues-shield]][issues-url]\n[![MIT License][license-shield]][license-url]\n\n---\n[中文版 | Chinese](https://github.com/asukaneko/NapCat-jmcomic_download-bot/blob/master/Chinese.md)\n## ✨Updates \n![](https://img.shields.io/badge/LatestVersion-1.6.5-blue?&logo=react)\n### New Features\n- New features:\n - GIF recognition optimization: Support for local multi-frame splitting and multi-image recognition for animated emojis\n - Stability improvement: Fixed empty AI responses when containing braces but no `msg` field\n - Dependency update: Added `Pillow` for image processing\n - Support sending downloaded comics as encrypted PDF files to a specified email\n - Add per-user SMTP configuration command so each user can use their own mailbox\n - Merge multiple private text messages within 1 second into a single reply\n - Fix active chat failures and input status errors to improve stability\n - Refactor LLM calls: remove OpenAI SDK and use requests-based HTTP calls\n \n+ [CHANGLOG.md](https://github.com/asukaneko/NapCat-jmcomic_download-bot/blob/master/CHANGELOG.md)\n---\n\n## 📌Before You Start \n[![](https://img.shields.io/badge/python-version>=3.7-red?logo=python)]()\n> **⚠️Notice** \n> If you encounter any error, please check if you have installed the latest version of napcat and ncatbot \n>\n> If you are unable to install NapCat, please go to the [NapCat Download Page](https://github.com/NapNeko/NapCatQQ/releases/download/v4.8.95/NapCat.Shell.zip) to download the latest version of NapCat.Shell.zip, extract it to the root directory, and rename it to \"napcat.\"\n>**Do not expose the webui directly to the public network. If necessary, please set a strong password.**\n\n>Environment: ___windows___ \n>Recommended to use a __secondary account__ for login \n>Developed based on jmcomic and ncatbot \n>For any issues, please submit to GitHub or email ycssbc@126.com \n\n\n## =============== ↓ Quick Start ↓ ===============\n### ⬇️Download Source Code \n```\ngit clone https://github.com/asukaneko/Ncatbot-comic-QQbot.git\n```\n\n### 📦Install Dependencies \n```\ncd Ncatbot-comic-QQbot\npip install -r requirements.txt\n```\n\n### ⚙️Configuration \n```\nconfig.ini: Modify account, AI API, image saving settings\n\noption.yml: Modify comic download directory, download method\n\nurls.ini: (Optional) Modify image API URLs, default URLs will be used if not modified\n```\n\n### ▶️Run \n```\npython bot.py\n```\nThe console will prompt to download napcat, then scan QR code to login \n\n### 📜Commands \n>__commands.py contains ___command registration decorators___, you can add custom commands__ \nCommand List:\n```text\n/jm -> Download comics\n/jmrank -> Get rankings\n/jm_clear -> Clear cache\n/search -> Search comics\n/tag -> Search by tag\n/add_black_list or /abl -> Add to blacklist\n/del_black_list or /dbl -> Remove from blacklist\n/list_black_list or /lbl -> View blacklist\n/add_global_black_list or /agbl -> Add to global blacklist (admin)\n/del_global_black_list or /dgbl -> Remove from global blacklist (admin)\n/get_fav -> Get favorites (private chat only for groups)\n/add_fav -> Add to favorites\n/del_fav -> Remove from favorites\n/list_fav -> View favorites list\n/set_prompt or /sp -> Set prompt\n/del_prompt or /dp -> Delete prompt\n/get_prompt or /gp -> Get prompt\n/del_message or /dm -> Delete chat history\n/active_chat -> Enable active chat\n/show_chat or /sc -> Send complete chat history\n/random_image or /ri -> Random image\n/random_emoticons or /re -> Random emoticons\n/st -> Send random NSFW image (tags support AND/OR (& |))\n/random_video or /rv -> Random anime video\n/random_dice or /rd -> Random dice\n/random_rps or /rps -> Random rock-paper-scissors\n/music -> Send music\n/random_music or /rm -> Random music\n/dv -> Download video\n/di -> Download image\n/df -> Download file\n/mc -> Check MC server status\n/mc_bind -> Bind MC server\n/mc_unbind -> Unbind MC server\n/mc_show -> View bound MC server\n/generate_photo or /gf -> Generate image\n/restart -> Restart bot (admin)\n/tts -> Toggle TTS\n/agree -> Accept friend request\n/set_admin or /sa -> Set admin (root)\n/del_admin or /da -> Remove admin (root)\n/get_admin or /ga -> Get admin list\n/set_ids -> Set account info (admin)\n/set_online_status -> Set online status (admin)\n/get_friends -> Get friend list (admin)\n/set_qq_avatar -> Change avatar (admin)\n/send_like -> Send likes\n/bot.api.function_name(param1=value1,param2=value2) -> Custom API (admin), see `https://docs.ncatbot.xyz/guide/p8aun9nh/`\n/shutdown -> Shutdown bot (admin)\n/set_group_admin -> Set group admin (admin)\n/del_group_admin -> Remove group admin (admin)\n/findbook or /fb -> Search and download light novel\n/fa -> Search by author\n/select -> Select novel to download\n/info -> Get novel info\n/random_novel or /rn -> Random novel\n/task -> Set timed task (admin)\n/remind -> Set reminder\n/premind -> Set precise reminder\n/help or /h -> View help\n...\n```\n\n## 💡Tips \n+ After login, you can find webui login URL in napcat\\logs folder\n+ ___If napcat is not properly configured, open: http://localhost:6099, default token is 'napcat', then login and create a websocket server in network configuration with default port 3001___\n+ Use _/chat_ command or _@bot_ in group chat to start conversation, private chat handles all non-command messages as conversation by default\n+ _Default AI model is from SiliconFlow, new users get 15CNY free credit_\n+ For AI to process images in group chat, first send image then reply to your own message mentioning the bot\n+ TTS supports custom voice upload, see comments in chat.py for details\n+ Modify prompts in neko.txt to create different characters\n\n## 🌟More Features\n+ Supports image recognition, video recognition\n+ Supports web search. Go to https://opensearch.console.aliyun.com/cn-shanghai/rag/api-key to obtain the API and domain address, which can be used for free.\n+ Supports multi-group chat and custom user prompts\n+ Group chat supports user awareness, chat supports time awareness\n+ Supports conversation history saving\n+ Quick command adding\n+ Low configuration requirements, lightweight, small memory footprint\n\n[your-project-path]:asukaneko/NapCat-jmcomic_download-bot\n[contributors-shield]: https://img.shields.io/github/contributors/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[contributors-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/graphs/contributors\n[forks-shield]: https://img.shields.io/github/forks/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[forks-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/network/members\n[stars-shield]: https://img.shields.io/github/stars/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[stars-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/stargazers\n[issues-shield]: https://img.shields.io/github/issues/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[issues-url]: https://img.shields.io/github/issues/asukaneko/NapCat-jmcomic_download-bot.svg\n[license-shield]: https://img.shields.io/github/license/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[license-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/blob/master/LICENSE\n[linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=flat&logo=linkedin&colorB=555\n\n### 📂Directory Structure\n```\n.\n│ bot.py\n│ chat.py\n│ config.ini\n│ config.py\n│ commands.py\n│ LICENSE\n│ neko.txt\n│ number.txt\n│ option.yml\n│ README.md\n│ requirements.txt\n│ urls.ini\n│ \n├─logs\n│ \n├─napcat\n│ ├─...... \n│ └─......\n├─plugins\n│\n├─prompts\n│ ├─group\n│ └─user\n├─saved_images\n│ \n├─saved_message\n│\n└─cache\n ├─comic\n ├─saved_images\n ├─list\n ├─fav\n ├─pdf\n └─......\n```\n"}, "4322c737e3eece04d92ca95a191b41ebb427ee41": {"t": 1785771809.9012907, "n": 8266, "h": "45083e5adeaf3588", "c": "
\n

🚀A Comic Downloader & AI Chatbot for QQ

\n
\n\n[![Contributors][contributors-shield]][contributors-url]\n[![Forks][forks-shield]][forks-url]\n[![Stargazers][stars-shield]][stars-url]\n![](https://visitor-badge.laobi.icu/badge?page_id=asukaneko.NapCat-jmcomic_download-bot)\n[![Issues][issues-shield]][issues-url]\n[![MIT License][license-shield]][license-url]\n\n---\n[中文版 | Chinese](https://github.com/asukaneko/NapCat-jmcomic_download-bot/blob/master/Chinese.md)\n## ✨Updates \n![](https://img.shields.io/badge/LatestVersion-1.6.4-blue?&logo=react)\n### New Features\n- New features:\n - Support sending downloaded comics as encrypted PDF files to a specified email\n - Add per-user SMTP configuration command so each user can use their own mailbox\n - Merge multiple private text messages within 1 second into a single reply\n - Fix active chat failures and input status errors to improve stability\n - Refactor LLM calls: remove OpenAI SDK and use requests-based HTTP calls\n \n+ [CHANGLOG.md](https://github.com/asukaneko/NapCat-jmcomic_download-bot/blob/master/CHANGELOG.md)\n---\n\n## 📌Before You Start \n[![](https://img.shields.io/badge/python-version>=3.7-red?logo=python)]()\n> **⚠️Notice** \n> If you encounter any error, please check if you have installed the latest version of napcat and ncatbot \n>\n> If you are unable to install NapCat, please go to the [NapCat Download Page](https://github.com/NapNeko/NapCatQQ/releases/download/v4.8.95/NapCat.Shell.zip) to download the latest version of NapCat.Shell.zip, extract it to the root directory, and rename it to \"napcat.\"\n>**Do not expose the webui directly to the public network. If necessary, please set a strong password.**\n\n>Environment: ___windows___ \n>Recommended to use a __secondary account__ for login \n>Developed based on jmcomic and ncatbot \n>For any issues, please submit to GitHub or email ycssbc@126.com \n\n\n## =============== ↓ Quick Start ↓ ===============\n### ⬇️Download Source Code \n```\ngit clone https://github.com/asukaneko/Ncatbot-comic-QQbot.git\n```\n\n### 📦Install Dependencies \n```\ncd Ncatbot-comic-QQbot\npip install -r requirements.txt\n```\n\n### ⚙️Configuration \n```\nconfig.ini: Modify account, AI API, image saving settings\n\noption.yml: Modify comic download directory, download method\n\nurls.ini: (Optional) Modify image API URLs, default URLs will be used if not modified\n```\n\n### ▶️Run \n```\npython bot.py\n```\nThe console will prompt to download napcat, then scan QR code to login \n\n### 📜Commands \n>__commands.py contains ___command registration decorators___, you can add custom commands__ \nCommand List:\n```text\n/jm -> Download comics\n/jmrank -> Get rankings\n/jm_clear -> Clear cache\n/search -> Search comics\n/tag -> Search by tag\n/add_black_list or /abl -> Add to blacklist\n/del_black_list or /dbl -> Remove from blacklist\n/list_black_list or /lbl -> View blacklist\n/add_global_black_list or /agbl -> Add to global blacklist (admin)\n/del_global_black_list or /dgbl -> Remove from global blacklist (admin)\n/get_fav -> Get favorites (private chat only for groups)\n/add_fav -> Add to favorites\n/del_fav -> Remove from favorites\n/list_fav -> View favorites list\n/set_prompt or /sp -> Set prompt\n/del_prompt or /dp -> Delete prompt\n/get_prompt or /gp -> Get prompt\n/del_message or /dm -> Delete chat history\n/active_chat -> Enable active chat\n/show_chat or /sc -> Send complete chat history\n/random_image or /ri -> Random image\n/random_emoticons or /re -> Random emoticons\n/st -> Send random NSFW image (tags support AND/OR (& |))\n/random_video or /rv -> Random anime video\n/random_dice or /rd -> Random dice\n/random_rps or /rps -> Random rock-paper-scissors\n/music -> Send music\n/random_music or /rm -> Random music\n/dv -> Download video\n/di -> Download image\n/df -> Download file\n/mc -> Check MC server status\n/mc_bind -> Bind MC server\n/mc_unbind -> Unbind MC server\n/mc_show -> View bound MC server\n/generate_photo or /gf -> Generate image\n/restart -> Restart bot (admin)\n/tts -> Toggle TTS\n/agree -> Accept friend request\n/set_admin or /sa -> Set admin (root)\n/del_admin or /da -> Remove admin (root)\n/get_admin or /ga -> Get admin list\n/set_ids -> Set account info (admin)\n/set_online_status -> Set online status (admin)\n/get_friends -> Get friend list (admin)\n/set_qq_avatar -> Change avatar (admin)\n/send_like -> Send likes\n/bot.api.function_name(param1=value1,param2=value2) -> Custom API (admin), see `https://docs.ncatbot.xyz/guide/p8aun9nh/`\n/shutdown -> Shutdown bot (admin)\n/set_group_admin -> Set group admin (admin)\n/del_group_admin -> Remove group admin (admin)\n/findbook or /fb -> Search and download light novel\n/fa -> Search by author\n/select -> Select novel to download\n/info -> Get novel info\n/random_novel or /rn -> Random novel\n/task -> Set timed task (admin)\n/remind -> Set reminder\n/premind -> Set precise reminder\n/help or /h -> View help\n...\n```\n\n## 💡Tips \n+ After login, you can find webui login URL in napcat\\logs folder\n+ ___If napcat is not properly configured, open: http://localhost:6099, default token is 'napcat', then login and create a websocket server in network configuration with default port 3001___\n+ Use _/chat_ command or _@bot_ in group chat to start conversation, private chat handles all non-command messages as conversation by default\n+ _Default AI model is from SiliconFlow, new users get 15CNY free credit_\n+ For AI to process images in group chat, first send image then reply to your own message mentioning the bot\n+ TTS supports custom voice upload, see comments in chat.py for details\n+ Modify prompts in neko.txt to create different characters\n\n## 🌟More Features\n+ Supports image recognition, video recognition\n+ Supports web search. Go to https://opensearch.console.aliyun.com/cn-shanghai/rag/api-key to obtain the API and domain address, which can be used for free.\n+ Supports multi-group chat and custom user prompts\n+ Group chat supports user awareness, chat supports time awareness\n+ Supports conversation history saving\n+ Quick command adding\n+ Low configuration requirements, lightweight, small memory footprint\n\n[your-project-path]:asukaneko/NapCat-jmcomic_download-bot\n[contributors-shield]: https://img.shields.io/github/contributors/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[contributors-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/graphs/contributors\n[forks-shield]: https://img.shields.io/github/forks/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[forks-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/network/members\n[stars-shield]: https://img.shields.io/github/stars/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[stars-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/stargazers\n[issues-shield]: https://img.shields.io/github/issues/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[issues-url]: https://img.shields.io/github/issues/asukaneko/NapCat-jmcomic_download-bot.svg\n[license-shield]: https://img.shields.io/github/license/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[license-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/blob/master/LICENSE\n[linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=flat&logo=linkedin&colorB=555\n\n### 📂Directory Structure\n```\n.\n│ bot.py\n│ chat.py\n│ config.ini\n│ config.py\n│ commands.py\n│ LICENSE\n│ neko.txt\n│ number.txt\n│ option.yml\n│ README.md\n│ requirements.txt\n│ urls.ini\n│ \n├─logs\n│ \n├─napcat\n│ ├─...... \n│ └─......\n├─plugins\n│\n├─prompts\n│ ├─group\n│ └─user\n├─saved_images\n│ \n├─saved_message\n│\n└─cache\n ├─comic\n ├─saved_images\n ├─list\n ├─fav\n ├─pdf\n └─......\n```\n"}, "1ee328cb3b939f372d6e72d23d2cdbc2ec74478f": {"t": 1785771813.1841934, "n": 8281, "h": "4c1879d9322e1f5e", "c": "
\n

🚀A Comic Downloader & AI Chatbot for QQ

\n
\n\n[![Contributors][contributors-shield]][contributors-url]\n[![Forks][forks-shield]][forks-url]\n[![Stargazers][stars-shield]][stars-url]\n![](https://visitor-badge.laobi.icu/badge?page_id=asukaneko.NapCat-jmcomic_download-bot)\n[![Issues][issues-shield]][issues-url]\n[![MIT License][license-shield]][license-url]\n\n---\n[中文版 | Chinese](https://github.com/asukaneko/NapCat-jmcomic_download-bot/blob/master/Chinese.md)\n## ✨Updates \n![](https://img.shields.io/badge/LatestVersion-1.6.3-blue?&logo=react)\n### New Features\n- New features:\n - Support invoking commands by directly asking the AI, such as \"Please help me download manga xxxxxx\", \"Please generate an image for me, xxxx\", etc.\n - Full group message logging for each day, which can be used for statistics and summarization\n - `/summary_today`: summarize today's group or private chat content\n - `/summary_recent` or `/sr`: summarize the latest N group messages based on QQ history\n \n+ [CHANGLOG.md](https://github.com/asukaneko/NapCat-jmcomic_download-bot/blob/master/CHANGELOG.md)\n---\n\n## 📌Before You Start \n[![](https://img.shields.io/badge/python-version>=3.7-red?logo=python)]()\n> **⚠️Notice** \n> If you encounter any error, please check if you have installed the latest version of napcat and ncatbot \n>\n> If you are unable to install NapCat, please go to the [NapCat Download Page](https://github.com/NapNeko/NapCatQQ/releases/download/v4.8.95/NapCat.Shell.zip) to download the latest version of NapCat.Shell.zip, extract it to the root directory, and rename it to \"napcat.\"\n>**Do not expose the webui directly to the public network. If necessary, please set a strong password.**\n\n>Environment: ___windows___ \n>Recommended to use a __secondary account__ for login \n>Developed based on jmcomic and ncatbot \n>For any issues, please submit to GitHub or email ycssbc@126.com \n\n\n## =============== ↓ Quick Start ↓ ===============\n### ⬇️Download Source Code \n```\ngit clone https://github.com/asukaneko/Ncatbot-comic-QQbot.git\n```\n\n### 📦Install Dependencies \n```\ncd Ncatbot-comic-QQbot\npip install -r requirements.txt\n```\n\n### ⚙️Configuration \n```\nconfig.ini: Modify account, AI API, image saving settings\n\noption.yml: Modify comic download directory, download method\n\nurls.ini: (Optional) Modify image API URLs, default URLs will be used if not modified\n```\n\n### ▶️Run \n```\npython bot.py\n```\nThe console will prompt to download napcat, then scan QR code to login \n\n### 📜Commands \n>__commands.py contains ___command registration decorators___, you can add custom commands__ \nCommand List:\n```text\n/jm -> Download comics\n/jmrank -> Get rankings\n/jm_clear -> Clear cache\n/search -> Search comics\n/tag -> Search by tag\n/add_black_list or /abl -> Add to blacklist\n/del_black_list or /dbl -> Remove from blacklist\n/list_black_list or /lbl -> View blacklist\n/add_global_black_list or /agbl -> Add to global blacklist (admin)\n/del_global_black_list or /dgbl -> Remove from global blacklist (admin)\n/get_fav -> Get favorites (private chat only for groups)\n/add_fav -> Add to favorites\n/del_fav -> Remove from favorites\n/list_fav -> View favorites list\n/set_prompt or /sp -> Set prompt\n/del_prompt or /dp -> Delete prompt\n/get_prompt or /gp -> Get prompt\n/del_message or /dm -> Delete chat history\n/active_chat -> Enable active chat\n/show_chat or /sc -> Send complete chat history\n/random_image or /ri -> Random image\n/random_emoticons or /re -> Random emoticons\n/st -> Send random NSFW image (tags support AND/OR (& |))\n/random_video or /rv -> Random anime video\n/random_dice or /rd -> Random dice\n/random_rps or /rps -> Random rock-paper-scissors\n/music -> Send music\n/random_music or /rm -> Random music\n/dv -> Download video\n/di -> Download image\n/df -> Download file\n/mc -> Check MC server status\n/mc_bind -> Bind MC server\n/mc_unbind -> Unbind MC server\n/mc_show -> View bound MC server\n/generate_photo or /gf -> Generate image\n/restart -> Restart bot (admin)\n/tts -> Toggle TTS\n/agree -> Accept friend request\n/set_admin or /sa -> Set admin (root)\n/del_admin or /da -> Remove admin (root)\n/get_admin or /ga -> Get admin list\n/set_ids -> Set account info (admin)\n/set_online_status -> Set online status (admin)\n/get_friends -> Get friend list (admin)\n/set_qq_avatar -> Change avatar (admin)\n/send_like -> Send likes\n/bot.api.function_name(param1=value1,param2=value2) -> Custom API (admin), see `https://docs.ncatbot.xyz/guide/p8aun9nh/`\n/shutdown -> Shutdown bot (admin)\n/set_group_admin -> Set group admin (admin)\n/del_group_admin -> Remove group admin (admin)\n/findbook or /fb -> Search and download light novel\n/fa -> Search by author\n/select -> Select novel to download\n/info -> Get novel info\n/random_novel or /rn -> Random novel\n/task -> Set timed task (admin)\n/remind -> Set reminder\n/premind -> Set precise reminder\n/help or /h -> View help\n...\n```\n\n## 💡Tips \n+ After login, you can find webui login URL in napcat\\logs folder\n+ ___If napcat is not properly configured, open: http://localhost:6099, default token is 'napcat', then login and create a websocket server in network configuration with default port 3001___\n+ Use _/chat_ command or _@bot_ in group chat to start conversation, private chat handles all non-command messages as conversation by default\n+ _Default AI model is from SiliconFlow, new users get 15CNY free credit_\n+ For AI to process images in group chat, first send image then reply to your own message mentioning the bot\n+ TTS supports custom voice upload, see comments in chat.py for details\n+ Modify prompts in neko.txt to create different characters\n\n## 🌟More Features\n+ Supports image recognition, video recognition\n+ Supports web search. Go to https://opensearch.console.aliyun.com/cn-shanghai/rag/api-key to obtain the API and domain address, which can be used for free.\n+ Supports multi-group chat and custom user prompts\n+ Group chat supports user awareness, chat supports time awareness\n+ Supports conversation history saving\n+ Quick command adding\n+ Low configuration requirements, lightweight, small memory footprint\n\n[your-project-path]:asukaneko/NapCat-jmcomic_download-bot\n[contributors-shield]: https://img.shields.io/github/contributors/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[contributors-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/graphs/contributors\n[forks-shield]: https://img.shields.io/github/forks/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[forks-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/network/members\n[stars-shield]: https://img.shields.io/github/stars/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[stars-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/stargazers\n[issues-shield]: https://img.shields.io/github/issues/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[issues-url]: https://img.shields.io/github/issues/asukaneko/NapCat-jmcomic_download-bot.svg\n[license-shield]: https://img.shields.io/github/license/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[license-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/blob/master/LICENSE\n[linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=flat&logo=linkedin&colorB=555\n\n### 📂Directory Structure\n```\n.\n│ bot.py\n│ chat.py\n│ config.ini\n│ config.py\n│ commands.py\n│ LICENSE\n│ neko.txt\n│ number.txt\n│ option.yml\n│ README.md\n│ requirements.txt\n│ urls.ini\n│ \n├─logs\n│ \n├─napcat\n│ ├─...... \n│ └─......\n├─plugins\n│\n├─prompts\n│ ├─group\n│ └─user\n├─saved_images\n│ \n├─saved_message\n│\n└─cache\n ├─comic\n ├─saved_images\n ├─list\n ├─fav\n ├─pdf\n └─......\n```\n"}, "a698eda4f0e03db4dd14bb0d639a8961b305e540": {"t": 1785771817.9884307, "n": 8281, "h": "07733affe5e98b56", "c": "
\n

🚀A Comic Downloader & AI Chatbot for QQ

\n
\n\n[![Contributors][contributors-shield]][contributors-url]\n[![Forks][forks-shield]][forks-url]\n[![Stargazers][stars-shield]][stars-url]\n![](https://visitor-badge.laobi.icu/badge?page_id=asukaneko.NapCat-jmcomic_download-bot)\n[![Issues][issues-shield]][issues-url]\n[![MIT License][license-shield]][license-url]\n\n---\n[中文版 | Chinese](https://github.com/asukaneko/NapCat-jmcomic_download-bot/blob/master/Chinese.md)\n## ✨Updates \n![](https://img.shields.io/badge/LatestVersion-1.6.2-blue?&logo=react)\n### New Features\n- New features:\n - Support invoking commands by directly asking the AI, such as \"Please help me download manga xxxxxx\", \"Please generate an image for me, xxxx\", etc.\n - Full group message logging for each day, which can be used for statistics and summarization\n - `/summary_today`: summarize today's group or private chat content\n - `/summary_recent` or `/sr`: summarize the latest N group messages based on QQ history\n \n+ [CHANGLOG.md](https://github.com/asukaneko/NapCat-jmcomic_download-bot/blob/master/CHANGELOG.md)\n---\n\n## 📌Before You Start \n[![](https://img.shields.io/badge/python-version>=3.7-red?logo=python)]()\n> **⚠️Notice** \n> If you encounter any error, please check if you have installed the latest version of napcat and ncatbot \n>\n> If you are unable to install NapCat, please go to the [NapCat Download Page](https://github.com/NapNeko/NapCatQQ/releases/download/v4.8.95/NapCat.Shell.zip) to download the latest version of NapCat.Shell.zip, extract it to the root directory, and rename it to \"napcat.\"\n>**Do not expose the webui directly to the public network. If necessary, please set a strong password.**\n\n>Environment: ___windows___ \n>Recommended to use a __secondary account__ for login \n>Developed based on jmcomic and ncatbot \n>For any issues, please submit to GitHub or email ycssbc@126.com \n\n\n## =============== ↓ Quick Start ↓ ===============\n### ⬇️Download Source Code \n```\ngit clone https://github.com/asukaneko/Ncatbot-comic-QQbot.git\n```\n\n### 📦Install Dependencies \n```\ncd Ncatbot-comic-QQbot\npip install -r requirements.txt\n```\n\n### ⚙️Configuration \n```\nconfig.ini: Modify account, AI API, image saving settings\n\noption.yml: Modify comic download directory, download method\n\nurls.ini: (Optional) Modify image API URLs, default URLs will be used if not modified\n```\n\n### ▶️Run \n```\npython bot.py\n```\nThe console will prompt to download napcat, then scan QR code to login \n\n### 📜Commands \n>__commands.py contains ___command registration decorators___, you can add custom commands__ \nCommand List:\n```text\n/jm -> Download comics\n/jmrank -> Get rankings\n/jm_clear -> Clear cache\n/search -> Search comics\n/tag -> Search by tag\n/add_black_list or /abl -> Add to blacklist\n/del_black_list or /dbl -> Remove from blacklist\n/list_black_list or /lbl -> View blacklist\n/add_global_black_list or /agbl -> Add to global blacklist (admin)\n/del_global_black_list or /dgbl -> Remove from global blacklist (admin)\n/get_fav -> Get favorites (private chat only for groups)\n/add_fav -> Add to favorites\n/del_fav -> Remove from favorites\n/list_fav -> View favorites list\n/set_prompt or /sp -> Set prompt\n/del_prompt or /dp -> Delete prompt\n/get_prompt or /gp -> Get prompt\n/del_message or /dm -> Delete chat history\n/active_chat -> Enable active chat\n/show_chat or /sc -> Send complete chat history\n/random_image or /ri -> Random image\n/random_emoticons or /re -> Random emoticons\n/st -> Send random NSFW image (tags support AND/OR (& |))\n/random_video or /rv -> Random anime video\n/random_dice or /rd -> Random dice\n/random_rps or /rps -> Random rock-paper-scissors\n/music -> Send music\n/random_music or /rm -> Random music\n/dv -> Download video\n/di -> Download image\n/df -> Download file\n/mc -> Check MC server status\n/mc_bind -> Bind MC server\n/mc_unbind -> Unbind MC server\n/mc_show -> View bound MC server\n/generate_photo or /gf -> Generate image\n/restart -> Restart bot (admin)\n/tts -> Toggle TTS\n/agree -> Accept friend request\n/set_admin or /sa -> Set admin (root)\n/del_admin or /da -> Remove admin (root)\n/get_admin or /ga -> Get admin list\n/set_ids -> Set account info (admin)\n/set_online_status -> Set online status (admin)\n/get_friends -> Get friend list (admin)\n/set_qq_avatar -> Change avatar (admin)\n/send_like -> Send likes\n/bot.api.function_name(param1=value1,param2=value2) -> Custom API (admin), see `https://docs.ncatbot.xyz/guide/p8aun9nh/`\n/shutdown -> Shutdown bot (admin)\n/set_group_admin -> Set group admin (admin)\n/del_group_admin -> Remove group admin (admin)\n/findbook or /fb -> Search and download light novel\n/fa -> Search by author\n/select -> Select novel to download\n/info -> Get novel info\n/random_novel or /rn -> Random novel\n/task -> Set timed task (admin)\n/remind -> Set reminder\n/premind -> Set precise reminder\n/help or /h -> View help\n...\n```\n\n## 💡Tips \n+ After login, you can find webui login URL in napcat\\logs folder\n+ ___If napcat is not properly configured, open: http://localhost:6099, default token is 'napcat', then login and create a websocket server in network configuration with default port 3001___\n+ Use _/chat_ command or _@bot_ in group chat to start conversation, private chat handles all non-command messages as conversation by default\n+ _Default AI model is from SiliconFlow, new users get 15CNY free credit_\n+ For AI to process images in group chat, first send image then reply to your own message mentioning the bot\n+ TTS supports custom voice upload, see comments in chat.py for details\n+ Modify prompts in neko.txt to create different characters\n\n## 🌟More Features\n+ Supports image recognition, video recognition\n+ Supports web search. Go to https://opensearch.console.aliyun.com/cn-shanghai/rag/api-key to obtain the API and domain address, which can be used for free.\n+ Supports multi-group chat and custom user prompts\n+ Group chat supports user awareness, chat supports time awareness\n+ Supports conversation history saving\n+ Quick command adding\n+ Low configuration requirements, lightweight, small memory footprint\n\n[your-project-path]:asukaneko/NapCat-jmcomic_download-bot\n[contributors-shield]: https://img.shields.io/github/contributors/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[contributors-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/graphs/contributors\n[forks-shield]: https://img.shields.io/github/forks/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[forks-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/network/members\n[stars-shield]: https://img.shields.io/github/stars/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[stars-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/stargazers\n[issues-shield]: https://img.shields.io/github/issues/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[issues-url]: https://img.shields.io/github/issues/asukaneko/NapCat-jmcomic_download-bot.svg\n[license-shield]: https://img.shields.io/github/license/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[license-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/blob/master/LICENSE\n[linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=flat&logo=linkedin&colorB=555\n\n### 📂Directory Structure\n```\n.\n│ bot.py\n│ chat.py\n│ config.ini\n│ config.py\n│ commands.py\n│ LICENSE\n│ neko.txt\n│ number.txt\n│ option.yml\n│ README.md\n│ requirements.txt\n│ urls.ini\n│ \n├─logs\n│ \n├─napcat\n│ ├─...... \n│ └─......\n├─plugins\n│\n├─prompts\n│ ├─group\n│ └─user\n├─saved_images\n│ \n├─saved_message\n│\n└─cache\n ├─comic\n ├─saved_images\n ├─list\n ├─fav\n ├─pdf\n └─......\n```\n"}, "e9bd872c78c924d3e27754b9f3b2605f75e988be": {"t": 1785771820.3170655, "n": 8025, "h": "e1a3f96dc8684de1", "c": "
\n

🚀A Comic Downloader & AI Chatbot for QQ

\n
\n\n[![Contributors][contributors-shield]][contributors-url]\n[![Forks][forks-shield]][forks-url]\n[![Stargazers][stars-shield]][stars-url]\n![](https://visitor-badge.laobi.icu/badge?page_id=asukaneko.NapCat-jmcomic_download-bot)\n[![Issues][issues-shield]][issues-url]\n[![MIT License][license-shield]][license-url]\n\n---\n[中文版 | Chinese](https://github.com/asukaneko/NapCat-jmcomic_download-bot/blob/master/Chinese.md)\n## ✨Updates \n![](https://img.shields.io/badge/LatestVersion-1.6.1-blue?&logo=react)\n### New Features\n- New features:\n - Support invoking commands by directly asking the AI, such as \"Please help me download manga xxxxxx\", \"Please generate an image for me, xxxx\", etc.\n \n+ [CHANGLOG.md](https://github.com/asukaneko/NapCat-jmcomic_download-bot/blob/master/CHANGELOG.md)\n---\n\n## 📌Before You Start \n[![](https://img.shields.io/badge/python-version>=3.7-red?logo=python)]()\n> **⚠️Notice** \n> If you encounter any error, please check if you have installed the latest version of napcat and ncatbot \n>\n> If you are unable to install NapCat, please go to the [NapCat Download Page](https://github.com/NapNeko/NapCatQQ/releases/download/v4.8.95/NapCat.Shell.zip) to download the latest version of NapCat.Shell.zip, extract it to the root directory, and rename it to \"napcat.\"\n>**Do not expose the webui directly to the public network. If necessary, please set a strong password.**\n\n>Environment: ___windows___ \n>Recommended to use a __secondary account__ for login \n>Developed based on jmcomic and ncatbot \n>For any issues, please submit to GitHub or email ycssbc@126.com \n\n\n## =============== ↓ Quick Start ↓ ===============\n### ⬇️Download Source Code \n```\ngit clone https://github.com/asukaneko/Ncatbot-comic-QQbot.git\n```\n\n### 📦Install Dependencies \n```\ncd Ncatbot-comic-QQbot\npip install -r requirements.txt\n```\n\n### ⚙️Configuration \n```\nconfig.ini: Modify account, AI API, image saving settings\n\noption.yml: Modify comic download directory, download method\n\nurls.ini: (Optional) Modify image API URLs, default URLs will be used if not modified\n```\n\n### ▶️Run \n```\npython bot.py\n```\nThe console will prompt to download napcat, then scan QR code to login \n\n### 📜Commands \n>__commands.py contains ___command registration decorators___, you can add custom commands__ \nCommand List:\n```text\n/jm -> Download comics\n/jmrank -> Get rankings\n/jm_clear -> Clear cache\n/search -> Search comics\n/tag -> Search by tag\n/add_black_list or /abl -> Add to blacklist\n/del_black_list or /dbl -> Remove from blacklist\n/list_black_list or /lbl -> View blacklist\n/add_global_black_list or /agbl -> Add to global blacklist (admin)\n/del_global_black_list or /dgbl -> Remove from global blacklist (admin)\n/get_fav -> Get favorites (private chat only for groups)\n/add_fav -> Add to favorites\n/del_fav -> Remove from favorites\n/list_fav -> View favorites list\n/set_prompt or /sp -> Set prompt\n/del_prompt or /dp -> Delete prompt\n/get_prompt or /gp -> Get prompt\n/del_message or /dm -> Delete chat history\n/active_chat -> Enable active chat\n/show_chat or /sc -> Send complete chat history\n/random_image or /ri -> Random image\n/random_emoticons or /re -> Random emoticons\n/st -> Send random NSFW image (tags support AND/OR (& |))\n/random_video or /rv -> Random anime video\n/random_dice or /rd -> Random dice\n/random_rps or /rps -> Random rock-paper-scissors\n/music -> Send music\n/random_music or /rm -> Random music\n/dv -> Download video\n/di -> Download image\n/df -> Download file\n/mc -> Check MC server status\n/mc_bind -> Bind MC server\n/mc_unbind -> Unbind MC server\n/mc_show -> View bound MC server\n/generate_photo or /gf -> Generate image\n/restart -> Restart bot (admin)\n/tts -> Toggle TTS\n/agree -> Accept friend request\n/set_admin or /sa -> Set admin (root)\n/del_admin or /da -> Remove admin (root)\n/get_admin or /ga -> Get admin list\n/set_ids -> Set account info (admin)\n/set_online_status -> Set online status (admin)\n/get_friends -> Get friend list (admin)\n/set_qq_avatar -> Change avatar (admin)\n/send_like -> Send likes\n/bot.api.function_name(param1=value1,param2=value2) -> Custom API (admin), see `https://docs.ncatbot.xyz/guide/p8aun9nh/`\n/shutdown -> Shutdown bot (admin)\n/set_group_admin -> Set group admin (admin)\n/del_group_admin -> Remove group admin (admin)\n/findbook or /fb -> Search and download light novel\n/fa -> Search by author\n/select -> Select novel to download\n/info -> Get novel info\n/random_novel or /rn -> Random novel\n/task -> Set timed task (admin)\n/remind -> Set reminder\n/premind -> Set precise reminder\n/help or /h -> View help\n...\n```\n\n## 💡Tips \n+ After login, you can find webui login URL in napcat\\logs folder\n+ ___If napcat is not properly configured, open: http://localhost:6099, default token is 'napcat', then login and create a websocket server in network configuration with default port 3001___\n+ Use _/chat_ command or _@bot_ in group chat to start conversation, private chat handles all non-command messages as conversation by default\n+ _Default AI model is from SiliconFlow, new users get 15CNY free credit_\n+ For AI to process images in group chat, first send image then reply to your own message mentioning the bot\n+ TTS supports custom voice upload, see comments in chat.py for details\n+ Modify prompts in neko.txt to create different characters\n\n## 🌟More Features\n+ Supports image recognition, video recognition\n+ Supports web search. Go to https://opensearch.console.aliyun.com/cn-shanghai/rag/api-key to obtain the API and domain address, which can be used for free.\n+ Supports multi-group chat and custom user prompts\n+ Group chat supports user awareness, chat supports time awareness\n+ Supports conversation history saving\n+ Quick command adding\n+ Low configuration requirements, lightweight, small memory footprint\n\n[your-project-path]:asukaneko/NapCat-jmcomic_download-bot\n[contributors-shield]: https://img.shields.io/github/contributors/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[contributors-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/graphs/contributors\n[forks-shield]: https://img.shields.io/github/forks/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[forks-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/network/members\n[stars-shield]: https://img.shields.io/github/stars/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[stars-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/stargazers\n[issues-shield]: https://img.shields.io/github/issues/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[issues-url]: https://img.shields.io/github/issues/asukaneko/NapCat-jmcomic_download-bot.svg\n[license-shield]: https://img.shields.io/github/license/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[license-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/blob/master/LICENSE\n[linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=flat&logo=linkedin&colorB=555\n\n### 📂Directory Structure\n```\n.\n│ bot.py\n│ chat.py\n│ config.ini\n│ config.py\n│ commands.py\n│ LICENSE\n│ neko.txt\n│ number.txt\n│ option.yml\n│ README.md\n│ requirements.txt\n│ urls.ini\n│ \n├─logs\n│ \n├─napcat\n│ ├─...... \n│ └─......\n├─plugins\n│\n├─prompts\n│ ├─group\n│ └─user\n├─saved_images\n│ \n├─saved_message\n│\n└─cache\n ├─comic\n ├─saved_images\n ├─list\n ├─fav\n ├─pdf\n └─......\n```\n"}, "3e278c4539207414ab5036faa6e81b392fbecbe8": {"t": 1785771821.5996947, "n": 7839, "h": "b89b692a59ecba8d", "c": "
\n

🚀A Comic Downloader & AI Chatbot for QQ

\n
\n\n[![Contributors][contributors-shield]][contributors-url]\n[![Forks][forks-shield]][forks-url]\n[![Stargazers][stars-shield]][stars-url]\n![](https://visitor-badge.laobi.icu/badge?page_id=asukaneko.NapCat-jmcomic_download-bot)\n[![Issues][issues-shield]][issues-url]\n[![MIT License][license-shield]][license-url]\n\n---\n[中文版 | Chinese](https://github.com/asukaneko/NapCat-jmcomic_download-bot/blob/master/Chinese.md)\n## ✨Updates \n![](https://img.shields.io/badge/LatestVersion-1.6.0-blue?&logo=react)\n\n+ [CHANGLOG.md](https://github.com/asukaneko/NapCat-jmcomic_download-bot/blob/master/CHANGELOG.md)\n---\n\n## 📌Before You Start \n[![](https://img.shields.io/badge/python-version>=3.7-red?logo=python)]()\n> **⚠️Notice** \n> If you encounter any error, please check if you have installed the latest version of napcat and ncatbot \n>\n> If you are unable to install NapCat, please go to the [NapCat Download Page](https://github.com/NapNeko/NapCatQQ/releases/download/v4.8.95/NapCat.Shell.zip) to download the latest version of NapCat.Shell.zip, extract it to the root directory, and rename it to \"napcat.\"\n>**Do not expose the webui directly to the public network. If necessary, please set a strong password.**\n\n>Environment: ___windows___ \n>Recommended to use a __secondary account__ for login \n>Developed based on jmcomic and ncatbot \n>For any issues, please submit to GitHub or email ycssbc@126.com \n\n\n## =============== ↓ Quick Start ↓ ===============\n### ⬇️Download Source Code \n```\ngit clone https://github.com/asukaneko/Ncatbot-comic-QQbot.git\n```\n\n### 📦Install Dependencies \n```\ncd Ncatbot-comic-QQbot\npip install -r requirements.txt\n```\n\n### ⚙️Configuration \n```\nconfig.ini: Modify account, AI API, image saving settings\n\noption.yml: Modify comic download directory, download method\n\nurls.ini: (Optional) Modify image API URLs, default URLs will be used if not modified\n```\n\n### ▶️Run \n```\npython bot.py\n```\nThe console will prompt to download napcat, then scan QR code to login \n\n### 📜Commands \n>__commands.py contains ___command registration decorators___, you can add custom commands__ \nCommand List:\n```text\n/jm -> Download comics\n/jmrank -> Get rankings\n/jm_clear -> Clear cache\n/search -> Search comics\n/tag -> Search by tag\n/add_black_list or /abl -> Add to blacklist\n/del_black_list or /dbl -> Remove from blacklist\n/list_black_list or /lbl -> View blacklist\n/add_global_black_list or /agbl -> Add to global blacklist (admin)\n/del_global_black_list or /dgbl -> Remove from global blacklist (admin)\n/get_fav -> Get favorites (private chat only for groups)\n/add_fav -> Add to favorites\n/del_fav -> Remove from favorites\n/list_fav -> View favorites list\n/set_prompt or /sp -> Set prompt\n/del_prompt or /dp -> Delete prompt\n/get_prompt or /gp -> Get prompt\n/del_message or /dm -> Delete chat history\n/active_chat -> Enable active chat\n/show_chat or /sc -> Send complete chat history\n/random_image or /ri -> Random image\n/random_emoticons or /re -> Random emoticons\n/st -> Send random NSFW image (tags support AND/OR (& |))\n/random_video or /rv -> Random anime video\n/random_dice or /rd -> Random dice\n/random_rps or /rps -> Random rock-paper-scissors\n/music -> Send music\n/random_music or /rm -> Random music\n/dv -> Download video\n/di -> Download image\n/df -> Download file\n/mc -> Check MC server status\n/mc_bind -> Bind MC server\n/mc_unbind -> Unbind MC server\n/mc_show -> View bound MC server\n/generate_photo or /gf -> Generate image\n/restart -> Restart bot (admin)\n/tts -> Toggle TTS\n/agree -> Accept friend request\n/set_admin or /sa -> Set admin (root)\n/del_admin or /da -> Remove admin (root)\n/get_admin or /ga -> Get admin list\n/set_ids -> Set account info (admin)\n/set_online_status -> Set online status (admin)\n/get_friends -> Get friend list (admin)\n/set_qq_avatar -> Change avatar (admin)\n/send_like -> Send likes\n/bot.api.function_name(param1=value1,param2=value2) -> Custom API (admin), see `https://docs.ncatbot.xyz/guide/p8aun9nh/`\n/shutdown -> Shutdown bot (admin)\n/set_group_admin -> Set group admin (admin)\n/del_group_admin -> Remove group admin (admin)\n/findbook or /fb -> Search and download light novel\n/fa -> Search by author\n/select -> Select novel to download\n/info -> Get novel info\n/random_novel or /rn -> Random novel\n/task -> Set timed task (admin)\n/remind -> Set reminder\n/premind -> Set precise reminder\n/help or /h -> View help\n...\n```\n\n## 💡Tips \n+ After login, you can find webui login URL in napcat\\logs folder\n+ ___If napcat is not properly configured, open: http://localhost:6099, default token is 'napcat', then login and create a websocket server in network configuration with default port 3001___\n+ Use _/chat_ command or _@bot_ in group chat to start conversation, private chat handles all non-command messages as conversation by default\n+ _Default AI model is from SiliconFlow, new users get 15CNY free credit_\n+ For AI to process images in group chat, first send image then reply to your own message mentioning the bot\n+ TTS supports custom voice upload, see comments in chat.py for details\n+ Modify prompts in neko.txt to create different characters\n\n## 🌟More Features\n+ Supports image recognition, video recognition\n+ Supports web search. Go to https://opensearch.console.aliyun.com/cn-shanghai/rag/api-key to obtain the API and domain address, which can be used for free.\n+ Supports multi-group chat and custom user prompts\n+ Group chat supports user awareness, chat supports time awareness\n+ Supports conversation history saving\n+ Quick command adding\n+ Low configuration requirements, lightweight, small memory footprint\n\n[your-project-path]:asukaneko/NapCat-jmcomic_download-bot\n[contributors-shield]: https://img.shields.io/github/contributors/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[contributors-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/graphs/contributors\n[forks-shield]: https://img.shields.io/github/forks/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[forks-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/network/members\n[stars-shield]: https://img.shields.io/github/stars/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[stars-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/stargazers\n[issues-shield]: https://img.shields.io/github/issues/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[issues-url]: https://img.shields.io/github/issues/asukaneko/NapCat-jmcomic_download-bot.svg\n[license-shield]: https://img.shields.io/github/license/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[license-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/blob/master/LICENSE\n[linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=flat&logo=linkedin&colorB=555\n\n### 📂Directory Structure\n```\n.\n│ bot.py\n│ chat.py\n│ config.ini\n│ config.py\n│ commands.py\n│ LICENSE\n│ neko.txt\n│ number.txt\n│ option.yml\n│ README.md\n│ requirements.txt\n│ urls.ini\n│ \n├─logs\n│ \n├─napcat\n│ ├─...... \n│ └─......\n├─plugins\n│\n├─prompts\n│ ├─group\n│ └─user\n├─saved_images\n│ \n├─saved_message\n│\n└─cache\n ├─comic\n ├─saved_images\n ├─list\n ├─fav\n ├─pdf\n └─......\n```\n"}, "9bb0c7e09e0dfc1c22a898fb7f26fa7d02d495d5": {"t": 1785771823.0062814, "n": 7839, "h": "97fed0b60da4fb66", "c": "
\n

🚀A Comic Downloader & AI Chatbot for QQ

\n
\n\n[![Contributors][contributors-shield]][contributors-url]\n[![Forks][forks-shield]][forks-url]\n[![Stargazers][stars-shield]][stars-url]\n![](https://visitor-badge.laobi.icu/badge?page_id=asukaneko.NapCat-jmcomic_download-bot)\n[![Issues][issues-shield]][issues-url]\n[![MIT License][license-shield]][license-url]\n\n---\n[中文版 | Chinese](https://github.com/asukaneko/NapCat-jmcomic_download-bot/blob/master/Chinese.md)\n## ✨Updates \n![](https://img.shields.io/badge/LatestVersion-1.5.6-blue?&logo=react)\n\n+ [CHANGLOG.md](https://github.com/asukaneko/NapCat-jmcomic_download-bot/blob/master/CHANGELOG.md)\n---\n\n## 📌Before You Start \n[![](https://img.shields.io/badge/python-version>=3.7-red?logo=python)]()\n> **⚠️Notice** \n> If you encounter any error, please check if you have installed the latest version of napcat and ncatbot \n>\n> If you are unable to install NapCat, please go to the [NapCat Download Page](https://github.com/NapNeko/NapCatQQ/releases/download/v4.8.95/NapCat.Shell.zip) to download the latest version of NapCat.Shell.zip, extract it to the root directory, and rename it to \"napcat.\"\n>**Do not expose the webui directly to the public network. If necessary, please set a strong password.**\n\n>Environment: ___windows___ \n>Recommended to use a __secondary account__ for login \n>Developed based on jmcomic and ncatbot \n>For any issues, please submit to GitHub or email ycssbc@126.com \n\n\n## =============== ↓ Quick Start ↓ ===============\n### ⬇️Download Source Code \n```\ngit clone https://github.com/asukaneko/Ncatbot-comic-QQbot.git\n```\n\n### 📦Install Dependencies \n```\ncd Ncatbot-comic-QQbot\npip install -r requirements.txt\n```\n\n### ⚙️Configuration \n```\nconfig.ini: Modify account, AI API, image saving settings\n\noption.yml: Modify comic download directory, download method\n\nurls.ini: (Optional) Modify image API URLs, default URLs will be used if not modified\n```\n\n### ▶️Run \n```\npython bot.py\n```\nThe console will prompt to download napcat, then scan QR code to login \n\n### 📜Commands \n>__commands.py contains ___command registration decorators___, you can add custom commands__ \nCommand List:\n```text\n/jm -> Download comics\n/jmrank -> Get rankings\n/jm_clear -> Clear cache\n/search -> Search comics\n/tag -> Search by tag\n/add_black_list or /abl -> Add to blacklist\n/del_black_list or /dbl -> Remove from blacklist\n/list_black_list or /lbl -> View blacklist\n/add_global_black_list or /agbl -> Add to global blacklist (admin)\n/del_global_black_list or /dgbl -> Remove from global blacklist (admin)\n/get_fav -> Get favorites (private chat only for groups)\n/add_fav -> Add to favorites\n/del_fav -> Remove from favorites\n/list_fav -> View favorites list\n/set_prompt or /sp -> Set prompt\n/del_prompt or /dp -> Delete prompt\n/get_prompt or /gp -> Get prompt\n/del_message or /dm -> Delete chat history\n/active_chat -> Enable active chat\n/show_chat or /sc -> Send complete chat history\n/random_image or /ri -> Random image\n/random_emoticons or /re -> Random emoticons\n/st -> Send random NSFW image (tags support AND/OR (& |))\n/random_video or /rv -> Random anime video\n/random_dice or /rd -> Random dice\n/random_rps or /rps -> Random rock-paper-scissors\n/music -> Send music\n/random_music or /rm -> Random music\n/dv -> Download video\n/di -> Download image\n/df -> Download file\n/mc -> Check MC server status\n/mc_bind -> Bind MC server\n/mc_unbind -> Unbind MC server\n/mc_show -> View bound MC server\n/generate_photo or /gf -> Generate image\n/restart -> Restart bot (admin)\n/tts -> Toggle TTS\n/agree -> Accept friend request\n/set_admin or /sa -> Set admin (root)\n/del_admin or /da -> Remove admin (root)\n/get_admin or /ga -> Get admin list\n/set_ids -> Set account info (admin)\n/set_online_status -> Set online status (admin)\n/get_friends -> Get friend list (admin)\n/set_qq_avatar -> Change avatar (admin)\n/send_like -> Send likes\n/bot.api.function_name(param1=value1,param2=value2) -> Custom API (admin), see `https://docs.ncatbot.xyz/guide/p8aun9nh/`\n/shutdown -> Shutdown bot (admin)\n/set_group_admin -> Set group admin (admin)\n/del_group_admin -> Remove group admin (admin)\n/findbook or /fb -> Search and download light novel\n/fa -> Search by author\n/select -> Select novel to download\n/info -> Get novel info\n/random_novel or /rn -> Random novel\n/task -> Set timed task (admin)\n/remind -> Set reminder\n/premind -> Set precise reminder\n/help or /h -> View help\n...\n```\n\n## 💡Tips \n+ After login, you can find webui login URL in napcat\\logs folder\n+ ___If napcat is not properly configured, open: http://localhost:6099, default token is 'napcat', then login and create a websocket server in network configuration with default port 3001___\n+ Use _/chat_ command or _@bot_ in group chat to start conversation, private chat handles all non-command messages as conversation by default\n+ _Default AI model is from SiliconFlow, new users get 15CNY free credit_\n+ For AI to process images in group chat, first send image then reply to your own message mentioning the bot\n+ TTS supports custom voice upload, see comments in chat.py for details\n+ Modify prompts in neko.txt to create different characters\n\n## 🌟More Features\n+ Supports image recognition, video recognition\n+ Supports web search. Go to https://opensearch.console.aliyun.com/cn-shanghai/rag/api-key to obtain the API and domain address, which can be used for free.\n+ Supports multi-group chat and custom user prompts\n+ Group chat supports user awareness, chat supports time awareness\n+ Supports conversation history saving\n+ Quick command adding\n+ Low configuration requirements, lightweight, small memory footprint\n\n[your-project-path]:asukaneko/NapCat-jmcomic_download-bot\n[contributors-shield]: https://img.shields.io/github/contributors/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[contributors-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/graphs/contributors\n[forks-shield]: https://img.shields.io/github/forks/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[forks-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/network/members\n[stars-shield]: https://img.shields.io/github/stars/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[stars-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/stargazers\n[issues-shield]: https://img.shields.io/github/issues/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[issues-url]: https://img.shields.io/github/issues/asukaneko/NapCat-jmcomic_download-bot.svg\n[license-shield]: https://img.shields.io/github/license/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[license-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/blob/master/LICENSE\n[linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=flat&logo=linkedin&colorB=555\n\n### 📂Directory Structure\n```\n.\n│ bot.py\n│ chat.py\n│ config.ini\n│ config.py\n│ commands.py\n│ LICENSE\n│ neko.txt\n│ number.txt\n│ option.yml\n│ README.md\n│ requirements.txt\n│ urls.ini\n│ \n├─logs\n│ \n├─napcat\n│ ├─...... \n│ └─......\n├─plugins\n│\n├─prompts\n│ ├─group\n│ └─user\n├─saved_images\n│ \n├─saved_message\n│\n└─cache\n ├─comic\n ├─saved_images\n ├─list\n ├─fav\n ├─pdf\n └─......\n```\n"}, "f2b13176a51158cfac140d115764a9ab52098152": {"t": 1785771826.2952769, "n": 7839, "h": "ece7be9f423c4adc", "c": "
\n

🚀A Comic Downloader & AI Chatbot for QQ

\n
\n\n[![Contributors][contributors-shield]][contributors-url]\n[![Forks][forks-shield]][forks-url]\n[![Stargazers][stars-shield]][stars-url]\n![](https://visitor-badge.laobi.icu/badge?page_id=asukaneko.NapCat-jmcomic_download-bot)\n[![Issues][issues-shield]][issues-url]\n[![MIT License][license-shield]][license-url]\n\n---\n[中文版 | Chinese](https://github.com/asukaneko/NapCat-jmcomic_download-bot/blob/master/Chinese.md)\n## ✨Updates \n![](https://img.shields.io/badge/LatestVersion-1.5.4-blue?&logo=react)\n\n+ [CHANGLOG.md](https://github.com/asukaneko/NapCat-jmcomic_download-bot/blob/master/CHANGELOG.md)\n---\n\n## 📌Before You Start \n[![](https://img.shields.io/badge/python-version>=3.7-red?logo=python)]()\n> **⚠️Notice** \n> If you encounter any error, please check if you have installed the latest version of napcat and ncatbot \n>\n> If you are unable to install NapCat, please go to the [NapCat Download Page](https://github.com/NapNeko/NapCatQQ/releases/download/v4.8.95/NapCat.Shell.zip) to download the latest version of NapCat.Shell.zip, extract it to the root directory, and rename it to \"napcat.\"\n>**Do not expose the webui directly to the public network. If necessary, please set a strong password.**\n\n>Environment: ___windows___ \n>Recommended to use a __secondary account__ for login \n>Developed based on jmcomic and ncatbot \n>For any issues, please submit to GitHub or email ycssbc@126.com \n\n\n## =============== ↓ Quick Start ↓ ===============\n### ⬇️Download Source Code \n```\ngit clone https://github.com/asukaneko/Ncatbot-comic-QQbot.git\n```\n\n### 📦Install Dependencies \n```\ncd Ncatbot-comic-QQbot\npip install -r requirements.txt\n```\n\n### ⚙️Configuration \n```\nconfig.ini: Modify account, AI API, image saving settings\n\noption.yml: Modify comic download directory, download method\n\nurls.ini: (Optional) Modify image API URLs, default URLs will be used if not modified\n```\n\n### ▶️Run \n```\npython bot.py\n```\nThe console will prompt to download napcat, then scan QR code to login \n\n### 📜Commands \n>__commands.py contains ___command registration decorators___, you can add custom commands__ \nCommand List:\n```text\n/jm -> Download comics\n/jmrank -> Get rankings\n/jm_clear -> Clear cache\n/search -> Search comics\n/tag -> Search by tag\n/add_black_list or /abl -> Add to blacklist\n/del_black_list or /dbl -> Remove from blacklist\n/list_black_list or /lbl -> View blacklist\n/add_global_black_list or /agbl -> Add to global blacklist (admin)\n/del_global_black_list or /dgbl -> Remove from global blacklist (admin)\n/get_fav -> Get favorites (private chat only for groups)\n/add_fav -> Add to favorites\n/del_fav -> Remove from favorites\n/list_fav -> View favorites list\n/set_prompt or /sp -> Set prompt\n/del_prompt or /dp -> Delete prompt\n/get_prompt or /gp -> Get prompt\n/del_message or /dm -> Delete chat history\n/active_chat -> Enable active chat\n/show_chat or /sc -> Send complete chat history\n/random_image or /ri -> Random image\n/random_emoticons or /re -> Random emoticons\n/st -> Send random NSFW image (tags support AND/OR (& |))\n/random_video or /rv -> Random anime video\n/random_dice or /rd -> Random dice\n/random_rps or /rps -> Random rock-paper-scissors\n/music -> Send music\n/random_music or /rm -> Random music\n/dv -> Download video\n/di -> Download image\n/df -> Download file\n/mc -> Check MC server status\n/mc_bind -> Bind MC server\n/mc_unbind -> Unbind MC server\n/mc_show -> View bound MC server\n/generate_photo or /gf -> Generate image\n/restart -> Restart bot (admin)\n/tts -> Toggle TTS\n/agree -> Accept friend request\n/set_admin or /sa -> Set admin (root)\n/del_admin or /da -> Remove admin (root)\n/get_admin or /ga -> Get admin list\n/set_ids -> Set account info (admin)\n/set_online_status -> Set online status (admin)\n/get_friends -> Get friend list (admin)\n/set_qq_avatar -> Change avatar (admin)\n/send_like -> Send likes\n/bot.api.function_name(param1=value1,param2=value2) -> Custom API (admin), see `https://docs.ncatbot.xyz/guide/p8aun9nh/`\n/shutdown -> Shutdown bot (admin)\n/set_group_admin -> Set group admin (admin)\n/del_group_admin -> Remove group admin (admin)\n/findbook or /fb -> Search and download light novel\n/fa -> Search by author\n/select -> Select novel to download\n/info -> Get novel info\n/random_novel or /rn -> Random novel\n/task -> Set timed task (admin)\n/remind -> Set reminder\n/premind -> Set precise reminder\n/help or /h -> View help\n...\n```\n\n## 💡Tips \n+ After login, you can find webui login URL in napcat\\logs folder\n+ ___If napcat is not properly configured, open: http://localhost:6099, default token is 'napcat', then login and create a websocket server in network configuration with default port 3001___\n+ Use _/chat_ command or _@bot_ in group chat to start conversation, private chat handles all non-command messages as conversation by default\n+ _Default AI model is from SiliconFlow, new users get 15CNY free credit_\n+ For AI to process images in group chat, first send image then reply to your own message mentioning the bot\n+ TTS supports custom voice upload, see comments in chat.py for details\n+ Modify prompts in neko.txt to create different characters\n\n## 🌟More Features\n+ Supports image recognition, video recognition\n+ Supports web search. Go to https://opensearch.console.aliyun.com/cn-shanghai/rag/api-key to obtain the API and domain address, which can be used for free.\n+ Supports multi-group chat and custom user prompts\n+ Group chat supports user awareness, chat supports time awareness\n+ Supports conversation history saving\n+ Quick command adding\n+ Low configuration requirements, lightweight, small memory footprint\n\n[your-project-path]:asukaneko/NapCat-jmcomic_download-bot\n[contributors-shield]: https://img.shields.io/github/contributors/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[contributors-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/graphs/contributors\n[forks-shield]: https://img.shields.io/github/forks/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[forks-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/network/members\n[stars-shield]: https://img.shields.io/github/stars/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[stars-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/stargazers\n[issues-shield]: https://img.shields.io/github/issues/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[issues-url]: https://img.shields.io/github/issues/asukaneko/NapCat-jmcomic_download-bot.svg\n[license-shield]: https://img.shields.io/github/license/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[license-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/blob/master/LICENSE\n[linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=flat&logo=linkedin&colorB=555\n\n### 📂Directory Structure\n```\n.\n│ bot.py\n│ chat.py\n│ config.ini\n│ config.py\n│ commands.py\n│ LICENSE\n│ neko.txt\n│ number.txt\n│ option.yml\n│ README.md\n│ requirements.txt\n│ urls.ini\n│ \n├─logs\n│ \n├─napcat\n│ ├─...... \n│ └─......\n├─plugins\n│\n├─prompts\n│ ├─group\n│ └─user\n├─saved_images\n│ \n├─saved_message\n│\n└─cache\n ├─comic\n ├─saved_images\n ├─list\n ├─fav\n ├─pdf\n └─......\n```\n"}, "fb624c5ef228af5be51f75355156fda8644612a1": {"t": 1785771827.5683212, "n": 8717, "h": "cdd18409290af8ee", "c": "
\n

🚀A Comic Downloader & AI Chatbot for QQ

\n
\n\n[![Contributors][contributors-shield]][contributors-url]\n[![Forks][forks-shield]][forks-url]\n[![Stargazers][stars-shield]][stars-url]\n![](https://visitor-badge.laobi.icu/badge?page_id=asukaneko.NapCat-jmcomic_download-bot)\n[![Issues][issues-shield]][issues-url]\n[![MIT License][license-shield]][license-url]\n\n---\n[中文版 | Chinese](https://github.com/asukaneko/NapCat-jmcomic_download-bot/blob/master/Chinese.md)\n## ✨Updates \n![](https://img.shields.io/badge/LatestVersion-1.5.4-blue?&logo=react)\n\n+ [CHANGLOG.md](https://github.com/asukaneko/NapCat-jmcomic_download-bot/blob/master/CHANGELOG.md)\n---\n\n## 📌Before You Start \n[![](https://img.shields.io/badge/python-version>=3.7-red?logo=python)]()\n> **⚠️Notice** \n> If you encounter any error, please check if you have installed the latest version of napcat and ncatbot \n>\n> If you are unable to install NapCat, please go to the [NapCat Download Page](https://github.com/NapNeko/NapCatQQ/releases/download/v4.8.95/NapCat.Shell.zip) to download the latest version of NapCat.Shell.zip, extract it to the root directory, and rename it to \"napcat.\"\n>**Do not expose the webui directly to the public network. If necessary, please set a strong password.**\n\n>Environment: ___windows___ \n>Recommended to use a __secondary account__ for login \n>Developed based on jmcomic and ncatbot \n>For any issues, please submit to GitHub or email ycssbc@126.com \n\n\n **📝Related Documents**\n\ndocker:https://asukablog.iepose.cn/archives/5f583afd-c9b1-420f-bc4b-41f4dfc039d3 \n\n[![](https://img.shields.io/badge/docs-nekodocs-blue)](https://nekodocs.iepose.cn/) \n\n| jmcomic | [![](https://img.shields.io/badge/jmcomic-on_Github-blue)](https://github.com/hect0x7/JMComic-Crawler-Python) | [![](https://img.shields.io/badge/jmcomic-Readthedocs.io-orange)](https://jmcomic.readthedocs.io/zh-cn/latest/) |\n|:-:|:-:|:-:|\n\n| napcat |[![](https://img.shields.io/badge/napcat-on_Github-blue)](https://github.com/NapNeko/NapCatQQ) | [![](https://img.shields.io/badge/napcat-Github.IO-orange)](https://napneko.github.io)\n|:-:|:-:|:-:|\n\n| ncatbot | [![](https://img.shields.io/badge/ncatbot-on_Github-blue)](https://github.com/liyihao1110/ncatbot) | [![](https://img.shields.io/badge/Python_Sdk-Ncatbot-8A2BE2)](https://docs.ncatbot.xyz/) |\n|:-:|:-:|:-:|\n\n\n## =============== ↓ Quick Start ↓ ===============\n### ⬇️Download Source Code \n```\ngit clone https://github.com/asukaneko/Ncatbot-comic-QQbot.git\n```\n\n### 📦Install Dependencies \n```\ncd Ncatbot-comic-QQbot\npip install -r requirements.txt\n```\n\n### ⚙️Configuration \n```\nconfig.ini: Modify account, AI API, image saving settings\n\noption.yml: Modify comic download directory, download method\n\nurls.ini: (Optional) Modify image API URLs, default URLs will be used if not modified\n```\n\n### ▶️Run \n```\npython bot.py\n```\nThe console will prompt to download napcat, then scan QR code to login \n\n### 📜Commands \n>__commands.py contains ___command registration decorators___, you can add custom commands__ \nCommand List:\n```text\n/jm -> Download comics\n/jmrank -> Get rankings\n/jm_clear -> Clear cache\n/search -> Search comics\n/tag -> Search by tag\n/add_black_list or /abl -> Add to blacklist\n/del_black_list or /dbl -> Remove from blacklist\n/list_black_list or /lbl -> View blacklist\n/add_global_black_list or /agbl -> Add to global blacklist (admin)\n/del_global_black_list or /dgbl -> Remove from global blacklist (admin)\n/get_fav -> Get favorites (private chat only for groups)\n/add_fav -> Add to favorites\n/del_fav -> Remove from favorites\n/list_fav -> View favorites list\n/set_prompt or /sp -> Set prompt\n/del_prompt or /dp -> Delete prompt\n/get_prompt or /gp -> Get prompt\n/del_message or /dm -> Delete chat history\n/active_chat -> Enable active chat\n/show_chat or /sc -> Send complete chat history\n/random_image or /ri -> Random image\n/random_emoticons or /re -> Random emoticons\n/st -> Send random NSFW image (tags support AND/OR (& |))\n/random_video or /rv -> Random anime video\n/random_dice or /rd -> Random dice\n/random_rps or /rps -> Random rock-paper-scissors\n/music -> Send music\n/random_music or /rm -> Random music\n/dv -> Download video\n/di -> Download image\n/df -> Download file\n/mc -> Check MC server status\n/mc_bind -> Bind MC server\n/mc_unbind -> Unbind MC server\n/mc_show -> View bound MC server\n/generate_photo or /gf -> Generate image\n/restart -> Restart bot (admin)\n/tts -> Toggle TTS\n/agree -> Accept friend request\n/set_admin or /sa -> Set admin (root)\n/del_admin or /da -> Remove admin (root)\n/get_admin or /ga -> Get admin list\n/set_ids -> Set account info (admin)\n/set_online_status -> Set online status (admin)\n/get_friends -> Get friend list (admin)\n/set_qq_avatar -> Change avatar (admin)\n/send_like -> Send likes\n/bot.api.function_name(param1=value1,param2=value2) -> Custom API (admin), see `https://docs.ncatbot.xyz/guide/p8aun9nh/`\n/shutdown -> Shutdown bot (admin)\n/set_group_admin -> Set group admin (admin)\n/del_group_admin -> Remove group admin (admin)\n/findbook or /fb -> Search and download light novel\n/fa -> Search by author\n/select -> Select novel to download\n/info -> Get novel info\n/random_novel or /rn -> Random novel\n/task -> Set timed task (admin)\n/remind -> Set reminder\n/premind -> Set precise reminder\n/help or /h -> View help\n...\n```\n\n## 💡Tips \n+ After login, you can find webui login URL in napcat\\logs folder\n+ ___If napcat is not properly configured, open: http://localhost:6099, default token is 'napcat', then login and create a websocket server in network configuration with default port 3001___\n+ Use _/chat_ command or _@bot_ in group chat to start conversation, private chat handles all non-command messages as conversation by default\n+ _Default AI model is from SiliconFlow, new users get 15CNY free credit_\n+ For AI to process images in group chat, first send image then reply to your own message mentioning the bot\n+ TTS supports custom voice upload, see comments in chat.py for details\n+ Modify prompts in neko.txt to create different characters\n\n## 🌟More Features\n+ Supports image recognition, video recognition\n+ Supports web search. Go to https://opensearch.console.aliyun.com/cn-shanghai/rag/api-key to obtain the API and domain address, which can be used for free.\n+ Supports multi-group chat and custom user prompts\n+ Group chat supports user awareness, chat supports time awareness\n+ Supports conversation history saving\n+ Quick command adding\n+ Low configuration requirements, lightweight, small memory footprint\n\n[your-project-path]:asukaneko/NapCat-jmcomic_download-bot\n[contributors-shield]: https://img.shields.io/github/contributors/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[contributors-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/graphs/contributors\n[forks-shield]: https://img.shields.io/github/forks/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[forks-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/network/members\n[stars-shield]: https://img.shields.io/github/stars/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[stars-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/stargazers\n[issues-shield]: https://img.shields.io/github/issues/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[issues-url]: https://img.shields.io/github/issues/asukaneko/NapCat-jmcomic_download-bot.svg\n[license-shield]: https://img.shields.io/github/license/asukaneko/NapCat-jmcomic_download-bot.svg?style=flat\n[license-url]: https://github.com/asukaneko/NapCat-jmcomic_download-bot/blob/master/LICENSE\n[linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=flat&logo=linkedin&colorB=555\n\n### 📂Directory Structure\n```\n.\n│ bot.py\n│ chat.py\n│ config.ini\n│ config.py\n│ commands.py\n│ LICENSE\n│ neko.txt\n│ number.txt\n│ option.yml\n│ README.md\n│ requirements.txt\n│ urls.ini\n│ \n├─logs\n│ \n├─napcat\n│ ├─...... \n│ └─......\n├─plugins\n│\n├─prompts\n│ ├─group\n│ └─user\n├─saved_images\n│ \n├─saved_message\n│\n└─cache\n ├─comic\n ├─saved_images\n ├─list\n ├─fav\n ├─pdf\n └─......\n```\n"}, "b3b62ff06d1045cabd921ba8c861a8daf3bd835f": {"t": 1786068577.1986256, "n": 9378, "h": "c4bb6c15dd085c72", "c": "# NekoBot\n\n![cover](docs/cover.png)\n\n
\n\n![Python](https://img.shields.io/badge/Python-3.10%2B-3776AB?style=flat&logo=python&logoColor=white)\n![License](https://img.shields.io/badge/License-MIT-2ea043?style=flat)\n![Web](https://img.shields.io/badge/Web-Dashboard-ec4899?style=flat)\n![QQ](https://img.shields.io/badge/QQ-NapCat%20%2B%20ncatbot-58a6ff?style=flat)\n![MCP](https://img.shields.io/badge/MCP-AI%20Agent%20Interface-8b5cf6?style=flat)\n![Docker](https://img.shields.io/badge/Docker-ghcr.io-2496ED?style=flat&logo=docker&logoColor=white)\n\n面向 Web 的多渠道 AI 角色扮演系统,包含Web、QQ、CLI、Telegram、Feishu等频道。\n\nNekoBot Android 客户端:[Nekobot-Android](https://github.com/asukaneko/Nekobot-Android)\n\n
\n\n## Overview\n\nNekoBot 是一个面向角色扮演与长期互动场景的 AI 系统。项目采用统一 AI 内核与频道适配层分离的架构,提供完整的 Web 管理后台、角色运行时、记忆系统、工具调用与工作区能力。\n\n它的核心目标不是单纯提供“聊天接口”,而是提供一套可持续运行、可配置、可观测、可扩展的角色型智能体基础设施。 \n\n## Core Capabilities\n\n- 多渠道接入:支持 QQ、Web、CLI、Telegram、Feishu,共用统一的 `ChatRequest / ChatResponse` 处理链路。\n- 角色运行时:内置实时情感引擎、六维关系模型、动态 PromptStack、自动状态评估与角色记忆。\n- Web 控制台:提供会话管理、角色管理、模型配置、工作流、知识库、记忆、日志与调试界面。\n- 工具与工作区:支持工具调用、文件读写、共享/私有工作区、文件变更预览与任务执行。\n- 模型适配:兼容 OpenAI Chat Completions/Responses , Anthropic , Gemini接口,可接入 Deepseek、GLM、Kimi、Mimo及其他兼容服务。\n- 插件与技能:支持通过插件与技能系统扩展能力,而不破坏核心处理流程。\n- MCP 接口:通过 Model Context Protocol 暴露 Gateway 能力,支持 Claude Code、Cursor、ChatGPT Agent 等 AI 智能体直接调用。\n- 语音能力:内置可插拔 TTS/STT 适配器架构,TTS 支持 OpenAI 兼容、小米 MiMo、豆包(火山引擎)等提供商,STT 支持 OpenAI 兼容、小米 MiMo 及本地 faster-whisper 离线识别。\n\n## Architecture\n\n项目围绕“统一 AI 内核 + 多渠道适配”的原则组织:\n\n```text\nbot.py\n└── nbot/\n ├── commands.py # QQ command handlers, BotClient init\n ├── core/ # Unified AI pipeline\n │ ├── chat_models.py # ChatRequest / ChatResponse\n │ ├── agent_service.py # Main AI entry\n │ ├── ai_pipeline.py # Pre-process -> chat -> post-process\n │ ├── session_store.py # Unified session state\n │ ├── model_adapter.py # Cross-provider model adapter\n │ ├── workspace.py # Per-session file workspace\n │ ├── auto_memory.py # Automatic memory extraction\n │ └── workflow.py # Workflow executor\n ├── character/ # Affective runtime and relationship model\n ├── channels/ # QQ, Web, Telegram, Feishu adapters\n ├── services/ # AI client, chat service, tools, TTS/STT\n ├── plugins/ # Plugin and skill system\n ├── hooks/ # Hook Runtime (event-driven conversation hooks)\n ├── gateway/ # Message bus, routing, delivery, dedupe\n │ └── facade.py # Gateway service facade for MCP\n ├── web/ # Flask blueprints, Socket.IO events, dashboard\n ├── mcp/ # MCP Server (AI Agent interface)\n │ ├── server.py # FastMCP entry point\n │ ├── tools/ # MCP Tools\n │ ├── resources/ # MCP Resources\n │ └── prompts/ # MCP Prompts\n └── cli/ # Terminal UI\n```\n\n请求流如下:\n\n```text\nChannel Adapter\n -> ChatRequest\n -> Agent Service / AI Pipeline\n -> Character Runtime (before_turn / after_turn)\n -> Model Adapter / AI Client\n -> ChatResponse\n -> Channel Adapter\n```\n\n## Runtime Features\n\n### Character Runtime\n\n`nbot/character/` 提供角色运行时,用于把“角色设定”转化为持续一致的对话行为:\n\n- `PromptStack`:按优先级动态拼装提示词,而不是把所有状态污染进历史消息。\n- `StateMachine`:控制情绪惯性与关系平滑变化,避免单轮输入导致剧烈失真。\n- `AutoState`:定期总结近期互动,自动调整情绪强度、精力与六维关系值。\n- `Memory`:支持按角色、按用户隔离的长期与短期记忆。\n- `ReactionPlan`:在每轮回复前生成风格与行为策略,约束角色输出。\n\n### Workspace and Tools\n\n系统支持私有工作区与共享工作区:\n\n- 私有工作区绑定当前会话。\n- 共享工作区可被多个会话访问。\n- 文件创建、修改、删除、传输与差异预览可通过 Web 界面管理。\n- 工具系统支持在对话中触发文件、搜索、执行等能力。\n\n### Web Dashboard\n\nWeb 后台覆盖日常运维与调试需求:\n\n- 会话与聊天管理\n- 角色卡创建、编辑、导入、导出\n- AI 模型配置与切换\n- 记忆、知识库、技能、工具管理\n- 工作流与定时任务\n- Token 统计、日志、调试与运行状态查看\n\n## Requirements\n\n- Python 3.10+\n- NapCatQQ\n- ncatbot 3.8.5\n- 可用的 OpenAI-compatible API 服务\n\n说明:\n\n- `.env` 是首选配置来源。\n- `config.ini` 仍作为 QQ 连接参数的兼容回退。\n- 项目默认使用 Flask + Flask-SocketIO + Eventlet 提供 Web 服务。\n\n## Installation\n\n```bash\ngit clone https://github.com/asukaneko/nekobot.git\ncd nekobot\n```\n\n```bash\n#配置虚拟环境(可选)\npython -m venv venv\nsource venv/bin/activate\n# windows: venv\\Scripts\\activate.bat\npython -m pip install -r requirements.txt\n```\n\n复制环境变量模板并填写必要配置:\n\n```bash\ncp .env.example .env\n```\n\n至少建议先配置:\n\n```env\nWEB_PASSWORD=your_web_password\n```\n\n如需启用 QQ Bot,还需要补充:\n\n```env\nBOT_UIN=your_qq_number\nROOT=your_admin_qq_number\nWS_URI=ws://your_napcat_host:port\nTOKEN=your_napcat_token\n```\n\nAI 服务的最小示例:\n\n```env\nAPI_KEY=your_api_key\nBASE_URL=https://your-openai-compatible-endpoint/v1\nMODEL=your_model_name\n```\n\n但你仍然可以通过web界面来配置你的模型\n\n### Docker 快速部署\n\n官方镜像发布在 GitHub Container Registry (ghcr.io),支持 `linux/amd64` 与 `linux/arm64`:\n\n```bash\n# 准备配置\nmkdir -p nekobot/data && cd nekobot\ncp .env.example .env # 编辑 .env,至少填 WEB_PASSWORD\n\n# 拉取并运行\ndocker run -d --name nekobot --restart unless-stopped \\\n -p 5000:5000 \\\n -v \"$(pwd)/data:/app/data\" \\\n -v \"$(pwd)/.env:/app/.env:ro\" \\\n --env-file .env \\\n ghcr.io/asukaneko/nekobot:latest\n```\n\n启动后访问 `http://<服务器IP>:5000`。\n\n> **提示**\n> - 必须挂载 `data/` 卷以持久化会话 / 角色卡 / Web 配置\n> - NapCatQQ 需独立部署,通过 `WS_URI` 连接(详见 Docker Compose 示例)\n> - 生产环境建议使用精确版本号(如 `:3.1.2`)而非 `latest`,便于回滚\n\n完整部署说明(Compose、升级、与 NapCatQQ 协同、HTTPS 等)见 [Docker 部署指南](docs/docs/guide/docker-deploy.md)。\n\n## Running\n\n```bash\n# QQ + Web\npython bot.py\n\n# Web only\npython bot.py --only-web\n\n# Web only on custom host/port\npython bot.py --only-web --web-host 0.0.0.0 --web-port 5000\n\n# CLI only\npython bot.py --cli\n\n# CLI + Web\npython bot.py --cli-and-web\n\n# QQ only\npython bot.py --no-web\n```\n\n默认情况下:\n\n- 若检测到 QQ 相关配置,启动 `QQ + Web`。\n- 若未检测到 QQ 配置,项目可仅以 Web 模式运行。\n\n## Development Notes\n\n- 目标 Python 版本为 `3.10`。\n- 代码风格使用 Ruff,行宽 100,双引号,空格缩进。\n- `nbot/core/` 不应依赖频道层模块。\n- 所有新频道都应通过 `BaseChannelAdapter` 接入,而不是直接调用模型。\n- 角色逻辑应通过 `before_turn()` / `after_turn()` 挂入统一流水线。\n\n常用检查命令:\n\n```bash\nruff check .\npython -m compileall -q bot.py nbot tools\npython -m pytest -q\n```\n\nCI 主要执行:\n\n1. `ruff check . --select E9,F63,F7,F82`\n2. `python -m compileall -q bot.py nbot tools`\n3. `python -m pip install -r requirements.txt`\n4. `python -m pytest -q`\n\n## Documentation\n\n更详细的使用与开发文档位于 `docs/`:\n\n- 快速开始:[docs/docs/guide/quick-start.md](docs/docs/guide/quick-start.md)\n- Docker 部署:[docs/docs/guide/docker-deploy.md](docs/docs/guide/docker-deploy.md)\n- 命令说明:[docs/docs/guide/commands.md](docs/docs/guide/commands.md)\n- 频道接入:[docs/docs/guide/channels.md](docs/docs/guide/channels.md)\n- 语音合成 (TTS):[docs/docs/guide/nbot/services/tts.md](docs/docs/guide/nbot/services/tts.md)\n- 语音识别 (STT):[docs/docs/guide/nbot/services/stt.md](docs/docs/guide/nbot/services/stt.md)\n- 贡献指南:[docs/CONTRIBUTING.md](docs/CONTRIBUTING.md)\n- 更新记录:[docs/CHANGELOG.md](docs/CHANGELOG.md)\n\n\n## MCP (Model Context Protocol)\n\nNekoBot 内置 MCP Server,可以将 Gateway 的消息、事件、队列、节点等能力以标准 MCP 协议暴露给 AI 智能体。\n\n### 支持的能力\n\n| 类型 | 说明 |\n|------|------|\n| Tools | 查询状态、查询事件链路、查询队列、模拟消息、触发任务、重试死信、节点管理 |\n| Resources | Gateway 状态、统计数据、能力清单、队列状态、节点列表 |\n| Prompts | 故障诊断、频道测试、节点健康检查 |\n\n### 快速开始\n\n```bash\n# 启动 Bot + MCP\npython bot.py --mcp\n```\n\n### Claude Code 配置\n\n在项目根目录创建 `.mcp.json`:\n\n```json\n{\n \"mcpServers\": {\n \"nekobot\": {\n \"command\": \"python\",\n \"args\": [\"bot.py\", \"--mcp-only\"],\n \"env\": {\n \"PYTHONPATH\": \".\"\n }\n }\n }\n}\n```\n\n> **提示**:`bot.py` 是相对路径,会从当前工作目录查找。如果 Claude Code 不在项目根目录启动,需要通过 `cwd` 指定项目路径,或将 `args` 改为绝对路径。\n\n### Cursor 配置\n\n在项目根目录创建 `.cursor/mcp.json`:\n\n```json\n{\n \"mcpServers\": {\n \"nekobot\": {\n \"command\": \"python\",\n \"args\": [\"bot.py\", \"--mcp-only\"],\n \"env\": {\n \"PYTHONPATH\": \".\"\n }\n }\n }\n}\n```\n\n### MCP 配置项\n\n在 `config.ini` 中配置 MCP 行为:\n\n```ini\n[mcp]\n; 是否允许 MCP 发送真实消息(高危,默认关闭)\nsend_message_enabled = false\n; 重试死信是否需要确认\nretry_require_confirmation = true\n; 审计日志\naudit_enabled = true\n; 授予 MCP 全部权限(本地使用建议开启)\nadmin = true\n; 传输模式: stdio (本地) | streamable-http (远程)\ntransport = stdio\n; 服务端配置(streamable-http 模式)\nhost = 127.0.0.1\nport = 5001\n; 远程连接 URL(--mcp-connect 使用)\nconnect_url = http://127.0.0.1:5001/mcp\n\n[gateway]\n; Gateway 持久化存储(启用后可查询历史事件)\nstorage_enabled = true\ndata_dir = data/web\n```\n\n### 远程连接\n\nMCP Server 支持 `streamable-http` 远程访问:\n\n```bash\n# 服务端:config.ini 设置 transport = streamable-http,然后启动\npython bot.py --mcp-only\n\n# 客户端:连接远程 MCP Server\npython bot.py --mcp-connect http://192.168.1.100:5001/mcp\n```\n\nClaude Code 远程连接配置(`.mcp.json`):\n\n```json\n{\n \"mcpServers\": {\n \"nekobot\": {\n \"url\": \"http://192.168.1.100:5001/mcp\"\n }\n }\n}\n```\n\n### 可用 Tools\n\n| Tool | 说明 | 风险 |\n|------|------|------|\n| `gateway_get_status` | Gateway 健康状态 | 只读 |\n| `gateway_get_stats` | 事件/投递/去重统计 | 只读 |\n| `gateway_query_trace` | 查询 trace 完整链路 | 只读 |\n| `gateway_query_events` | 按条件查询事件 | 只读 |\n| `gateway_query_deliveries` | 查询投递记录 | 只读 |\n| `gateway_get_queue_stats` | 队列状态 | 只读 |\n| `gateway_list_nodes` | 节点列表 | 只读 |\n| `gateway_get_node` | 节点详情 | 只读 |\n| `gateway_receive_message` | 模拟频道消息 | 操作 |\n| `gateway_send_message` | 发送真实消息 | 高危 |\n| `gateway_submit_internal_task` | 触发内部任务 | 操作 |\n| `gateway_retry_dead_letter` | 重试死信 | 高危 |\n| `gateway_register_node` | 注册节点 | 操作 |\n \n查看详细文档:[docs/MCP](./docs/docs/guide/nbot/mcp/index.md)\n\n## Security Notes\n\n- 不要将 Web 后台直接暴露到公网且不做额外防护。\n- 请为 `WEB_PASSWORD`、API Key、NapCat Token 设置有效且独立的密钥。\n- 不要提交 `.env`、真实凭据或运行时敏感数据到仓库。\n- 机器人运行期间,不要手动修改 `data/character/` 下的持久化文件。\n\n## License\n\n本项目基于 MIT License 发布,详见 [LICENSE](LICENSE)。\n\n"}}}}