system 没传,和传入 [],在 Tansr 里不是一回事。默认 fallback 下,没传才使用平台 systemPrompt;传入 [] 会得到没有业务段。systemAppend 两种情况下都还在,它不参与这次替换。
自己拼模型请求时,漏传系统提示词通常意味着「沿用默认」。这里的空数组是一次明确的业务段选择。SDK 接手选择和拼接;调用方仍要决定传不传 system。
六种组合
| 策略 | system |
平台已有角色时的业务段 |
|---|---|---|
fallback |
未传 | 平台段 |
fallback |
非空段 | 只有代码段 |
fallback |
[] |
无业务段 |
prepend |
未传 | 平台段 |
prepend |
非空段 | 平台段然后代码段 |
prepend |
[] |
平台段 |
session.applicationPrompt 只有策略和 P/S 来源,没有正文,也不统计 systemAppend。资料站明确写出的两处是:fallback 且显式 [] 时来源为 sdk;prepend 且平台段存在、SDK 为 [] 时来源为 platform。旧 bundle 没有策略时按 fallback。控制台里「SDK 传入时保留平台提示词」对应 prepend。
顺序固定为:选出的业务段,systemAppend,再是该入口实际注册的工具、Skills 或 MCP 指南。不要把平台正文再贴进 system,SDK 不去重。prepend 不强制模型服从,也不是工具权限。
省略 system、只加宿主说明的单轮形状如下。这是资料站中的调用形状,本文没有复跑。令牌由后端换发,Electron 放在主进程。
ts
import { query } from "@tansr/sdk";
const token = process.env.TANSR_APP_USER_TOKEN;
if (!token) throw new Error("缺少短期 app_user 令牌");
const run = query({
token,
baseUrl: "https://api.tansr.com",
prompt: "查询订单前,需要我提供什么信息?",
systemAppend: [{ text: "输出纯文本,避免依赖网页交互控件。" }],
tools: { builtin: [] },
});
平台段在下一轮开始前刷新,当前轮不换。刷新失败时不调用模型,事件种类是 application_prompt_refresh_failed。能力自 @tansr/sdk 0.13.0 起提供;runAgent 不拉取这套 bundle。真值表见应用系统提示词与 SDK 拼接策略。