KDnuggets

What We Can Learn From Google Engineers’ Indispensible Prompts

8.5内容质量

TL;DR · AI 摘要

Google工程师使用对抗性提示(如让AI扮演怀疑的架构师)来生成更全面的方案,这种方法能显著提升需求分析和设计质量。

核心要点

  • 让AI扮演怀疑的架构师可生成更全面的方案
  • 构建规格前需先列出技术/数据模型/UX的5大考虑点
  • 10种提示模板可直接应用于任务跟踪器等实际项目

结构提纲

按章节快速跳转。

  1. 揭示Google工程师使用对抗性提示而非简单助手的核心方法论

  2. 通过让AI扮演怀疑的架构师生成更全面的方案

  3. 强制AI在编码前列出技术、数据模型和用户体验的5大考虑点

  4. 10种提示模板直接应用于任务跟踪器等实际项目

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • Google工程师的对抗性提示实践
    • 核心方法论
      • 对抗性角色扮演(怀疑的架构师)
    • 实施步骤
      • 构建规格前分析
      • 生成需求文档
    • 应用场景
      • 任务跟踪器API开发

金句 / Highlights

值得收藏与分享的关键句。

#AI提示工程#软件开发#Google工程师#对抗性AI#需求分析
打开原文

从Google工程师不可或缺的提示中可以学到什么 - KDnuggets

publ: 2026年8月27日

  • 博客热门文章
  • 主题 AI 职业建议 计算机视觉 数据工程 数据科学 语言模型 机器学习 MLOps NLP 编程 Python SQL
  • 数据集
  • 活动
  • 资源 快速参考指南 推荐 技术简报
  • 广告

订阅通讯

#header end

/ad_wrapper

从Google工程师不可或缺的提示中可以学到什么

嘿,Google工程师们:有没有哪个提示是你无论如何都拒绝使用的?为什么?

作者:

Shittu Olumide,技术内容专家,2026年8月27日发布于

语言模型

<div class="addthis_native_toolbox"></div>

对大多数人来说,提示历史就像一个杂乱的抽屉:一次性的请求解释错误信息,快速的"整理一下",或者使用过一次就被遗忘的模板生成器。2026年6月,Google Cloud的开发者关系团队发布了不同寻常的内容:他们向10位工程师和领导者提出一个具体问题:你们个人绝对离不开的提示是什么?为什么?返回的不是聪明措辞的列表,而是10位工程师不约而同地采用相同策略:将AI作为对抗性第二意见而非顺从的助手。

这种区别正是本文讨论的核心。下文列出从该文章中提炼出的10种技巧,每种技巧都附有解释、归因于分享该技巧的工程师,并重建为可实际使用的原始示例提示——不是逐字复制,而是重构以展示相同模式。每个示例都适用于一个正在进行的项目:一个小型任务跟踪REST API,因此这些技巧可以相互构建而非每个章节都重置为新的假设场景。

# 在任何代码存在之前构建规范

Google Cloud的高级外向产品经理Maja Bilić不从代码开始,而是让模型与她争论。她的方法为模型分配特定的怀疑论者角色(愤世嫉俗的首席架构师和技术项目经理),明确禁止其编写代码,并要求其列出想法的关键技术、用户体验和架构考量,然后再就每个考量提出针对性问题。完成这种来回讨论后,模型会将答案转化为实际的需求文档和实施计划,附带指令避免过度设计或过度简化。

这种思路值得深思:当要求模型"规划一个功能"时,它通常会同意你给出的第一个框架。但当要求模型以怀疑论者角色批判概念时,它必须先生成实际的反对意见,而这些反对意见往往才是真正的规划价值所在。

应用于任务跟踪器:

code
扮演一个正在审查拟议功能的怀疑论首席架构师,目前还不编写代码。我想向任务跟踪API添加重复任务,这些任务会按计划(每天、每周、自定义RRULE)重新生成。

不要编写任何代码。列出这个功能引发的前5个技术、数据模型和用户体验考量。对每个考量,询问在负责任地构建之前需要回答的具体问题。在我回答所有问题后,起草一份简短的规范和实施计划。不要为尚不存在的规模过度设计,也不要忽视时区或边缘情况处理而过度简化。

# 让测试变得不可协商

Andrew Brogdon 是一名高级开发者关系工程师,他使用一种将测试视为需要审核而非生成的提示方式。他不直接要求测试,而是让模型首先检查代码库,找出 UI 或逻辑中未被充分覆盖的部分,判断现有代码是否以可测试的方式编写(依赖项是否注入、领域是否松耦合),然后才制定并执行实际的测试计划——每一步都充满信心地推进,而不是急于输出结果。

这一方法的核心洞察简单却容易被忽视:直接要求测试只会得到最容易测试的部分的测试,而非真正需要覆盖的部分。先审核可测试性,可以发现“已测试”和“测试充分”之间的差距。

code
与我合作改进这个任务跟踪器 API 的测试覆盖率。
首先,检查代码库并识别哪些接口和业务逻辑未被充分测试。
然后评估当前代码是否确实以可测试的方式编写,外部调用是否注入或硬编码,
调度逻辑是否与 HTTP 层隔离。根据你的发现制定优先级测试计划,
告诉我哪些部分已覆盖,然后实现缺失的测试。
在确认你对实际缺失部分的评估之前,不要跳过直接编写测试。

# 执行双提示清理流程

Builder Relations 高级总监 Aja Hammerly 在将代码交给审核前,会故意在无开发上下文的新对话中运行两个独立且狭窄的提示。第一个提示要求模型运行现有测试,然后专门寻找缺失的边界情况和竞态条件。第二个提示单独运行,寻找完全不同的类别:未使用的代码、遗留的调试注释、与代码描述不匹配的注释、未解决的 TODO——这些小而尴尬的残留物在你专注于功能主路径时会逐渐堆积。

将这两个提示作为独立请求而非合并请求执行,其重要性远超表面看起来的样子。单一的宽泛“审核此内容”提示往往会将所有内容混为一个通用检查。将“结构性缺失”与“松散残留”分开处理,能获得更清晰的答案。

code
[新对话,无先前上下文]
运行该项目的测试套件并识别缺失的测试。
特别关注边界情况(空的重复规则、时区边界)和竞态条件(两个请求同时更新同一任务)。
编写缺失的测试。
code
[同一新对话]
检查此提交中的未使用代码、遗留调试注释、与代码实际行为不匹配的注释、未解决的 TODO 或任何不应发布的内容。
列出每个问题并附上文件和行号参考。

# 执行领域特定合规检查

Antigravity 开发者关系负责人 Rich Hyndman 分享了一个高度特定的 Android 权限审核提示:定位所有构建变体中的清单文件,提取声明的权限,与代码库中的实际使用情况进行交叉核对以发现冗余,验证运行时权限流程是否正确实现,并确认任何硬件特性声明是否一致。关键的是,该提示以明确指令结束:在计划获得批准前,不得进行任何修改。

该模式在 Android 之外也具有良好的扩展性。任何合规性或配置界面 —— 环境变量使用、API 权限授予、IAM 角色分配 —— 都能从相同的结构中受益:定位所有声明,与实际使用情况交叉核对,标记差距,提出修复方案,在触碰任何内容前等待批准。

应用于任务跟踪器(此次是其 API 认证范围):

code
对这个 API 的认证范围执行合规性检查。定位所有声明必要 OAuth 范围的位置(路由装饰器、中间件配置、API 网关规则),并建立主清单。将该清单与代码中每个范围的实际检查位置进行交叉核对,标记任何未被强制执行的声明范围,或任何未在任何地方声明的强制检查。输出包含文件路径和建议差异的 markdown 报告。在获得批准前不要进行任何修改。

# 像严苛的代码审查者一样给自己打分

AI 开发者关系负责人 Shir Meir Lador 直接指出了一个现实问题:要求模型进行代码审查时,它通常会默认给出礼貌的反馈 —— 赞扬命名方式,建议添加文档字符串,给予通过许可。她的解决方案是分配一个具体且严格的角色(一个对成功路径代码零容忍的首席工程师),然后强制要求对生产就绪性给出具体字母评分(A 到 F),并明确指示模型除非代码在效率、弹性、架构方面确实稳健,否则不得给出 A 分。该提示最后要求提供精确的修复方案,而不仅仅是评论。

这种方法特别有价值,因为它能有效揭示 "这段代码看起来没问题" 与 "这段代码确实没问题" 之间的差距。包含真实失败条件的评分标准迫使模型真正寻找可能导致故障的点,而不是默认给予鼓励。

code
扮演进行预生产审查的严格首席工程师。对脆弱的、只处理成功路径的代码零容忍。对我的未提交更改按生产就绪性进行 A 到 F 的评分,除非代码确实在效率、弹性、架构方面都足够稳健,否则不得给出 A 分。特别检查以下内容:冗余的数据库查询或缺失的缓存、调度器周围缺失的错误边界和静默故障点、重复逻辑与 HTTP 层之间的紧密耦合。对每个问题,详细说明其在生产环境中的具体失效方式,然后给出修复该问题并获得相应评分的 git diff。

# 要求模型为其自身方案进行辩护

文章作者 James O'Reilly(高级开发者关系工程师)使用了列表中最短的提示之一 —— 这可能是最重要的提示:在获得实施方案后,要求模型明确列出其建议在性能、成本、安全性和可维护性方面的权衡。目标不是生成更多代码,而是迫使模型对其自身推理进行压力测试,而不是让其最初的建议未经挑战地成立。

这直接针对了与 AI 在技术决策中合作时的一个特定失败模式:模型自信且格式良好的计划很容易让人感觉像是已确定的决策,而非多个选项中的一个。要求其列出所放弃的选项,能确保人类真正处于决策的核心位置。

code
解释你刚刚提出的重复任务实现方案的权衡。具体说明与至少一种替代方案相比,我们在性能、成本、安全性和长期可维护性方面放弃了哪些内容,这样我才能做出明智的决策,而不是直接采纳你的初步方案。

# 将外部研究转化为审查清单

Flutter & Dart 开发者关系负责人 Emma Twersky 建议先从外部视角切入:研究特定技术栈中 AI 生成代码的现实安全漏洞、架构错误和细微逻辑错误——参考开发者论坛、GitHub 问题跟踪和专业技术博客——然后将这些发现转化为针对代码库高风险部分的定向人工审查清单。

这个方法的说服力源于一项具有现实意义的 2022 年 GitHub Copilot 研究。该研究分析了 89 个安全相关场景下的 1,689 个生成程序,发现约 40% 包含真实漏洞。后续更大规模的研究也持续验证了这一发现。AI 生成的代码看起来没有问题,它能编译通过,能通过随意的检查,这正是为什么基于证据的外部检查清单比泛泛的"检查漏洞"请求更有价值。

code
研究当前 FastAPI 代码中常见的安全漏洞和细微逻辑错误,重点关注开发者论坛、GitHub 问题跟踪器和近期技术文章。根据你的发现,为该项目的高风险区域构建人工审查清单:调度/定时任务逻辑、Webhook 签名验证,以及更新请求中任务所有权的检查方式。

# 分阶段迭代,而非单次大提示

框架与语言开发者关系负责人 Fred Sauer 描述的不是一个单一提示,而是一个分阶段的工作流程。在早期的探索阶段,他故意保持较低的明确性——认为过早的严格规定会产生模型不会主动质疑的盲区。随后进行概念验证阶段确认想法的可行性,再逐步完善到自己满意能亲自撰写的程度,最后在全新对话中获取真正的新视角,进行最终代码审查,直到发现结果变得乏味——这意味着已无重大遗漏。

这个经验具有普适性:将提示的明确程度与工作阶段匹配——早期宽松、后期精确——通常比全程模糊或从第一个提示就过度指定能发现更多问题。

应用到任务跟踪器中,最终阶段的提示如下:

code
[Fresh conversation]
审查未提交的更改。识别任何未处理的边界情况。评估性能。总结发现。

在收到发现列表后:

code
修复发现 2、4 和 5。其他问题我决定暂时不处理,因为增加的复杂度不值得。

# 使用真实脚本自动化审查

code

Remigiusz Samborski 作为一位高级开发者关系工程师,将这种模式发挥到了极致:他的团队直接将自动化审查代理集成到 GitHub Actions 中,而不是依赖人工提醒进行审查。这样一来,每个拉取请求都会自动获得结构化的对抗性审查,完全避免了有人忘记发起审查的可能性。他实际部署的审查提示通过 Gemini CLI 作为 GitHub Action 运行,完整版本已公开在 GitHub 上,有兴趣查看真实实现的读者可以自行查阅。

以下是独立开发并经过端到端测试的相同理念实现——一个 Python 脚本,它会提取实际的 git diff 并通过第 5 节中提到的评分标准进行审查,旨在在每次 PR 的 CI 流程中运行:

""" auto_review.py 对当前 git diff 进行结构化、对抗性的代码审查。 设计用于在每次拉取请求的 CI 流程中运行,使审查过程 自动完成,而不是依赖某人记得发起请求。 """ import os import subprocess import sys import anthropic

REVIEW_PROMPT = """你是一位严格、资深的代码审查员,对脆弱的、只考虑正常流程的代码零容忍。请审查下方的 diff 并根据生产就绪程度进行 A 到 F 的评分。除非代码确实足够健壮,否则不要给出 A 分。对于发现的每个问题,请涵盖以下方面:

  1. 效率:冗余调用、未缓存的查询、浪费资源的查询
  2. 韧性:静默失败点、缺失的错误处理、对外部调用缺少回退机制
  3. 架构:耦合度过高、职责划分不清晰

对于每个问题,请具体说明其在生产环境中可能失败的方式,然后给出确切的修复方案。以 markdown 格式输出报告并在顶部显示评分等级。

DIFF: {diff} """

def get_diff() -> str: """从 git 中提取实际的暂存 diff,如果没有暂存内容则回退到未暂存内容。""" result = subprocess.run( ["git", "diff", "--staged"], capture_output=True, text=True, check=True ) diff = result.stdout if not diff.strip(): result = subprocess.run(["git", "diff"], capture_output=True, text=True, check=True) diff = result.stdout return diff

def review_diff(diff: str) -> str: """将 diff 发送给模型并返回 markdown 格式的审查报告。""" client = anthropic.Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"]) response = client.messages.create( model="claude-sonnet-4-6", max_tokens=2000, messages=[{"role": "user", "content": REVIEW_PROMPT.format(diff=diff)}], ) return "".join(block.text for block in response.content if block.type == "text")

def main(): diff = get_diff() if not diff.strip(): print("无内容需要审查。") sys.exit(0) report = review_diff(diff) with open("review_report.md", "w") as f: f.write(report) print(report)

if __name__ == "__main__": main()

code

该脚本的功能说明:

- `get_diff` 通过调用 git 命令获取暂存区的 diff 内容,如果没有暂存内容则回退到未暂存的修改。这样无论是在提交前本地运行还是在 CI 中针对 PR 分支运行,脚本都能正常工作。

- `review_diff` 将原始 diff 传递给第 5 节中使用的对抗性评分提示模板,发送给模型进行处理,然后从响应中提取纯文本内容。

- `main` 函数将各部分整合,将审查结果写入文件以便 CI 步骤将其作为 PR 评论发布,如果没有内容需要审查则完全不发起任何 API 调用并干净退出。

运行前提和使用方法:

- Python 3.9+

- pip install anthropic

- 在环境中设置 ANTHROPIC_API_KEY。

- 本地运行时,在使用 git add . 对部分更改进行暂存后,执行 python auto_review.py。在 CI 环境中,相同的脚本会作为 GitHub Actions 的一个步骤运行,每当发生 pull_request 事件时触发,通过 GitHub API 将输出结果以评论形式发布 —— 与 Samborski 的配置最终目标一致,但此处是完全从零构建而非复用其具体配置。

## # 用图思考,而非清单

开发者关系总监 Karl Weinmeister 用最不常规的技术收尾了原始清单:他没有要求生成通用的测试点清单(这通常会产出与实际项目无关的标准化清单),而是让模型将应用程序的工作流程表示为有向无环图(节点和边),并从结构层面推理潜在故障可能传播的位置。他特别要求模型评估“接缝”——这一术语直接借用自 Michael Feathers 关于遗留代码的工作,指代组件之间通常测试不足的边界,因为没有单个组件拥有这些边界。输出结果是一个优先级排序的 Markdown 表格,而非简单的列表。

将应用程序的工作流程建模为有向无环图:请求 进入,认证中间件,任务归属检查,重复扩展 逻辑,数据库写入,Webhook 分发。识别单个组件的 最高影响测试,并分别针对组件间的 接缝进行识别,这些边界是两个组件交接的地方,且 没有一方明确负责验证跨越该边界的输入。以优先级排序的 Markdown 表格展示你的发现:接缝、风险和 建议的测试。

code

## # 总结

将这十个方法并列对比,连接它们的模式就不再显得隐晦。这些提示的目的都不是节省输入,也不是为了更快地从模型中获取更多代码。每一个方法都旨在降低人类假设的风险——假设幸福路径就足够了,假设初始计划就是正确的,假设快速浏览代码差异就等同于代码审查。如果你只从本文中采纳一个内容,让它成为第 5 节的评分标准,因为它能最快让你感受到一个礼貌的模型与真正针对你盲点工作的模型之间的实际差异。一旦这种差异变得清晰,其余这些技术作为同一体系的不同变体,就会变得更有意义。

Shittu Olumide 是一名软件工程师兼技术作家,热衷于利用前沿技术创作引人入胜的叙事,注重细节并擅长简化复杂概念。你也可以在 Twitter 上找到 Shittu。

### 更多相关内容

- Google Stax:根据你自己的标准测试模型和提示

- 6 个提升工作效率的 ChatGPT 提示

- AI 工程师必须掌握的 5 个 Python 概念

- 忙碌数据工程师的 5 个实用 Python 脚本

- AI 工程师必备的 10 个代理 AI 面试问题

- 长期高效:面向未来数据工程师的自动化工作流技巧

<hr class="grey-line"><br> <div><h3>我们推荐的 5 门免费课程</h3><br> </div>

Mailchimp for WordPress v4.14.0 - https://wordpress.org/plugins/mailchimp-for-wp/

/ Mailchimp for WordPress 插件

你可以从此处开始编辑。

如果评论已关闭。

<= 上一篇文章

下一篇文章 =>

#content end

<script type="text/javascript">kda_sid_write(kda_sid_n);</script>

### 最新文章

- 高效SLMs的本地AI堆栈 量化和剪枝方法,让你的LLM更轻量 从谷歌工程师的不可或缺提示中能学到什么 理解AI对就业市场的影响 从AI编码代理中获得更好结果的10条规则 定义企业AI下一阶段的数据与AI领导力问题

## 热门文章

- 高效SLMs的本地AI堆栈

- 如何利用本地小型语言模型提升你的项目

- 如何在AI领域构建职业生涯:3条明确路径

- 从AI编码代理中获得更好结果的10条规则

- AI代理在产业转型中的5个现实应用场景

- 构建端到端的数据科学作品集项目

- 2026年AI编码代理的十大开源基准测试

- 超越模板的Python数据类

- 仅用3条命令即可将Qwen3.8-27B作为本地AI编码代理运行

- 从谷歌工程师的不可或缺提示中能学到什么

#content_wrapper end

© 2026

Guiding Tech Media

|

关于

联系

广告合作

隐私政策

服务条款

2026年8月27日由Olumide Shittu发布

blank

不,谢谢!

/.main_wrapper

<script defer type="text/javascript" src="https://s7.addthis.com/js/300/addthis_widget.js#pubid=gpsaddthis"></script>

noptimize

/noptimize