PromptEngine
本文将详细讲解如何基于 JFinal Template Engine 封装一个专用于大模型提示词的工具类 —— PromptEngine,以及如何使用该工具类来渲染提示词模板。
一、PromptEngine 类的实现
我们首先创建一个名为 PromptEngine
的工具类,该类主要功能是通过 JFinal 的模板引擎加载和渲染提示词模板。代码如下:
package com.litongjava.template;
import com.jfinal.kit.Kv;
import com.jfinal.template.Engine;
import com.litongjava.tio.utils.environment.EnvUtils;
public class PromptEngine {
// 定义模板资源基础路径
public static final String RESOURCE_BASE_PATH = "/prompts/";
public static Engine engine;
static {
// 创建一个名称为 "prompt" 的模板引擎实例
engine = Engine.create("prompt");
// 设置模板基础路径,所有模板文件将从此路径加载
engine.setBaseTemplatePath(RESOURCE_BASE_PATH);
// 使用类路径作为模板资源的来源
engine.setToClassPathSourceFactory();
// 根据环境设置开发模式
if (EnvUtils.isDev()) {
// 在开发环境中启用模板热加载,建议生产环境同样开启,除非对性能有极端要求
engine.setDevMode(true);
}
// 配置极速模式,性能提升约 13%
Engine.setFastMode(true);
// 启用对中文表达式、中文变量名、中文方法名、中文模板函数名的支持(JFinal 4.9.02 新增功能)
Engine.setChineseExpression(true);
}
/**
* 渲染模板为字符串
*
* @param fileName 模板文件名,例如 "WebSearchSelectPrompt.txt"
* @param kv 模板渲染所需的数据模型
* @return 渲染后的字符串结果
*/
public static String renderToString(String fileName, Kv kv) {
// 获取模板并传入数据模型进行渲染
return engine.getTemplate(fileName).renderToString(kv);
}
}
代码详解:
模板资源路径设置
RESOURCE_BASE_PATH
定义了模板文件存放的基础目录。在这个示例中,所有提示词模板文件应存放在resources/prompts/
目录下。模板引擎初始化
在静态代码块中,通过Engine.create("prompt")
创建一个新的模板引擎实例,并设置好基础路径和资源加载方式。开发模式与热加载
如果当前环境为开发模式(通过EnvUtils.isDev()
判断),则启用开发模式(setDevMode(true)
),支持模板文件的热加载,方便在开发过程中实时看到模板修改的效果。极速模式与中文支持
Engine.setFastMode(true)
开启极速模式,提高模板渲染性能。Engine.setChineseExpression(true)
允许模板中使用中文表达式、变量名、方法名和函数名,使得模板编写更加灵活友好。
渲染方法
renderToString
方法接收模板文件名和数据模型(Kv 对象),加载对应的模板文件并进行渲染,最终返回渲染后的字符串结果。
二、如何使用 PromptEngine 渲染提示词模板
假设我们有一个提示词模板文件 WebSearchSelectPrompt.txt
存放在 resources/prompts/
目录下。我们可以通过如下代码来填充数据并渲染该模板:
// 构建数据模型,假设 question 是用户查询的问题,results 是搜索结果列表
Kv kv = Kv.by("quesiton", question)
.set("search_result", JsonUtils.toJson(results));
// 指定模板文件名
String fileName = "WebSearchSelectPrompt.txt";
// 使用 PromptEngine 渲染模板,得到最终的提示词字符串
String prompt = PromptEngine.renderToString(fileName, kv);
使用步骤说明:
准备数据
使用Kv
对象构建数据模型,将模板中需要的变量和对应的值放入其中。例如,上述代码中将用户提问question
和搜索结果results
转换成 JSON 字符串后绑定到模板变量quesiton
和search_result
上。指定模板文件
定义要使用的模板文件名,例如WebSearchSelectPrompt.txt
。该文件应放在之前配置的RESOURCE_BASE_PATH
目录下。渲染模板
调用PromptEngine.renderToString(fileName, kv)
方法,将模板文件和数据模型传入,最终得到渲染后的提示词字符串prompt
。
通过上述步骤,即可方便地使用 PromptEngine
对不同的提示词模板进行渲染和动态数据填充。
三、总结
通过封装 PromptEngine
工具类,我们能够统一管理大模型提示词的模板渲染逻辑。借助 JFinal 模板引擎,结合极速模式和中文支持,不仅提高了渲染性能,也使模板设计更为灵活易懂。使用该工具类后,只需准备好模板文件和数据模型,即可快速生成所需的提示词内容,极大地提升开发效率。