
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
很多人第一次听到 “Harness” 会以为是某个框架或者库。其实不是,Harness 就是「套在核心逻辑外面的那层保护壳」。你写了一个 Agent,核心逻辑是「规划 → 调工具 → 合成答案」但真实世界里工具会超时、会报错、会卡住,LLM 会抽风,异步任务会 panic如果直接裸跑,任何一个环节出问题,整个请求甚至整个进程就崩了Harness 就是在核心逻辑外面包一层「安全带」:超时、重试、取消
粒度做法成本效果整段摘要把被切掉的 N 轮压成一句话1 次 LLM 调用保留大意,丢细节关键信息抽取只抽"实体 / 决策 / 未决事项"1 次 LLM 调用结构化,可长期保存指代消解写入历史时就把"刚才那个方案"替换成具体名称0 额外调用最省,但需要在写入侧改造第三种是最划算的——它不压缩,而是让内容变得"可截断"。指代一旦被消解,即使这条消息被切走,剩下的消息也能自解释。最好的压缩,是让不需要压
去重不是删除,是吸收—— 信息的密度只增不减合并不用 LLM,用规则—— 确定性比智能更重要,尤其在热路径淘汰必须联合判定—— 单一维度一定会误伤算完"该删谁"之后还要能"捞回来"—— 保护机制是规则系统的安全阀而最能体现工程成熟度的,不是这四个参数本身,而是知道它们的边界在哪衰减只用时间 → 高频记忆会冤死importance 不累加 → 反复陈述没有回报软删无恢复接口 → "可回溯"要打引号能
原文写的是:"压缩:对长文本做摘要。代码里没有摘要,只有整条丢弃。真实的三级裁剪是:层级位置粒度动作第一级召回时单条TopKMinScore过滤第二级填槽后单个槽位按预算累加,超了就切掉后续整条 item第三级全部填完全局按优先级从低到高,逐条丢弃 item// 单槽位裁剪:累加字符数,超预算就截断列表total := 0return items[:i] // 丢弃剩余整条,不截断单条文本// 全
长期记忆的写入,难点从来不在"调 LLM 抽个 JSON"。安全——怎么让恶意内容连门都进不来粒度——怎么把长对话切成"可召回、可淘汰、可判断冲突"的最小单元一致性——怎么保证三个存储引擎永远说的是同一件事收敛——怎么让记忆库在用了一年后仍然可用,而不是变成垃圾场把这四件事都做对之后,"记忆"才从一个 demo 特性变成了一个工程能力。
生命周期冲突:刚才聊的两句只该活几轮,而"用户叫小明"该活几个月;放一起,短的会被长的挤掉,或者长的被短的大量淘汰规则误伤;用途冲突:闲聊只需要"用户喜好",多步任务却需要"计划做到第几步、工具调过哪些、前面查到了什么"——后者根本不是长期知识,任务结束就该丢弃。因此按生命周期和使用场景分成四层:层级存什么生命周期实现位置短期记忆 STM最近 N 轮对话(user + assistant)会话级,
模型不记人。本文用一个真实项目(Go 后端 + Vue 前端)的记忆子系统为例,讲清楚三件事:记忆系统到底该存什么、怎么取、怎么管;为什么“数据库 + 向量库”要同时存在;多库之间没有分布式事务时,怎么保证“记忆写了就一定能搜到”。代码基于 AGI-saber 项目(团队项目),文中所有函数名和文件路径均来自真实实现,代码片段做了简化。Outbox 保证不丢,对账保证不错,版本加哈希保证可判。记忆
在编程世界中,时间处理是一个绕不开的话题。时间戳作为时间的一种数字化表示方式,在各种系统中都有着广泛的应用。本文将带你深入理解时间戳的概念、原理和实践应用。1970年1月1日 00:00:00 UTC。时间可以表示为一个整数,便于计算和存储。(在某些系统中可能是毫秒或微秒)。深入理解时间戳:从入门到实践。深入理解时间戳:从入门到实践。(Timestamp)是指从。strftime 常用格式化符。(

排列的LCS → 转换为位置序列 → 求LIS降维打击:把二维问题变成一维问题这在算法里是非常核心的一种能力,比单纯会写代码重要得多。

树是一种非线性结构,具有以下特点:有且只有一个根节点(Root)每个节点可以有多个子节点不存在环(无回路)任意两个节点之间只有一条路径A/ | \B C DE这里:A 是根节点B、C、D 是 A 的子节点E 是 C 的子节点森林其实很好理解:森林 = 多棵互不相交的树的集合树1: A 树2: X/ \ |B C Y{ 树1, 树2 }也就是说:森林中可以有 0 棵、1 棵、或多棵树每棵树之间互不连








