mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-11-06 09:17:31 +00:00
## ① 全面改名 HomeAgent → HologramAgent
仓库已改名,但代码与文档里仍有大量旧名。本次按"用户能看到的优先"全量替换:
- 用户可见:登录页标题/页脚、默认人格第一句、CLI 状态输出、启动日志、
plugin_install 的工具描述、AI 图片插件的 User-Agent
- 文档与脚本:README、assets/docs、docs/zh、deploy/*.sh、.github/workflows
- 鸿蒙工程:cmd/ohos/HomeAgent → cmd/ohos/HologramAgent(git mv)
目录内的 module/app 描述同步;**证书路径原样保留**
(default_HomeAgent_xxx.cer/p7b/p12 是签名材料的实际文件名,改了会找不到证书)
- 插件元数据:plugin.json 的 author
★ 必须保持原样的两处(改了会坏):
· legacySeededPromptSignature = "你是 HomeAgent 的看板娘「小宅」…"
—— 那是识别历史播种人格卡的**原文锚点**,改了就识别不出旧数据
· 公开 SDK 的 ProxyAuthHomeAgent = "homeagent"
—— 那是 SDK 契约里的值,属独立仓库,本仓不改
## ② 修 21 处乱码(U+FFFD)
这些是历史编辑留下的编码破坏,全在注释里,例如:
「赌注重下���遍」→「赌注重下一遍」
「「不��滤」」 →「「不过滤」」
「**待��退场**」→「**待退场**」
★ 保留 providers/chineseclip/tokenizer.go 里的 2 处:那是**故意**用
U+FFFD 演示"非法 UTF-8 字节被归一成 U+FFFD",不是乱码。
## ③ 提示词技术内容下沉(用户:技术性内容应该收敛到 skill 与 -help 中)
实测系统提示词 2309 字,其中两段几乎全是**模型无法据以行动的实现细节**:
【工具执行顺序】1272 字(ParallelSafe 声明、批内降级、batchRunnable 判据…)
【三层记忆】 1069 字(L1/L2/L3 编号、消费式删除、向量空间、指纹…)
收敛后 **2309 → 1723 字(-25%)**,保留的全是"模型据此做什么不同的事":
工具顺序:默认并行 / 不要依赖先后 / 同通道保序 / 写类工具可能串行
三层记忆:时序里能看最近 / doc_query 把历史事件按原始时间戳插回时序 /
关系用 memory_recall / 成文知识用 knowledge_search
判断口径写进判据:新加一段提示词前先问"模型会据此做什么不同的事",
答不上来就该进 skill 或工具描述。
## 判据
prompt_memory_test.go 新增 2 条:
- TestSystemPromptHasNoImplementationJargon
黑名单:ParallelSafe / batchRunnable / 消费式 / DenseCosine / fingerprint /
向量空间 / 批内降级 / 自激
- TestSystemPromptStaysCompact:上限 2000 字(当前 1723)
变异:把 "ParallelSafe 声明、批内降级" 加回工具顺序段 ⇒ 第一条立刻红。
## 验证
- go build ./... / go vet ./... 干净
- go test ./... -count=1:58 包 0 失败
- make check-client-versions:客户端与内核版本一致
149 lines
5.3 KiB
Markdown
149 lines
5.3 KiB
Markdown
---
|
||
name: knowledge-base
|
||
description: 按分类树检索 HologramAgent 知识库。当需要查阅项目知识、架构约定、历史决策,或用户提到"知识库/knowledge/知识库有哪些/这个项目的约定是什么"时使用。支持树形导航、分类内检索、以图搜知识。
|
||
version: 1.1.0
|
||
author: HologramAgent
|
||
---
|
||
|
||
## Usage
|
||
|
||
先看树定位分类,再做定向检索。接口由 HologramAgent 的 `kbtree` 插件提供,
|
||
只读、需 token。详见下方"接入"。
|
||
|
||
HologramAgent 知识库按**分类树**组织(`tech/go/并发`、`life/sleep` …)。
|
||
|
||
### 何时用
|
||
|
||
- 用户问"这个项目/内核的某个约定是什么" → 先看树,找对分类再检索
|
||
- 用户提到"知识库"或某个看起来像分类名的词(如 `tech/go`)→ 查该子树
|
||
- 用户给了图片并问"知识库里有相关的吗" → 见"以图搜知识"
|
||
|
||
### 接入
|
||
|
||
服务默认监听 `127.0.0.1:9892`(配置项 `kbtree.listen_addr`),只读,
|
||
每次请求需带 token(配置项 `kbtree.token`;未配置则启动时随机生成)。
|
||
|
||
```bash
|
||
BASE=http://127.0.0.1:9892
|
||
AUTH="X-API-Key: $KB_TOKEN" # 或 Authorization: Bearer <token> 或 ?token=
|
||
```
|
||
|
||
先摸清可用接口:
|
||
|
||
```bash
|
||
curl -s -H "$AUTH" "$BASE/"
|
||
```
|
||
|
||
### 本机封装脚本(推荐先用它)
|
||
|
||
`scripts/kb_tree.sh` 把上面四条命令封好了,省得手拼 URL 与鉴权头:
|
||
|
||
```bash
|
||
S=~/.claude/skills/knowledge-base/scripts/kb_tree.sh # 按实际安装路径调整
|
||
|
||
$S # 整棵树
|
||
$S tree -c tech -d 1 # tech 子树,只看第一层
|
||
$S categories # 分类列表
|
||
$S counts # 各分类条目数
|
||
$S search -q goroutine -c tech
|
||
```
|
||
|
||
token 读取顺序:环境变量 `KB_TOKEN` → 同上<E5908C><E4B88A>目录的 `../config.json`。
|
||
**不要**把 token 写在命令行上(会进 shell 历史与 `ps` 输出)。
|
||
|
||
### 核心工作流:先看树,再定向检索
|
||
|
||
**别一上来就全文搜索。** 知识库是分层的,先定位分类能显著提高命中率,
|
||
也能避免把范围外的弱匹配当答案。
|
||
|
||
#### 第 1 步 · 看有哪些分类
|
||
|
||
```bash
|
||
curl -s -H "$AUTH" "$BASE/categories"
|
||
# {"categories":["cook","life","tech","tech/go","tech/rust"]}
|
||
|
||
# 内容最多的分类(按条目数倒序)
|
||
curl -s -H "$AUTH" "$BASE/counts"
|
||
# {"counts":[{"category":"tech","count":3}, ...], "total":5}
|
||
```
|
||
|
||
#### 第 2 步 · 浏览树结构
|
||
|
||
```bash
|
||
# 整棵树,只要结构
|
||
curl -s -H "$AUTH" "$BASE/tree?items=0"
|
||
|
||
# 只要第一层 —— 分类多时用来做懒加载
|
||
curl -s -H "$AUTH" "$BASE/tree?depth=1&items=0"
|
||
|
||
# 某棵子树,带条目详情
|
||
curl -s -H "$AUTH" "$BASE/tree?category=tech/go"
|
||
```
|
||
|
||
节点里 `name` 是**本级段名**(`"go"`),`path` 是**完整路径**
|
||
(`"tech/go"`)。拼层级用 `name`,把 `path` 拿去请求子节点。
|
||
`item_count` 是本级条目数,`total_count` 是整棵子树。
|
||
|
||
#### 第 3 步 · 分类内检索
|
||
|
||
```bash
|
||
# 关键词 + 分类子树(推荐)
|
||
curl -s -H "$AUTH" "$BASE/search?q=goroutine&category=tech"
|
||
|
||
# 全库
|
||
curl -s -H "$AUTH" "$BASE/search?q=goroutine&limit=5"
|
||
```
|
||
|
||
`category` 是**前缀匹配**:`tech` 会命中 `tech/go`、`tech/rust` 下的条目;
|
||
传 `tech/go` 只命中它自己的子树。
|
||
|
||
### 以图搜知识(多模态)
|
||
|
||
若知识条目挂了图片,它在**多模态统一空间**里有向量,能被图片本身检索到。
|
||
前提是宿主已接入多模态向量 provider(否则只是记录了媒体,不参与召回)。
|
||
|
||
判断是否就绪:HologramAgent 自身的知识库接口会返回稠密路状态
|
||
(`dense.enabled` / `dense.ready` / `dense.total`)。若为未启用,
|
||
**不要承诺"能以图搜"**。
|
||
|
||
本服务只提供**按关键词检索**——把图片字节提交给嵌入服务计算向量不在此接口内。所以:
|
||
- 用户给了图 → 用图的**可见内容**(或你先读图得到的文字)当关键词检索
|
||
- 或用本机可用的读图工具先看图,再拿描述来检索
|
||
|
||
### 读结果
|
||
|
||
`/search` 每条结果:
|
||
|
||
| 字段 | 含义 |
|
||
|---|---|
|
||
| `name` | 知识名(**已含分类前缀**,如 `tech/go/并发`) |
|
||
| `content` | 正文全文 |
|
||
|
||
`/tree` 里的条目额外有 `preview`(前 120 字)、`size`、`updated_at`、
|
||
`media`(挂载的媒体 digest/mime/kind)。
|
||
|
||
### 易错点
|
||
|
||
- **`name` 已经含分类**。不要再拼 `category + "/" + name`,会得到
|
||
`tech/go/tech/go/并发`。
|
||
- **检索会返回弱匹配。** 词法路会给所有条目打一个低分,靠排序把强命中顶到
|
||
前面。**只看第一条**;第一条明显不相关就换个分类或关键词,别把第 2、3 条
|
||
当答案。
|
||
- **分类不存在返回 404**,并在 `categories` 字段里附上现有分类 —— 用它自查
|
||
拼写。
|
||
- **`items=0` 只是不要正文**,`total_count` 仍准确,可用于判断规模。
|
||
- **本服务只读**。写方法返回 405。要写知识请用 HologramAgent 主 agent 的
|
||
`knowledge_create`(或 WebUI 界面),不要试图绕过它直接写这个接口。
|
||
- 知识名里不能有 `..`、空格(会被规范成 `_`)、点开头的段。
|
||
|
||
### 写入
|
||
|
||
本服务不提供写入。若你在 HologramAgent 主 agent 内部,写入用内核工具:
|
||
|
||
```
|
||
knowledge_create name="tech/go/调度" content="正文..."
|
||
```
|
||
|
||
`name` 用 `/` 表示分类层级(如 `tech/go/调度`)。写完它**立刻可检索**
|
||
(词法 IDF 是增量维护的,不必重启)。
|