优化提示:Vertex AI Prompt Optimizer的应用指南

2024年10月11日 由 alex 发表 57 0

提示设计和工程是推动大型语言模型 (LLM) 产生有意义输出的最容易的方法之一。然而,提示大型语言模型就像在复杂的迷宫中穿行一样。


设计提示是一门相对较新的学科,需要探索多种技术。此外,要从 LLM 获得最佳结果,你必须尝试各种说明和示例组合以获得所需的输出。此外,即使你找到了理想的提示模板,也不能保证该提示将继续完成其他 LLM 的任务。因此,你最终会花费更多时间将提示模板从一种模型迁移或转换到另一种模型。


3


为了缓解在构建基于 LLM 的应用程序时可能遇到的“提示疲劳”,Google Cloud 宣布推出Vertex AI Prompt Optimizer公开预览版。在本文中,你将了解如何使用 Vertex AI SDK for Python 开始使用 Vertex AI Prompt Optimizer。在本文结束时,你将更好地了解 Vertex AI Prompt Optimizer,以及它如何帮助你节省提示工程的时间和精力,同时确保为你的 GenAI 应用程序准备好高性能提示。


Vertex AI Prompt Optimizer:从研究到生产

Vertex AI Prompt Optimizer 是一种提示优化服务,可帮助用户在 Vertex AI 上为任何首选模型找到最佳提示(说明和演示),其中说明包括提示模板的系统说明、上下文和任务,而演示 是你在提示中提供的少数示例,以从模型响应中引出特定的风格或语气。Vertex AI Prompt Optimizer 基于 Google Research关于自动提示优化 (APO) 方法的论文。


想象一下,你想解决下面这个数学问题。你需要清晰的说明和示例来帮助解决它。说明告诉我们解决问题的规则(例如如何处理负数)。示例演示如何应用规则。


为了找到最佳说明和示例,Vertex AI Prompt Optimizer 采用基于 LLM 的迭代优化算法,其中优化器模型和评估器模型协同工作以生成和评估候选提示,然后根据用户想要优化的评估指标选择最佳说明和演示。下面你可以看到 Vertex AI Prompt Optimizer 的工作原理图。



只需几个带标签的示例(输入和基本事实输出对)和优化设置,Vertex AI Prompt Optimizer 就能为目标模型找到最佳提示(说明和演示),从而大大节省用户的时间和精力。最终,该产品简化了提示设计和提示工程流程,并提高了基于 LLM 的应用程序的整体质量。用户现在可以轻松地在 Vertex AI 上为特定任务制作新提示,或将提示从一个模型转换到另一个模型。


开始使用 Vertex AI Prompt Optimizer

假设你构建了一个简单的 AI 烹饪助手,它可以提供有关如何烹饪更健康菜肴的建议。例如,你问“如何制作既美味又令人满意的健康甜点,同时尽量减少添加的糖和不健康的脂肪?”。AI 烹饪助手回答:“以下是一些关于如何在食谱中实现这种平衡、尽量减少添加的糖和不健康脂肪的提示:……”。下面是生成的答案的示例。


5


你的 AI 烹饪助手的初始版本使用 LLM 和以下简单的提示模板:


给出一个带有上下文的问题,提供该问题的正确答案。\n问题:{{question}}\n上下文:{{context}}\n答案:{{target}}


根据你收集的问答评估数据集和使用 Vertex AI GenAI Evaluation 计算的问答评估指标,你的 AI 烹饪助手的初始版本可以生成高质量且与上下文相关的答案。以下是评估指标报告的摘要。


6


还不错。但就相关问题而言,生成答案的质量还有待提高。让我们设想一下,你想使用双子座 1.5 Flash 作为助手更有效的 LLM,但你以前没有使用双子座模型系列的经验,无法找到一个性能更好的提示模板来使用双子座 1.5 Flash 完成任务。这就是Vertex AI Prompt Optimizer发挥作用的地方。


要使用 Vertex AI 提示优化器增强提示模板,请按照以下步骤操作:

  1. 准备提示模板
  2. 将贴有标签的样本上传到云存储桶
  3. 配置优化设置
  4. 运行优化作业
  5. 获取优化后的提示并评估优化效果


1. 准备提示模板

首先,准备好要优化的提示模板。Vertex AI Prompt Optimizer希望提示中同时包含指令模板和任务模板,指令模板是提示模板的固定部分,在给定任务和上下文的所有查询中共享,而任务模板是提示模板的动态部分,根据任务而变化。下面是你准备在问答任务中使用Vertex AI Prompt Optimizer的原始模板。


INSTRUCTION_TEMPLATE = """
Given a question with some context, provide the correct answer to the question.
"""
CONTEXT_TASK_TEMPLATE = """
Question: {{question}}
Answer: {{target}}
"""


2. 将标注样本上传到云存储桶

接下来,Vertex AI Prompt 优化器需要一个 CSV 或 JSONL 文件,其中包含优化过程中将要使用的标注样本(输入、地面实况输出对)。在本使用案例中,建议对源模型中目标模型难以处理的示例进行标注。这将有助于确定需要改进的地方。下面是上传到 Google Cloud bucket 的标注示例。


{"target":"Here\'s how to tackle those delicious red meats and pork while keeping things healthy:\\n\\n**Prioritize Low and Slow:**\\n\\n* **Braising and Stewing:** These techniques involve gently simmering meat in liquid over low heat for an extended period. This breaks down tough collagen, resulting in incredibly tender and flavorful meat. Plus, since the cooking temperature is lower, it minimizes the formation of potentially harmful compounds associated with high-heat cooking. \\n\\n* **Sous Vide:** This method involves sealing meat in a vacuum bag and immersing it in a precisely temperature-controlled water bath...","question":"What are some techniques for cooking red meat and pork that maximize flavor and tenderness while minimizing the formation of unhealthy compounds? \\n\\nnContext:\\nRed meat and pork should be cooked to an internal temperature of 145F to ensure safety. \\nMarinating meat in acidic ingredients like lemon juice or vinegar can help tenderize it by breaking down tough muscle fibers. \\nHigh-heat cooking methods like grilling and pan-searing can create delicious browning and caramelization, but it\'s important to avoid charring, which can produce harmful compounds. \\n"}


3. 配置优化设置

要运行提示优化作业,Vertex AI 提示优化器还需要配置优化设置。Vertex AI 提示优化作业作为 Vertex AI 训练自定义作业运行。它支持 Vertex LLM API 所支持的任何 Google 模型以及各种评估指标,包括基于计算的指标、基于 LLM 的指标,甚至是用户定义的指标。这是因为Vertex AI Prompt Optimizer与Vertex快速评估服务集成在一起。为了传递这些配置,Vertex AI Prompt Optimizer 接受参数列表或 JSON 配置文件的 Google Cloud Bucket 文件路径。以下是 Vertex AI Prompt Optimizer 中基本配置的一些示例。


args = {
    'num_steps': OPTIMIZATION_STEPS,'num_steps': OPTIMIZATION_STEPS,
    'system_instruction': SYSTEM_INSTRUCTION,
    'prompt_template': PROMPT_TEMPLATE,
    'target_model': TARGET_MODEL,
    'eval_metrics_types': EVALUATION_METRICS,
    'optimization_mode': OPTIMIZATION_MODE,
    'num_template_eval_per_step': OPTIMIZATION_PROMPT_PER_STEPS,
    'num_demo_set_candidates': DEMO_OPTIMIZATION_STEPS,
    'demo_set_size': DEMO_OPTIMIZATION_PROMPT_PER_STEPS,
    'input_data_path': INPUT_DATA_FILE_URI,
    'output_data_path': OUTPUT_DATA_FILE_URI,
}


Vertex AI Prompt Optimizer允许你通过只优化指令、只优化演示或两者(optimization_mode)来优化提示,在设置了系统指令、要优化的提示模板(system_instruction, prompt_template)和要优化的模型(target_model)后,它还允许通过设置评估指标、用于改进提示的迭代次数等来调节优化过程。


获得样本和配置后,如下图所示将它们上传到 Google Cloud bucket。


from etils import epath
# upload configuration
with epath.Path(CONFIG_FILE_URI).open('w') as config_file:
      json.dump(args, config_file)
config_file.close()
# upload prompt opt dataset
prepared_prompt_df.to_json(INPUT_DATA_FILE_URI, orient="records", lines=True)


4. 运行优化作业

至此,一切准备就绪,可以使用 Vertex AI SDK for Python 运行第一个 Vertex AI Prompt 优化作业了。


WORKER_POOL_SPECS = [{
    'machine_spec': {'machine_spec': {
        'machine_type': 'n1-standard-4',
    },
    'replica_count': 1,
    'container_spec': {
        'image_uri' : APD_CONTAINER_URI,
        'args': ["--config=" + CONFIG_FILE_URI]
}}]
custom_job = aiplatform.CustomJob(
      display_name=PROMPT_OPTIMIZATION_JOB,
      worker_pool_specs=WORKER_POOL_SPECS,
  )
custom_job.run()


请注意 Vertex AI Prompt Optimizer 是如何使用 Vertex AI Prompt Optimizer 容器作为 Vertex AI Training Custom 作业运行的。事实上,这项服务同时利用了 Vertex AI Training 和 Vertex AI GenAI Evaluation,这证明了 Vertex AI 是如何提供平台来运行 GenAI 的,即使是像本例中这样直接来自研究的 GenAI。提交 Vertex AI Prompt 优化作业后,你可以从 Vertex AI Training 自定义作业视图对其进行监控,如图所示。


7


5. 获取优化提示并评估优化效果

优化作业成功运行后,你可以在输出云存储桶中找到优化后的指令或演示,或两者都是 json 文件。借助一些辅助函数,你可以在根据定义的指标获得最佳指令时获得以下输出,显示优化步骤。


8


优化后的演示结果也是如此。


最后,你可以使用优化输出生成新的回复。下面是使用优化的系统说明模板生成回复的示例。


9


如果你使用它们与 Vertex AI GenAI Evaluation 一起运行新一轮评估,你可能会得到类似下图的输出结果,即根据你选择的评估指标,优化后的提示信息优于使用先前提示模板的先前模型。


10


结论

提示工程是实施 LLM 应用程序过程中最重要且最具挑战性的步骤之一。为了帮助你制作提示模板,Vertex AI 提示优化器提供了提示优化服务,可帮助你在 Vertex AI 上为任何首选模型找到最佳提示(说明和演示)。


本文举例说明了如何使用 Vertex AI Prompt Optimizer 为使用 Vertex AI SDK for Python 的双子座模型增强提示模板。但这只是如何使用 Vertex AI 提示优化器的一个示例。事实上,你可以通过用户界面使用 Vertex AI 提示优化器。



文章来源:https://medium.com/google-cloud/enhance-your-prompts-with-vertex-ai-prompt-optimizer-a717753553fe
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
热门职位
Maluuba
20000~40000/月
Cisco
25000~30000/月 深圳市
PilotAILabs
30000~60000/年 深圳市
写评论取消
回复取消