Skip to content
FunCoding

Search

Search docs, Skills and MCP

模型输入转换 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 字段对应不同阶段

输入字段内容
sessionIdruntime 会话 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。记录日志时仍应按应用的数据处理规则选择字段。不要将“在发送前修改”外推成工具、附件和所有其他通道都已一并过滤。