Prompt Object
Ragas 中的 prompt 用于各种指标和合成数据生成任务。在这些任务中,Ragas 也提供一种方式,让用户修改或替换默认 prompt 为自定义 prompt。本指南概述 Ragas 中的 Prompt Object。
Prompt Object 的组成
在 Ragas 中,一个 prompt object 由以下关键组件构成:
- Instruction(指令):任何 prompt 的基本要素。指令是用自然语言写明的指示,清楚描述语言模型(LLM)应执行的任务。这通过 prompt object 中的
instruction变量指定。 - Few-Shot Examples(少样本示例):众所周知,在提供 few-shot 示例时,LLM 表现更好,因为它们帮助模型理解任务上下文并生成更准确的回复。这些示例通过 prompt object 中的
examples变量指定。每个示例由一个输入及其对应输出组成,LLM 用它们来学习任务。 - Input Model(输入模型):每个 prompt 都期望有输入以产生输出。在 Ragas 中,该输入的期望格式由
input_model变量定义。这是一个 Pydantic 模型,勾勒输入结构,从而能够验证和解析提供给 prompt 的数据。 - Output Model(输出模型):执行后,prompt 会生成输出。该输出的格式由 prompt object 中的
output_model变量指定。与输入模型一样,输出模型是定义输出结构的 Pydantic 模型,便于验证和解析 LLM 产生的数据。
示例
以下是一个 prompt object 示例,定义了文本生成任务的 prompt:
from ragas.prompt import PydanticPrompt
from pydantic import BaseModel, Field
class MyInput(BaseModel):
question: str = Field(description="The question to answer")
class MyOutput(BaseModel):
answer: str = Field(description="The answer to the question")
class MyPrompt(PydanticPrompt[MyInput,MyInput]):
instruction = "Answer the given question"
input_model = MyInput
output_model = MyOutput
examples = [
(
MyInput(question="Who's building the opensource standard for LLM app evals?"),
MyOutput(answer="Ragas")
)
]
创建有效 Prompt 的指南
在 Ragas 中创建 prompt 时,请考虑以下指南,以确保你的 prompt 有效并与任务需求对齐:
- 清晰简洁的指令:提供清晰简洁的指令,明确界定 LLM 应执行的任务。指令含糊可能导致回复不准确。
- 相关的 Few-Shot 示例:包含覆盖与任务相关的多种场景的 few-shot 示例(理想情况下 3-5 个)。这些示例帮助 LLM 理解上下文并生成准确回复。
- 简单的输入和输出模型:定义简单、直观的输入和输出模型,准确表示 LLM 期望的数据格式以及 LLM 生成的输出。如果模型复杂,尝试把任务拆成带有独立 prompt 的更小子任务。