Skip to content

C - 情境提供:为模型补充关键信息

在 P.I.C.A. 框架中,如果说角色(P)是专家,指令(I)是任务,那么情境(C)就是完成任务所需的所有背景信息、地图和工具。缺乏情境,即使是最顶级的专家也无法在真空中工作。为 AI 提供充足、准确的情境,是消除歧义、设定边界、确保输出符合我们特定需求的决定性一步。

1. 为什么情境至关重要?

让我们来看一个指令清晰但缺乏情境的例子:

缺乏情境的指令: “你是一位 Python 专家,请写一个函数来验证用户输入的密码强度。”

这个指令本身是明确的,但它遗漏了最关键的信息:“密码强度”的标准是什么?AI 只能根据通用标准进行猜测,比如它可能会默认一个“8位以上,包含字母和数字”的规则。但这很可能不符合你所在项目的具体要求。

现在,让我们为它补充上关键的情境:

补充情境后的指令: “你是一位 Python 专家,请写一个函数来验证用户输入的密码强度。

密码强度规则如下:

  • 最小长度为 12 位。
  • 必须包含至少一个大写字母 (A-Z)。
  • 必须包含至少一个数字 (0-9)。
  • 必须包含至少一个特殊字符(例如 !@#$%^&*)。

函数应返回一个布尔值:如果密码符合所有规则,则返回 True,否则返回 False。”

通过提供一组明确的业务规则作为情境,我们完全消除了 AI 的猜测空间。它现在可以编写一个完全符合我们需求的、精确的验证函数。情境,就是连接通用智能与特定任务之间的桥梁。

2. 情境的类型与提供方法

情境可以分为多种类型,在提示词中,我们通常将它们结构化地提供给 AI。

2.1. 约束条件 (Constraints)

约束条件是为任务划定明确的边界和限制,告诉 AI 什么“不能做”或“必须遵守”。

  • 定义: 明确任务的限制和边界。
  • 示例:
    • 技术约束:

      “你是一位 Go 语言专家,请实现一个并发安全的计数器。

      约束条件:

      • 必须使用 sync/atomic 包来实现,禁止使用 sync.Mutex。”
    • 业务规则:

      “你是一位电商营销专家,请为我们的夏季促销活动写一封邮件。

      业务规则:

      • 所有正价商品一律 8 折。
      • VIP 会员在 8 折基础上再享 9 折优惠。
      • 促销活动时间仅限本周末。”

2.2. 外部知识 (External Knowledge)

外部知识是指 AI 的通用训练数据中可能不包含或已经过时的特定信息,例如内部文档、会议记录、API 规范、特定的法律条文等。手动将这些信息提供给 AI,是解决特定领域问题的关键。

  • 定义: 提供 AI 可能不知道或无法实时获取的特定信息。

  • 示例: 假设你需要 AI 帮你调用一个内部 API,你可以直接将 API 文档作为情境提供给它。

    “你是一位熟悉 OpenAPI 规范的开发者。根据以下 OpenAPI 3.0 规范,为获取用户信息的 /users/{id} 端点生成一个 Python 客户端调用函数。

    API 规范:

    yaml
    paths:
      /users/{id}:
        get:
          summary: Get user by user ID
          parameters:
            - name: id
              in: path
              required: true
              schema:
                type: string
          responses:
            '200':
              description: successful operation
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      id: 
                        type: string
                      name:
                        type: string
                      email:
                        type: string

这种提供外部知识的方式,是“检索增强生成 (Retrieval-Augmented Generation, RAG)”这一高级技术的简化手动版。RAG 的本质就是自动地检索相关信息并将其注入到提示词的情境中。

2.3. 示例数据 (Example Data)

当任务涉及数据格式的转换或理解时,提供具体的输入/输出示例数据是最高效的情境。

  • 定义: 提供输入/输出的格式示例,帮助 AI 理解数据结构。

  • 示例: 你需要将一个 JSON 对象转换为 XML 格式。

    “你是一个数据格式转换专家。请将我提供的 JSON 对象转换为 XML 格式。

    这是一个输入 JSON 的示例:

    json
    {
      "user": {
        "name": "John Doe",
        "email": "john.doe@example.com",
        "roles": [
          "admin",
          "editor"
        ]
      }
    }

    请将其转换为以下格式的 XML:

    xml
    <user>
      <name>John Doe</name>
      <email>john.doe@example.com</email>
      <roles>
        <role>admin</role>
        <role>editor</role>
      </roles>
    <user>

    现在,请转换以下 JSON 对象: ...”

3. 边界与失败案例

  • 情境不足: 这是最常见的失败原因。如果你让 AI 调用一个需要 API 密钥的接口,但没有在情境中提供密钥或获取密钥的方法,任务必然失败。
  • 情境过载/无关情境: 指令并非越长越好。在提示词中塞入大量与核心任务无关的信息,可能会分散 AI 的“注意力”,导致它忽略关键指令,甚至产生基于无关信息的“幻觉”。情境信息应该做到相关简洁

4. 总结与练习

提供情境的核心是换位思考:“如果我是执行这个任务的专家,我还需要知道些什么才能开始工作?”

情境检查清单

  • [ ] 业务规则: 是否有必须遵守的特定规则?(例如,折扣、权限、命名规范)
  • [ ] 技术约束: 是否有技术栈、库版本、代码风格等限制?
  • [ ] 外部知识: 是否有 AI 不知道的内部文档、API 规范或专业知识需要提供?
  • [ ] 数据格式: 是否需要提供输入或输出的数据结构示例?
  • [ ] 边界条件: 是否有需要特别处理的边缘情况?(例如,空值、错误处理)

练习

任务: “你是一位资深前端开发者,请优化我们公司官网的首页。”

这个提示虽然有角色和指令,但几乎完全没有情境。请根据本章所学,列出至少 5 个你认为完成此任务所必需的关键情境信息。

C - 情境提供:为模型补充关键信息 has loaded