Skip to content

robscc/nimo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

70 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

nimo logo

nimo

🐠 基于 AgentScope 构建的匀源䞪人智胜助手平台

CI codecov Python 3.10+ License: MIT


✹ 特性

  • 🧠 智胜对话 — 基于 AgentScope 框架支持倚暡型配眮Provider 管理流匏蟓出SSE
  • 📱 倚枠道接入 — DingTalk钉钉、飞乊Feishu/Lark、iMessage 匀箱即甚
  • 🀖 SubAgent 支持 — 倚角色匂步子代理独立 Session 䞊䞋文支持独立暡型配眮 + 运行时抜象
  • 🛠 工具系统 — 内眮 12 䞪工具文件读写、Shell、浏览噚、Python 执行、技胜/定时任务 CLI 等Tool Guard 安党防技可视化匀关管理 + 调甚日志
  • ⏰ 定时任务 — 标准 Cron 衚蟟匏调床自劚执行 + 结果通知 + CLI 管理
  • 🔌 技胜扩展 — ZIP/URL 方匏安装自定义技胜包版本管理 + 热重蜜
  • 📊 Dashboard — 系统统计面板汇总䌚话/消息/Token/工具/技胜/任务等指标
  • 🔔 通知系统 — WebSocket 实时通知总线党局系统事件掚送
  • 💻 CLI 工具 — 呜什行管理工具支持进皋管理、控制台蟓出
  • 📊 Task Artifacts — SubAgent 产出物管理支持文件/文本/代码等类型
  • 🌐 前后端分犻 — React 前端 + FastAPI 后端提䟛可视化管理界面
  • 🧪 测试驱劚 — 672+ 单元䞎集成测试E2E 芆盖栞心流皋

🏗 架构抂览

┌──────────────────────────────────────────────────────────┐
│                     消息枠道层                             │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐               │
│  │ DingTalk │  │  Feishu  │  │ iMessage │  ...           │
│  └────┬─────┘  └────┬─────┘  └────┬─────┘               │
└───────┌──────────────┌─────────────┌─────────────────────┘
        │              │             │
┌───────▌──────────────▌─────────────▌─────────────────────┐
│                    FastAPI Backend                         │
│  ┌────────────────────────────────────────┐               │
│  │       PersonalAssistant Agent          │               │
│  │  ┌─────────────────────────────────┐  │               │
│  │  │   SubAgent Pool (Async Tasks)   │  │               │
│  │  │  [researcher] [coder] [ops] ... │  │               │
│  │  └─────────────────────────────────┘  │               │
│  └────────────────────────────────────────┘               │
│  ┌──────────────┐  ┌──────────────┐  ┌───────────────┐   │
│  │ Provider Mgr │  │ Tool System  │  │ Tool Guard    │   │
│  └──────────────┘  └──────────────┘  └───────────────┘   │
│  ┌──────────────┐  ┌──────────────┐  ┌───────────────┐   │
│  │ Session Mgr  │  │ Cron Sched.  │  │ Notification  │   │
│  └──────────────┘  └──────────────┘  │ Bus           │   │
│  ┌──────────────┐  ┌──────────────┐  └───────────────┘   │
│  │ Runtime Mgr  │  │ ZMQ Bus      │                      │
│  └──────────────┘  └──────────────┘                      │
│                         SQLite (WAL)                      │
└──────────────────────────────────────────────────────────┘
        │
┌───────▌──────────────────────────────────────────────────┐
│          React Frontend (Dashboard)                       │
│  Chat · Sessions · Tools · Skills · Tasks · Cron ·       │
│  Workspace · Dashboard                                    │
└──────────────────────────────────────────────────────────┘

🚀 快速匀始

前眮条件

  • Python 3.10+
  • Node.js 18+
  • Docker & Docker Compose可选

本地匀发

# 克隆仓库
git clone https://github.com/robscc/nimo.git
cd nimo

# 䞀键启劚匀发环境
make dev

# 或者分别启劚
make backend   # 后端 http://localhost:8088
make frontend  # 前端 http://localhost:3000

Docker 郚眲

# 倍制并配眮环境变量
cp .env.example .env
# 猖蟑 .env 填写盞关配眮

# 启劚所有服务
docker-compose up -d

⚙ 配眮

支持倚种配眮方匏䌘先级从高到䜎环境变量 > ~/.nimo/config.yaml > .env > 默讀倌

掚荐䜿甚 ~/.nimo/config.yaml

llm:
  provider: compatible      # 兌容 OpenAI 栌匏的 API
  model: qwen-plus
  api_key: your_api_key
  base_url: https://dashscope.aliyuncs.com/compatible-mode/v1

# 可选消息枠道
dingtalk:
  app_key: ""
  app_secret: ""

feishu:
  app_id: ""
  app_secret: ""

imessage:
  enabled: false  # 仅 macOS

也可䜿甚 .env 文件

LLM_MODEL=qwen-plus
LLM_API_KEY=your_api_key

📡 枠道配眮

枠道 文档 状态
DingTalk docs/channels/dingtalk.md ✅ 支持
飞乊 Feishu docs/channels/feishu.md ✅ 支持
iMessage docs/channels/imessage.md ✅ 支持需 macOS

🀖 SubAgent

SubAgent 是独立运行的匂步子代理拥有独立䞊䞋文、独立暡型配眮支持倚蜮工具调甚和 Agent 闎通信。

运行机制

┌─────────────────────────────────────────────────────────────────┐
│                   PersonalAssistant (äž» Agent)                    │
│                                                                   │
│  dispatch_sub_agent(task, agent_name/task_type, context)         │
│         │                                                         │
│         â–Œ                                                         │
│  ┌─────────────────┐    task_type     ┌────────────────────┐     │
│  │  SubAgentRegistry│◄───匹配────────│ SubAgentDefinition │     │
│  │  (角色泚册䞭心)   │               │  · researcher       │     │
│  └────────┬────────┘               │  · coder             │     │
│           │                         │  · ops-engineer      │     │
│           â–Œ                         │  · 自定义角色...      │     │
│  创建 SubAgentTask (PENDING)        └────────────────────┘     │
│  生成独立 sub_session_id: "sub:<parent>:<task_id>"               │
│         │                                                         │
│         â–Œ  (asyncio 后台任务)                                    │
│  ┌──────────────────────────────────────────────────┐           │
│  │              SubAgent 实䟋                         │           │
│  │  · 独立 BufferMemory䞍圱响䞻䞊䞋文             │           │
│  │  · 独立暡型配眮可芆盖未配眮回退到䞻 Agent    │           │
│  │  · 独立 AsyncSession避免 DB 锁                │           │
│  │                                                    │           │
│  │  run() → reply() 埪环:                            │           │
│  │  ┌──────────────────────────────────────────┐    │           │
│  │  │ 1. 检查 MessageBus 埅倄理消息             │    │           │
│  │  │ 2. 构建消息列衚 (system + history + user) │    │           │
│  │  │ 3. 调甚 LLM                               │    │           │
│  │  │ 4. 解析工具调甚 (OpenAI 栌匏)             │    │           │
│  │  │ 5. 执行工具 → 记圕日志 → 远加到对话       │    │           │
│  │  │ 6. 埪环盎到无工具调甚或蟟到 max_tool_rounds│    │           │
│  │  │ 7. 超出蜮次 → 区制摘芁 (force summary)    │    │           │
│  │  └──────────────────────────────────────────┘    │           │
│  │                                                    │           │
│  │  完成 → 曎新 Task 状态 (DONE/FAILED)              │           │
│  │       → 写入 execution_log                        │           │
│  │       → 通过 MessageBus 通知䞻 Agent               │           │
│  │       → 发送 task_event_bus 实时事件               │           │
│  └──────────────────────────────────────────────────┘           │
└─────────────────────────────────────────────────────────────────┘

任务路由

SubAgent 支持䞀种路由方匏

方匏 诎明 䌘先级
agent_name 盎接指定 SubAgent 名称劂 researcher 🔎 最高
task_type 按任务类型匹配 SubAgent 的 accepted_task_types 列衚 🟡 次之
# 方匏 1盎接指定 agent_name
task = await assistant.dispatch_sub_agent(
    task="分析报告并生成摘芁",
    agent_name="researcher",
    context={"file": "report.pdf"},
    session_id="user_session_123",
)

# 方匏 2按 task_type 自劚路由
task = await assistant.dispatch_sub_agent(
    task="写䞀䞪排序算法",
    task_type="coding",
    session_id="user_session_123",
)

# 查询任务状态
status = await assistant.get_task_status(task.id)

独立䞊䞋文

每䞪 SubAgent 实䟋拥有完党隔犻的运行环境

  • 独立 Sessionsub_session_id = "sub:<parent_session>:<task_id>"䞍䞎䞻对话混淆
  • 独立 Memory䜿甚独立的 BufferMemory倚蜮工具对话䞍污染䞻䞊䞋文
  • 独立 DB Session䜿甚独立的 AsyncSessionLocal避免䞎请求级 Session 的 SQLite 锁冲突

暡型配眮回退

SubAgent 可配眮独立的暡型参数未配眮的字段自劚回退到䞻 Agent 的党局配眮

SubAgentDefinition.get_model_config(fallback=äž»Agent配眮)
  → model_name:     SubAgent自定义 ?? äž»Agent的 model
  → model_provider: SubAgent自定义 ?? äž»Agent的 provider
  → api_key:        SubAgent自定义 ?? äž»Agent的 api_key
  → base_url:       SubAgent自定义 ?? äž»Agent的 base_url

执行日志

SubAgent 的每次运行郜䌚记圕完敎的 execution_log包含

  • system_prompt — 系统提瀺词
  • user_message — 甚户/äž» Agent 䞋发的任务
  • llm_response — 每蜮 LLM 响应
  • tool_start / tool_done — 工具调甚匀始/结束含耗时 duration_ms
  • forced_summary — 超出工具蜮次后的区制摘芁
  • final_result — 最终结果

日志通过 task_event_bus 实时掚送䟛 SSE 订阅并持久化到 SubAgentTask.execution_log 字段。

Agent 闎通信

通过 MessageBus 实现匂步消息䌠递

消息暡匏 诎明
request 向其他 Agent 发送请求并等埅响应
response 回倍及䞀䞪 Agent 的请求
notify 单向通知劂任务完成通知䞻 Agent
broadcast 广播消息给所有盞关 Agent

SubAgent 圚每蜮工具调甚前检查 MessageBus 䞭的埅倄理消息并将其泚入圓前对话䞊䞋文。

内眮角色

角色 诎明 默讀任务类型
researcher 研究䞎信息收集 research, summarize, analyze, report, investigate, compare
coder 猖码䞎技术实现 code, debug, script, implement, test, refactor, fix
ops-engineer 运绎䞎基础讟斜 ops, mysql, redis, kubernetes, k8s, logs, prometheus, monitoring, debug-infra, sre, devops

支持通过 APIPOST /api/v1/sub-agents或前端自定义添加新角色。

🛠 工具系统

内眮 12 䞪工具通过前端 /tools 页面可视化管理

工具 诎明 默讀状态
get_current_time 获取圓前时闎 ✅ 匀启
read_file 读取文件内容 ✅ 匀启
browser_use 浏览噚自劚化 ✅ 匀启
send_file_to_user 发送文件给甚户 ✅ 匀启
skill_cli 技胜管理 CLI ✅ 匀启
cron_cli 定时任务管理 CLI ✅ 匀启
dispatch_sub_agent 掟遣 SubAgent ✅ 匀启
write_file 写入文件 ❌ 关闭
edit_file 猖蟑文件 ❌ 关闭
execute_shell_command 执行 Shell 呜什 ❌ 关闭
execute_python_code 执行 Python 代码 ❌ 关闭
produce_artifact 生成任务产出物 ❌ 关闭

支持 Tool Guard 安党防技机制对危险操䜜进行拊截和确讀。

⏰ 定时任务

䜿甚标准 5 段 Cron 衚蟟匏创建自劚化任务

# 每倩早䞊 9 点发送日报
0 9 * * *

# 每呚䞀提醒埅办
0 9 * * 1

任务执行后通过消息总线向䞻 Agent 发送通知执行日志完敎记圕。

🧪 测试

# 运行单元 + 集成测试672 tests
make test

# 仅单元测试
make test-unit

# 仅集成测试
make test-integration

# E2E 测试需前后端运行
cd backend && .venv/bin/pytest tests/e2e/ -v

# 芆盖率报告
make coverage

📁 项目结构

nimo/
├── .github/              # GitHub Actions & 暡板
├── backend/              # FastAPI 后端
│   ├── agentpal/
│   │   ├── agents/       # PersonalAssistant、SubAgent、CronAgent、BaseAgent
│   │   ├── channels/     # DingTalk、Feishu、iMessage
│   │   ├── api/v1/       # REST API 路由14 䞪 endpoint 暡块
│   │   ├── memory/       # 记忆暡块Buffer / SQLite / Hybrid / ReMeLight
│   │   ├── models/       # SQLAlchemy ORM 暡型13 匠衚
│   │   ├── providers/    # 暡型提䟛方管理Provider Manager、重试暡型
│   │   ├── runtimes/     # SubAgent 运行时抜象Internal / HTTP
│   │   ├── zmq_bus/      # ZMQ 消息总线守技进皋、协议、事件订阅
│   │   ├── cli/          # 呜什行工具进皋管理、控制台、呜什
│   │   ├── workspace/    # 工䜜空闎管理䞊䞋文构建、记忆写入
│   │   ├── tools/        # 工具泚册䞎内眮工具12 䞪
│   │   └── services/     # 配眮、Cron 调床、通知总线、事件总线
│   └── tests/            # unit / integration / e2e
├── frontend/             # React + Vite + TypeScript + Tailwind
│   └── src/
│       ├── pages/        # Chat、Tools、Skills、Tasks、Sessions、Workspace、Cron、Dashboard
│       ├── components/   # Layout、SessionPanel、MentionPopup、TaskArtifactViewer、NimoLogo
│       └── hooks/        # useTools、useSessions、useSkills、useCron、useTasks、useNotifications ...
├── docs/                 # 项目文档
└── docker-compose.yml

🀝 莡献

欢迎 PR 和 Issue请先阅读 CONTRIBUTING.md。

📄 License

MIT

About

Agent Nimo for selfagent use

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors