{"id":42664758,"url":"https://github.com/king-chau/mozi","last_synced_at":"2026-02-09T05:17:16.335Z","repository":{"id":335039367,"uuid":"1143434749","full_name":"King-Chau/mozi","owner":"King-Chau","description":"支持国产大模型和飞书，钉钉，QQ，企业微信的Clawdbot/Moltbot","archived":false,"fork":false,"pushed_at":"2026-02-02T12:48:46.000Z","size":1343,"stargazers_count":115,"open_issues_count":6,"forks_count":15,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-02-03T01:54:49.140Z","etag":null,"topics":["claude","claude-code","clawdbot","deepseek","dingding","feishu","minimax","moltbot","openclaw","qq","qqbot"],"latest_commit_sha":null,"homepage":"https://mozi.aigcshow.com/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/King-Chau.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-27T15:22:31.000Z","updated_at":"2026-02-03T00:41:33.000Z","dependencies_parsed_at":"2026-02-01T13:00:52.396Z","dependency_job_id":null,"html_url":"https://github.com/King-Chau/mozi","commit_stats":null,"previous_names":["king-chau/mozi"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/King-Chau/mozi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/King-Chau%2Fmozi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/King-Chau%2Fmozi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/King-Chau%2Fmozi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/King-Chau%2Fmozi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/King-Chau","download_url":"https://codeload.github.com/King-Chau/mozi/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/King-Chau%2Fmozi/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29047789,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-03T14:55:20.264Z","status":"ssl_error","status_checked_at":"2026-02-03T14:55:19.725Z","response_time":96,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["claude","claude-code","clawdbot","deepseek","dingding","feishu","minimax","moltbot","openclaw","qq","qqbot"],"created_at":"2026-01-29T10:03:31.694Z","updated_at":"2026-02-03T15:00:50.581Z","avatar_url":"https://github.com/King-Chau.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Mozi (墨子)\n\n**支持国产大模型和国产通讯软件的智能助手框架**\n\nMozi 是一个轻量级的 AI 助手框架，专注于国产生态。它提供统一的接口对接多种国产 AI 模型（DeepSeek、Qwen、Kimi 等），支持 OpenAI Function Calling，并能在飞书、钉钉等平台上运行。\n\n## 核心特性\n\n- **多模型支持** — DeepSeek、DashScope (Qwen)、智谱AI、Kimi、阶跃星辰、MiniMax，以及 OpenAI/Anthropic 兼容格式\n- **多平台通道** — 飞书、钉钉、QQ，统一的消息处理接口\n- **Function Calling** — 原生支持 OpenAI tools/tool_choice 参数\n- **17 内置工具** — 文件读写、Bash 执行、代码搜索、网页获取、图像分析、浏览器自动化等\n- **会话管理** — 上下文压缩、会话持久化、多轮对话\n- **可扩展** — 插件系统、Hook 事件、自定义工具、子 Agent\n\n## 为什么选择 Mozi？\n\nMozi 的架构设计参考了 [Moltbot](https://github.com/moltbot/moltbot)，但专注于不同的使用场景：\n\n| 特性 | Mozi | Moltbot |\n|------|------|---------|\n| **定位** | 国产生态优先的轻量框架 | 全功能个人 AI 助手 |\n| **代码量** | ~16,000 行 (64 文件) | ~516,000 行 (3,137 文件) |\n| **国产模型** | DeepSeek、Qwen、Kimi 等 7+ 家 | 仅 Anthropic、OpenAI |\n| **国产通讯** | 飞书、钉钉、QQ 原生支持 | WhatsApp、Telegram、Slack 等 |\n| **Node.js 版本** | \u003e= 18 | \u003e= 22 |\n| **适用场景** | 企业内部机器人、国内团队协作 | 个人多设备助手、海外平台集成 |\n\n\u003e **Mozi 用 3% 的代码量实现了核心功能**，专注简洁高效，易于理解和二次开发。\n\n## 学习 Agent 原理\n\n如果你想了解 AI Agent 的工作原理，Mozi 是一个很好的学习项目。相比动辄几十万行代码的大型框架，Mozi 只有约 16,000 行代码，但实现了完整的 Agent 核心功能：\n\n- **消息循环** — 用户输入 → LLM 推理 → 工具调用 → 结果反馈\n- **上下文管理** — 会话历史、Token 压缩、多轮对话\n- **工具系统** — 函数定义、参数校验、结果处理\n- **流式输出** — SSE/WebSocket 实时响应\n- **失败重试** — 模型调用失败自动切换备选模型\n\n代码结构清晰，注释完善，适合阅读源码学习 Agent 架构设计。\n\n## 架构设计\n\n```mermaid\nflowchart TB\n    subgraph Input[\"📥 输入层\"]\n        Feishu[\"🔵 飞书\\nWebSocket 长连接\"]\n        Dingtalk[\"🟢 钉钉\\nStream 长连接\"]\n        QQ[\"🟣 QQ\\nWebSocket 长连接\"]\n        WebChat[\"🟡 WebChat\\nHTTP + WebSocket\"]\n    end\n\n    subgraph Server[\"🚀 服务层\"]\n        Gateway[\"Gateway 网关\\nHTTP/WebSocket 路由\"]\n    end\n\n    subgraph Core[\"⚙️ 核心层\"]\n        Agent[\"Agent 引擎\"]\n\n        subgraph AgentInner[\" \"]\n            MsgLoop[\"📨 消息循环\\nUser → LLM → Tool → Result\"]\n            CtxMgr[\"📚 上下文管理\\n历史压缩 / Token 控制\"]\n            Session[\"💾 会话存储\\nMemory / File\"]\n        end\n    end\n\n    subgraph External[\"🔗 外部依赖\"]\n        subgraph Providers[\"模型提供商\"]\n            P1[\"DeepSeek\"]\n            P2[\"DashScope\"]\n            P3[\"智谱AI\"]\n            P4[\"Kimi\"]\n            P5[\"OpenAI\"]\n            P6[\"Anthropic\"]\n        end\n\n        subgraph Tools[\"工具系统\"]\n            T1[\"📁 文件操作\\nread/write/edit/glob/grep\"]\n            T2[\"⌨️ Bash 执行\\n命令行 / 进程管理\"]\n            T3[\"🌐 网络请求\\nsearch/fetch\"]\n            T4[\"🖼️ 多媒体\\n图像分析 / 浏览器\"]\n            T5[\"🤖 子 Agent\\n复杂任务分解\"]\n        end\n    end\n\n    Feishu --\u003e Gateway\n    Dingtalk --\u003e Gateway\n    QQ --\u003e Gateway\n    WebChat --\u003e Gateway\n    Gateway --\u003e Agent\n    Agent --\u003e MsgLoop\n    MsgLoop \u003c--\u003e CtxMgr\n    MsgLoop \u003c--\u003e Session\n    MsgLoop \u003c--\u003e|\"调用模型\"| Providers\n    MsgLoop \u003c--\u003e|\"执行工具\"| Tools\n```\n\n### 消息处理流程\n\n```mermaid\nflowchart TD\n    Start([用户发送消息]) --\u003e Channel[Channel 接收]\n    Channel --\u003e Gateway[Gateway 路由]\n    Gateway --\u003e LoadCtx[加载会话上下文]\n\n    LoadCtx --\u003e BuildCtx[构建 LLM 请求]\n    BuildCtx --\u003e |系统提示词\u003cbr/\u003e历史消息\u003cbr/\u003e工具列表| CallLLM[调用 LLM]\n\n    CallLLM --\u003e Check{返回类型?}\n\n    Check --\u003e |纯文本| Response[返回响应]\n    Check --\u003e |工具调用| ExecTool[执行工具]\n\n    ExecTool --\u003e ToolResult[工具返回结果]\n    ToolResult --\u003e |加入上下文| CallLLM\n\n    Response --\u003e SaveCtx[保存会话]\n    SaveCtx --\u003e Send[Channel 发送]\n    Send --\u003e End([用户收到回复])\n\n    style Start fill:#e1f5fe\n    style End fill:#e8f5e9\n    style CallLLM fill:#fff3e0\n    style ExecTool fill:#fce4ec\n```\n\n### 核心模块\n\n| 模块 | 目录 | 职责 |\n|------|------|------|\n| **Agent** | `src/agents/` | 核心消息循环、上下文压缩、会话管理、模型失败重试 |\n| **Providers** | `src/providers/` | 统一的模型调用接口，支持 OpenAI/Anthropic 兼容格式 |\n| **Tools** | `src/tools/` | 工具注册、参数校验、执行引擎，支持自定义扩展 |\n| **Channels** | `src/channels/` | 通道适配器，统一消息格式，支持长连接和 Webhook |\n| **Sessions** | `src/sessions/` | 会话持久化，支持内存/文件存储，Transcript 记录 |\n| **Gateway** | `src/gateway/` | HTTP/WebSocket 服务，路由分发 |\n\n### 上下文压缩策略\n\n当对话历史超过 Token 限制时，Mozi 使用智能压缩：\n\n1. **保留策略** — 始终保留系统提示词和最近 N 轮对话\n2. **摘要压缩** — 将早期对话压缩为摘要，保留关键信息\n3. **工具结果裁剪** — 截断过长的工具返回结果\n4. **配对验证** — 确保 tool_call 和 tool_result 成对出现\n\n## 快速开始\n\n### 环境要求\n\n- Node.js \u003e= 18\n- npm / pnpm / yarn\n\n### 1. 安装\n\n```bash\n# 全局安装（推荐）\nnpm install -g mozi-bot\n\n# 或者克隆项目开发\ngit clone https://github.com/King-Chau/mozi.git\ncd mozi \u0026\u0026 npm install \u0026\u0026 npm run build\n```\n\n### 2. 配置\n\n运行配置向导（推荐）：\n\n```bash\nmozi onboard\n```\n\n向导会引导你完成以下配置：\n- **国产模型** — DeepSeek、智谱AI、DashScope、Kimi、阶跃星辰、MiniMax、ModelScope\n- **自定义 OpenAI 兼容接口** — 支持任意 OpenAI API 格式的服务（如 vLLM、Ollama）\n- **自定义 Anthropic 兼容接口** — 支持任意 Claude API 格式的服务\n- **通讯平台** — 飞书、钉钉、QQ\n\n配置文件将保存到 `~/.mozi/config.local.json5`。\n\n也可以直接使用环境变量（快速体验）：\n\n```bash\nexport DEEPSEEK_API_KEY=sk-your-key\n```\n\n### 3. 启动\n\n```bash\n# 仅 WebChat（无需配置飞书/钉钉）\nmozi start --web-only\n\n# 完整服务（WebChat + 飞书 + 钉钉）\nmozi start\n\n# 克隆项目方式\nnpm start -- start --web-only\n```\n\n打开浏览器访问 `http://localhost:3000` 即可开始对话。\n\n## 支持的模型提供商\n\n### 国产模型\n\n| 提供商 | 环境变量 | 说明 |\n|--------|----------|------|\n| DeepSeek | `DEEPSEEK_API_KEY` | 推理能力强、性价比高 |\n| DashScope | `DASHSCOPE_API_KEY` | 阿里云灵积，通义千问商业版，稳定高并发 |\n| 智谱 AI | `ZHIPU_API_KEY` | GLM-4 系列，清华技术团队，有免费额度 |\n| ModelScope | `MODELSCOPE_API_KEY` | 阿里云魔搭社区，Qwen 开源版，有免费额度 |\n| Kimi | `KIMI_API_KEY` | Moonshot，长上下文支持（128K/1M） |\n| 阶跃星辰 | `STEPFUN_API_KEY` | Step 系列，多模态能力 |\n| MiniMax | `MINIMAX_API_KEY` | 语音、视觉能力 |\n\n### 海外模型\n\n| 提供商 | 环境变量 | 说明 |\n|--------|----------|------|\n| OpenAI | `OPENAI_API_KEY` | GPT-4o、GPT-4、GPT-3.5 |\n| OpenRouter | `OPENROUTER_API_KEY` | 聚合多家模型，统一 API |\n| Together AI | `TOGETHER_API_KEY` | 开源模型托管，Llama、Mixtral 等 |\n| Groq | `GROQ_API_KEY` | 超快推理速度 |\n\n### 本地部署\n\n| 提供商 | 环境变量 | 说明 |\n|--------|----------|------|\n| Ollama | `OLLAMA_BASE_URL` | 本地运行开源模型 |\n\n### 自定义接口\n\n支持配置任意 OpenAI 或 Anthropic 兼容的 API 接口。通过 `mozi onboard` 向导配置，或手动添加到配置文件：\n\n```json5\n{\n  providers: {\n    // 自定义 OpenAI 兼容接口（如 vLLM、LiteLLM 等）\n    \"custom-openai\": {\n      id: \"my-provider\",\n      name: \"My Provider\",\n      baseUrl: \"https://api.example.com/v1\",\n      apiKey: \"xxx\",\n      models: [\n        {\n          id: \"model-id\",\n          name: \"Model Name\",\n          contextWindow: 32768,\n          maxTokens: 4096,\n          supportsVision: false,\n          supportsTools: true\n        }\n      ]\n    },\n\n    // 自定义 Anthropic 兼容接口\n    \"custom-anthropic\": {\n      id: \"my-anthropic\",\n      name: \"My Anthropic\",\n      baseUrl: \"https://api.example.com\",\n      apiKey: \"xxx\",\n      apiVersion: \"2023-06-01\",\n      models: [\n        {\n          id: \"claude-3-5-sonnet\",\n          name: \"Claude 3.5 Sonnet\",\n          contextWindow: 200000,\n          maxTokens: 8192\n        }\n      ]\n    }\n  }\n}\n```\n\n## 通讯平台接入\n\n飞书、钉钉和 QQ 都支持长连接模式：\n\n| 模式 | 说明 | 适用场景 |\n|------|------|----------|\n| **长连接（默认）** | WebSocket/Stream 主动连接，无需公网 IP | 内网部署、本地开发 |\n| Webhook | 被动接收回调，需要公网可访问地址 | 公网服务器部署 |\n\n\u003e **推荐使用长连接模式**：无需公网 IP，无需配置回调地址，启动即可接收消息。\n\n### 飞书\n\n#### 1. 创建应用\n\n1. 登录 [飞书开放平台](https://open.feishu.cn/)，创建企业自建应用\n2. 获取 App ID 和 App Secret\n3. 在应用管理页左侧导航栏，找到「应用能力」，启用「机器人」能力\n\n#### 2. 事件配置\n\n1. 在应用管理页左侧导航栏，找到「事件与回调」，点击进入\n2. 订阅方式选择「长连接」，点击「保存」\n   \u003e ⚠️ 如果提示\"未建立长连接\"，需要先完成「Mozi 配置」并启动服务（`mozi start`），再回来保存长连接\n3. 点击「添加事件」，在弹出列表中选择「消息与群组」分类，勾选「接收消息」（`im.message.receive_v1`），点击「确定」\n\n#### 3. 权限配置\n\n1. 在应用管理页左侧导航栏，找到「权限管理」，点击进入\n2. 点击「批量导入权限」按钮，将以下 JSON 粘贴到输入框中，点击「导入」：\n\n```json\n{\n  \"scopes\": {\n    \"tenant\": [\n      \"contact:user.base:readonly\",\n      \"im:chat\",\n      \"im:chat:read\",\n      \"im:chat:update\",\n      \"im:message\",\n      \"im:message.group_at_msg:readonly\",\n      \"im:message.p2p_msg:readonly\",\n      \"im:message:send_as_bot\",\n      \"im:resource\"\n    ],\n    \"user\": []\n  }\n}\n```\n\n3. 页面显示「导入成功」即为完成\n\n#### 4. 发布应用\n\n1. 在应用管理页左侧导航栏，找到「版本管理与发布」\n2. 点击右上角「新建版本」，填写版本号与描述\n3. 保存并发布，等待审核通过\n\n#### 5. Mozi 配置\n\n```json5\n{\n  channels: {\n    feishu: {\n      appId: \"cli_xxx\",\n      appSecret: \"xxx\",\n      mode: \"websocket\"  // 默认值，可省略\n    }\n  }\n}\n```\n\n\u003e Webhook 模式：将步骤 2 的订阅方式改为 HTTP，配置回调地址为 `http://your-server:3000/webhook/feishu`，并设置 `mode: \"webhook\"`。\n\n### 钉钉\n\n1. 登录 [钉钉开放平台](https://open.dingtalk.com/)，创建企业内部应用\n2. 获取 AppKey 和 AppSecret\n3. 添加「机器人」能力\n4. 在机器人配置页面，消息接收模式选择「Stream 模式」\n5. 配置完成，启动服务即可\n\n```json5\n{\n  channels: {\n    dingtalk: {\n      appKey: \"xxx\",\n      appSecret: \"xxx\",\n      mode: \"stream\"  // 默认值，可省略\n    }\n  }\n}\n```\n\n\u003e Webhook 模式：将步骤 4 改为 HTTP 模式，配置消息接收地址为 `http://your-server:3000/webhook/dingtalk`，并设置 `mode: \"webhook\"`。\n\n### QQ\n\n#### 1. 注册并创建应用\n\n1. 访问 [QQ 开放平台](https://q.qq.com/#/apps) 并完成注册\n2. 点击「创建机器人」，填写机器人信息\n   \u003e 个人使用无需企业资质，可选择「指定用户、指定群聊可访问」\n\n#### 2. 获取凭证\n\n1. 点击机器人头像进入管理界面\n2. 在「开发设置」页面获取 App ID 和 App Secret\n   \u003e 管理页面地址：https://q.qq.com/qqbot/#/developer/developer-setting\n\n#### 3. 配置 IP 白名单（重要）\n\n1. 在「开发设置」页面找到「IP 白名单」\n2. 添加服务器的公网 IP 地址\n   ```bash\n   # 获取服务器公网 IP\n   curl -s ip.sb\n   ```\n   \u003e 未配置白名单会导致连接失败，提示 \"接口访问源IP不在白名单\"\n\n#### 4. 配置沙箱（可选）\n\n正式上线前，机器人只能在沙箱范围内使用：\n\n1. 访问 [沙箱配置页面](https://q.qq.com/qqbot/#/developer/sandbox)\n2. 添加测试用户或测试群\n\n#### 5. Mozi 配置\n\n```json5\n{\n  channels: {\n    qq: {\n      appId: \"your-app-id\",\n      clientSecret: \"your-app-secret\",\n      sandbox: false  // 沙箱环境设为 true\n    }\n  }\n}\n```\n\n环境变量方式：\n\n```bash\nexport QQ_APP_ID=your-app-id\nexport QQ_CLIENT_SECRET=your-app-secret\nexport QQ_SANDBOX=false  # 可选，默认 false\n```\n\n#### 6. 添加机器人\n\n1. 在机器人管理页面，扫描「添加成员」旁边的二维码\n2. 将机器人添加到聊天界面或拉入群聊\n\n## 配置参考\n\n配置文件支持 `config.local.json5`、`config.json5`、`config.yaml` 等格式，优先级从高到低。存放在 `~/.mozi/` 目录下。\n\n\u003cdetails\u003e\n\u003csummary\u003e完整配置示例\u003c/summary\u003e\n\n```json5\n{\n  // 模型提供商\n  providers: {\n    deepseek: {\n      apiKey: \"sk-xxx\"\n    },\n    dashscope: {\n      apiKey: \"sk-xxx\",\n      // 可选：自定义模型列表（覆盖预设）\n      models: [\n        {\n          id: \"qwen-max-latest\",\n          name: \"通义千问 Max\",\n          contextWindow: 32768,\n          maxTokens: 8192\n        }\n      ]\n    },\n    zhipu: {\n      apiKey: \"xxx\"\n    },\n    modelscope: {\n      apiKey: \"ms-xxx\"\n    }\n  },\n\n  // 通讯平台（长连接模式，无需公网）\n  channels: {\n    feishu: {\n      appId: \"cli_xxx\",\n      appSecret: \"xxx\"\n    },\n    dingtalk: {\n      appKey: \"xxx\",\n      appSecret: \"xxx\"\n    },\n    qq: {\n      appId: \"xxx\",\n      clientSecret: \"xxx\",\n      sandbox: false  // 沙箱环境设为 true\n    }\n  },\n\n  // Agent 配置\n  agent: {\n    defaultProvider: \"deepseek\",\n    defaultModel: \"deepseek-chat\",\n    temperature: 0.7,\n    maxTokens: 4096,\n    systemPrompt: \"你是墨子，一个智能助手。\"\n  },\n\n  // 服务器配置\n  server: {\n    port: 3000,\n    host: \"0.0.0.0\"\n  },\n\n  // 日志级别\n  logging: {\n    level: \"info\"  // debug | info | warn | error\n  }\n}\n```\n\n\u003c/details\u003e\n\n## 内置工具\n\n| 类别 | 工具 | 说明 |\n|------|------|------|\n| 文件 | `read_file` | 读取文件内容 |\n| | `write_file` | 写入/创建文件 |\n| | `edit_file` | 精确字符串替换 |\n| | `list_directory` | 列出目录内容 |\n| | `glob` | 按模式搜索文件 |\n| | `grep` | 按内容搜索文件 |\n| | `apply_patch` | 应用 diff 补丁 |\n| 命令 | `bash` | 执行 Bash 命令 |\n| | `process` | 管理后台进程 |\n| 网络 | `web_search` | 网络搜索 |\n| | `web_fetch` | 获取网页内容 |\n| 多媒体 | `image_analyze` | 图像分析（需要视觉模型） |\n| | `browser` | 浏览器自动化（需安装 Playwright） |\n| 系统 | `current_time` | 获取当前时间 |\n| | `calculator` | 数学计算 |\n| | `delay` | 延时等待 |\n| Agent | `subagent` | 创建子 Agent 执行复杂任务 |\n\n## CLI 命令\n\n```bash\n# 配置\nmozi onboard            # 配置向导（支持国产模型/自定义接口）\nmozi check              # 检查配置\nmozi models             # 列出可用模型\n\n# 启动服务\nmozi start              # 完整服务（含飞书/钉钉）\nmozi start --web-only   # 仅 WebChat\nmozi start --port 8080  # 指定端口\n\n# 聊天\nmozi chat               # 命令行聊天\n\n# 日志\nmozi logs               # 查看最新日志（默认 50 行）\nmozi logs -n 100        # 查看最新 100 行\nmozi logs -f            # 实时跟踪日志（类似 tail -f）\nmozi logs --level error # 只显示错误日志\n```\n\n\u003e 日志文件存储在 `~/.mozi/logs/` 目录下，按日期自动轮转。\n\n## 项目结构\n\n```\nsrc/\n├── agents/        # Agent 核心（消息循环、上下文压缩、会话管理）\n├── channels/      # 通道适配器（飞书、钉钉）\n├── providers/     # 模型提供商（统一接口）\n├── tools/         # 内置工具（文件、Bash、网络等）\n├── sessions/      # 会话存储（内存、文件）\n├── web/           # WebChat 前端\n├── config/        # 配置加载\n├── gateway/       # HTTP/WebSocket 网关\n├── cli/           # CLI 命令行工具\n├── hooks/         # Hook 事件系统\n├── utils/         # 工具函数\n└── types/         # TypeScript 类型定义\n```\n\n## API 使用\n\n```typescript\nimport { loadConfig, initializeProviders, getProvider } from \"mozi-bot\";\n\nconst config = loadConfig();\ninitializeProviders(config);\n\nconst provider = getProvider(\"deepseek\");\nconst response = await provider.chat({\n  model: \"deepseek-chat\",\n  messages: [{ role: \"user\", content: \"你好！\" }],\n});\n\nconsole.log(response.content);\n```\n\n## 开发\n\n```bash\n# 开发模式（自动重启）\nnpm run dev -- start --web-only\n\n# 构建\nnpm run build\n\n# 测试\nnpm test\n```\n\n## Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=King-Chau/mozi\u0026type=Date)](https://star-history.com/#King-Chau/mozi\u0026Date)\n\n## License\n\nApache 2.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fking-chau%2Fmozi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fking-chau%2Fmozi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fking-chau%2Fmozi/lists"}