Documentation
¶
Overview ¶
Package memorypipe 记忆的**注入-引用-打标**三段(读写时机归宿主)。
为什么只做这三段 ¶
「什么时候写记忆、写什么、摘要怎么生成」全是宿主的上下文策略——本仓 @@budget@@ 已经把摘要生成留成 @@Summarizer@@ 接口,同一条边界在记忆上成立: 内核不该替宿主决定「这次对话值不值得记住」。
但**注入**那一侧有三件事与策略无关、且各宿主各写一遍必然各判一套:
- **来源**:一条没有来源的记忆与模型的猜测在文本上无法分辨。所以来源 不是可选的元数据,是**注入的前提**——没有来源的条目不注入,而是显式 丢弃并给出原因。
- **打标**:注入体必须逐条带 id / source / at 标记,模型才能引用它 (而引用是「这条依据从哪来」的唯一可追溯路径),宿主才能据此判新鲜度。
- **裁剪显式**:预算裁掉了哪几条必须说出来。静默截断会让模型以为 「记忆里只有这些」,而实际是「更多被挤掉了」。
scope 精确匹配,不做父级兜底 ¶
按「project」查却回退到「global」看起来更友好,代价是**作用域失去了意义**: 一条只该在某个项目里生效的记忆会在任何会话里生效,而报告完全正常。 故 scope 不匹配就是丢弃,原因写清。
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Entry ¶
type Entry struct {
// ID 稳定标识(渲染时进标记,模型据此引用)。
ID string
// Text 正文。
Text string
// Scope 作用域(宿主自定词表;本包只做**精确匹配**)。
Scope string
// Tags 标签(查询按 AND 匹配)。
Tags []string
// Source 来源(**必填**:没有来源的条目与猜测不可分)。
Source string
// At 产生时刻(渲染进标记,供模型判新鲜度)。
At time.Time
}
Entry 一条记忆(值类型)。
ID 与 Source 都由宿主填:本包不生成 ID(那是存储的活),也不猜来源。
type Query ¶
type Query struct {
// Scope 只要这个作用域的条目。
Scope string
// Tags 必须全部命中(AND;OR 会让「加个标签」变成放宽而不是收紧)。
Tags []string
// MaxItems 最多注入几条(<=0 = 不限制)。
MaxItems int
// MaxBytes 正文总字节上限(<=0 = 不限制)。
MaxBytes int
}
Query 注入请求。
Click to show internal directories.
Click to hide internal directories.