Skip to content
English

从历史语义生成处理策略 ​

复用片段身份与硬预算,生成 recent 或 continuity 的完整步骤和引用。

recent 生成整轮历史窗口步骤;continuity 使用已给定 compressor 生成“旧轮摘要+近期原文”的压缩步骤。返回 {policy,compressors,selectors},可直接配入上下文 Workflow 节点。

可选 preset 为 compact、balanced、extended:目标字符数分别取 fragment.maxChars 的 25%、50%、75%,保留 1、3、6 组完整原文;这些比例表示字符空间,不是语义保真率。精确 targetChars、keepGroups 优先。未选 preset 时,缺省 targetChars 取已有 fragment.maxChars,grouping 使用 user-turn,keepGroups=1;选择默认固定为该场景对应的 trim 或 compress。需要更精确约束时仍在同一 options 覆盖,不改回另一种配置风格。策略生成 .window/.summary ID、fragmentId 和 handlerId,避免重复手配这些关系。

也可传入策略数组,在第二个参数配置共同 selection、selectors、compressors、steps 及 triggerChars/targetInputChars/triggerTokens/targetInputTokens。selection 支持 model 和自定义选择器;显式 steps 完全替换生成步骤及其原有依赖,可省去 kind/fragment/field/compressor 等已无用途的生成字段。缺省按最终步骤选择,单步 fixed,多步 sequence。

这些是 Support 场景补全,不是 Core 对所有历史的规定;也不保证摘要的语义质量。fragment 必须来自 App 的真实登记,预算和最近原文保留仍会接受最终检查。

由简到繁的同业务示例 ​

复用已有片段生成最近历史策略 ​

入门 · Node.js

ts
import { Support } from '@jangts/agent-core';
const fragment = { id: 'history', maxChars: 4000 };
const strategy = Support.createContextStrategy({ kind: 'recent', fragment, field: 'messages' });
console.log(strategy.policy, strategy.compressors);
js
import { Support } from '@jangts/agent-core';
const fragment = { id: 'history', maxChars: 4000 };
const strategy = Support.createContextStrategy({ kind: 'recent', fragment, field: 'messages' });
console.log(strategy.policy, strategy.compressors);

同一配置增加保留组数与目标大小 ​

配置 · Node.js

ts
import { Support } from '@jangts/agent-core';
const fragment = { id: 'history', maxChars: 4000 };
const strategy = Support.createContextStrategy({ kind: 'recent', fragment, field: 'messages',
  keepGroups: 3, targetChars: 2500, grouping: { kind: 'user-turn' },
});
console.log(strategy.policy);
js
import { Support } from '@jangts/agent-core';
const fragment = { id: 'history', maxChars: 4000 };
const strategy = Support.createContextStrategy({ kind: 'recent', fragment, field: 'messages',
    keepGroups: 3, targetChars: 2500, grouping: { kind: 'user-turn' },
});
console.log(strategy.policy);

需要承接旧话题时明确提供压缩算法 ​

扩展 · Node.js

本例只装配策略。将 policy/compressors/selectors 作为原上下文节点配置,不在这里发新请求或创建额外额度。

ts
import { Support } from '@jangts/agent-core';
const compressor = Support.createContextCompressor({ id: 'history-summary',
  instruction: '按资料原意概括旧历史,保留事实、时间和未完成事项。',
  transport: 'core:plain-text', maxOutputTokens: 500,
  parse(value: unknown) { if (typeof value !== 'string' || !value.trim()) throw new TypeError('需要摘要'); return { messages: [{ role: 'user', content: value }] }; },
});
const strategy = Support.createContextStrategy({ kind: 'continuity',
  fragment: { id: 'history', maxChars: 4000 }, field: 'messages', compressor,
  targetChars: 2500, keepGroups: 2,
});
console.log(strategy.policy, strategy.compressors.map(item => item.id));
js
import { Support } from '@jangts/agent-core';
const compressor = Support.createContextCompressor({ id: 'history-summary',
    instruction: '按资料原意概括旧历史,保留事实、时间和未完成事项。',
    transport: 'core:plain-text', maxOutputTokens: 500,
    parse(value) { if (typeof value !== 'string' || !value.trim())
        throw new TypeError('需要摘要'); return { messages: [{ role: 'user', content: value }] }; },
});
const strategy = Support.createContextStrategy({ kind: 'continuity',
    fragment: { id: 'history', maxChars: 4000 }, field: 'messages', compressor,
    targetChars: 2500, keepGroups: 2,
});
console.log(strategy.policy, strategy.compressors.map(item => item.id));

策略与实现 ​

接口参考、使用示例与开发指南。