Skip to content

UsePromptRange

Jeffrey Su edited this page Feb 6, 2024 · 6 revisions

使用 PromotRange(提示词靶场) 模块

NCF 模板已经默认集成了 Senparc.Xncf.PromptRange 的模块,只需直接运行即可使用。

使用步骤

第一步:运行 NCF 框架

运行零代码即开即用 NCF 框架。请看初始化 NCF

第二步:安装 PromotRange 模块

由于 NCF 采用高度模块化的架构设计,因此获取新功能只需安装“模块(XNCF)“即可。

点击【模块管理】,找到 Senparc.Xncf.PromptRange 模块,点击【安装】:

image

安装完成后可在左侧菜单中看到已经完成了模块安装,但此时还是”关闭“状态:

image

点击左侧【启用】按钮:

image

第三步:配置模型

进入 PromptRange 管理页面:

image

初次进入,需要配置模型,点击【管理模型】,进入模型管理列表:

image

第四步:选择模型

设置完成后回到 PromptRange 页面,点击【刷新】即可查看到最新添加的模型,

image

第五步:新建靶场

点击【新建靶场】,给靶场取一个名字:

image

完成添加:

image

第六步:配置提示词

输入提示词,并点击【打靶】按钮,测试提示词运行结果

image

第七步:测试结果

image

每次测试结果都会生成一条不可修改的“靶道”,使用 Tx-Ax 格式表示,Tx 表示一个战术(Tactics)的版本,Ax表示同一个靶道内的一个小修改的测试(瞄准,Aim):

image

高级用法:使用参数设置

image

高级用法:创建打靶“分支”

在已经打靶过的靶道,再次“打靶”,会提供几个选项:

image

image

评分

PromptRange 提供自动和手动打分功能

自动打分

第一步:设置打分标准:

image

第二步:设置打分标准:

image

第三步:打靶后自动打分

设置完成后,重新进行“打靶”,即可看到 AI 自动打分:

image

可以看到,当前的结果并不符合预期,但是包含了正确的结果名词,所以 AI 给到的 5.0 评分属于合理区间。

手动打分

无论 AI 是否已经打分,你都可以使用手动打分来修改最终评分:

image

调整后,趋势图也会对应更新:

image

手动打分可以多次执行,如果手动打分后再进行 AI 评分,则 AI 评分为最终评分

我们可以多次修改 Prompt,并让 AI 评选最佳的结果:

【一次尝试】 image

【再次用不同战术尝试】 image

根据 Prompt 和参数、模型策略的差异,我们可以指定新的“战术(T)”

连续测试

一次成绩并不能代表这个 Prompt 的好坏,我们还需要对他进行多次测试,来确定其稳定性(当然有时我们也会通过调整参数增加输出的不确定性)。

此时对已经打靶过的记录,进行【连发操作】,选择连发数量:

image

点击【连发】按钮,进行自动测试:

image

全部获得了满分,说明这个成绩还不错

如果你需要特别标记一下这个靶道,可以设置其名称:

image image

使用 Prompt

方法一:直接复制

目前 Prompt 框内的内容已经可以被使用到各种工具中,如 Senparc.AISemantic KernelLangChain 等等。

方法二:导出

点击顶部【导出 plugins】按钮,选择需要导出的 Prompt:

image

导出后将保存为兼容 Semantic Kernel Plugins 的标准文件,打包成 .zip 文件自动下载:

image image

方法四:系统内引用

你可以在 NCF 系统内静态或动态引用 Prompt。

点击顶部【复制】图标,完成 PromptRangeCode 复制。

image

PromptRangeCode 是系统内每个 Prompt 的唯一编号,即使有任何模型参数、Prompt 文字、Prompt 参数的修改,都必定会重新生成一个编号。

在任意位置都可以使用 PromptRangeCode 获取到对应的 Prompt 文本:

var promptRangeCode = "2024.02.06.1-T3-A1"; // PromptRangeCode
var promptItemService = ServiceProvider.GetService<PromptItemService>(); // 获取 PromptItemService,建议使用构造函数自动载入
var promptResult = await promptItemService.GetWithVersionAsync(promptRangeCode, isAvg: true); // 调用接口获取 Prompt 对象
var prompt = promptResult.PromptItem.Content; // 获得 Prompt

高级用法:

  1. 除了从上述完整的 PromptRangeCode 获得精准的 Prompt 以外,您还可以从某个靶道中获取当前最佳 Prompt,只需要提供 "2024.02.06.1-T3" 字符串即可。
  2. 同理,使用 "2024.02.06.1" 作为 PromptRangeCode 进行搜索,可以获得整个靶场中的最佳结果。
  3. 通过设置 isAvg 参数为 truefalse,可以要求系统返回在搜索范围内平均分的最高的 Prompt,或最高分最高的 Prompt(精准搜索只会返回精准记录,因此无效)。