跳转到内容
搜索文档

Prompt 编写

最后更新 查看 MarkdownAgent 设置

从文本生成模型获得良好结果的一部分是正确提问。LLM 通常使用特定的预定义模板进行训练,在执行推理任务时,应配合模型的 tokenizer 使用这些模板以获得更好结果。

有两种方式向 Workers AI 的文本生成模型提供 prompt:

Scoped 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

你可以使用 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
};

这篇文档对您有帮助吗?