许多工程师在日常工作中对使用AI感到不安,并提出了一些重要且合理的问题:这些模型究竟源自何处?是否存在数据泄露的风险?以及最令人困扰的问题——使用AI是否会最终取代自己的工作?对于这些担忧,团队内部对AI充满热情的技术人员深有体会。
因此,本文旨在汇集一份简洁实用的手册,目的在于揭穿一些常见的迷思,并为工程师们提供一套有效利用AI的实用指南。 衡量AI成功的标准并非其能创造出多少炫酷的工具,那并非关键。真正的核心在于:AI是否能够切实提升生产力?它如何有效地帮助人类更智能、甚至更轻松地工作?鉴于工程师群体是这项技术最重要的使用者之一,澄清这些疑问显得尤为必要。
那么……什么是生成式AI,什么是大型语言模型(LLM)?
当人们谈论诸如ChatGPT、Claude或Amazon Q这类工具时,他们实际上指的是语言模型(Language Model)。这是驱动大部分生成式AI的核心技术。语言模型经过训练,能够理解书面语言,并通过生成新的文本来作出响应。当这些模型的规模扩展到包含数十亿甚至数万亿个参数时,它们就被称为大型语言模型(Large Language Models,简称LLMs)。LLM是生成式AI的一种,专门设计用于处理文本和代码。
让我们从基础概念开始。
并非仅是词语:深入理解“Token”
在语言模型中,最小的理解单位并非总是完整的词语,而是一个Token。可以把Token想象成乐高积木:它们是更小的单元,通过组合可以构建出更大的结构。一个Token可能是一个完整的词(例如“castle”),也可能是词的一部分(例如“cast”),甚至仅仅是一个字母或字符。例如:
句子“I love programming”可能会被拆分成如下Token:[I] [love] [pro] [gramming]。
这种处理过程被称为分词(Tokenization)。模型正是通过这种方式学习构建其词汇表。这些词汇表的规模可能非常庞大:例如,GPT-4拥有约10万个Token,而Claude的词汇表甚至更大。
语言模型如何学习(不同方法)
语言模型主要有两种学习方法:
- 掩码模型(Masked Models):这类模型通过“隐藏”句子中的某个词语,并尝试预测该空白处应填入什么词来学习。
“托尼·斯塔克(Tony Stark)也被称为___侠。” 模型会学习填补这个空白。它会识别出“托尼·斯塔克”提供了最强的线索,而“is”和“also”等词的价值相对较低。
- 自回归模型(Autoregressive Models):这类模型则通过逐个词语地预测下一个词来学习。
从“艾莎走进城堡……”开始,模型会继续生成:“……身后的门砰地一声关上了。”
通过这种方式,模型能够逐字逐句地构建故事。
这两种方法都赋予了模型一项“超能力”:生成文本的能力。一个能够生成开放式输出的模型被称为生成式模型,由此得名生成式AI。
什么是“开放式输出”?
回到我们之前的漫威例子:
“托尼·斯塔克也被称为___侠。”
大多数人(以及大多数模型)都会给出“钢铁(Iron)”这个答案。但模型也有可能生成“强大(Powerful)”、“有趣(Funny)”甚至是“家庭(Family)”等词。
这就是开放式输出的含义:模型并非被限制于只有一个“正确”答案。它会根据概率进行预测。有时它能精准命中,而另一些时候则不然。这正是AI既令人感到神奇又难以预测的原因。
质的飞跃:从语言模型(LM)到大型语言模型(LLM)
模型的规模化扩展是语言模型演变为大型语言模型的关键。这好比为了在GRE考试中取得高分而研读整本词典。通过更多的数据和更多的参数,模型能够捕捉到更为细微的模式。参数可以类比为调音台上的旋钮——旋钮越多,音乐的复杂性就越高。例如,GPT-4据估计拥有1.76万亿个参数。
显然,这需要海量的数据。然而,人工标注数据并非可持续的解决方案。真正改变全局的是**自监督学习(Self-supervised Learning)**。模型不再依赖人类标注每一个句子,而是通过遮盖词语并自行预测它们来学习。这就像以超乎人类的速度完成填空题。
这也正是LLM在处理代码方面表现出色的原因:**编程语言是训练模型的理想领域。** 代码具有高度的形式化、严格的语法结构,并且避免了自然语言中可能出现的复杂歧义。Python中的同一操作每次都会以相同的方式运行,这与一句英文句子可能因语气、文化或语境而承载多种不同含义的情况截然不同。正是这种精确性使得模型无需万亿行的代码也能“理解”其精髓。即使使用较小规模的代码数据集,其模式也足够一致,使得模型能够良好地泛化,并产生令人惊讶的强大结果。
不仅仅是LLM
在深入探讨之前,需要指出的是,**LLM仅仅是生成式AI的一种类型。** 尽管它碰巧是当今最常见和应用最广泛的生成式AI,但这并非生成式AI的全貌。
当前的模型通常是**大型多模态模型(LMMs,Large Multimodal Models)**。它们不仅能处理文本,还能理解并生成图像、音频甚至视频。这就是为什么现在可以看到模型能够一次性读取一段代码,描述一幅图像,然后将其翻译成通俗易懂的英文。
在过去的几年里,另一个术语也进入了人们的讨论范畴:**基础模型(Foundation Models)**。它们是在通用数据上训练的非常大型的模型,具有广泛的应用范围。可以将其视为“底层建筑”或“冰淇淋世界里的香草口味”。一旦完成训练,它们可以随后进行微调或扩展,以应用于更专业的任务,例如创建软件文档、驱动公司聊天机器人或审查合同。“基础”这个词被用来描述它们,以区别于在其之上开发的更小、更专业的模型。
常见迷思(如果您不关心定义和细节)
迷思1:“AI像我们一样理解事物。”
事实: AI并非以人类的方式进行“理解”,它只是(基于概率)进行预测。根据之前的文本(即上下文),它会进行有根据的猜测,判断接下来应该是什么。优秀的预测能够模拟出理解,但其本质始终是概率运算。尽管如此,一些实验仍然引人入胜。一个博客展示了不同模型似乎能展现出“个性”。OpenAI的O3在外交游戏中被证明是欺骗大师,而Claude Opus 4则更倾向于让各方和睦相处。
迷思2:“AI只是复制训练数据。”
事实: AI并非像剪贴板一样存储训练实例。它将模式存储在权重(模型中的数值调节器)中,并在训练过程中进行调整。当向它提出查询时,模型不会进行复制粘贴,而是创建新的序列。话虽如此,数据隐私仍然是一个问题。如果私人数据被用于训练,它仍然可能以间接方式泄露,或者在强化学习过程中被人为读取。
迷思3:“提示词是‘作弊’。”
事实: 提示词并非“作弊”手段,它们是方向盘。提示词用于设置上下文,使模型知道哪些Token需要给予更高的权重。如果还记得我们之前的例子:
“托尼·斯塔克也被称为___侠。”
在这里,“托尼·斯塔克”承载着最大的权重,而大写的“Man”则帮助模型聚焦于“钢铁(Iron)”。填充词(“is also known as”)的权重相对较低。一个有效的提示词作用相同:它突出显示重要的线索,以便模型能够得出正确的推断。这并非作弊,而是一种引导。
迷思4:“AI总是给出相同的答案。”
事实: 并非如此。生成式AI依赖于概率,而非预先编写好的脚本。这意味着相同的问题可能会因随机性、温度设置,甚至提示词的微小差异而产生不同的答案。有时这种特性非常棒(例如用于头脑风暴),但有时也会令人困惑和沮丧(例如答案不一致)。
迷思5:“模型越大越好。”
事实: 规模确实有帮助,但并非决定一切。也就是说,大并不总是更好。像GPT-4这样庞大的模型可能表现惊人,但一个更小、更专业的模型在特定任务上可能会超越它。敏捷性和专业化有时能够胜过纯粹的力量。
迷思6:“AI会取代工程师。”
事实: 生成式AI是一个出色的编程助手,这得益于其对系统化、规则导向的编程语言的适应性。然而,这并不能使其胜任首席工程师的角色。相反,它更像是一个高效的实习生,擅长创建草稿、样板代码甚至精妙的代码片段,但仍需要人工的审查和监督。
简而言之,生成式AI不会取代工程师,但它将改变工程实践的本质。 所需的技能组合将有所不同。工程师们将不再把大部分时间花在逐行编写代码上,而是能够更多地专注于系统架构、设计和项目监督。生成式AI可以编写函数,但无法权衡利弊、理解业务目标或大规模管理复杂性。这些正是需要人类掌舵之处。
迷思7:“AI编造信息时显得过于愚蠢。”
事实: 导致AI看起来非常“愚蠢”的现象通常是**幻觉(Hallucination)**。还记得前面提到模型会根据概率给出开放式响应吗?这就是幻觉的根源。如果模型缺乏上下文,或者所询问的事实非常罕见,它仍然需要填补空白并尝试给出看似合理的答案。因此,它会预期一些听起来不错但实际上可能错误的信息。
另一个常见原因是**上下文窗口(Context Window)**。模型一次只能“看到”一定数量的Token,就像一个短期记忆缓冲区。如果提问依赖于该窗口之外的信息,这些信息就会简单地丢失。模型随后会进行猜测并填补空白,这可能导致答案完全偏离事实。
幻觉并不意味着AI发生故障,它们是系统被设计为自由生成而非严格遵循脚本的固有结果。
实用操作指南:软件工程师如何与AI协作
将AI视为一名(人类)团队成员。用通俗的语言告诉它需要什么。无需顾虑语法,也无需刻意幽默。保持直接并持续对话。在此过程中,可以尽可能多地提出“愚蠢”的问题。其工作循环很简单:提问、审查(结果)、优化(请求)、重复。
1) 优先提供上下文
告知模型目标受众、任务目标以及重要的约束条件。
Mini prompt Example:
您正在协助支付团队。目标:为charge端点增加幂等性。
约束:Python 3.11, FastAPI, Postgres, 现有重试逻辑。
输出:先解释,然后用 python围栏提供代码。
2) 明确任务
清晰定义步骤或验收标准,以便明确“完成”的界限。
Mini prompt Example:
列出重构的步骤。包括预检查、代码变更、测试和最终发布检查。
每个步骤用 [负责人], [预估时间], [风险] 标记。
3) 限制输出格式
请求特定的输出格式,以避免得到一堆文本。
Mini prompt Example:
# 示例 1
返回JSON格式,包含键:理由、风险、代码、测试。无需额外说明。
# 示例 2
在sql … 围栏内生成SQL查询。
4) 检查并迭代
将初稿视为草图。指出错误之处。请求修正。再次循环。
5) 维护实时日志文件
请求模型将每个重要步骤和变更保存到文件中,以便后续重用上下文。
Mini prompt Example:
开始或更新名为 AI_LOG.md 的文件。
追加带有日期的时间条目,包含以下部分:上下文、决策、命令、代码片段、待解决问题。
只添加新内容。保留旧条目。
6) 在上下文窗口内工作
模型只能“看到”最近文本的一小段片段。当对话线程过长时,请压缩聊天历史。
A. 使用提示词。当聊天内容过重时,可以使用以下压缩提示词并将其粘贴到对话中:
将之前所有消息总结为一份可重复使用的精简摘要。
格式:
- 达成共识的事实
- 约束和约定
- 决策及原因
- 待解决问题
- 下一步行动
字数限制在300个Token以内。精确保留文件名、API和版本。
B. 当工具可用时使用。一些采用AI的服务也内置了辅助工具。例如,Amazon Q提供了一个/compact命令,可以将聊天历史浓缩成更短的版本。它甚至会在对话接近限制时发出警告,并建议进行压缩。(相关AWS文档)
C. 重新注入上下文。压缩后,将精简摘要作为新的上下文重新粘贴回对话中。然后提出下一个请求。
总结
生成式AI并非为了取代工程师,但它正在彻底改变工程的本质。如果运用得当,它与其说是竞争者,不如说是一个助手,能够加速处理繁琐的工作,从而让工程师们能够将精力集中于设计、系统和那些艰难的决策。未来能够蓬勃发展的工程师,将是那些能够引导AI、对其进行反思并使其成为团队合作者的人。因为归根结底,即使是钢铁侠也需要亲自驾驶战甲。
