Skip to content

streetlightstartupnotes/evomoss-agent

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🌿 EvoMoss

会进化的 AI 助手 —— 用得越多,越懂你;省 token,自己学。

EvoMoss 是一个用 Rust 写的本地 AI Agent。它把每次对话都当作"经验"沉淀下来,重复出现的工具调用模式会被自动总结成"技能",下次遇到类似任务时直接复用 —— 既省 token,也省脑力。

支持任何 OpenAI 兼容 API(DeepSeek、Kimi、通义、本地 Ollama 等)和 Anthropic 原生格式。


✨ 主要功能

  • CLI 聊天:终端里直接说话,流式输出
  • Web UI:本地浏览器界面,多会话切换、模型设置面板
  • 多模型 / 多 Provider:OpenAI / Anthropic / DeepSeek / Kimi / 通义 / 任何 OpenAI 兼容端点��支持热切换
  • 会进化的记忆
    • Materialize:重复 ≥3 次且成功率 >60% 的工具序列自动学成技能
    • Merge:相似技能合并
    • Split:技能太杂时按工具类别拆分
    • Refine:表现下滑的技能用 LLM 重写指令
    • Dormant:长期不用的技能自动休眠
  • 12 个内置工具:terminal / file_read / file_write / file_edit / glob / grep / web_search / web_fetch / ask_user / invoke_skill / schedule / config
  • 定时提醒:自然语言「每天早上 9 点提醒我看新闻」自动转成 cron
  • 省 token:技能匹配时只暴露相关工具子集;超长上下文用轻量模型摘要压缩
  • 会话持久化:SQLite + jsonl 双写,重启后接着聊
  • 沙盒:URL 校验防 SSRF;文件操作限制在 cwd 和 ~/.evomoss;shell 工具默认禁用

🚀 快速开始

安装

需要 Rust 1.75+:

git clone https://github.com/<你的用户名>/evomoss-agent.git
cd evomoss-agent
cargo build --release

二进制在 ./target/release/evomoss,可以拷到 ~/bin 或加进 PATH

首次运行

./target/release/evomoss

第一次启动会有 3 步引导:

  1. 选 AI Provider:OpenAI / Anthropic / DeepSeek / 其他
  2. 粘贴 API 密钥
  3. 完成 —— 直接开聊

配置文件在 ~/.evomoss/config.toml,权限自动设为 600


🖥 三种使用方式

1. 终端聊天(REPL)

evomoss
🌿 EvoMoss — 会进化的 AI 助手
你:帮我把 Desktop/notes 下的所有 .md 文件改成 .txt
🌿 ...

输入 exitCtrl+C 退出。

2. 一次性命令

evomoss "今天天气怎么样"

非交互模式,输出后退出。可以拼到 shell 脚本里。

3. Web UI

evomoss server         # 默认端口 7070
evomoss server -p 8080 # 自定义端口

浏览器打开 http://localhost:7070

特性:

  • 左侧会话列表,点击切换;+ 新对话 开新 session
  • 左下 ⚙ 模型设置:换 provider、改 API key、调 max_tokens不需要重启
  • 后台跑提醒调度器(每分钟检查一次到期任务)

⚠️ Web UI 默认绑定 127.0.0.1,仅本机可访问。要给局域网用:EVOMOSS_BIND=0.0.0.0 evomoss server


📋 命令参考

子命令

evomoss                  # 交互式 REPL
evomoss "<message>"      # 一次性问答
evomoss server [-p N]    # 启动 Web UI
evomoss skills           # 查看已学会的技能
evomoss reminders        # 查看定时提醒
evomoss config           # 看当前配置
evomoss config <key>     # 看某项
evomoss config <key> <v> # 改某项

可改的 <key>modelbase_urlapi_keylight_modelportmax_tokensevolution(on/off)。

REPL / Web 内的斜杠命令

命令 作用
/help 查看命令列表
/skills 查看已学会的技能
/cost 查看本次对话的 token 和费用
/sessions 列出所有对话
/new [名称] 新建对话
/pin 置顶当前对话
/rename <新名> 重命名当前对话

自然语言快捷查询

短句(≤20 字)含以下关键词时直接返回,不调 LLM:

  • 你都会什么 / 你会什么 / 你的技能 → 列出所有技能
  • 花了多少 / 总共花了 / 用了多少 token → 显示费用统计

🔧 配置

~/.evomoss/config.toml

[model]
api_key = "sk-..."
base_url = "https://api.deepseek.com"
model = "deepseek-chat"
anthropic_format = false        # 用 Anthropic 原生格式时设 true
max_tokens = 8192
light_model = "deepseek-chat"   # 可选:用于摘要/路由的轻量模型

[memory]
evolution_enabled = true
materialize_threshold = 3       # 重复 N 次工具序列后总结成技能
refine_consecutive_failures = 5
dormant_days = 60               # 多少天不用就休眠

[server]
port = 7070

[display]
show_tokens = true
show_cost = true
lang = "zh"

环境变量

变量 作用
EVOMOSS_BIND Web UI 绑定地址,默认 127.0.0.1
EVOMOSS_CORS_ORIGIN 允许的 CORS Origin,默认 http://localhost:<port>
EVOMOSS_ALLOW_TERMINAL 设为 1 才允许 terminal 工具执行 shell 命令

📁 目录结构

~/.evomoss/
├── config.toml          # 主配置(权限 600)
├── data/
│   └── evomoss.db       # SQLite:sessions / skills / traces / patterns
├── sessions/
│   └── <session-id>/
│       ├── meta.toml    # 会话元信息(用户可读)
│       └── messages.jsonl
├── skills/              # 你也可以手写 SKILL.md 放这里
│   └── <skill-name>/
│       └── SKILL.md
└── crons/               # 定时提醒
    └── <reminder-id>/
        ├── cron.toml
        └── prompt.md

sessions/skills/ 都是给人读的格式,文件夹里直接编辑也认。


🧠 技能怎么学的

EvoMoss 不靠 embedding,也不调外部记忆库。它干两件事:

  1. 每次对话记 trace:记下用户输入、调了哪些工具(按顺序)、成功失败、用了多少 token
  2. 每 5 个 turn 跑一次 evolve:扫描 traces,把高频高成功率的工具序列总结成 Skill,下次遇到类似输入直接调用

下次你说类似的话,retrieve() 用关键词模糊匹配触发模式(trigger_patterns)+ 描述相似度,挑出 confidence > 0.4 的技能。命中就:

  • 把技能的 instructions 注入 system prompt
  • 工具列表只给技能声明的相关工具子集(省 token)

技能也会自我修正:成功率持续低于 30% 自动休眠,30%-60% 之间用 LLM 重写 instructions。


⚠️ 已知限制

  • 单进程单 Agent 实例:Web 模式下一把 Mutex 锁全局,多用户并发会排队。本地用足够。
  • Terminal 工具默认禁用EVOMOSS_ALLOW_TERMINAL=1 才开。开了之后只过滤了几个最危险的命令,仍要小心。
  • 路径沙盒:file_* 工具只能写 cwd 和 ~/.evomoss 子树。从 / 启动时整个文件系统就在 cwd 下,等于失效 —— 不要从 / 启动
  • 会话不会自动 GC/new 多了 sidebar 会越来越长。

🛠 开发

cargo check        # 快速校验
cargo build        # debug 构建
cargo build --release
cargo run -- server

源码地图:

src/
├── main.rs              # CLI 入口、子命令分发、REPL
├── config.rs            # 配置读写、首次引导
├── types.rs             # 所有共用类型
├── llm.rs               # OpenAI + Anthropic 客户端,流式
├── agent.rs             # Agent 主循环 + 自然语言命令
├── memory.rs            # 路由、检索、技能 CRUD
├── memory/evolution.rs  # 5 个进化算子
├── tools.rs             # 12 个工具 + 沙盒校验
├── store.rs             # 会话存储(SQLite + jsonl)
├── remind.rs            # 自然语言定时 → cron
└── server.rs            # Web 服务 + 提醒调度器

📝 许可

MIT

About

会进化的 AI Agent — Rust 实现,支持 OpenAI/Anthropic/DeepSeek,有 CLI 和 Web UI

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors