Skip to content
English

模板、语义槽与表达选择 ​

程序拥有模板和偏好顺序,插入值只替换一次,变体随机源由 App 提供。

defineTextTemplate(master).render(values) 只替换原模板中的 {{word}},缺少字段抛错,插入值中的花括号不会再次求值。defineSemanticSlots 只检查带 namespace 的语义槽是否在允许 keys 和 maxOccurrences 内,不执行替换。

selectVariant 返回一个值或 undefined;有多个候选时尽量避开 previous,randomIndex(limit) 须返回有效整数。resolvePreference 按 priority 降序、order 降序选择,空数组返回 undefined。这些都是局部表达策略,不决定授权、事实优先级或业务路由。

由简到繁的同业务示例 ​

先用程序模板组合说明 ​

入门 · Node.js

ts
import { Presentation } from '@jangts/agent-core/kits/presentation';
const template = Presentation.defineTextTemplate('你好,{{name}}。{{body}}');
console.log(template.render({ name: '开发者', body: '普通对象也能实现接口。' }));
js
import { Presentation } from '@jangts/agent-core/kits/presentation';
const template = Presentation.defineTextTemplate('你好,{{name}}。{{body}}');
console.log(template.render({ name: '开发者', body: '普通对象也能实现接口。' }));

相同模板加语义键校验与不重复变体 ​

配置 · Node.js

ts
import { Presentation } from '@jangts/agent-core/kits/presentation';
const slots = Presentation.defineSemanticSlots({ namespace: 'tone', keys: ['brief', 'detailed'], maxOccurrences: 1 });
console.log(slots.isValid('{{tone:brief}}'));
const greeting = Presentation.selectVariant(['你好', '欢迎'], { previous: '你好', randomIndex: () => 0 });
const tone = Presentation.resolvePreference([{ value: 'brief', priority: 1, order: 0 }, { value: 'detailed', priority: 2, order: 1 }]);
const template = Presentation.defineTextTemplate('{{greeting}},{{body}}');
console.log(template.render({ greeting: greeting ?? '你好', body: tone === 'detailed' ? '下面逐步说明接口。' : '普通对象即可。' }));
js
import { Presentation } from '@jangts/agent-core/kits/presentation';
const slots = Presentation.defineSemanticSlots({ namespace: 'tone', keys: ['brief', 'detailed'], maxOccurrences: 1 });
console.log(slots.isValid('{{tone:brief}}'));
const greeting = Presentation.selectVariant(['你好', '欢迎'], { previous: '你好', randomIndex: () => 0 });
const tone = Presentation.resolvePreference([{ value: 'brief', priority: 1, order: 0 }, { value: 'detailed', priority: 2, order: 1 }]);
const template = Presentation.defineTextTemplate('{{greeting}},{{body}}');
console.log(template.render({ greeting: greeting ?? '你好', body: tone === 'detailed' ? '下面逐步说明接口。' : '普通对象即可。' }));

策略与实现 ​

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