33 lines
1.2 KiB
Markdown
33 lines
1.2 KiB
Markdown
# PromptComposer
|
|
|
|
`PromptComposer` は、`PromptContext` と会話履歴からシステムプロンプト文字列を生成するクロージャをラップし、LLM へ送信するメッセージ列を構築します。
|
|
|
|
```rust
|
|
use std::sync::Arc;
|
|
use worker::prompt::{PromptComposer, PromptContext, PromptError, SystemPromptFn};
|
|
use worker_types::Message;
|
|
|
|
fn build_context() -> PromptContext {
|
|
// WorkspaceDetector などからアプリ固有の情報を収集して埋め込む
|
|
todo!()
|
|
}
|
|
|
|
fn generator(ctx: &PromptContext, messages: &[Message]) -> Result<String, PromptError> {
|
|
Ok(format!(
|
|
"Project {} has {} prior messages.",
|
|
ctx.workspace
|
|
.project_name
|
|
.clone()
|
|
.unwrap_or_else(|| \"unknown\".into()),
|
|
messages.len()
|
|
))
|
|
}
|
|
|
|
let context = build_context();
|
|
let composer = PromptComposer::new(context, Arc::new(generator));
|
|
let conversation = vec![Message::new(worker_types::Role::User, \"Hello\".into())];
|
|
let final_messages = composer.compose(&conversation)?;
|
|
```
|
|
|
|
`compose_with_tools` を使うと、`tools_schema` をテンプレート変数として渡した上でシステムプロンプトを再生成できます。
|