Skip to content

如何有效提问 (Prompt Engineering)

Prompt Engineering 是与 AI 高效沟通的艺术。一个好的问题(Prompt)能让 AI 更精准地理解你的意图,从而给出高质量、高相关性的回答。对于开发者来说,掌握提问技巧是最大化 AI 助手价值的关键。

以下是一些核心原则和实用技巧:

1. 明确你的 角色 (Role)任务 (Task)

告诉 AI 它应该扮演什么角色,以及需要完成什么任务。这能让它迅速进入状态,并以专业的口吻和格式输出。

反例:

"写一个检查邮箱格式的 js 函数"

正例:

扮演一个资深的 JavaScript 工程师。 任务: 编写一个高性能的 JavaScript 函数,用于验证电子邮件地址格式的有效性。请包含完整的 JSDoc 注释。

2. 提供充足的 上下文 (Context)

AI 不知道你正在做什么。你需要提供相关的代码、错误信息、目标框架、编程语言等一切有助于它理解问题背景的信息。

反例:

"为什么我的代码不工作?"

print(my_func(x))

正例:

我正在使用 Python 3.9 和 FastAPI 框架。下面是我的部分代码,它试图从请求中获取用户数据,但总是报错 KeyError: 'user_id'

相关代码:

from fastapi import FastAPI, Request

app = FastAPI()

@app.post("/users")
async def create_user(request: Request):
    data = await request.json()
    user_id = data['user_id'] # 这里报错
    # ...
    return {"status": "success", "user_id": user_id}

报错信息:

KeyError: 'user_id'
我的问题: 为什么会发生 KeyError?我应该如何安全地访问请求中的数据?

3. 定义清晰的 输出格式 (Output Format)

明确告诉 AI 你希望它以什么格式返回结果。这能省去大量后续的手动调整。

示例:

  • "请以 JSON 格式返回结果。"
  • "请将结果组织成一个 Markdown 表格,包含三列:特性、优点和缺点。"
  • "请为这个函数生成单元测试,使用 Python 的 unittest 框架。"
  • "请用中文解释这段代码。"

4. 使用 分隔符 (Delimiters)

当你的 Prompt 中包含代码、用户输入、示例文本等不同部分时,使用分隔符(如 ```, """, <>, ---)可以帮助 AI 清晰地界定不同内容的边界。

示例:

请分析以下代码,并找出其中的潜在 Bug。

代码如下:

# ... a block of python code ...

5. 采用 "Few-shot""One-shot" 学习

给 AI 一个或几个完整的示例,让它模仿你的例子来完成任务。这在需要特定风格或复杂格式时尤其有效。

示例:

我需要你将 Python 字典转换为 YAML 格式。

示例 1:

  • 输入 (Python): {"name": "John", "age": 30}
  • 输出 (YAML):
    name: John
    age: 30
    

现在,请转换以下 Python 字典:

{"project": "AI Handbook", "status": "in-progress", "contributors": ["Alice", "Bob"]}

6. 迭代与追问 (Iterate and Refine)

很少有人能一次性写出完美的 Prompt。把与 AI 的对话看作一个持续的过程。

  • 如果第一次结果不理想,不要放弃。
  • 补充更多信息、修正你的要求,或者指出它回答中的错误。
  • 常用追问句式:
    • "这个方案很好,但请考虑一下性能问题。"
    • "能用一个更简单的方式解释吗?"
    • "请重写你的代码,但这次使用 async/await。"

7. 分解任务,保持会话“新鲜”

AI 模型在一次长对话中能够记住的上下文是有限的。在一个会话中连续执行大量或不相关的任务,容易导致“上下文漂移”或“AI 幻觉”,即 AI 开始忘记之前的指令,或者混淆不同的任务,从而产生错误或无厘头的回答。

最佳实践:

  • 任务分解: 在开始前,将一个复杂的大任务(例如,“构建一个完整的登录系统”)分解成多个小任务(“1. 设计数据库表结构”、“2. 编写后端登录 API”、“3. 创建前端登录页面”)。
  • 一事一议: 每次只让 AI 专注于一个清晰、独立的小任务。
  • 重开会话: 当你完成一个小任务,并准备开始下一个不同类型的任务时,果断地开启一个新的聊天会话。这能确保 AI 在一个“干净”的上下文中开始,极大地降低出错概率。

掌握这些技巧,你将能更高效地驾驭 AI,让它成为你开发工作流中不可或缺的伙伴。