Gemini 是 Google 的模型家族,可通过 Gemini 应用、Google AI Studio 以及 Google Cloud 上的 Gemini API 使用。提示词的基本原理完全适用。本指南依据 Google 发布的提示词设计指南,介绍 Gemini 特有的内容。
模型名称和限制会变化,因此这里的建议针对的是稳定的行为。当前的模型请查看 Google 的文档。
系统指令
Gemini API 接受与对话分开的系统指令。用它来设定角色、常驻规则和输出约定,把任务及其数据留在用户内容中。参阅系统提示词与角色提示词。
在 Gemini 应用中,已保存的指令和自定义 Gem 起同样的作用:Gem 是带有自己常驻指令的可复用助手。
包含少样本示例
Google 在这一点上的指导很明确:建议尽可能在提示词中包含少样本示例,并指出没有示例的提示词效果可能较差。实践中:
- 通常两到五个示例就够了。太多可能导致模型对它们过拟合。
- 让所有示例的格式保持一致,包括分隔符和间距。
- 展示要遵循的模式,而不是要避免的模式。
- 让内容多样化,使得只有预期的模式是共有的。
Classify the request as question, complaint, or praise.
Text: "How do I export my data?"
Category: question
Text: "The app crashed twice during checkout."
Category: complaint
Text: "{{text}}"
Category:
像上面这样,以预期回答的开头结束提示词,是 Gemini 能很好遵循的续写式提示。更多内容见少样本提示词。
使用一致的结构
Gemini 可以使用 XML 风格的标签或 Markdown 标题来区分指令、上下文和输入。选定一种风格,并在整个提示词中保持一致。混用风格会让边界变得不清晰。
前缀是另一种轻量结构:像 Text:、Category: 或 JSON: 这样的标签,标明每一部分是什么,以及接下来应该是什么。
长上下文:问题放最后
Gemini 模型接受非常大的输入,包括长文档、代码库以及数小时的音频或视频。使用这一能力时:
- 把问题或指令放在材料之后。 Google 对长上下文的指导是把查询放在末尾。
- 不要仅因为放得下就加入材料。 无关的上下文既花钱,又会稀释注意力。参阅 token 优化。
- 对跨请求重复使用的大内容,使用上下文缓存。
多模态提示词
Gemini 在一个提示词中接受文本、图像、音频、视频和 PDF 等文档。几种做法可以改善结果:
- 说明要看哪里。 “在第二张图表中”或“视频里 01:20 到 02:00 之间”。
- 对于单张图像,把图像放在询问它的文本之前。
- 当任务需要仔细解读图像时,先要求一段描述,再提出问题。这是一个两步链。
- 为看不清的内容给出规则。 “如果某个值无法辨认,请使用 null。”
- 说明输出格式,就像对文本那样。
The image is a photo of a utility bill. Extract the account number,
billing period, and amount due as JSON. Use null for any field you
cannot read with confidence.
结构化输出
对于代码要解析的输出,把响应类型设为 JSON,并通过 API 提供响应 schema。响应随后就被约束在该 schema 之内。
- 对取值固定的字段使用枚举;对纯分类任务,也提供枚举类型的响应。
- 在 schema 中描述字段,因为模型会读取它。
- 让 schema 保持适度简单;非常大或嵌套很深的 schema 可能被拒绝或降低质量。
- 在你的代码中验证结果。
参阅结构化输出提示词。
思考
当前的 Gemini 模型可以在响应前推理,并有一个控制推理量的设置。对这些模型,描述目标和约束,让模型自行规划。对简单、高流量的任务调低该设置以降低延迟和成本,对多步分析则调高。思考开启时,明确的“一步一步地思考”指令几乎没有额外作用。参阅思维链提示词。
用 Google 搜索做事实依据
Gemini API 可以让响应以 Google 搜索结果为依据,并返回引用。可用于关于近期事件或会变化的事实的问题。对于必须来自你自己数据的答案,请自己提供文档,并要求模型据此作答:参阅 RAG 提示词。
无论来源是什么,都要告诉模型,当所提供的上下文不含答案时该怎么做。
函数调用
工具通过名称、描述和参数 schema 来声明。与所有模型一样,模型用描述来决定何时调用。要具体说明用途、参数和返回值。参阅面向 AI 智能体的提示词。
采样设置
对于需要一致性的任务,如提取和分类,通常的建议是低温度。Google 对某些近期 Gemini 模型的指导是保持温度为默认值,因为调低可能导致循环或较弱的推理。更改之前,请先查看你所用模型的文档。
token 计数
Gemini 提供了 token 计数的 API 方法,多模态输入同样按 token 计数,图像、音频和视频各有自己的费率。没有离线分词器,所以 PromptFlowEngine 把它对 Gemini 的计数标注为近似。做预算时请使用 API 的计数。
在 Gemini 应用中使用提示词
- 为重复的任务创建一个 Gem,把它的指令只写一次。
- 附上文件或连接相关的 Google Workspace 数据源,而不是粘贴。
- 要求给出格式:表格、列表或字数上限。
- 话题变化时开启新的对话。
- 不要把凭据和客户数据放进聊天。
PromptFlowEngine Chrome 扩展可以在 Gemini 内部工作:它会分析并重构提示词输入框中的草稿,并在其含有密钥时发出警告。
使用 Gemini 的常见错误
| 错误 | 后果 | 修正 |
|---|---|---|
| 没有示例 | 格式和风格漂移 | 添加两到五个一致的示例 |
| 把问题放在长文档之前 | 对材料的利用较弱 | 把问题放在最后 |
| 混用标签与标题风格 | 边界模糊 | 选一种并坚持 |
| 含糊的多模态请求 | 笼统的描述 | 说明要看什么、返回什么 |
| 只用文字要求返回 JSON | 偶尔出现无效输出 | 使用响应 schema |
| 因为能放就填满窗口 | 成本更高,焦点被稀释 | 发送任务所需的内容 |
优化 Gemini 提示词
- 把常驻规则移到系统指令中。
- 说明任务,然后添加一致的示例。
- 把长材料放在前面,把问题放在最后。
- 当由代码读取输出时,用 schema 来定义它。
- 删除冗词和重复,然后重新测试。
PromptFlowEngine 提示词优化器会带验证地完成最后一步,而提示词分析器会在你运行任何东西之前标出缺失的输出格式。
可以与 ChatGPT 与 OpenAI 提示词指南和 Claude 提示词指南对照阅读。