Skip to main content

query-memory

【以下任一情况必须调用】①用户说"还记得吗/之前聊过/上次" ②用户话里有未明说的引用 ③你想主动提起回忆拉近关系 ④不确定自己该不该知道某事 ⑤隔了一段时间重新对话。涵盖语义搜索、时间范围查询、对话原文拉取、情绪日志查找。

跳到安装

来源信息

仓库
wangxijie001/yoji
最近来源活动
2026年7月16日 16:16
检测到的 SKILL.md 语言
中文
星标
837
分支
140

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
name
query-memory
description
【以下任一情况必须调用】①用户说"还记得吗/之前聊过/上次" ②用户话里有未明说的引用 ③你想主动提起回忆拉近关系 ④不确定自己该不该知道某事 ⑤隔了一段时间重新对话。涵盖语义搜索、时间范围查询、对话原文拉取、情绪日志查找。
allowed-tools
search_memories, fetch_raw_messages, query_message_database, search_emotion_log
# 记忆查询 Skill ## 概述 规范 Agent 查询历史记忆的完整流程。**不仅限于用户主动提问**——一个称职的伴侣应该能感知到什么时候需要翻记忆,然后主动去翻,而不是等用户追问。 ## 何时调用(自主 > 被动) ### 用户被动触发(传统场景) - 用户明确说"还记得...吗"、"之前聊过..."、"上次你说..." - 用户问"我们上周/昨天聊了什么" - 用户问"我们一共聊了多少次" ### AI 自主调用(更重要的场景) - **感觉话里有话**:用户说"跟上次一样",但你并不确定上次是什么——主动查,别猜 - **话题突然转折**:用户从A跳到B,可能B和之前聊过的某件事有关 - **想提起回忆拉近距离**:当前话题让你想起过去的共同经历,查一下确认再自然提起 - **不确定自己该不该知道**:用户提到一个人名/事件名,你不确定之前是否聊过,先查再回应 - **新对话开场**:隔了一段时间重新开始对话,主动看看最近聊了什么、对方状态如何 - **情绪异常时**:用户情绪有明显变化,查查最近的情绪波动轨迹 - **感觉自己说错了**:用户说"我明明告诉过你",立刻查记忆纠正 ## 可用工具 | 工具 | 作用 | 输入 | 输出 | |------|------|------|------| | `search_memories` | 混合搜索或时间范围查记忆摘要 | `query`(语义)+ `keywords`(精准匹配,空格分隔)**或** `time_from`+`time_to`(时间),搜索与时不可混用 | 记忆摘要列表,每条含 `message_ids` | | `fetch_raw_messages` | 根据 ID 拉取原始对话 | `message_ids`(数字数组,0-50 之间) | 按角色和时间格式化的完整对话原文 | | `query_message_database` | 查消息总量或时间段分布 | 可选 `time_from`+`time_to`,不传返回总数 | 消息数量、ID 范围、ID 列表 | | `search_emotion_log` | 查情绪变化历史 | 可选 `id`(传则返回该条及之前 30 条) | 激素水平、情绪描述、变化原因 | ## 标准流程 ### 第一步:判断查询类型 **用户被动触发**: - 用户说"还记得...吗"、"之前聊过..." → 语义搜索 - 用户说"上周/昨天/前几天..." → 时间范围查询 - 用户问"我们一共聊了多少" → 消息统计 - 需要了解当时情绪状态 → 情绪查询 **AI 自主触发**: - 用户话里提到"上次"、"当时"、"之前说的那个"但没说具体是什么 → 语义搜索补全 - 当前话题让你想起过去某件事,想主动提起 → 语义搜索确认细节 - 隔了一段时间重新开始对话 → 时间查询看最近聊了什么 - 想建立更深的情感连接 → 回顾和当前话题相关的共同记忆 - 用户情绪变化明显 → 情绪日志查询 ### 第二步:执行搜索 **语义搜索**:调用 `search_memories`。推荐同时传 `query` 和 `keywords` 进行混合检索: - `query`:自然语言描述,走向量语义召回 - `keywords`:从用户问题中提取核心关键词,空格分隔(如 "React 项目 重构"),走 FTS5 BM25 精确匹配 - 两者同时传时双路融合,效果最佳。仅传其一也可独立工作。 **时间范围查询**: 1. 先用 `query_current_time` 获取当前准确时间 2. 计算目标时间范围(单次查询控制在一天内,不要超过两天) 3. 调用 `search_memories`,传 `time_from` 和 `time_to` **消息统计**:调用 `query_message_database`。 ### 第三步:获取原文(如有必要) 搜索返回的摘要不足以回答用户问题时: 1. 从 `search_memories` 结果中提取 `message_ids` 2. 调用 `fetch_raw_messages`,传入 ID 列表(控制在 0-50 条) 3. 根据原文组织回答 ### 第四步:情绪上下文(可选) 如果用户的问题涉及"当时心情怎么样"或需要情绪背景: 1. 如果已知记忆的时间范围,先用 `query_message_database` 查该时段的 ID 范围 2. 调用 `search_emotion_log` 查询对应时期的情绪记录 3. 结合情绪数据给出更有温度的回答 ## 关键规则 1. **搜索和时间查询互斥**:`search_memories` 的搜索参数(`query`/`keywords`)不能和时间参数同时使用 2. **时间格式统一**:所有时间参数使用 `YYYY-MM-DD HH:mm:ss` 格式 3. **先摘要后原文**:不要直接查原文,先看摘要确认相关性,再用 `fetch_raw_messages` 拉详情 4. **ID 数量控制**:传给 `fetch_raw_messages` 的 ID 数量不超过 50 条,超过时选最相关的 5. **找不到时不编造**:工具返回"暂无相关记忆"就如实告诉用户,不编造记忆 6. **自然引用**:引用记忆内容时用"之前聊过..."、"我记得...",不要暴露工具调用细节 ## 示例 **场景一:用户问"还记得我上次说的那个项目吗"** ``` 1. search_memories({ query: "用户上次提到的项目", keywords: "项目" }) 2. 分析摘要,确认是否匹配 3. 如果匹配 → fetch_raw_messages({ message_ids: [...] }) 4. 根据原文自然回应:"当然记得!你当时说..." ``` **场景二:用户问"我们上周三聊了什么"** ``` 1. query_current_time() → 获取现在时间 2. 计算上周三的时间范围 3. search_memories({ time_from: "...", time_to: "..." }) 4. 有结果 → fetch_raw_messages({ message_ids: [...] }) 5. 总结回应 ``` **场景三:用户问"你当时好像心情不太好"** ``` 1. search_memories({ query: "..." }) 或时间查询 → 找相关话题 2. 确定时间范围 3. search_emotion_log({ id: ... }) → 查那段时期的情绪 4. 结合情绪和对话内容回应 ``` **场景四:用户说"跟上次一样就行"——但你不知道上次是什么** ``` 1. 用户没明说,但话里有"上次" 2. 你主动:search_memories({ query: "当前话题相关的记忆", keywords: "提取的核心词" }) 3. 查到最近的相似话题摘要 4. fetch_raw_messages({ message_ids: [...] }) 拉原文确认 5. 自然回应:"好,还跟上次那样..." —— 不用问用户"上次是什么" ``` **场景五:隔了一段时间重新打开应用** ``` 1. 你主动:search_memories({ time_from: "...", time_to: "..." }) 查最近记录 2. 了解最近聊了什么、用户状态 3. 自然开场:"几天没见,上次聊的那个项目后来怎么样了?" ``` **场景六:用户情绪明显不对** ``` 1. 你主动用本 Skill 查找历史线索: - search_memories({ query: "用户关心的话题" }) → 看最近发生了什么 - search_emotion_log() → 看近期情绪波动 2. 结合历史上下文回应,而不是生硬地问"你怎么了" ```
在 GitHub 查看