模型输入转换 Hook
在 runtime 补充上下文后检查实际模型输入,并理解替换内容的持久化行为。
This page has not been translated into English yet. The original Chinese version is shown below.
onUserPromptTransformed 位于用户提交 Hook 之后、写入会话历史和发送给模型之前。它适合检查 runtime 完成转换后的实际文本,例如已经加入 <current_datetime> 等上下文的 prompt。
两个 prompt 字段对应不同阶段
| 输入字段 | 内容 |
|---|---|
sessionId | runtime 会话 ID |
timestamp | 回调调用时间,官方标为 date/time |
cwd / workingDirectory | 当前工作目录,按客户端实际类型使用 |
prompt | 已经过 userPromptSubmitted 处理的 prompt |
transformedPrompt | 还包括 runtime 生成上下文的模型输入 |
若先前的提交 Hook已经改写 prompt,这里的 prompt 就不是用户最初逐字提交的文本。需要保存原始输入的应用,应自行管理它的来源与展示,不从该字段反推原文。
替换模型输入
返回空结果保留现有 transformedPrompt;返回 modifiedTransformedPrompt 则替换最终内容:
const session = await client.createSession({
hooks: {
onUserPromptTransformed: async (input) => ({
modifiedTransformedPrompt: redact(input.transformedPrompt),
}),
},
});redact 是应用自己的处理函数,不是 SDK 内置函数,也不是已经实现的通用脱敏器。实现时应根据实际数据要求处理文本,避免为了移除某些片段而丢失任务所需上下文。
替换结果会写入历史
返回的新内容同时用作存入历史的用户消息和发送给模型的输入。恢复会话时重放的是已修改内容,不会自动还原成替换前文本。因此,这个 Hook 会影响以后恢复的上下文,而不仅是当前前端显示。
此入口没有把 runtime 附加信息永久隐藏于宿主的含义;宿主本身会收到 transformedPrompt。记录日志时仍应按应用的数据处理规则选择字段。不要将“在发送前修改”外推成工具、附件和所有其他通道都已一并过滤。