mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-09-25 03:18:08 +00:00
重构: 插件自注册 + .so 动态加载 + 中断打断机制
- 所有内置插件 init() 自注册 (plugin.RegisterFactory), 移除 main.go 硬编码 - 新增 .so 动态加载器 (internal/plugin/dynamic.go), 插件可编译为 plugin.so - 新增 plugin.json 元数据 (internal/plugin/manifest.go) - 新增 interceptLoop 独立 goroutine: (a) cancelLLM() 取消进行中的 HTTP 请求 (b) interceptCh → drainInterrupt() 注入 [打断消息] 到 LLM 上下文 (c) InjectInput 空闲时触发新处理循环 - 新增 internal/plugins/all.go 空白导入触发所有内置插件 init() - internal/sdk/ 作为 PluginSDK 正式 Go API - internal/api/ → internal/plugins/webui/ 迁移 - 删除旧 cmd/cli/, 使用 cmd/waiter/ 替代 - 更新 PLAN.md / ARCHITECTURE.md / README.md 文档
This commit is contained in:
94
README.md
94
README.md
@ -1,83 +1,37 @@
|
||||
# HomeAgent
|
||||
|
||||
单二进制 24/7 智能管家。**核心零 IO**,所有输入输出通过插件,插件通过三通道与核心交互:工具、阶段钩子、事件订阅。
|
||||
24/7 智能管家。**核心零 IO**,一切外界交互来自插件。
|
||||
|
||||
## 架构
|
||||
## 架构概览
|
||||
|
||||
```
|
||||
外部(QQ / HTTP / 硬件...)
|
||||
│ 通过插件注册
|
||||
▼
|
||||
IOManager.InjectInput()
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────────┐
|
||||
│ Agent Core │
|
||||
│ │
|
||||
│ on_input → Context → Memory Recall │
|
||||
│ → pre_action → [LLM ↔ 工具循环] → before_output │
|
||||
│ → output_send → after_output │
|
||||
│ │
|
||||
│ 内置:三层记忆 + 知识库 + Child Agent │
|
||||
└─────────────────────────────────────────────────┘
|
||||
│
|
||||
├── Stage Pipeline(7 阶段,插件可拦截/改写)
|
||||
├── Tool System(插件注册工具给 LLM)
|
||||
└── Event Bus(插件订阅系统事件)
|
||||
homed (内核) — 零 IO,纯管理
|
||||
├── LLM 源管理 (Lua 适配器协议转换)
|
||||
├── Agent 编排 (主 agent + interceptLoop + 子 agent)
|
||||
├── 三层记忆 (Context → Document → Graph)
|
||||
├── 知识库 (独立 TF-IDF)
|
||||
├── IO 通道管理 (Queue / Interrupt / Output)
|
||||
├── 阶段管道 (StageHost: 7 阶段并行)
|
||||
└── 事件总线 (EventBus)
|
||||
│
|
||||
▼ PluginSDK (Go API: 工具/阶段/事件/记忆/知识/LLM/配置)
|
||||
│
|
||||
plugins (init() 自注册 + .so 动态加载)
|
||||
├── WebUI (HTTP 服务)
|
||||
├── CLI (Unix socket)
|
||||
├── OpenClaw 兼容 (SKILL.md → SDK 工具)
|
||||
├── Timer (timer_set 工具 + 中断反馈)
|
||||
└── 第三方 .so 插件 (plugins/<name>/plugin.so)
|
||||
```
|
||||
|
||||
## 快速开始
|
||||
核心文档: [PLAN.md](PLAN.md) · [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)
|
||||
|
||||
## 构建
|
||||
|
||||
```bash
|
||||
make build
|
||||
./build/homed -data /tmp/homeagent
|
||||
./build/waiter -say "你好"
|
||||
```
|
||||
|
||||
依赖:Go 1.19+、CGo(go-sqlite3)。
|
||||
|
||||
## 阶段管道
|
||||
|
||||
```
|
||||
on_input → pre_action → post_action ↔ before_toolcall/after_toolcall → before_output → after_output
|
||||
↑_______________|
|
||||
循环
|
||||
```
|
||||
|
||||
| 阶段 | 插件可做 |
|
||||
|---|---|
|
||||
| `on_input` | 鉴权、拉黑、改写、短路 |
|
||||
| `pre_action` | 注入 context 消息 |
|
||||
| `post_action` | 审查/改写 LLM 输出、增删工具 |
|
||||
| `before_toolcall` | 拒绝、改参、审计 |
|
||||
| `after_toolcall` | 脱敏、改写结果 |
|
||||
| `before_output` | 改写最终文本、加格式 |
|
||||
| `after_output` | 记录/统计 |
|
||||
|
||||
## 三层记忆
|
||||
|
||||
| 层 | 存储 | 容量 | 裁剪 |
|
||||
|---|---|---|---|
|
||||
| Context | 内存 TF-IDF | 30 条 | 余弦相似度排序→文档 |
|
||||
| Document | JSON + 向量索引 | ∞ | 72h 冷→图 |
|
||||
| Graph | SQLite 三元组 | ∞ | 定期重整+同义合并 |
|
||||
|
||||
## 插件三通道
|
||||
|
||||
| 通道 | 方向 | 用途 |
|
||||
|---|---|---|
|
||||
| `RegisterTool` | 插件→LLM | Agent 调用插件功能 |
|
||||
| `RegisterStage` | 核心→插件 | 干预消息处理流 |
|
||||
| `Subscribe/Publish` | 双向 | 审计/日志/通知 |
|
||||
|
||||
## 核心命令
|
||||
|
||||
```bash
|
||||
make build # 编译
|
||||
make run # 编译+启动
|
||||
make test # 测试
|
||||
make install # 系统安装
|
||||
```
|
||||
|
||||
## 完整文档
|
||||
|
||||
详见 [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)。
|
||||
依赖: Go 1.19+, CGo (go-sqlite3), Linux (Unix socket + overlayfs)
|
||||
|
||||
Reference in New Issue
Block a user