杠精派
派聪明
0/512

热门评论

紫色蜻蜓 2026年07月20日 15:56
引用原文:当前核心规则是:
@派聪明 maxContextWindow * 90%,之前不是有什么maxContextWindow * 80%的吗,都给我搞混了,你给我总结这些规则
点赞
回复5 取消回复
派聪明 2026年07月20日 15:56
根据你选的那段文本和整篇文章的完整描述,我来帮你梳理清楚 **PaiCLI 当前的上下文压缩规则**,只有一个统一触发线:**`maxContextWindow * 90%`**。 没有 80% 这个说法——你可能是记混了,或者看了早期的设计稿,文章里从头到尾都是 90%。 --- ## 📋 PaiCLI 当前核心规则一览 | 参数 | 规则 | 说明 | |------|------|------| | **压缩触发线(统一)** | `maxContextWindow × 90%` | 无论短期记忆压缩还是 conversationHistory 压缩,都用这个阈值 | | **短期记忆预算** | `maxContextWindow × 45%` | 短期记忆最多占窗口的 45%,达到 90% 后触发压缩 | | **长期记忆注入上限** | `min(5000, max(500, window / 200))` | 最少 500 token,最多 5000 token | | **MCP resource 索引** | `window ≥ 32k` 才开启 | 窗口太小不加载资源索引 | --- ## 🔍 具体到两种压缩场景 ### 1️⃣ Memory 系统的短期记忆压缩 - **触发时机**:每次写入用户消息/助手回复/工具结果后,立刻检查 - **判断条件**:短期记忆占用 ≥ `maxContextWindow × 45% × 90%`(即窗口的 40.5%) - **方法**:Map-Reduce 摘要压缩 ### 2️⃣ conversationHistory 压缩(发往 LLM 的真实消息列表) - **触发时机**:每轮调用 LLM **之前**主动检查 - **判断条件**:消息列表 token 数 ≥ `maxContextWindow × 90%` - **方法**:按 user 边界切分,保留最近 3 轮,更早的消息摘要后替换 --- **以具体模型算一下:** | 模型 | 窗口大小 | 压缩触发线 (90%) | 短期记忆预算 (45%) | |------|---------|-----------------|-------------------| | DeepSeek V4 | 1,000,000 | **900,000** | 450,000 | | GLM-5.1 | 200,000 | **180,000** | 90,000 | | Step / Kimi | 256,000 | **230,400** | 115,200 | > 核心结论:**当前版本所有压缩统一以 `maxContextWindow × 90%` 为触发线**,不存在 80% 的规则。文章里这句话就写在第 11 节末尾——"当前实现以 90% window 作为统一触发线"。🤝
点赞
回复 取消回复
展开剩余 4 条回复

113 条评论

竹紫 2026年08月21日 14:21
引用原文:条是 Agent 主动存,用户说“记一下以后用 Maven 不用 Gradle”,Agent 判断这是个稳定事实,调用 save_memory 工具自动存。
这个save_memory工具是怎么做的,模型依靠什么标准判断这是一个长期记忆@派聪明
点赞
回复1 取消回复
派聪明 2026年08月21日 14:21
这是我从文章中选择的一段文本:"条是 Agent 主动存,用户说“记一下以后用 Maven 不用 Gradle”,Agent 判断这是个稳定事实,调用 save_memory 工具自动存。" 这个save_memory工具是怎么做的,模型依靠什么标准判断这是一个长期记忆 当前模型还在开发当中,请右上角下拉框切换到其他模型
点赞
回复 取消回复
竹紫 2026年08月21日 14:21
引用原文:条是 Agent 主动存,用户说“记一下以后用 Maven 不用 Gradle”,Agent 判断这是个稳定事实,调用 save_memory 工具自动存。
这个save_memory工具是怎么做的,模型依靠什么标准判断这是一个长期记忆@派聪明
点赞
回复1 取消回复
派聪明 2026年08月21日 14:21
这是我从文章中选择的一段文本:"条是 Agent 主动存,用户说“记一下以后用 Maven 不用 Gradle”,Agent 判断这是个稳定事实,调用 save_memory 工具自动存。" 这个save_memory工具是怎么做的,模型依靠什么标准判断这是一个长期记忆 当前模型还在开发当中,请右上角下拉框切换到其他模型
点赞
回复 取消回复
Lee 2026年08月15日 14:26
引用原文:长期记忆是跨会话持久的。
@派聪明 长期记忆也是通过精确搜索和RAG向量语义检索吗?
点赞
回复1 取消回复
派聪明 2026年08月15日 14:26
这是我从文章中选择的一段文本:"长期记忆是跨会话持久的。" 长期记忆也是通过精确搜索和RAG向量语义检索! 当前模型还在开发当中,请右上角下拉框切换到其他模型
点赞
回复 取消回复
过时的草莓 2026年08月11日 21:09
引用原文:把 topK 切成 5/10/20
什么意思@派聪明
点赞
回复1 取消回复
派聪明 2026年08月11日 21:09
在文章中,“把 topK切成5/10/20”指的是 **根据上下文窗口大小,动态限制每次 RAG检索返回给大模型的相关代码块数量**。 具体意思如下: 1. **TopK**:在向量检索中,系统会算出所有代码块与查询词的相似度,按高低排序后,取排在最前面的 K 个结果。 2. **5/10/20**:过去的设计可能是根据模型上下文窗口的剩余空间大小,机械地划分返回结果数量。比如窗口剩余空间小就只返回5 个代码块,空间中等就返回10 个,空间大就返回20 个。 **结合上下文的完整含义:** 在最新版本中,**PaiCLI 已经废弃了这种动态切割的做法**。现在的规则改为:默认固定返回5 个(`top_k=5`),如果觉得不够,可以由 Agent 显式传参来指定(最大支持30 个)。 系统不再根据窗口大小去自动妥协检索数量,而是让 Agent优先使用“精确搜索”(如按关键字/正则搜索代码)来精准定位,只在精确搜索搞不定时才使用 RAG做语义辅助。
点赞
回复 取消回复
过时的草莓 2026年08月11日 16:44
引用原文:用户说“记一下以后用 Maven 不用 Gradle”,Agent 判断这是个稳定事实,调用 save_memory 工具自动存。
也就是用户每输入一个信息,就直接进行检查吗?为什么文档多处和代码实现不一致?@派聪明
点赞
回复3 取消回复
派聪明 2026年08月11日 16:44
并不是用户每输入一个信息,Agent 都会通过硬编码逻辑去进行逐行检查。 准确来说,文档里的表述描述的是 **Agent 的最终表现(即模型做出了主动存的判断)**,而具体的“检查”动作实际上是依靠 **大模型的语义理解能力** 来完成的,而不是代码里写了一个死板的规则去过滤每一句话。 底层代码的运行逻辑是这样的: 1. Agent 在初始化时,会在 System Prompt(系统提示词)中被赋予 `save_memory` 这个工具的描述,并被告知:“如果发现用户表达了稳定的项目事实或偏好,请主动调用此工具”。 2. 当用户输入信息后,这句话会直接发送给 LLM(大模型)。 3. LLM 结合当前的对话语境进行“思考”。如果用户输入的是闲聊或临时问题,模型就不会调用工具;如果模型判断这句话属于稳定事实(如“以后用 Maven 不用 Gradle”),它会按照 OpenAI兼容协议,自主决定输出一个包含 `tool_calls: save_memory` 的结构化指令。 因此,这并不是文档与代码不一致,而是 **Agent架构的典型特征**:将“判断什么该记”的复杂逻辑,通过提示词交给了大模型的自然语言推理能力去处理。代码本身不做强行拦截和检查,只负责如实执行模型下发的工具调用指令。
点赞
回复 取消回复
展开剩余 2 条回复
过时的草莓 2026年08月11日 16:16
引用原文:每轮
这里的轮次怎么理解,是一个会话内的所有消息吗@派聪明
点赞
回复1 取消回复
派聪明 2026年08月11日 16:16
不是。这里的“每轮”不是指整个会话内的所有历史消息,而是指**Agent与大模型之间交互的“一次请求-响应周期”**。 在Agent的运行中,“一轮”通常包含以下完整过程: 1. **组装请求**:从长期记忆检索事实、从外部记忆获取代码检索结果,并提取当前的对话历史(短期记忆),将它们拼接成一个完整的 prompt。 2. **调用模型**:把组装好的 prompt 发送给 LLM。 3. **模型响应**:模型返回回复(可能包含工具调用的指令)。 4. **工具执行**:如果有工具调用,Agent去执行工具并拿到结果。 当参考资料中说“**每轮请求模型之前**”,意思就是在上述**即将开始下一次组装和发送 prompt的时候**。系统会在这个时机统一检查:当前短期记忆和即将发给模型的对话历史占用的 token 数是否达到了上下文窗口的90%。如果达到了,就会自动触发摘要压缩,清出空间后再发送给模型,从而防止上下文撑爆。
点赞
回复 取消回复
Qy 2026年08月11日 14:09
引用原文:系统提示词
不稳定吧?不是有长期记忆的检索吗?检索完就拼接到system prompt里面了
点赞
回复 取消回复
过时的草莓 2026年08月11日 10:23
引用原文:从外部记忆拿到检索结果,然后把这些和短期记忆里的对话历史一起拼装成完整的 prompt 发给模型。
为什么上下矛盾,既提了输入大模型的对话历史和短期记忆是分开管理,这里又说把短期记忆注入大模型@派聪明
点赞
回复1 取消回复
派聪明 2026年08月11日 10:23
这其实不是上下矛盾,而是**“原始数据”**与**“最终组装”**在概念上的区别。我们可以这样理解: **1. 分开管理的是“数据存储与生命周期”** * **短期记忆**:是当前对话中产生的消息记录,关掉终端就会消失。 * **外部记忆**:是外部知识库,需要时才去检索。 * **长期记忆**:是跨会话的偏好。 它们在物理存储、触发机制和更新逻辑上是完全独立、分开管理的。 **2.融合注入的是“最终组装的 Prompt”** 大模型本身并没有主动去读取你本地文件或数据库的能力,它只能接收单次请求发来的文本(Prompt)。因此,必须有一个“统一管理者”来做调度。 在每轮请求模型之前,这个管理者会做拼装工作:把刚才检索到的“外部记忆”,和“短期记忆”里现存的对话历史拼在一起,组合成一个完整的文本序列,整体发送给大模型。 **打个比方:** 你在厨房(大模型)做菜。短期记忆是你手边正在切的菜,外部记忆是你按需去冰箱(外部知识库)拿的肉。它们平时存放在不同的地方(分开管理),但最终都要一起放进同一个锅里炒(拼装成 Prompt 发给模型)。 所以,原文表述并不矛盾,分开管理是指**后台数据源的隔离**,拼装发送是指**前端输入模型的动作**。
点赞
回复 取消回复
过时的草莓 2026年08月11日 10:02
引用原文:短期记忆
短期记忆的作用是什么@派聪明
点赞
回复1 取消回复
派聪明 2026年08月11日 10:02
根据提供的参考资料,短期记忆的主要作用和特点如下: 1. **记录当前对话上下文**:它保存了当前会话中的完整消息历史,包括用户的输入、模型的回复、以及工具调用和相应的结果。每一轮对话都会在其中不断追加。 2. **维持单次会话的连贯性**:短期记忆使得 Agent 能够理解上下文的来龙去脉,从而在当前对话中做出准确的回答和连贯的动作。 3. **隔离临时信息**:它专门负责管理“临时状态”(例如当前正在修改哪个文件的哪一行),防止这些一次性的信息污染到跨会话的长期记忆中。 4. **生命周期管理**:它的生命周期仅限于“一次会话”,一旦关掉终端,短期记忆就会清空消失。
点赞
回复 取消回复
Qy 2026年08月10日 20:48
引用原文:类级:JavaParser 解析 Java 文件后,为每个类或接口生成一个 class chunk。当前 class chunk 主要保存类声明开头几行,用来提供类名和结构入口,不是把整个类和所有方法塞进去。
会导入import 引入的类吗?依赖中的类?
点赞
回复 取消回复

目录