Skip to content

指导原则

本篇介绍有利于写好 prompt 的原则及这些原则对应的技巧。

配置

代码推荐使用 jupyter notebook 运行。openai 使用的是 1.x 的版本;python-dotenv 使用的是 1.x 的版本。

python
import os
from openai import OpenAI
from dotenv import load_dotenv, find_dotenv

_ = load_dotenv(find_dotenv())

api_key = os.getenv("API_KEY")
base_url = os.getenv("BASE_URL")
default_model = os.getenv("MODEL") or "gpt-3.5-turbo"

client = OpenAI(
    api_key=api_key, base_url=base_url
)

def get_completion(prompt: str, model=default_model):
    response = client.chat.completions.create(
        model=model,
        messages=[{"role": "user", "content": prompt}],
        temperature=0,
        stream=False,
    )
    return response.choices[0].message.content

原则一:编写清晰与具体的指令

清晰具体的提示词,能为大模型提供更明确的指导和上下文,从而生成更详细、更相关的输出。以下一些技巧可以让我们写出清晰具体的 prompt:

技巧一:使用分隔符

使用分隔符可以在复杂指令和要处理的文本之间建立清晰、无歧义的边界,能在一定程度防止 Prompt 注入(Prompt Injection),并大幅提升AI理解的准确性。

所谓的 Prompt 注入是指用户输入的内容意外地“欺骗”或“劫持”了你的原始指令,导致AI执行了非预期的操作。这类似于 SQL 注入或代码注入。如果你的指令和用户输入是直接拼接在一起的,AI 可能无法区分哪些是你给的指令,哪些是待处理的内容。

第一个技巧是使用分隔符来明确表示输入内容的不同部分。常见的分隔符可以使用:

  • Triple quotes: """
  • Triple backticks: ```
  • Triple dashed: ---
  • Angle brackets: < >
  • XML tags: <tag> </tag>

下面给出一个使用分隔符的例子:

原则二:给模型留出思考的时间

给模型留出思考的时间,可以帮助它更好地理解问题并生成更准确的回答。以下是一些有助于实现这一原则的技巧:

技巧一:使用延迟

在发送请求之前,可以使用延迟来给模型留出思考的时间。例如,可以在请求之间添加短暂的等待时间,以便模型有时间处理上下文信息。

技巧二:分步提问

将复杂的问题分解为多个简单的问题,逐步引导模型思考。这不仅可以减轻模型的认知负担,还可以提高回答的准确性。