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

    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验证提供一个便捷的工具,以提高效能和测试的效果。

  • 相关阅读:
    java计算机毕业设计考勤管理系统源码+mysql数据库+系统+lw文档+部署
    数据隐私保护的方法有哪些?
    23.2 Bootstrap 卡片
    VulnHub--Lampiao-linux脏牛漏洞提权
    SpringBoot中Tomcat和SpringMVC整合源码分析
    RunnerGo 支持UI自动化的测试平台
    算法-堆/归并排序-排序链表
    Redis配置和优化
    Request&Response有这一篇就够了
    【Vue】Node.js的下载安装与配置
  • 原文地址:https://blog.csdn.net/gmszone/article/details/133781711