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

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 的示例:

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

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

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

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

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

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

PromptScript 是如何工作的?

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

  1. connection: connection.yml

  2. template: code-complete.open-ai.vm

  3. template-datasource:

  4. - type: file

  5. value: datasource.json

  6. strategy:

  7. - type: connection

  8. value:

  9. - type: range

  10. key: temperature

  11. range: 0.7~1.0

  12. step: 0.1

  13. validate:

  14. - type: json-path

  15. value: $.id

1. 模型接入

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

  1. name: mock_response

  2. type: MockLlm

  3. configs:

  4. api-response: "{\"text\": \"this is a mock resource\"}"

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

  1. name: open_ai_connection

  2. type: OpenAI

  3. configs:

  4. api-host: xx

  5. secrets:

  6. api-key: xxx

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

2. Prompt 生成

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

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

  1. template-datasource:

  2. - type: file

  3. value: datasource.json

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

3. 任务(重复)策略

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

  1. - type: connection

  2. value:

  3. - type: range

  4. key: temperature

  5. range: 0.7~1.0

  6. step: 0.1

  7. - type: repeat

  8. value: 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。允许使用外部工具来进一步验证结果。

示例:

  1. - type: json-path

  2. value: $.store.book[0].title

  3. - type: string

  4. value: output contains "hello"

  5. - type: regex

  6. value: \d{4}

  7. - type: markdown-code

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

总结

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

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

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

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
这款轻量级规则引擎,真香!!ICCV 2023 | 中科大&微软提出AFFNet:轻量级视觉新主干AutoDev 1.4 规模化 AI 研发辅助:团队 Prompts、自定义活文档、代码检视1000刀iPad Pro 11inch 2nd gen 256g WiFi with screen protector北京理工大学发布双语轻量级语言模型,明德大模型—MindLLM,看小模型如何比肩大模型麻州新法:扩大规模收集种族和族裔数据来协调企业扩张!是全国同类行动中最全面的州级行动,有助提高对人口多样化需求和挑战的理解!《歌德堡变奏曲1355》聚焦轻、便、穿戴舒适,轻量级VR头戴式显示器CINESOLO V1众测开始猫屎咖啡早抢疯了,青岛啤酒凭什么不能口味多样化?究竟应该说someone faces problems还是problems face someone?靶向MDSC的策略(2):清除MDSC或诱导MDSC的分化文生图prompt不再又臭又长!LLM增强扩散模型,简单句就能生成高质量图像|ACM MM'23Nat Comput Sci | PBCNet:药物先导化合物优化的人工智能新方法LLM准确率飙升27%!DeepMind提出全新「后退一步」Prompt技术有了轻量级的 SPL,MPP 还有多大必要?BELLE-7B-1M逻辑推理超预期?10B量级开源中文对话LLM,谁最「懂」逻辑推理?一段乱码,竟让ChatGPT越狱!乱序prompt让LLM火速生成勒索软件,Jim Fan惊了Cell Host & Microbe | 李明/向华团队合作揭示CRISPR护卫RNA的全新生理功能《原神》冰箱贴:神子&宵宫&申鹤&甘雨&刻晴&优菈&莫娜7位角色!港大&百度提出LLMRec:基于LLM增强的多模态图神经网络推荐OpenAI祭出绘画神器,Midjourney一夜下台!DALL·E 3联手ChatGPT,无需prompt一笔成神DALL·E 3辣眼图流出!OpenAI 22页报告揭秘:ChatGPT自动改写Prompt久久为功 为资本市场培养成熟投资者 广发证券探索投资者教育多样化新模式Linux-轻量级工具集合 BusyboxBELLE-7B-1M逆袭ChatGLM?10B量级开源中文对话LLM,谁成常识问答任务的黑马?运维必须收藏!常用的570个Linux命令+280个Shell脚本,一定能帮到你!Diving Controversy Prompts Sports Fandom Criticism超高清视频呈现两个“多样化”趋势UltraFeedback:大规模、多样化、细粒度的偏好数据集火星乐园第三部《灰界》第四十四章 充分考虑爱芯元智,移动智能计算平台支持客户多样化需求|年会展商漂泊海外的大老唐一语成谶ICCV 2023 | 傅里叶算子高效Token Mixer:轻量级视觉网络新主干最有情怀的美国大学
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。