정확한 모델 연결 프롬프트를 검사하거나 교체해야 하는 경우 사용합니다. 입력에는 prompt 후크가 실행된 후 userPromptSubmitted 사용자 프롬프트가 포함되고 transformedPrompt 런타임에서 생성된 컨텍스트(예: <current_datetime>)도 포함됩니다.
입력 및 출력
| 입력 필드 | Type | Description |
|---|---|---|
sessionId | string | 런타임 세션 ID |
timestamp | 날짜/시간 | 후크가 호출된 시간 |
cwd / workingDirectory | string | 현재 작업 디렉터리 |
prompt | string | |
user 후크 뒤의 프롬프트 | ||
transformedPrompt | string | 런타임 변환 후 모델 대상 프롬프트 |
값을 반환하지 않으면 변환된 프롬프트는 변경되지 않은 상태로 유지됩니다. 세션 기록에 저장되고 모델로 전송되는 콘텐츠를 대체하기 위해 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?;
대체는 사용자 메시지 콘텐츠로 유지되므로 다시 시작된 세션에서 수정된 콘텐츠를 변경하지 않고 재생합니다.