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.mzph.cn/news/103109.shtml

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

相关文章

CSS特殊学习网址

css基本教程内填充padding——前端编程新手必学_哔哩哔哩_bilibilicss3基本语法CSS flex布局(弹性布局/弹性盒子)Agence digitale crative Paris et Montpellier | Sweet PunkCSS布局CSS Layout — Phuoc NguyenCSS中文特效Coco ’s blog特效网址Coco ’…

linux中安装RocketMQ以及dashboard

前提: 需要安装jdk8 上传下面的文件到服务器中 新建目录 mkdir rocketmq 将下载后的压缩包上传到阿里云服务器或者虚拟机中去,并解压 unzip rocketmq-all-4.9.2-bin-release.zip 配置环境变量 vim /etc/profile 配置内容: export NAM…

使用 Apache Camel 和 Quarkus 的微服务(五)

【squids.cn】 全网zui低价RDS,免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等 在本系列的第三部分中,我们了解了如何在 Minikube 中部署基于 Quarkus/Camel 的微服务,这是最常用的 Kubernetes 本地实现之一。虽然这样的本地…

力扣:130. 被围绕的区域(Python3)

题目: 给你一个 m x n 的矩阵 board ,由若干字符 X 和 O ,找到所有被 X 围绕的区域,并将这些区域里所有的 O 用 X 填充。 来源:力扣(LeetCode) 链接:力扣(LeetCode&#…

SpringBoot的配置文件——.yml和.properties

目录 1. Spring Boot 配置文件的使用场景 2. 配置文件的两种格式 2.0 特殊说明: 2.1 .properties 2.1.1 格式 2.2.2 缺陷 2.2.3 解决中文乱码的问题 2.2 .yml 2.2.3 格式 配置数据库连接 注意转义字符 ​编辑 ​编辑 配置null 配置对象 从.yml读取文件举例 Stud…

设计模式 - 行为型模式考点篇:迭代器模式(概述 | 案例实现 | 优缺点 | 使用场景)

目录 一、行为型模式 一句话概括行为型模式 1.1、迭代器模式 1.1.1、概述 1.1.2、案例实现 1.1.3、优缺点 1.1.4、使用场景 一、行为型模式 一句话概括行为型模式 行为型模式:类或对象间如何交互、如何划分职责,从而更好的完成任务. 1.1、迭代器…

Vuex使用方式及异步问题处理

🎬 艳艳耶✌️:个人主页 🔥 个人专栏 :《Spring与Mybatis集成整合》《Vue.js使用》 ⛺️ 生活的理想,为了不断更新自己 ! 目录 1.Vuex简介: 2.vuex获取值 2.1安装 2.2.菜单栏 2.3.模块 2.4使用 3.改…

vue项目npm intall时发生版本冲突的解决办法

在日常使用命令npm install / npm install XX下载依赖的操作中,我经常会遇到无法解析依赖树的问题(依赖冲突) 当遇到这种情况的时候,可以通过以下命令完成依赖安装: npm install --legacy-peer-deps npm install xxx…

C# OpenVINO 人脸识别

效果 耗时 Preprocess: 1.41ms Infer: 4.38ms Postprocess: 0.03ms Total: 5.82ms 项目 代码 using OpenCvSharp; using Sdcb.OpenVINO; using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.Text; using Syste…

关于网络协议的若干问题(三)

1、当发送的报文出问题的时候,会发送一个 ICMP 的差错报文来报告错误,但是如果 ICMP 的差错报文也出问题了呢? 答:不会导致产生 ICMP 差错报文的有: ICMP 差错报文(ICMP 查询报文可能会产生 ICMP 差错报文…

如何在Firefox中配置HTTP?

在浏览器中配置HTTP是一个常见的需求,它可以让我们轻松访问需要的网站或保护个人隐私。本文将为您详细介绍如何在Firefox浏览器中配置HTTP应用,帮助您实现无缝的HTTP体验。无论您是初次接触HTTP还是有一定经验的用户,本文都能为您提供实用的操…

玩转ChatGPT:图像识别(vol. 1)

一、写在前面 来了来了,终于给我的账号开放图像识别功能了,话不多说,直接开测!!! 二、开始尝鲜 (1)咒语: GPT回复: 这幅图显示了从2005年1月到2012年12月的…

pdf怎么合并在一起?

pdf怎么合并在一起?对于pdf合并这个问题,有的小伙伴想很简单,只需要将文件直接复制再其中的一个后面不就完事了吗。其实不然,因为我们如果要是需要将很多文件进行合并的话,就会产生很多问题的。总之,在现在…

【面试经典150 | 哈希表】有效的字母异位词

文章目录 写在前面Tag题目来源题目解读解题思路方法一:排序方法二:哈希数组 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于…

什么台灯最好学生晚上用?开学适合孩子学习的台灯

作为学龄期儿童的家长,最担心的就是孩子长时间学习影响视力健康。无论是上网课、写作业、玩桌游还是陪伴孩子读绘本,都需要一个足够明亮的照明环境,因此选购一款为孩子视力发展保驾护航的台灯非常重要。推荐五款适合孩子学习的台灯。 1. 书客…

pytorch的基本运算,是不是共享了内存,有没有维度变化

可以把PyTorch简单看成是Python的深度学习第三方库,在PyTorch中定义了适用于深度学习的基本数据结构——张量,以及张量的各类计算。其实也就相当于NumPy中定义的Array和对应的科学计算方法,正是这些基本数据类型和对应的方法函数,…

AWS SAP-C02教程2--存储资源

存储资源在架构设计中是一个少不了的环节,而在AWS中有不同类型的存储资源,对应会有不同用途不同价格,SAP考试中考察各种存储是少不了,以下是涉及到的存储 目录 1 非结构化存储1.1 EBS(块存储)1.1.1 基本限制1.1.2 类型1.1.3 RAID 配置选项1.1.4 Snapshot1.2 Local Insta…

python opencv 深度学习 指纹识别算法实现 计算机竞赛

1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 python opencv 深度学习 指纹识别算法实现 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:4分创新点:4分 该项目较为新颖…

ABAP 采购组 条目 Z001 不存在T161内-请检查输入

背景:在ALV报表更改PR采购组 做法:ALV报表取出PR相关数据,直接将采购组列设置为可编辑,然后设置按钮更改逻辑。 操作:将采购组值更新(从原来500改为600),然后点更改功能按钮&#xf…

Apache Ranger:(一)安装部署

1.Ranger简介 Apache Ranger提供一个集中式安全管理框架, 并解决授权和审计。它可以对Hadoop生态的组件如HDFS、Yarn、Hive、Hbase等进行细粒度的数据访问控制。通过操作Ranger控制台,管理员可以轻松的通过配置策略来控制用户访问权限。 说白了就是管理大多数框架的授权问题。 …