ContentProjectionOptions
KIT · interface · 类型合同
Candidate strategy for content projection.
导入
ts
import type { ContentProjectionOptions } from '@jangts/agent-core/kits/projection';1
js
/** @typedef {import('@jangts/agent-core/kits/projection').ContentProjectionOptions} ContentProjectionOptions */1
其他公开入口:@jangts/agent-core/types、@jangts/agent-core/kits/projection、@jangts/agent-core/kits。
定义
ts
interface ContentProjectionOptions1
字段结构
| 字段 | 类型 | 必需 | 说明 |
|---|---|---|---|
counts | readonly number[] | 必需 | 只读。Maximum array items to keep, tried in order before moving to the next length. |
lengths | readonly number[] | 必需 | 只读。Maximum characters per string, tried in order inside each count candidate. |
render | (excerpt: unknown) => string | 必需 | 只读。Renders a shortened value; must be synchronous. |
fallback | (limit: number) => string | 必需 | 只读。Builds fallback text for a limit, used when no candidate fits; must be synchronous. |
成员目录
| 成员 | 用途 |
|---|---|
render | Renders a shortened value; must be synchronous. |
fallback | Builds fallback text for a limit, used when no candidate fits; must be synchronous. |
成员详情
render
Renders a shortened value; must be synchronous.
ts
ContentProjectionOptions.render(excerpt: unknown): string1
| 参数 | 类型 | 传递 | 说明 |
|---|---|---|---|
excerpt | unknown | 必需 | — |
返回: string。
fallback
Builds fallback text for a limit, used when no candidate fits; must be synchronous.
ts
ContentProjectionOptions.fallback(limit: number): string1
| 参数 | 类型 | 传递 | 说明 |
|---|---|---|---|
limit | number | 必需 | — |
返回: string。
使用示例
- Projection:按预算投影内容:先缩短文本,再减少条目;源数据、投影结果和预算由 App 显式区分。
为同一份查询结果准备紧凑 JSON
入门 · Node.js
ts
import { Projection } from '@jangts/agent-core/kits/projection';
const projection = Projection.defineContentProjection({
counts: [10, 3, 1], lengths: [200, 80, 20],
render: value => JSON.stringify(value), fallback: () => '{}',
});
const result = projection.project({ value: { items: [{ title: '配置说明', body: '正文'.repeat(100) }] }, maxChars: 120 });
console.log(result.text, result.truncated);1
2
3
4
5
6
7
2
3
4
5
6
7
js
import { Projection } from '@jangts/agent-core/kits/projection';
const projection = Projection.defineContentProjection({
counts: [10, 3, 1], lengths: [200, 80, 20],
render: value => JSON.stringify(value), fallback: () => '{}',
});
const result = projection.project({ value: { items: [{ title: '配置说明', body: '正文'.repeat(100) }] }, maxChars: 120 });
console.log(result.text, result.truncated);1
2
3
4
5
6
7
2
3
4
5
6
7
相同数据先移除私有字段,再按预算投影
配置 · Node.js
ts
import { Projection } from '@jangts/agent-core/kits/projection';
const tree = Projection.defineTreeProjection({
maxDepth: 4,
visitRecord(record) { delete record.privateNote; },
});
const source = { items: [{ title: '配置说明', body: '正文'.repeat(100), privateNote: '不向模型提供' }] };
// 调用者明确选择副本所有权;visitor 不会碰原记录。
const publicData = tree.visit(structuredClone(source), undefined);
const compact = Projection.defineContentProjection({ counts: [10, 3, 1], lengths: [200, 80, 20], render: JSON.stringify, fallback: () => '{}' });
console.log(compact.project({ value: publicData, maxChars: 120 }));1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
js
import { Projection } from '@jangts/agent-core/kits/projection';
const tree = Projection.defineTreeProjection({
maxDepth: 4,
visitRecord(record) { delete record.privateNote; },
});
const source = { items: [{ title: '配置说明', body: '正文'.repeat(100), privateNote: '不向模型提供' }] };
// 调用者明确选择副本所有权;visitor 不会碰原记录。
const publicData = tree.visit(structuredClone(source), undefined);
const compact = Projection.defineContentProjection({ counts: [10, 3, 1], lengths: [200, 80, 20], render: JSON.stringify, fallback: () => '{}' });
console.log(compact.project({ value: publicData, maxChars: 120 }));1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10