从文本生成模型获得良好结果的一部分是正确提问。LLM 通常使用特定的预定义模板进行训练,在执行推理任务时,应配合模型的 tokenizer 使用这些模板以获得更好结果。
有两种方式向 Workers AI 的文本生成模型提供 prompt:
这是推荐的方法。使用 scoped prompt 时,Workers AI 承担了解不同模型 chat template 并在构建 prompt 和创建文本生成任务时为开发者提供统一接口的负担。
Scoped prompt 是消息列表。每条消息定义两个键:role 和 content。
通常,role 可以是以下三个选项之一:
- system - System 消息定义 AI 的个性。你可以用它们设置规则以及期望 AI 如何行为。
- user - User 消息是你通过提供问题或对话实际查询 AI 的地方。
- assistant - Assistant 消息向 AI 提示期望的输出格式。并非所有模型都支持此 role。
OpenAI 对如何将 role 与 GPT 模型配合使用有很好的说明 ↗。尽管 chat template 很灵活,其他文本生成模型往往遵循相同约定。
以下是使用 system 和 user role 的 scoped prompt 输入示例:
{
messages: [
{ role: "system", content: "you are a very funny comedian and you like emojis" },
{ role: "user", content: "tell me a joke about cloudflare" },
],
};以下是 user 和 assistant 之间多次交互的更好 chat session 示例。
{
messages: [
{ role: "system", content: "you are a professional computer science assistant" },
{ role: "user", content: "what is WASM?" },
{ role: "assistant", content: "WASM (WebAssembly) is a binary instruction format that is designed to be a platform-agnostic" },
{ role: "user", content: "does Python compile to WASM?" },
{ role: "assistant", content: "No, Python does not directly compile to WebAssembly" },
{ role: "user", content: "what about Rust?" },
],
};请注意,不同 LLM 针对不同用例使用不同模板进行训练。虽然 Workers AI 通过统一 API 尽力向开发者抽象各 LLM template 的具体细节,你应始终参考模型文档了解详情。例如,Codellama 等 instruct 模型经过微调以响应用户提供的 instruction,而 chat 模型期望对话片段作为输入。
你可以使用 unscoped prompt 向模型发送单个问题,而无需担心提供任何上下文。Workers AI 会在内部自动将你的 prompt 输入转换为合理的默认 scoped prompt,以便获得最佳预测。
{
prompt: "tell me a joke about cloudflare";
}你也可以使用 unscoped prompt 手动构建模型 chat template。在这种情况下,可以使用 raw 参数。以下是 Mistral ↗ chat template prompt 的输入示例:
{
prompt: "<s>[INST]comedian[/INST]</s>
[INST]tell me a joke about cloudflare[/INST]",
raw: true
};