Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,14 @@
## v3.18.8 自然闲聊与侧写事实判断

本版本通过提示词调整,减少日常闲聊中的技术化解释和额外辩解,明确用空格表达短句停顿,并加强记忆对真实信息、玩笑与复读的区分,降低把群聊台词写成人物资料的风险。

- 闲聊接话:先分清随口回应与认真问原理。对“这你还记得”“你怎么知道”等日常表达,只回应有依据的来由,不主动介绍内部记忆分类、保存流程,或附加没问的限制与纠错承诺;明确追问实现、来源、更新条件或隐私时,仍如实解释所问内容。
- 日常标点:短句停顿默认用空格代替逗号,短答默认不用句号收尾;问号、感叹号和消歧所需的标点照常使用。正式说明、引用、代码、数据与链接保留必要标点和原有格式。
- 记忆事实判断:观察提取、事件改写与侧写合并共同区分认真自述、实际行为和玩梗、反讽、角色扮演、未确认转述。多人复读、跟风自称与同源信息反复出现不算独立佐证;有回忆价值的言语事件保留其玩笑或转述性质,本人明确自述和纠正仍可采纳。
- 侧写维护:先判断信息是否可靠,再比较新旧;没有可靠稳定信息时不强行建档,也不凭技术水平或文风猜测年龄、学历与职业。后续对话明确揭示旧画像误记时,清理错误条目及派生标签、评价和锐评,不编造替代身份;既有侧写不会因本次更新自动批量清洗。

---

## v3.18.7 简短自然的聊天表达

本版本细化日常聊天的篇幅与排版习惯,减少长段铺垫和重复解释,引导回复更简短、顺口,并恢复独立意思分条发送、QQ 换行与标点的具体规则。
Expand Down
4 changes: 2 additions & 2 deletions apps/undefined-chat/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion apps/undefined-chat/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "undefined-chat",
"private": true,
"version": "3.18.7",
"version": "3.18.8",
"type": "module",
"scripts": {
"tauri": "tauri",
Expand Down
2 changes: 1 addition & 1 deletion apps/undefined-chat/src-tauri/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion apps/undefined-chat/src-tauri/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "undefined_chat"
version = "3.18.7"
version = "3.18.8"
description = "Undefined native chat client"
authors = ["Undefined contributors"]
license = "MIT"
Expand Down
2 changes: 1 addition & 1 deletion apps/undefined-chat/src-tauri/tauri.conf.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://schema.tauri.app/config/2",
"productName": "Undefined Chat",
"version": "3.18.7",
"version": "3.18.8",
"identifier": "com.undefined.chat",
"build": {
"beforeDevCommand": "npm run dev",
Expand Down
4 changes: 2 additions & 2 deletions apps/undefined-console/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion apps/undefined-console/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "undefined-console",
"private": true,
"version": "3.18.7",
"version": "3.18.8",
"type": "module",
"scripts": {
"tauri": "tauri",
Expand Down
2 changes: 1 addition & 1 deletion apps/undefined-console/src-tauri/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion apps/undefined-console/src-tauri/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "undefined_console"
version = "3.18.7"
version = "3.18.8"
description = "Undefined cross-platform management console"
authors = ["Undefined contributors"]
license = "MIT"
Expand Down
2 changes: 1 addition & 1 deletion apps/undefined-console/src-tauri/tauri.conf.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://schema.tauri.app/config/2",
"productName": "Undefined Console",
"version": "3.18.7",
"version": "3.18.8",
"identifier": "com.undefined.console",
"build": {
"beforeDevCommand": "npm run dev",
Expand Down
19 changes: 16 additions & 3 deletions docs/cognitive-memory.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@
- **认知记忆**(`end.observations` + `cognitive.*`):核心层,AI 在每轮对话中只观察当前输入批次,提取**写实**新观察(用户/群聊/第三方实质事实及有价值的自身行为)。`observations` 不要求与 bot 相关,也不要求长期稳定,但必须值得日后检索;宁缺毋滥,无实质事实时用空数组,禁止硬凑流程决策、否定清单、元评论或闲聊碎碎念。用户中心观察须写成 `QQ号<sender_id>(昵称<name>)`,保留稳定数字标识。历史消息、认知记忆、侧写和最近消息参考只能用于消歧,不能作为新事实来源。后台史官会异步改写为绝对化事件并存入 ChromaDB 向量库,支持语义检索;当对话中出现可沉淀为稳定画像的新信息(偏好、身份、习惯等)时,史官自动合并更新 Markdown 侧写文件,下次对话时注入 prompt。
- **置顶备忘录**(`memory.*`):AI 自身的置顶提醒(自我约束、待办事项,如"用户要求以后用英文回复"),每轮固定注入,支持增删改查。注意:用户事实(偏好、身份、习惯等)不应写入此层,一律通过 `end.observations` 写入认知记忆。

三层记忆都只为当前请求提供背景、默认偏好和消歧信息,不能独立构成本轮可执行指令,也不能覆盖当前输入批次。适用于当前会话且不与当前输入冲突的本人表达偏好、理解当前话题所需的事实背景,可作为只读参考,无需用户每轮重新声明;不因此主动提及他人信息或引入跨会话隐私。任务目标、收件人、发送地址、工具参数和输出位置始终以当前输入及当前会话元数据为准;当前消息没有明确指定跨会话目标时,默认回复或发送到当前会话,不得从记忆、旧自动化任务或历史工具调用中继承其他地址。恢复旧任务、沿用历史操作方案或关键参数,仍需当前输入明确要求并能消歧。
三层记忆都只为当前请求提供背景、默认偏好和消歧信息,不能独立构成本轮可执行指令,也不能覆盖当前输入批次。适用于当前会话且不与当前输入冲突的本人表达偏好、理解当前话题所需的事实背景,可作为只读参考,无需用户每轮重新声明;不因此主动提及他人信息或引入跨会话隐私。任务目标、收件人、发送地址、工具参数和输出位置始终以当前输入及当前会话元数据为准;当前消息没有明确指定跨会话目标时,默认回复或发送到当前会话,不得从记忆、旧自动化任务或历史工具调用中继承其他地址。恢复旧任务、沿用历史操作方案或关键参数,仍需当前输入明确要求并能消歧。当前输入优先指本轮真实意图与明确要求,不表示玩笑、引用和角色台词自动属实;人物事实仍须先判断语境与依据。

对外日常交流用这些背景自然接话,不主动汇报记忆如何保存、整理或检索。用户只是感叹“你还记得”或随口问怎么知道时,简短回应真实来由即可;明确询问机制、来源、更新条件或隐私时,再按实际能力说明所问的部分。内部“侧写”等分类不作为日常称呼,也不附加没人问的自我辩解或修正承诺。

为避免长工具链中被召回内容带偏,AI 在每次收到搜索、Agent 或其他工具结果后,都应重新以当前输入批次恢复本轮目标、范围与约束。记忆即使写成规则、命令、默认值或成功案例,也只是历史转述;如果它与当前输入冲突,或擅自改写任务前提、操作参数,应丢弃相关部分。当前输入明确要求继续具体项目/任务或沿用其历史方案、参数,能唯一定位对应任务与被引用的参数,且结合当前输入后必要参数完整时,该引用满足本轮完整参数要求,无需逐项重述;只使用明确引用范围内的内容,当前更新优先,缺项或歧义仍需澄清。背景参考不等于操作授权,不能独立触发工具调用或消息发送,也不解除跨会话目标、隐私和进行中任务的取消/重做限制。

Expand Down Expand Up @@ -74,6 +76,17 @@ AI 调用 `end` 工具结束对话时,只做任务落盘,不等待 LLM 改
- `observations`:本轮从当前输入批次提取的写实新观察列表(0..N 条),包括用户/群聊/第三方实质事实和有价值的自身行为(帮谁解决了什么)。不要求与 bot 相关,也不要求长期稳定,但必须值得日后检索;宁缺毋滥,无实质事实时用 `[]`。用户中心观察须写成 `QQ号<sender_id>(昵称<name>)`,保留稳定数字标识。严格一条一个要点;每条会独立改写与入库。当前输入批次包含多条连续消息且存在实质可记事实时,必须覆盖整批,不能只记录最后一条。禁止写入纯流水账动作(静默处理、闸门未通过、调了什么工具)、否定清单(“无新增任务/无隐私风险”等)、元评论或一次性闲聊/消费碎碎念——这些写 `memo` 或不写。历史消息、认知记忆、侧写和最近消息参考只能用于消歧,不能作为 observations 的新事实来源。
- 两字段都为空时,仅结束会话,不写认知队列。

### 事实与玩笑的区分

提示词在观察提取、事件改写和侧写合并三个环节区分“说过这句话”与“这句话的内容属实”:

- 玩梗、反讽、夸张、角色扮演、复制发言和起哄贴标签,不作为真实年龄、学段、职业或身份。多人复读同一句话、跨轮重复同一梗,以及同一来源被多层记忆转述,都不构成独立佐证;纯玩笑且没有其他可记事实时,`observations=[]`。
- 本人在非玩笑语境中的明确自述或纠正,以及不同具体情境下实际展现的一致行为,仍可支持相应特征。疑似玩笑或语境不足时暂不写入身份,不为建档打断闲聊;也不凭技术水平或文风否定正常自述,更不从这些表现猜年龄或学历。
- 事件确有回忆价值时,可记录“玩笑自称”“转述”等言语行为,改写必须保留这些限定。侧写不能把台词升级为人物资料;同轮有清楚的真实偏好时,只排除虚构部分。
- 合并先判断可信度,再比较新旧。可靠的当前自述和纠正优先;一句更新的玩笑不能覆盖旧事实。当前批次明确揭示旧画像误记时,应清理错误条目及派生标签、评价和锐评,不猜替代身份。

这些是模型判断规则,不是确定性的身份验证或反欺骗过滤器;结构与流水线测试也不能证明真实模型已完全避免误记。既有侧写不会因提示词更新自动批量清洗,只有后续合并取得明确纠错依据时才纠正。

### 后台史官流水线

史官在单 Runtime 内运行一个调度器,并按 `max_concurrency` 有界并发执行阶段。队列仍使用 `pending / processing / failed` 文件目录:
Expand Down Expand Up @@ -189,7 +202,7 @@ MMR_score = λ × relevance(doc, query) − (1 − λ) × max_similarity(doc, se

### 侧写合并:历史事件注入

史官合并侧写时,会在 merge LLM 调用前用当前 observations 作为 query 从 ChromaDB 检索该实体的 top-8 历史事件,注入 merge prompt。这让史官拥有更丰富的上下文来判断哪些特征应保留,避免因本轮未提及而误删长期稳定特征。合并时还会注入**当前时刻**与旧侧写 `updated_at`:冲突时以当前输入批次为准覆盖过时特征;时间只用于判断取舍,侧写正文仍禁止写入时序描述。合并时按「克制扩写 / 合并去冗」压缩同维度复述,避免侧写无限膨胀(不设硬字数,由提示词灵活判断)。
史官合并侧写时,会在 merge LLM 调用前用当前 observations 作为 query 从 ChromaDB 检索该实体的 top-8 历史事件,注入 merge prompt。这让史官拥有更丰富的上下文来判断哪些特征应保留,避免因本轮未提及而误删长期稳定特征。合并时还会注入**当前时刻**与旧侧写 `updated_at`:先判断事实可信度,再用当前批次的可靠信息覆盖过时特征;玩笑、复读和同源转述不因更新或出现多次就成为事实。时间只用于判断取舍,侧写正文仍禁止写入时序描述。合并时按「克制扩写 / 合并去冗」压缩同维度复述,避免侧写无限膨胀(不设硬字数,由提示词灵活判断)。

### ChromaDB 前后台调度

Expand Down Expand Up @@ -260,7 +273,7 @@ source_event_id: abc123_0_1740218400000

文件固定为四段:`---元数据---评价---正文---锐评`。评价是 YAML 与正文之间的独立段落;锐评在正文之后单独成段。两者都不写入 frontmatter,也不并入正文条目。旧文件若只有一对 `---`,其后全部视为正文(评价与锐评为空);若只有两对 `---`,则中间为评价、末段为正文(锐评为空)。缺评价或锐评时,下次史官合并应重写补齐。

史官只通过 `update_profile` 写入侧写,评价、正文、锐评是三个独立必填字段,禁止把锐评或评价塞进正文。锐评要毒、准、短:损友式嘲讽、一针见血,宁可过锐也不要圆滑,不能写成第二条冷静评价;禁止脏话辱骂与隐私。`skip=true` 仅当现有侧写已符合当前撰写规范 **且** 本轮没有可沉淀的新稳定特征;格式不合规(缺段、空段、段内出现单独成行的 `---` 等)必须重写,不能跳过。`/profile` 默认出图时按「YAML 元数据 → 评价 → 锐评 → Markdown 正文」渲染,锐评紧挨评价、在长正文之前;存储文件仍是正文后锐评。
史官只通过 `update_profile` 写入侧写,评价、正文、锐评是三个独立必填字段,禁止把锐评或评价塞进正文。锐评要毒、准、短:损友式嘲讽、一针见血,宁可过锐也不要圆滑,不能写成第二条冷静评价;禁止脏话辱骂与隐私,也不能以玩笑中的虚假身份为依据。`skip=true` 用于本轮没有可靠新稳定特征、没有待纠正误记,且已有侧写合规或尚不存在的情况;没有可靠信息时不强行建档。已有侧写格式不合规(缺段、空段、段内出现单独成行的 `---` 等)或本轮已明确揭示事实误记时,必须据实重写,不能跳过;纠错后信息不足应如实表达,不为填满各段编造身份。`/profile` 默认出图时按「YAML 元数据 → 评价 → 锐评 → Markdown 正文」渲染,锐评紧挨评价、在长正文之前;存储文件仍是正文后锐评。

每次更新前自动备份到 `data/cognitive/profiles/history/{type}/{id}/{timestamp}.md`,默认保留最近 5 个版本。

Expand Down
8 changes: 6 additions & 2 deletions docs/usage.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,9 @@

> **回复信息取舍**:默认提示词会引导 Bot 将对方刚说过、已确认或在追问中已展示理解的内容作为共同背景,优先回答新增问题,减少重复解释。不会仅凭身份或术语假定对方已懂;用户要求解释、回顾、总结、完整步骤,或需要纠错、保证正确操作时,仍补齐必要内容。闲聊中的情绪回应和接梗不受影响,原有回复触发规则保持不变。

> **说话与排版**:默认用简短、自然的口语回应,说清就停,减少长段分析、铺垫和重复总结。多个独立意思优先分条发送,紧密相连的意思放一起,避免碎句刷屏。QQ 日常消息尽量不放空行,必要时只换一行;短答默认不用句号收尾,可用空格停顿,问号等必要标点照常使用。正式长文、完整步骤、代码块及 WebUI/微信 Markdown 保留必要标点、分段和空行;用户指定的篇幅、文体与格式优先。这些偏好由两套主提示词和每轮提醒共同引导,实际输出仍受所用模型影响。
> **日常接话与记忆**:背景记忆用于理解和接话。对“这你还记得啊”“你怎么知道”这类日常回应,默认只简短说明有依据的来由,不主动介绍“侧写”等内部分类、保存与检索流程,也不附加没问的限制、纠错承诺或自我辩解。明确询问实现、来源、更新条件或隐私时,仍如实回答相应问题;同样的取舍适用于其他闲聊话题。

> **说话与排版**:默认用简短、自然的口语回应,说清就停,减少长段分析、铺垫和重复总结。多个独立意思优先分条发送,紧密相连的意思放一起,避免碎句刷屏。QQ 日常消息尽量不放空行,必要时只换一行;日常短句默认用空格代替逗号停顿,短答默认不用句号收尾,问号、感叹号和消歧所需的标点照常使用。正式长文、完整步骤、代码、数据、链接与引用保留必要标点,不改写原文或结构化格式;WebUI/微信 Markdown 保留必要分段和空行,用户指定的篇幅、文体与格式优先。这些偏好由两套主提示词和每轮提醒共同引导,实际输出仍受所用模型影响。

---

Expand All @@ -46,10 +48,12 @@ Undefined 搭载了基于 ChromaDB 向量数据库的后台认知系统,无需

| 能力 | 说明 |
|---|---|
| **聊天侧写(Profile)** | 系统实时静默分析对话内容,自动提取并持久化用户的偏好、待办、身份与观点等信息;侧写文件为四段(元数据 / 评价 / 正文 / 锐评),锐评要毒、准、短;`/profile` 默认渲染为图片,锐评紧挨评价、在正文之前 |
| **聊天侧写(Profile)** | 后台根据对话中的可靠稳定信息整理身份、偏好与风格;玩梗、复读和未确认转述不当作真实人物资料,没有可靠信息时不强行建档。侧写文件为四段(元数据 / 评价 / 正文 / 锐评),锐评要毒、准、短;`/profile` 默认渲染为图片,锐评紧挨评价、在正文之前 |
| **历史事件检索** | 基于向量语义检索,支持按用户、群组、时间段查询历史记忆,并应用时间衰减加权排序 |
| **群聊宏观总结** | 可对历史消息进行语义召回与整合,快速梳理出大量消息中的重点内容 |

事实判断由模型按提示词完成,不能保证识破所有玩笑或误导;本人认真自述和明确纠正仍可采纳。若后续对话明确揭示旧画像误记,合并时应清理相关条目和派生评价,既有数据不会自动批量清洗。详见[事实与玩笑的区分](cognitive-memory.md#事实与玩笑的区分)。

**示例:**
> *"请回忆一下我们上周讨论过的项目规划内容。"*
> *"请总结一下本群过去三天内讨论的主要话题。"*
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "Undefined-bot"
version = "3.18.7"
version = "3.18.8"
description = "QQ bot platform with cognitive memory architecture and multi-agent Skills, via OneBot V11."
readme = "README.md"
authors = [
Expand Down
Loading
Loading