feat(runtime): 文档摄取①(抽取器 + sidecar + 装配期 resolveDocuments)(design/24 S3-A)
- 抽取器零新依赖纯函数:UTF-8 清洗、CSV/TSV 行数列名摘要、64K rune 安全截断;PDF/Office/二进制走哨兵错误诚实拒绝(不引解析库)。 - sidecar:<DataDir>/extracted/<存储名>.txt,首行紧凑 JSON 元数据 + 正文;临时文件 + rename 原子落定;只抽一次(删原文件仍出正文);版本不匹配/坏缓存重抽。 - 装配期 resolveDocuments(resolveImages 同位,每步对模型可见视图注入):清单恒在(解析器缺席/报错也在)、截断带续读游标、失败诚实标记 + status=unreadable、回合继续;文档部件永不抵达编码器(负例钉住)。 - 修 S2 移交的两处静默吞掉:checkpoint 比较键纳入文档引用、compactor token 估算计入文档部件(不是免费的)。 - 主会话独立验收:隔离 worktree(HEAD + 本切片)build/vet 绿、全树 59 包 0 FAIL、linux/amd64 + darwin/arm64 交叉编译绿、documents+loop 两包 167 条 PASS;变异独立复现(resolveDocuments 短路 ⇒ 3 条红,含「文档部件仍抵达下游」)。
This commit is contained in:
1 parent
834ef3683e
commit
a8851dc0a2
12 files changed
+2008
-7
No files matched your search
@@ -22,6 +22,7 @@ import (
|
||||
"git.yeij.top/AskaEth/Cyrene_v2/internal/runtime/agent"
|
||||
"git.yeij.top/AskaEth/Cyrene_v2/internal/runtime/capacity"
|
||||
"git.yeij.top/AskaEth/Cyrene_v2/internal/runtime/guardrail"
|
||||
"git.yeij.top/AskaEth/Cyrene_v2/internal/runtime/history"
|
||||
"git.yeij.top/AskaEth/Cyrene_v2/internal/runtime/memory"
|
||||
"git.yeij.top/AskaEth/Cyrene_v2/internal/runtime/model"
|
||||
"git.yeij.top/AskaEth/Cyrene_v2/internal/runtime/tool"
|
||||
@@ -78,6 +79,15 @@ type Result struct {
|
||||
// OnTurnEnd 钩子返回(未接线钩子时为 "")。持久化层把它
|
||||
// 带到 assistant 消息上(design/16 §3.3)。
|
||||
Mood string
|
||||
// Documents 是本回合**装配期解析到的文档结论**(design/24 §4.4、§6.1):
|
||||
// 按服务端存储名去重、保留首次出现顺序,字段形状即 history.DocumentRef
|
||||
// (与落库/DTO 同一个结构体)。调用方据此把 status/chars/truncated 落进
|
||||
// 用户消息的 document 列或随响应回传,使客户端能看到「这份附件读到了 /
|
||||
// 读不到」—— 没有它,抽取失败对客户端就是不可见的。
|
||||
Documents []history.DocumentRef
|
||||
// docSeen 是 Documents 的去重索引(存储名 → 下标),作用域限于本次
|
||||
// Result,绝不跨 Run 共享。
|
||||
docSeen map[string]int
|
||||
}
|
||||
|
||||
// Loop 是默认的 agent 执行引擎。它经 New 一次性配置,
|
||||
@@ -121,6 +131,7 @@ type Loop struct {
|
||||
compactor Compactor
|
||||
transformContext func(context.Context, []model.Message, int) []model.Message
|
||||
imageResolver ImageResolver
|
||||
documentResolver DocumentResolver
|
||||
log *slog.Logger
|
||||
}
|
||||
|
||||
@@ -182,6 +193,7 @@ func New(opts Options) *Loop {
|
||||
compactor: compactor,
|
||||
transformContext: opts.TransformContext,
|
||||
imageResolver: opts.Vision,
|
||||
documentResolver: opts.DocumentResolver,
|
||||
log: sourcedLog(opts.Log),
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user