Skip to content
Embabel 文档版本 0.3.0-SNAPSHOT 源快照 4c2698b7 更新于 2026-09-29

15 · 模板(Templates)

Embabel 支持用 Jinja 模板生成提示词,通过 PromptRunner.rendering(String) 方法实现。

该方法接收一个指向 Jinja 模板的 Spring 资源路径。默认位置在 classpath:/prompts/ 下, 并且会自动补上 .jinja 扩展名。你也可以按 Spring 资源约定指定完整的资源路径。

指定模板之后,就可以用一个 model map 来创建对象。示例:

java
DistinctFactualAssertions distinctFactualAssertions = context.ai()
        .withLlm(properties.deduplicationLlm())
        // 来自 classpath 的 Jinjava 模板:prompts/factchecker/consolidate_assertions.jinja
        .rendering("factchecker/consolidate_assertions")
        .createObject(
                DistinctFactualAssertions.class,
                Map.of(
                        "assertions", allAssertions,
                        "reasoningWordCount", properties.reasoningWordCount()
                )
        );

自定义模板渲染器(Custom Template Renderer)

默认情况下,rendering() 使用平台的 TemplateRenderer(一个基于 Jinja、从 classpath 加载模板的渲染器)。 你可以用 withTemplateRenderer() 按每次渲染覆盖它,提供自定义的 TemplateRenderer 实现。

当你需要从其它来源加载模板时,这就很有用 —— 例如从文件系统中某个用户专属目录、或从数据库拉取模板, 从而实现按租户或按用户的提示词定制。

java
TemplateRenderer perUserRenderer = createRendererForUser(userId);

String result = context.ai()
        .rendering("user-greeting")
        .withTemplateRenderer(perUserRenderer)
        .generateText(
                Map.of("userName", userName)
        );

别急着把提示词外部化。

在拥有多行字符串的现代语言里,把提示词留在代码库中往往更简单。 外部化会牺牲类型安全,并带来复杂度与维护上的挑战。

BytesRouter 是社区翻译站点,所有译文仅供参考,一切以官方英文原文为准。