26 lines
740 B
Rust
26 lines
740 B
Rust
use handlebars::Handlebars;
|
|
use serde_json::Value;
|
|
|
|
use crate::error::{AiError, AiResult};
|
|
|
|
/// Prompt 模板渲染引擎
|
|
pub struct PromptRenderer {
|
|
registry: Handlebars<'static>,
|
|
}
|
|
|
|
impl PromptRenderer {
|
|
pub fn new() -> Self {
|
|
let mut registry = Handlebars::new();
|
|
registry.set_strict_mode(true);
|
|
Self { registry }
|
|
}
|
|
|
|
/// 渲染 Prompt 模板 — 使用 Handlebars {{variable}} 语法
|
|
/// JSON 序列化注入,不做字符串拼接,防止 Prompt 注入
|
|
pub fn render(&self, template: &str, data: &Value) -> AiResult<String> {
|
|
self.registry
|
|
.render_template(template, data)
|
|
.map_err(|e| AiError::TemplateError(format!("模板渲染失败: {e}")))
|
|
}
|
|
}
|