当你需要检查或替换确切的面向模型的提示时使用它。 prompt 输入包含任何 userPromptSubmitted 钩子运行后的用户提示,而 transformedPrompt 也包含运行时生成的上下文,例如 <current_datetime>。
输入和输出
| 输入字段 | 类型 | Description |
|---|---|---|
sessionId | 字符串 | 运行时会话标识符 |
timestamp | 日期/时间 | 钩子被调用的时间 |
cwd / workingDirectory | 字符串 | 当前工作目录 |
prompt | 字符串 | user 钩子后的提示 |
transformedPrompt | 字符串 | 运行时转换后面向模型的提示 |
如果不返回任何值,则转换后的提示将保持不变。 返回 modifiedTransformedPrompt 以替换存储在会话历史记录中并发送到模型的内容。
Examples
TypeScript
const session = await client.createSession({
hooks: {
onUserPromptTransformed: async (input) => ({
modifiedTransformedPrompt: redact(input.transformedPrompt),
}),
},
});
Python
session = await client.create_session(
hooks={
"on_user_prompt_transformed": lambda input_data, invocation: {
"modifiedTransformedPrompt": redact(input_data["transformedPrompt"])
}
}
)
Go
session, err := client.CreateSession(ctx, &copilot.SessionConfig{
Hooks: &copilot.SessionHooks{
OnUserPromptTransformed: func(input copilot.UserPromptTransformedHookInput, invocation copilot.HookInvocation) (*copilot.UserPromptTransformedHookOutput, error) {
return &copilot.UserPromptTransformedHookOutput{
ModifiedTransformedPrompt: copilot.String(redact(input.TransformedPrompt)),
}, nil
},
},
})
.NET
var session = await client.CreateSessionAsync(new SessionConfig
{
Hooks = new SessionHooks
{
OnUserPromptTransformed = (input, invocation) =>
Task.FromResult<UserPromptTransformedHookOutput?>(new()
{
ModifiedTransformedPrompt = Redact(input.TransformedPrompt),
}),
},
});
Java
var hooks = new SessionHooks().setOnUserPromptTransformed((input, invocation) ->
CompletableFuture.completedFuture(
new UserPromptTransformedHookOutput(redact(input.transformedPrompt()))));
var session = client.createSession(new SessionConfig().setHooks(hooks)).get();
Rust
#[async_trait]
impl SessionHooks for MyHooks {
async fn on_user_prompt_transformed(
&self,
input: UserPromptTransformedInput,
_ctx: HookContext,
) -> Option<UserPromptTransformedOutput> {
Some(UserPromptTransformedOutput {
modified_transformed_prompt: Some(redact(&input.transformed_prompt)),
})
}
}
let session = client
.create_session(SessionConfig::default().with_hooks(Arc::new(MyHooks)))
.await?;
替换将保留为用户消息内容,因此恢复的会话将重播已修改的内容不变。