PromptScript:轻量级 DSL 脚本,加速多样化的 LLM 测试与验证

TL;DR 版本

PromptScript 是一个轻量级的 Prompt 调试用的 DSL (Yaml)脚本,以用于快速使用、构建 Prompt。

PromptScript 文档:https://framework.unitmesh.cc/prompt-script

Why PromptScript ?

几个月前,在研究 LLM 进行研究效能提升时,我们构建了 UnitMesh (https://github.com/unit-mesh) 下的 DevTi 项目,以用于进行批量化的数据处理和 Prompt 验证 —— 诸如于,校验生成的是否是 UML,以及 UML 是否能被成功的编译。

对应的数据处理步骤为:

  • LLM 连接与参数设置。

  • Prompt 生成。

  • LLM 进行交互。

  • 对生成结果处理。

除了这种批量化的数据生成场景,在编写一个 AIGC 优先的应用时,我们还需要考虑不同参数下的效果。

基于此,我们在 Chocolate Factory 上构建了 PromptScript,以加速 LLM 的测试和效果验证。

PromptScript

PromptScript 是一个用于 LLM(Language Model)测试与验证的轻量级 DSL(Domain-Specific Language)脚本工具。它具有以下主要特点:

  1. 模板生成:支持基于不同格式的模板动态生成 Prompt,并将模板与数据源分离,以便复用。

  2. 多数据源支持:允许使用多种数据源,如文件、数据库、HTTP 等,以提供更灵活的数据输入。

  3. 任务策略:可配置不同参数,包括LLM的temperature参数和重复次数,以适应不同的测试需求。

  4. 结果验证:支持多种验证方式,包括 JSONPath 和字符串验证,以确保生成的 Prompt 符合预期。

  5. 多 LLM 连接配置:便于同时配置和管理多个LLM连接,以满足不同的LLM调试需求。

PromptScript 旨在简化 LLM 测试过程,提高效率,并为用户提供更大的灵活性和可维护性。

PromptScript 示例

下图是一个 PromptScript 的示例:

e375dbbd18a00f6788c165682e078991.png

在这里一个 Script 会为四部分:

  • 模型接入。使用额外的 connection.yml 来进行不同的 LLM 配置,再根据 Connection 中的配置,选择对应的 LLM 连接方式。

  • Prompt 生成。一个 prompt 会结束模板引擎与数据源来生成,以获取更多的上下文信息。由于复用的是 Chocolate Factory 的基础设施,所以同样可以配置成向量数据库等不同来源。

  • 任务(重复)策略。即用于配置任务的策略,生成不同的温度参数,或者批量生成某个结果。

  • 结果校验。对生成的结果进行校验,诸如于是否是一个 JSON,是否满足 JsonPath 的表达式,以及其它的字符串校验。

随后,我们只需要通过 PromptScriptCli 就可以进行对应的 yaml 配置,并存储到对应的结果文件中。

PromptScript 是如何工作的?

现在,让我们再来看一下精简的 PromptScript 的 Job 示例:

connection: connection.yml
template: code-complete.open-ai.vm
template-datasource:- type: filevalue: datasource.json
strategy:- type: connectionvalue:- type: rangekey: temperaturerange: 0.7~1.0step: 0.1
validate:- type: json-pathvalue: $.id

1. 模型接入

第一个项配置是 connection,一个 connection 会根据不同的 type 来决定选用哪个 LLM Provider。诸如于如下的是一个用于本地测试用的 Mock 的配置,只会返回一个默认的值(api-response):

name: mock_response
type: MockLlm
configs:api-response: "{\"text\": \"this is a mock resource\"}"

如下则是一个 OpenAI 的配置项:

name: open_ai_connection
type: OpenAI
configs:api-host: xx
secrets:api-key: xxx

通过这种 YAML 配置的方式来支持不同的 LLM 接入。(PS:未来还应该支持多 LLM 的对比)

2. Prompt 生成

Prompt 生成主要依赖于模型引擎与对应的数据源。如我们优先考虑的模板引擎是可以在 Intellij IDE、VS Code 等有高亮(highlight)支持的模板文件,诸如于 Apache Velocity 等。

随后,根据 datasource 来加载对应的数据,以渲染模板。

template-datasource:- type: filevalue: datasource.json

诸如于这里的 file,是从 json 文件中读取数据,并结合模板渲染成一个 prompt。

3. 任务(重复)策略

当前的任务策略,只支持比较简单的两种方式,即重复和 LLM 的参数化配置。这两种方式都是用于验证 Prompt 结果是否能满足我们的需求:

- type: connectionvalue:- type: rangekey: temperaturerange: 0.7~1.0step: 0.1
- type: repeatvalue: 20

未来,根据需要,也会加入更多的任务策略。

4. 结果校验

最后一部分是 LLM 生成的结果校验,当前支持 JsonPath、String、Regex、MarkdownCodeBlock、Json 和 ExtTool 等验证方法。

  • JsonPath:用于提取任务结果中的值的 JSON 路径表达式。依赖于 JsonPath 库,支持通过 JSON 路径表达式来验证结果。

  • StringRule:字符串验证表达式,用于确定是否执行后续语句。支持字符串验证,例如检查结果中是否包含特定内容。

  • Regex(正则表达式):验证规则,用于使用正则表达式验证任务结果。支持正则表达式验证,可以检查结果是否匹配指定的模式。

  • MarkdownCodeBlock(Markdown 代码块):验证规则,用于检查任务结果是否是有效的 Markdown 代码块。可以用于确保结果以有效的 Markdown 代码块格式呈现。

  • Json(JSON):验证规则,用于验证任务结果是否为有效的 JSON。可确保结果符合 JSON 格式。

  • ExtTool(外部工具):验证规则,用于使用外部工具验证任务结果,如 PlantUML 或 Graphviz。允许使用外部工具来进一步验证结果。

示例:

- type: json-pathvalue: $.store.book[0].title
- type: stringvalue: output contains "hello"
- type: regexvalue: \d{4}
- type: markdown-code

根据不同的 prompt 结果,来选择合适的 validate。

总结

GitHub:https://github.com/unit-mesh/chocolate-factory

PromptScript 通过 YAML 配置文件的方式支持不同的 LLM 接入,允许用户定义模板和数据源来生成 Prompt。用户还可以配置任务策略和结果验证方法,以验证生成的结果是否符合需求。

PromptScript旨在为研究LLM、批量数据处理和Prompt验证提供一个便捷的工具,以提高效能和测试的效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/158567.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qtcreator console 中文 乱码

开发环境:windows11 x64 位;Qt Creator 11.0.3;Based on Qt 6.4.1 (MSVC 2019, x86_64) 报错内容如图所示: 解决方法如下:

unity2022版本 实现手机虚拟操作杆

简介 在许多移动游戏中,虚拟操纵杆是一个重要的用户界面元素,用于控制角色或物体的移动。本文将介绍如何在Unity中实现虚拟操纵杆,提供了一段用于移动控制的代码。我们将讨论不同类型的虚拟操纵杆,如固定和跟随,以及如…

关于EEGLAB安装时报错“未定义函数或者变量‘EEGLAB’”

按照其他博主写的,下载EEGLAB(最新版),然后解压,打开matlab(2019a)导入路径,在前述步骤都正确的情况下,命令行输入eeglab,matlab提示"未定义函数或者变量…

网络原理之初识

文章目录 前言计算机网络的发展史网络互连局域网局域网组建网络的方式 广域网网络通信基础IP 地址端口号网络协议五元组协议分层OSI 七层模型TCP/IP 五层协议网络设备所在分层 封装和分用 前言 在这个信息爆炸的时代,计算机网络已经渗透到我们生活的方方面面&#…

算法村开篇

大家好我是苏麟从今天开始我将带来算法的一些习题和心得体会等等...... 算法村介绍 我们一步步地学习算法本专栏会以闯关的方式来学习算法 循序渐进地系统的学习算法并掌握大部分面试知识 , 期待和大家一起进步 . 索大祝大家学有所成 , 前程似锦.

ESP32网络开发实例-从SD卡加载Web页面文件

从SD卡加载Web页面文件 文章目录 从SD卡加载Web页面文件1、应用介绍2、软件准备3、硬件准备4、Web页面代码实现5、Web服务器代码实现在文中,将展示如何构建一个 Web 服务器,为存储在SD卡中的 HTML 和 CSS 文件提供服务。 我们不必将 HTML 和 CSS 文本硬编码入代码中,而是创建…

多目标水母搜索算法(Multi-Objective Jellyfish Search algorithm,MOJS)求解微电网优化--提供MATLAB代码

一、微网系统运行优化模型 微电网优化模型介绍: 微电网多目标优化调度模型简介_IT猿手的博客-CSDN博客 参考文献: [1]李兴莘,张靖,何宇,等.基于改进粒子群算法的微电网多目标优化调度[J].电力科学与工程, 2021, 37(3):7 二、多目标水母搜索算法MOJS …

局域网上IP多播与IP单播关于MAC地址的区别

IP单播进行到局域网上的时候: 网际层使用IP地址进行寻址,各路由器收到IP数据报后,根据其首部中的目的IP地址的网络号部分,基于路由表进行查表转发。 查表转发的结果可指明IP数据报的下一跳路由器的IP地址,但无法指明…

数据库安全-H2 databaseElasticsearchCouchDBInfluxdb漏洞复现

目录 数据库安全-H2 database&Elasticsearch&CouchDB&Influxdb 复现influxdb-未授权访问-jwt 验证H2database-未授权访问-配置不当CouchDB-权限绕过配合 RCE-漏洞CouchDB 垂直权限绕过Couchdb 任意命令执行 RCE ElasticSearch-文件写入&RCE-漏洞Elasticsearch写…

School‘s Java test

欢迎来到Cefler的博客😁 🕌博客主页:那个传说中的man的主页 🏠个人专栏:题目解析 🌎推荐文章:题目大解析(3) 目录 👉🏻第四周素数和念整数 &#…

【PostgreSQL启动,停止命令(重启)】

找到 /usr/lib/systemd/system文件夹路径看是否包含 postgresql服务 关闭服务: systemctl stop postgresql-12.service启动服务 systemctl start postgresql-12.service重启服务 systemctl restart postgresql-12查看状态 systemctl status postgresql-12.servi…

4+1视图与UML

目录 逻辑视图过程视图开发视图物理视图(部署视图)用例视图 41视图,即逻辑视图,过程视图,实现视图,部署视图,用例视图。 为什么不用一个视图? 针对多个用户,即终端用户&a…

打造震撼视觉效果,体验全新After Effects 2024 for Mac/win

想要创作令人惊叹、震撼人心的视觉效果吗?那就来尝试全新的After Effects 2024吧!After Effects是业界领先的视觉特效和动画软件,为您提供了无限可能性。无论是电影、广告、视频、网站还是应用程序,After Effects都可以帮助您创建…

前端基础一:用Formdata对象来上传图片的原因

最近有人问:你是否能用json来传图片,其实应该这么理解就对了。 一、上传的数据体格式Content-Type 1.application/x-www-form-urlencoded 2.application/json 3.multipart/form-data 以上三种类型旨在告诉服务器需要接收的数据类型同事要…

论文阅读:Image-to-Lidar Self-Supervised Distillation for Autonomous Driving Data

目录 摘要 Motivation 整体架构流程 技术细节 雷达和图像数据的同步 小结 论文地址: [2203.16258] Image-to-Lidar Self-Supervised Distillation for Autonomous Driving Data (arxiv.org) 论文代码:GitHub - valeoai/SLidR: Official PyTorch implementati…

C++ 反向迭代器

反向迭代器的即正向迭代器的--,反向迭代器的--即正向迭代器的,反向迭代器和正向迭代器的很多功能都是相似的,因此我们可以复用正向迭代器作为反向迭代器的底层容器来封装,从而实现出反向迭代器,即:反向迭代…

python文本转语音

概述 目前有文本转语音的技术,可以用在配音领域,我个人因为一些需求,所以开始寻找这方面的资源,目前各大平台,比如腾讯,讯飞,阿里,百度等都有这样的API服务,我个人是是使…

linux shell环境下处理yml文件

需要安装工具yq sudo pip install yq 这里我使用pip3指定源安装 sudo pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple yq 1. 读取文件内容: 我使用的版本是yq 3.2.3,以下命令执行会报错: yq r chainmaker.yml .blockchain yq r chain…

2023-10-14 LeetCode每日一题(只出现一次的数字)

2023-10-14每日一题 一、题目编号 136. 只出现一次的数字二、题目链接 点击跳转到题目位置 三、题目描述 给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时…

RootSIFT---SIFT图像特征的扩展

RootSIFT是论文 Three things everyone should know to improve object retrieval - 2012所提出的 A Comparative Analysis of RootSIFT and SIFT Methods for Drowsy Features Extraction - 2020 当比较直方图时,使用欧氏距离通常比卡方距离或Hellinger核时的性能…