Files
hack/tools/scripts/llm-key-hunter/results/_cache/content/asukaneko_nekobot.json
T

1 line
304 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"repo": "asukaneko/nekobot", "files": {"README.md": {"baf33f971374a72268434abc18c1128d57ed7cbd": {"t": 1785747249.5942163, "n": 9378, "h": "c4bb6c15dd085c72", "c": "# NekoBot\n\n![cover](docs/cover.png)\n\n<div align=\"center\">\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</div>\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<div align=\"center\">\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</div>\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<div align=\"center\">\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</div>\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<div align=\"center\">\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</div>\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<div align=\"center\">\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</div>\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<div align=\"center\">\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</div>\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<div align=\"center\">\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</div>\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<div align=\"center\">\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</div>\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<div align=\"center\">\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</div>\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<div align=\"center\">\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</div>\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<div align=\"center\">\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</div>\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<div align=\"center\">\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</div>\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<div align=\"center\">\n\nMade with care by [AsukaNeko](https://github.com/asukaneko)\n\n</div>\n"}, "fb935e4d8e2aa8b5ba48363482f57589e3d16b99": {"t": 1785771787.7804956, "n": 8949, "h": "b64e83c4bc0df278", "c": "# NekoBot\n![cover](docs/cover.png)\n\n<div align=\"center\">\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</div>\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<div align=\"center\">\n\nMade with care by [AsukaNeko](https://github.com/asukaneko)\n\n</div>\n"}, "e32ab86c4763a8b54114c7ab03112690ad837c42": {"t": 1785771790.022163, "n": 8924, "h": "f597a359a8b3aa3d", "c": "# NekoBot\n![cover](docs/cover.png)\n\n<div align=\"center\">\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</div>\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<div align=\"center\">\n\nMade with care by [AsukaNeko](https://github.com/asukaneko)\n\n</div>\n"}, "f314656e391cb23c5e051041377a659db0acdfab": {"t": 1785771791.4784737, "n": 5856, "h": "5869225d363229ee", "c": "# NekoBot\n![cover](docs/cover.png)\n\n<div align=\"center\">\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</div>\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<div align=\"center\">\n\nMade with care by [AsukaNeko](https://github.com/asukaneko)\n\n</div>\n"}, "8438ff3c309432a3c77109c0934d395516765dc3": {"t": 1785771792.8432868, "n": 5856, "h": "94bcc4c30d6e5aaf", "c": "# NekoBot\n![cover](docs/cover.png)\n\n<div align=\"center\">\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</div>\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<div align=\"center\">\n\nMade with care by [AsukaNeko](https://github.com/asukaneko)\n\n</div>\n"}, "898af204f0ea333c5539d4233f86c875b32ed3e7": {"t": 1785771795.2579439, "n": 4836, "h": "b47149247b6c92fb", "c": "# NekoBot\n![cover](docs/cover.png)\n\n<div align=\"center\">\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</div>\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<div align=\"center\">\n\nMade with care by [AsukaNeko](https://github.com/asukaneko)\n\n</div>\n"}, "ecd9fc23dab1ba94a43e5089d698ac8ef2d803aa": {"t": 1785771796.6251626, "n": 4811, "h": "18c0d06a9c395e52", "c": "# NekoBot\n\n<div align=\"center\">\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</div>\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<div align=\"center\">\n\nMade with care by [AsukaNeko](https://github.com/asukaneko)\n\n</div>\n"}, "3eb006efba44453862b4ebe0f577f8e1cdfca9b0": {"t": 1785771800.0361655, "n": 4829, "h": "2386c8bcc2566084", "c": "# NekoBot\n\n<div align=\"center\">\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</div>\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<div align=\"center\">\n\nMade with care by [AsukaNeko](https://github.com/asukaneko)\n\n</div>\n"}, "567c7942b7fe764f90294131b82559bd44d55e01": {"t": 1785771802.3970203, "n": 4847, "h": "2e9d251a9c75b73b", "c": "# NekoBot\n\n<div align=\"center\">\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</div>\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<div align=\"center\">\n\nMade with care by [AsukaNeko](https://github.com/asukaneko)\n\n</div>\n"}, "07190e56197c415c1b6623f38cf1bc928e8f1b10": {"t": 1785771804.6092048, "n": 3469, "h": "cd1b4b23b83ecb33", "c": "# 🤖 NekoBot\n\n<div align=\"center\">\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</div>\n\n---\n\n## ✨ 特性\n\n<table>\n<tr>\n<td valign=\"top\">\n\n### 🎨 核心功能\n\n- 📚 **漫画下载** - 支持 JMComic 漫画下载\n- 💬 **AI 聊天** - 基于大模型的智能对话\n- 🎵 **多媒体** - 音乐、图片、视频识别\n- 📖 **轻小说** - 搜索和下载轻小说\n- 🎮 **娱乐功能** - 随机图片、表情包、抽卡\n- 📁 **工作区** - 私有和共享文件管理\n\n</td>\n<td valign=\"top\">\n\n### 🛠️ 技术特性\n\n- 🔌 **插件系统** - 灵活的技能扩展\n- 🧠 **记忆系统** - 用户个性化记忆\n- 📚 **知识库** - RAG 智能问答\n- ⚡ **工作流** - 自动化任务编排\n- 🌐 **Web 界面** - 在线聊天和配置\n- 🔄 **私有/共享工作区** - AI 工具区分文件来源\n\n</td>\n</tr>\n</table>\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 <ID>` | 下载漫画 |\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<div align=\"center\">\n\nMade with ❤️ by [AsukaNeko](https://github.com/asukaneko)\n\n</div>\n"}, "4311e4286f620d59fc7250d95d892048a037a21d": {"t": 1785771805.8096292, "n": 2884, "h": "97410d205df854f0", "c": "# 🤖 NekoBot\n\n<div align=\"center\">\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</div>\n\n---\n\n## ✨ 特性\n\n<table>\n<tr>\n<td valign=\"top\">\n\n### 🎨 核心功能\n\n- 📚 **漫画下载** - 支持 JMComic 漫画下载\n- 💬 **AI 聊天** - 基于大模型的智能对话\n- 🎵 **多媒体** - 音乐、图片、视频识别\n- 📖 **轻小说** - 搜索和下载轻小说\n- 🎮 **娱乐功能** - 随机图片、表情包、抽卡\n\n</td>\n<td valign=\"top\">\n\n### 🛠️ 技术特性\n\n- 🔌 **插件系统** - 灵活的技能扩展\n- 🧠 **记忆系统** - 用户个性化记忆\n- 📚 **知识库** - RAG 智能问答\n- ⚡ **工作流** - 自动化任务编排\n- 🌐 **Web 界面** - 在线聊天和配置\n\n</td>\n</tr>\n</table>\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 <ID>` | 下载漫画 |\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<div align=\"center\">\n\nMade with ❤️ by [AsukaNeko](https://github.com/asukaneko)\n\n</div>\n"}, "13d87310d5b77f834c2dbedb462f1141dfc0889b": {"t": 1785771808.186902, "n": 8541, "h": "bbe23d970edc7816", "c": "<div align=\"center\">\n<h1 style = \"text-align:center;\">🚀A Comic Downloader & AI Chatbot for QQ</h1>\n</div>\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: <u>___windows___</u> \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 <comic_id> -> Download comics\n/jmrank <monthly_rank/weekly_rank> -> Get rankings\n/jm_clear -> Clear cache\n/search <content> -> Search comics\n/tag <tag> -> Search by tag\n/add_black_list or /abl <comic_id> -> Add to blacklist\n/del_black_list or /dbl <comic_id> -> Remove from blacklist\n/list_black_list or /lbl -> View blacklist\n/add_global_black_list or /agbl <comic_id> -> Add to global blacklist (admin)\n/del_global_black_list or /dgbl <comic_id> -> Remove from global blacklist (admin)\n/get_fav <username> <password> -> Get favorites (private chat only for groups)\n/add_fav <comic_id> -> Add to favorites\n/del_fav <comic_id> -> Remove from favorites\n/list_fav -> View favorites list\n/set_prompt or /sp <prompt> -> 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 <interval_hours> <enable(1/0)> -> 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 <tag> -> 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 <song_name/id> -> Send music\n/random_music or /rm -> Random music\n/dv <link> -> Download video\n/di <link> -> Download image\n/df <link> -> Download file\n/mc <server_address> -> Check MC server status\n/mc_bind <server_address> -> Bind MC server\n/mc_unbind -> Unbind MC server\n/mc_show -> View bound MC server\n/generate_photo or /gf <description(no spaces)> <size> -> Generate image\n/restart -> Restart bot (admin)\n/tts -> Toggle TTS\n/agree -> Accept friend request\n/set_admin <qq_number> or /sa <qq_number> -> Set admin (root)\n/del_admin <qq_number> or /da <qq_number> -> Remove admin (root)\n/get_admin or /ga -> Get admin list\n/set_ids <nickname> <signature> <gender> -> Set account info (admin)\n/set_online_status <status> -> Set online status (admin)\n/get_friends -> Get friend list (admin)\n/set_qq_avatar <url> -> Change avatar (admin)\n/send_like <target_qq> <times> -> 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 <target_qq> -> Set group admin (admin)\n/del_group_admin <target_qq> -> Remove group admin (admin)\n/findbook or /fb <book_title> -> Search and download light novel\n/fa <author> -> Search by author\n/select <number> -> Select novel to download\n/info <book_title> -> Get novel info\n/random_novel or /rn -> Random novel\n/task </bot.api.xxxx(param1=value1...)> <hours> <loop(1/0)> -> Set timed task (admin)\n/remind <hours> <content> -> Set reminder\n/premind <MM-DD> <HH:MM> <content> -> 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": "<div align=\"center\">\n<h1 style = \"text-align:center;\">🚀A Comic Downloader & AI Chatbot for QQ</h1>\n</div>\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: <u>___windows___</u> \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 <comic_id> -> Download comics\n/jmrank <monthly_rank/weekly_rank> -> Get rankings\n/jm_clear -> Clear cache\n/search <content> -> Search comics\n/tag <tag> -> Search by tag\n/add_black_list or /abl <comic_id> -> Add to blacklist\n/del_black_list or /dbl <comic_id> -> Remove from blacklist\n/list_black_list or /lbl -> View blacklist\n/add_global_black_list or /agbl <comic_id> -> Add to global blacklist (admin)\n/del_global_black_list or /dgbl <comic_id> -> Remove from global blacklist (admin)\n/get_fav <username> <password> -> Get favorites (private chat only for groups)\n/add_fav <comic_id> -> Add to favorites\n/del_fav <comic_id> -> Remove from favorites\n/list_fav -> View favorites list\n/set_prompt or /sp <prompt> -> 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 <interval_hours> <enable(1/0)> -> 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 <tag> -> 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 <song_name/id> -> Send music\n/random_music or /rm -> Random music\n/dv <link> -> Download video\n/di <link> -> Download image\n/df <link> -> Download file\n/mc <server_address> -> Check MC server status\n/mc_bind <server_address> -> Bind MC server\n/mc_unbind -> Unbind MC server\n/mc_show -> View bound MC server\n/generate_photo or /gf <description(no spaces)> <size> -> Generate image\n/restart -> Restart bot (admin)\n/tts -> Toggle TTS\n/agree -> Accept friend request\n/set_admin <qq_number> or /sa <qq_number> -> Set admin (root)\n/del_admin <qq_number> or /da <qq_number> -> Remove admin (root)\n/get_admin or /ga -> Get admin list\n/set_ids <nickname> <signature> <gender> -> Set account info (admin)\n/set_online_status <status> -> Set online status (admin)\n/get_friends -> Get friend list (admin)\n/set_qq_avatar <url> -> Change avatar (admin)\n/send_like <target_qq> <times> -> 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 <target_qq> -> Set group admin (admin)\n/del_group_admin <target_qq> -> Remove group admin (admin)\n/findbook or /fb <book_title> -> Search and download light novel\n/fa <author> -> Search by author\n/select <number> -> Select novel to download\n/info <book_title> -> Get novel info\n/random_novel or /rn -> Random novel\n/task </bot.api.xxxx(param1=value1...)> <hours> <loop(1/0)> -> Set timed task (admin)\n/remind <hours> <content> -> Set reminder\n/premind <MM-DD> <HH:MM> <content> -> 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": "<div align=\"center\">\n<h1 style = \"text-align:center;\">🚀A Comic Downloader & AI Chatbot for QQ</h1>\n</div>\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: <u>___windows___</u> \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 <comic_id> -> Download comics\n/jmrank <monthly_rank/weekly_rank> -> Get rankings\n/jm_clear -> Clear cache\n/search <content> -> Search comics\n/tag <tag> -> Search by tag\n/add_black_list or /abl <comic_id> -> Add to blacklist\n/del_black_list or /dbl <comic_id> -> Remove from blacklist\n/list_black_list or /lbl -> View blacklist\n/add_global_black_list or /agbl <comic_id> -> Add to global blacklist (admin)\n/del_global_black_list or /dgbl <comic_id> -> Remove from global blacklist (admin)\n/get_fav <username> <password> -> Get favorites (private chat only for groups)\n/add_fav <comic_id> -> Add to favorites\n/del_fav <comic_id> -> Remove from favorites\n/list_fav -> View favorites list\n/set_prompt or /sp <prompt> -> 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 <interval_hours> <enable(1/0)> -> 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 <tag> -> 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 <song_name/id> -> Send music\n/random_music or /rm -> Random music\n/dv <link> -> Download video\n/di <link> -> Download image\n/df <link> -> Download file\n/mc <server_address> -> Check MC server status\n/mc_bind <server_address> -> Bind MC server\n/mc_unbind -> Unbind MC server\n/mc_show -> View bound MC server\n/generate_photo or /gf <description(no spaces)> <size> -> Generate image\n/restart -> Restart bot (admin)\n/tts -> Toggle TTS\n/agree -> Accept friend request\n/set_admin <qq_number> or /sa <qq_number> -> Set admin (root)\n/del_admin <qq_number> or /da <qq_number> -> Remove admin (root)\n/get_admin or /ga -> Get admin list\n/set_ids <nickname> <signature> <gender> -> Set account info (admin)\n/set_online_status <status> -> Set online status (admin)\n/get_friends -> Get friend list (admin)\n/set_qq_avatar <url> -> Change avatar (admin)\n/send_like <target_qq> <times> -> 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 <target_qq> -> Set group admin (admin)\n/del_group_admin <target_qq> -> Remove group admin (admin)\n/findbook or /fb <book_title> -> Search and download light novel\n/fa <author> -> Search by author\n/select <number> -> Select novel to download\n/info <book_title> -> Get novel info\n/random_novel or /rn -> Random novel\n/task </bot.api.xxxx(param1=value1...)> <hours> <loop(1/0)> -> Set timed task (admin)\n/remind <hours> <content> -> Set reminder\n/premind <MM-DD> <HH:MM> <content> -> 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": "<div align=\"center\">\n<h1 style = \"text-align:center;\">🚀A Comic Downloader & AI Chatbot for QQ</h1>\n</div>\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: <u>___windows___</u> \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 <comic_id> -> Download comics\n/jmrank <monthly_rank/weekly_rank> -> Get rankings\n/jm_clear -> Clear cache\n/search <content> -> Search comics\n/tag <tag> -> Search by tag\n/add_black_list or /abl <comic_id> -> Add to blacklist\n/del_black_list or /dbl <comic_id> -> Remove from blacklist\n/list_black_list or /lbl -> View blacklist\n/add_global_black_list or /agbl <comic_id> -> Add to global blacklist (admin)\n/del_global_black_list or /dgbl <comic_id> -> Remove from global blacklist (admin)\n/get_fav <username> <password> -> Get favorites (private chat only for groups)\n/add_fav <comic_id> -> Add to favorites\n/del_fav <comic_id> -> Remove from favorites\n/list_fav -> View favorites list\n/set_prompt or /sp <prompt> -> 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 <interval_hours> <enable(1/0)> -> 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 <tag> -> 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 <song_name/id> -> Send music\n/random_music or /rm -> Random music\n/dv <link> -> Download video\n/di <link> -> Download image\n/df <link> -> Download file\n/mc <server_address> -> Check MC server status\n/mc_bind <server_address> -> Bind MC server\n/mc_unbind -> Unbind MC server\n/mc_show -> View bound MC server\n/generate_photo or /gf <description(no spaces)> <size> -> Generate image\n/restart -> Restart bot (admin)\n/tts -> Toggle TTS\n/agree -> Accept friend request\n/set_admin <qq_number> or /sa <qq_number> -> Set admin (root)\n/del_admin <qq_number> or /da <qq_number> -> Remove admin (root)\n/get_admin or /ga -> Get admin list\n/set_ids <nickname> <signature> <gender> -> Set account info (admin)\n/set_online_status <status> -> Set online status (admin)\n/get_friends -> Get friend list (admin)\n/set_qq_avatar <url> -> Change avatar (admin)\n/send_like <target_qq> <times> -> 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 <target_qq> -> Set group admin (admin)\n/del_group_admin <target_qq> -> Remove group admin (admin)\n/findbook or /fb <book_title> -> Search and download light novel\n/fa <author> -> Search by author\n/select <number> -> Select novel to download\n/info <book_title> -> Get novel info\n/random_novel or /rn -> Random novel\n/task </bot.api.xxxx(param1=value1...)> <hours> <loop(1/0)> -> Set timed task (admin)\n/remind <hours> <content> -> Set reminder\n/premind <MM-DD> <HH:MM> <content> -> 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": "<div align=\"center\">\n<h1 style = \"text-align:center;\">🚀A Comic Downloader & AI Chatbot for QQ</h1>\n</div>\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: <u>___windows___</u> \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 <comic_id> -> Download comics\n/jmrank <monthly_rank/weekly_rank> -> Get rankings\n/jm_clear -> Clear cache\n/search <content> -> Search comics\n/tag <tag> -> Search by tag\n/add_black_list or /abl <comic_id> -> Add to blacklist\n/del_black_list or /dbl <comic_id> -> Remove from blacklist\n/list_black_list or /lbl -> View blacklist\n/add_global_black_list or /agbl <comic_id> -> Add to global blacklist (admin)\n/del_global_black_list or /dgbl <comic_id> -> Remove from global blacklist (admin)\n/get_fav <username> <password> -> Get favorites (private chat only for groups)\n/add_fav <comic_id> -> Add to favorites\n/del_fav <comic_id> -> Remove from favorites\n/list_fav -> View favorites list\n/set_prompt or /sp <prompt> -> 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 <interval_hours> <enable(1/0)> -> 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 <tag> -> 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 <song_name/id> -> Send music\n/random_music or /rm -> Random music\n/dv <link> -> Download video\n/di <link> -> Download image\n/df <link> -> Download file\n/mc <server_address> -> Check MC server status\n/mc_bind <server_address> -> Bind MC server\n/mc_unbind -> Unbind MC server\n/mc_show -> View bound MC server\n/generate_photo or /gf <description(no spaces)> <size> -> Generate image\n/restart -> Restart bot (admin)\n/tts -> Toggle TTS\n/agree -> Accept friend request\n/set_admin <qq_number> or /sa <qq_number> -> Set admin (root)\n/del_admin <qq_number> or /da <qq_number> -> Remove admin (root)\n/get_admin or /ga -> Get admin list\n/set_ids <nickname> <signature> <gender> -> Set account info (admin)\n/set_online_status <status> -> Set online status (admin)\n/get_friends -> Get friend list (admin)\n/set_qq_avatar <url> -> Change avatar (admin)\n/send_like <target_qq> <times> -> 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 <target_qq> -> Set group admin (admin)\n/del_group_admin <target_qq> -> Remove group admin (admin)\n/findbook or /fb <book_title> -> Search and download light novel\n/fa <author> -> Search by author\n/select <number> -> Select novel to download\n/info <book_title> -> Get novel info\n/random_novel or /rn -> Random novel\n/task </bot.api.xxxx(param1=value1...)> <hours> <loop(1/0)> -> Set timed task (admin)\n/remind <hours> <content> -> Set reminder\n/premind <MM-DD> <HH:MM> <content> -> 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": "<div align=\"center\">\n<h1 style = \"text-align:center;\">🚀A Comic Downloader & AI Chatbot for QQ</h1>\n</div>\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: <u>___windows___</u> \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 <comic_id> -> Download comics\n/jmrank <monthly_rank/weekly_rank> -> Get rankings\n/jm_clear -> Clear cache\n/search <content> -> Search comics\n/tag <tag> -> Search by tag\n/add_black_list or /abl <comic_id> -> Add to blacklist\n/del_black_list or /dbl <comic_id> -> Remove from blacklist\n/list_black_list or /lbl -> View blacklist\n/add_global_black_list or /agbl <comic_id> -> Add to global blacklist (admin)\n/del_global_black_list or /dgbl <comic_id> -> Remove from global blacklist (admin)\n/get_fav <username> <password> -> Get favorites (private chat only for groups)\n/add_fav <comic_id> -> Add to favorites\n/del_fav <comic_id> -> Remove from favorites\n/list_fav -> View favorites list\n/set_prompt or /sp <prompt> -> 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 <interval_hours> <enable(1/0)> -> 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 <tag> -> 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 <song_name/id> -> Send music\n/random_music or /rm -> Random music\n/dv <link> -> Download video\n/di <link> -> Download image\n/df <link> -> Download file\n/mc <server_address> -> Check MC server status\n/mc_bind <server_address> -> Bind MC server\n/mc_unbind -> Unbind MC server\n/mc_show -> View bound MC server\n/generate_photo or /gf <description(no spaces)> <size> -> Generate image\n/restart -> Restart bot (admin)\n/tts -> Toggle TTS\n/agree -> Accept friend request\n/set_admin <qq_number> or /sa <qq_number> -> Set admin (root)\n/del_admin <qq_number> or /da <qq_number> -> Remove admin (root)\n/get_admin or /ga -> Get admin list\n/set_ids <nickname> <signature> <gender> -> Set account info (admin)\n/set_online_status <status> -> Set online status (admin)\n/get_friends -> Get friend list (admin)\n/set_qq_avatar <url> -> Change avatar (admin)\n/send_like <target_qq> <times> -> 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 <target_qq> -> Set group admin (admin)\n/del_group_admin <target_qq> -> Remove group admin (admin)\n/findbook or /fb <book_title> -> Search and download light novel\n/fa <author> -> Search by author\n/select <number> -> Select novel to download\n/info <book_title> -> Get novel info\n/random_novel or /rn -> Random novel\n/task </bot.api.xxxx(param1=value1...)> <hours> <loop(1/0)> -> Set timed task (admin)\n/remind <hours> <content> -> Set reminder\n/premind <MM-DD> <HH:MM> <content> -> 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": "<div align=\"center\">\n<h1 style = \"text-align:center;\">🚀A Comic Downloader & AI Chatbot for QQ</h1>\n</div>\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: <u>___windows___</u> \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 <comic_id> -> Download comics\n/jmrank <monthly_rank/weekly_rank> -> Get rankings\n/jm_clear -> Clear cache\n/search <content> -> Search comics\n/tag <tag> -> Search by tag\n/add_black_list or /abl <comic_id> -> Add to blacklist\n/del_black_list or /dbl <comic_id> -> Remove from blacklist\n/list_black_list or /lbl -> View blacklist\n/add_global_black_list or /agbl <comic_id> -> Add to global blacklist (admin)\n/del_global_black_list or /dgbl <comic_id> -> Remove from global blacklist (admin)\n/get_fav <username> <password> -> Get favorites (private chat only for groups)\n/add_fav <comic_id> -> Add to favorites\n/del_fav <comic_id> -> Remove from favorites\n/list_fav -> View favorites list\n/set_prompt or /sp <prompt> -> 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 <interval_hours> <enable(1/0)> -> 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 <tag> -> 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 <song_name/id> -> Send music\n/random_music or /rm -> Random music\n/dv <link> -> Download video\n/di <link> -> Download image\n/df <link> -> Download file\n/mc <server_address> -> Check MC server status\n/mc_bind <server_address> -> Bind MC server\n/mc_unbind -> Unbind MC server\n/mc_show -> View bound MC server\n/generate_photo or /gf <description(no spaces)> <size> -> Generate image\n/restart -> Restart bot (admin)\n/tts -> Toggle TTS\n/agree -> Accept friend request\n/set_admin <qq_number> or /sa <qq_number> -> Set admin (root)\n/del_admin <qq_number> or /da <qq_number> -> Remove admin (root)\n/get_admin or /ga -> Get admin list\n/set_ids <nickname> <signature> <gender> -> Set account info (admin)\n/set_online_status <status> -> Set online status (admin)\n/get_friends -> Get friend list (admin)\n/set_qq_avatar <url> -> Change avatar (admin)\n/send_like <target_qq> <times> -> 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 <target_qq> -> Set group admin (admin)\n/del_group_admin <target_qq> -> Remove group admin (admin)\n/findbook or /fb <book_title> -> Search and download light novel\n/fa <author> -> Search by author\n/select <number> -> Select novel to download\n/info <book_title> -> Get novel info\n/random_novel or /rn -> Random novel\n/task </bot.api.xxxx(param1=value1...)> <hours> <loop(1/0)> -> Set timed task (admin)\n/remind <hours> <content> -> Set reminder\n/premind <MM-DD> <HH:MM> <content> -> 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": "<div align=\"center\">\n<h1 style = \"text-align:center;\">🚀A Comic Downloader & AI Chatbot for QQ</h1>\n</div>\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: <u>___windows___</u> \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 <comic_id> -> Download comics\n/jmrank <monthly_rank/weekly_rank> -> Get rankings\n/jm_clear -> Clear cache\n/search <content> -> Search comics\n/tag <tag> -> Search by tag\n/add_black_list or /abl <comic_id> -> Add to blacklist\n/del_black_list or /dbl <comic_id> -> Remove from blacklist\n/list_black_list or /lbl -> View blacklist\n/add_global_black_list or /agbl <comic_id> -> Add to global blacklist (admin)\n/del_global_black_list or /dgbl <comic_id> -> Remove from global blacklist (admin)\n/get_fav <username> <password> -> Get favorites (private chat only for groups)\n/add_fav <comic_id> -> Add to favorites\n/del_fav <comic_id> -> Remove from favorites\n/list_fav -> View favorites list\n/set_prompt or /sp <prompt> -> 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 <interval_hours> <enable(1/0)> -> 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 <tag> -> 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 <song_name/id> -> Send music\n/random_music or /rm -> Random music\n/dv <link> -> Download video\n/di <link> -> Download image\n/df <link> -> Download file\n/mc <server_address> -> Check MC server status\n/mc_bind <server_address> -> Bind MC server\n/mc_unbind -> Unbind MC server\n/mc_show -> View bound MC server\n/generate_photo or /gf <description(no spaces)> <size> -> Generate image\n/restart -> Restart bot (admin)\n/tts -> Toggle TTS\n/agree -> Accept friend request\n/set_admin <qq_number> or /sa <qq_number> -> Set admin (root)\n/del_admin <qq_number> or /da <qq_number> -> Remove admin (root)\n/get_admin or /ga -> Get admin list\n/set_ids <nickname> <signature> <gender> -> Set account info (admin)\n/set_online_status <status> -> Set online status (admin)\n/get_friends -> Get friend list (admin)\n/set_qq_avatar <url> -> Change avatar (admin)\n/send_like <target_qq> <times> -> 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 <target_qq> -> Set group admin (admin)\n/del_group_admin <target_qq> -> Remove group admin (admin)\n/findbook or /fb <book_title> -> Search and download light novel\n/fa <author> -> Search by author\n/select <number> -> Select novel to download\n/info <book_title> -> Get novel info\n/random_novel or /rn -> Random novel\n/task </bot.api.xxxx(param1=value1...)> <hours> <loop(1/0)> -> Set timed task (admin)\n/remind <hours> <content> -> Set reminder\n/premind <MM-DD> <HH:MM> <content> -> 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": "<div align=\"center\">\n<h1 style = \"text-align:center;\">🚀A Comic Downloader & AI Chatbot for QQ</h1>\n</div>\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: <u>___windows___</u> \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 <comic_id> -> Download comics\n/jmrank <monthly_rank/weekly_rank> -> Get rankings\n/jm_clear -> Clear cache\n/search <content> -> Search comics\n/tag <tag> -> Search by tag\n/add_black_list or /abl <comic_id> -> Add to blacklist\n/del_black_list or /dbl <comic_id> -> Remove from blacklist\n/list_black_list or /lbl -> View blacklist\n/add_global_black_list or /agbl <comic_id> -> Add to global blacklist (admin)\n/del_global_black_list or /dgbl <comic_id> -> Remove from global blacklist (admin)\n/get_fav <username> <password> -> Get favorites (private chat only for groups)\n/add_fav <comic_id> -> Add to favorites\n/del_fav <comic_id> -> Remove from favorites\n/list_fav -> View favorites list\n/set_prompt or /sp <prompt> -> 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 <interval_hours> <enable(1/0)> -> 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 <tag> -> 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 <song_name/id> -> Send music\n/random_music or /rm -> Random music\n/dv <link> -> Download video\n/di <link> -> Download image\n/df <link> -> Download file\n/mc <server_address> -> Check MC server status\n/mc_bind <server_address> -> Bind MC server\n/mc_unbind -> Unbind MC server\n/mc_show -> View bound MC server\n/generate_photo or /gf <description(no spaces)> <size> -> Generate image\n/restart -> Restart bot (admin)\n/tts -> Toggle TTS\n/agree -> Accept friend request\n/set_admin <qq_number> or /sa <qq_number> -> Set admin (root)\n/del_admin <qq_number> or /da <qq_number> -> Remove admin (root)\n/get_admin or /ga -> Get admin list\n/set_ids <nickname> <signature> <gender> -> Set account info (admin)\n/set_online_status <status> -> Set online status (admin)\n/get_friends -> Get friend list (admin)\n/set_qq_avatar <url> -> Change avatar (admin)\n/send_like <target_qq> <times> -> 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 <target_qq> -> Set group admin (admin)\n/del_group_admin <target_qq> -> Remove group admin (admin)\n/findbook or /fb <book_title> -> Search and download light novel\n/fa <author> -> Search by author\n/select <number> -> Select novel to download\n/info <book_title> -> Get novel info\n/random_novel or /rn -> Random novel\n/task </bot.api.xxxx(param1=value1...)> <hours> <loop(1/0)> -> Set timed task (admin)\n/remind <hours> <content> -> Set reminder\n/premind <MM-DD> <HH:MM> <content> -> 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"}}}}