1. 先搞清楚:AI和传统软件到底哪里不一样
聊AI工作原理之前,我特别想先澄清一个最常见的误解。很多人以为AI是某种更高级的软件,只是功能更强、响应更智能。但如果你真的上手写过代码,或者试着把AI接到业务里,就会发现一个根本性的差异:传统软件是“写规则”,AI是“学规律”。
传统程序本质上是人对问题的完整拆解。你写一个计算器,加减乘除的逻辑全部由你定义,每一行代码都代表一条明确指令,程序执行的每一步都在你的预期之内。它的边界非常清晰,输入不在规则范围内,程序就报错或者返回空值。
AI的思路完全不同。以现在最火的大语言模型为例,它做的事情本质上只有一件:根据前文预测下一个最合理的标记。我在第一次看到GPT的原始论文时,一度以为自己在看某种复杂的统计工具。确实如此,语言模型训练时就是不断做“完形填空”——给定前面几千个词,让模型预测下一个词是什么,预测对了就强化相关参数,错了就调整权重。如此反复几十亿次,模型内部就形成了一套对人类语言的高维概率分布。
这里有个特别反直觉的点:这套机制居然能涌现出推理、翻译、写代码、总结归纳这些能力。用生活化的类比来说,传统软件像一本说明书,每件事都有明确操作步骤;AI像一位读过海量书籍的学徒,没人为他总结规则,但他看过的案例足够多,多到能自己归纳出规律来应对新问题。
不过要说明白,这里的“规律”不是人可以直观理解的逻辑规则,而是分散在百亿甚至千亿个参数里面的数学关系。你问它一句“今天天气怎么样”,它并不是真的查了天气数据,而是基于它对语言的理解,以及对你这个提问场景的推断,生成一段最像“回答天气问题”的文字。这也是AI会一本正经胡说八道的原因。
理解这个区别之后,很多现象就都能解释了:为什么AI会编造信息?因为它本质上是在做文字概率生成,不是在做事实检索。为什么同一个提示词每次回答不一样?因为生成过程引入了随机采样。为什么AI的“聪明程度”可以靠堆数据和堆算力提升?因为它的能力本质上是参数的规模效应。
这些特性既是AI强大之处,也是在使用和开发AI应用时最容易踩坑的地方。带着这个底层认知往下走,后面所有的机制拆解都会顺畅很多。
1.1 训练与推理:AI生命周期里两条完全不同的路
AI系统的运行分为两个截然不同的阶段,很多人把这两个阶段混为一谈,导致在实际部署时闹出不少笑话。
训练阶段是AI的“学习期”。这个阶段需要海量数据、大规模算力集群、以周甚至月为单位的时间投入。以一个大语言模型为例,训练数据动辄几个TB,GPU集群几十上百张卡,训练成本从几百万到上亿不等。训练过程的本质是调整模型内部的参数权重,让模型在预测任务上的误差逐步缩小。
推理阶段是AI的“工作期”。模型参数已经固定,你输入一段文字,模型前向计算一次,输出结果。这一个阶段就是我们日常使用AI时体验到的部分,它不需要大规模算力,一张消费级显卡甚至CPU就能跑得动(速度慢一点而已)。
理解这两个阶段的差异,对实际落地特别重要。我见过不少团队,把训练阶段的思维套在推理阶段上:模型效果不好,就拼命清洗数据打算重新训练,其实问题可能只是推理时的参数设置不当。反过来,也有人把推理阶段的轻量级思维套在训练上,打算用一张显卡跑全量训练,那基本上是不可能的。
还有一个关键概念叫“微调”。微调是在已经训练好的模型基础上,用较小规模的数据集继续训练,让模型适配特定领域。它算是介于训练和推理之间的中间态,需要的算力远小于从头训练,但远大于单纯推理。很多企业做的“行业模型”其实就是这么来的。
1.2 为什么“预测下一个词”能搞定翻译、写代码、做图
这个问题我思考了很久,也反复拿不同模型做过测试。最根本的原因在于:语言本身就是高度结构化的信息载体。
当你要求AI翻译英译中时,它本质上做的事情是,在目标语言(中文)的空间里,生成一段在语义上与源语言(英文)最匹配的文本序列。由于训练时见过海量中英对照文本,它内部的参数已经编码了两种语言之间的对应关系。写代码也同理,代码本身就是一种严格的语言,AI见过大量“自然语言描述-代码实现”的配对,它能从这个分布中抽取最可能的实现方式。
甚至图像生成也是同一套逻辑。Stable Diffusion这类模型,本质上是在“文本语义向量”和“图像特征向量”之间建立映射关系,生成过程是多步去噪,从纯噪声图片一步一步逼近文本描述的目标图像。它预测的不是下一个词,而是每一步去噪后的图像特征,但底层的“条件生成”逻辑是一致的。
理解这一点很重要:AI的强大能力是建立在“海量数据压缩”之上的。训练阶段,模型把人类积累的文本、代码、图像中的统计规律压缩到参数空间里;推理阶段,它根据你的输入,解压出最相关的那部分规律来生成输出。这意味着AI的知识边界,就是它训练数据覆盖的边界,不是它“推理”能力的边界。
所以当有人问我“AI能不能替代某个专业岗位”时,我的回答一般是:凡是工作内容高度依赖历史经验、模式匹配、语言组织的部分,AI都能做得又快又好;凡是需要实时数据、真实世界交互、强逻辑推理的新场景,AI目前还多有不足。这背后的原因,正是它的工作机制决定的。
2. 大模型工作链条拆解:从原始数据到能用的模型
理解了AI和传统软件的本质区别后,接下来我想把大模型从无到有的完整链条拆开。这个过程看起来很工业流水线,每一步筛选和转化都直接决定了最终模型的能力上限。我把它概括成三大环节:数据清洗、Token化、以及预训练到对齐的完整流程。任何一个环节做得不好,后续都很难补救。
2.1 数据清洗:AI“口粮”的质量决定一切
训练数据对大模型来说就是粮食,粮食的质量直接决定模型的“身体素质”。Colloquially,我们知道“Garbage in, garbage out”,在大模型训练里这句话尤其残酷——你喂给模型低质量数据,它学到的就是低质量表达;你喂给模型重复数据,它就产生重复输出;你喂给模型包含偏见的文本,模型就会内化这种偏见。
所以正规实验室在训练前会有极其繁琐的数据清洗环节。我在参与数据处理项目时最常做的几件事包括:
- 去重:大规模爬取的数据里有大量重复内容,Noise部分可能占70%以上,必须要用MinHash这类算法做近似去重。
- 过滤:把低质量网页、乱码文本、纯广告内容筛掉。
- 隐私和安全处理:去除个人敏感信息,这个在任何合规要求下都不可跳过。
- 语言识别和分类:保证多语言语料的比例合理。
- 毒性内容过滤:避免模型学到不当表达。
这一环节往往耗时最长,看起来最没有技术含量,但却是决定模型能力下限的关键。我之前处理过一个小规模的领域模型,训练前只做了简单的清洗,结果跑出来的模型在专业性上很糟糕——它不是“不懂那个领域”,而是把大量噪声当成了规律在学。
2.2 Token化与上下文窗口:模型眼里没有“字”
你写一段中文让AI理解,但在模型眼里根本不存在“字”或“词”的概念。它看到的是Token——一个介于字符和词之间的文本单位。
Token化就是把文本切分成Token序列的过程。中文场景下,一个Token可能对应一个汉字,也可能对应一个常用词组;英文可能对应一个单词的一部分或整个单词。GPT系列的Token词表一般在5万到20万个Token之间,模型只能理解和生成它见过的Token;遇到词表之外的字符,它还是会通过BPE这类算法拆成更小片段,以“子词”方式处理。
这里面有个很容易踩的坑:上下文窗口。上下文窗口决定了模型一次能处理的Token数量上限。以ChatGPT早期版本为例,4K上下文大约对应3000个英文单词或2000个汉字左右。超出这个范围的内容,模型是“看不见”的。很多应用在对接长文档时效果不佳,未必是模型能力问题,而是文档长度超过了上下文窗口。
后来各家的模型都在往上扩展上下文——从4K到32K、到128K甚至更长。但要注意,上下文越长,注意力计算的开销呈平方级增长,推理延迟和显存占用都会显著上升。实际工程里,要综合衡量模型的上下文窗口、成本和精度来做取舍,不能一味追求长文本。
注意:上下文窗口不等于“记忆力”。模型对话中能看到的内容受窗口限制,但它并不是把自己看到的内容都“记住”了,只是在这个窗口内计算注意力。窗口内信息越多,注意力的分布越稀疏,模型对关键信息的提取精度反而可能下降。做长文本应用时,这种“大海捞针”问题是必须测试的。
2.3 预训练、监督微调、对齐:一场三层锻造
大模型能力构建分三个阶段,三个阶段解决三种不同问题。
第一阶段叫预训练,解决的是“语言能力”问题。模型在大规模公开文本上通过学习预测下一个Token来训练,逐步掌握语法、知识、推理的浅层模式。这一阶段成本最高,需要数千张显卡训练数月。输出的模型叫Base Model,能力很强,但不会“对话”——你问它问题,它不一定会好好回答。
第二阶段叫监督微调(SFT),解决的是“对话能力”问题。你用大量“用户提问-标准回答”的数据对模型进行有监督训练,让它学会以对话形式回应请求。这一阶段成本比预训练低一个数量级,但数据质量至关重要。我见过不少团队微调效果差,问题都出在SFT数据上——问题太单一、答案太长、多样性不足,导致模型微调后过拟合到特定的回答模式上。
第三阶段叫对齐,目标是让模型的行为符合人类的偏好和价值观。最主流的方法是RLHF(基于人类反馈的强化学习),简单说就是让模型输出多个候选答案,人类或AI对候选答案打分排序,再用强化学习算法优化模型,让模型倾向于输出人类更喜欢的答案。现在也有DPO这类更轻量的方法,不需要单独训练奖励模型,直接通过偏好数据优化策略。
这一整套三层锻造流程做完,一个能用的对话模型才算出炉。很多人对“训练大模型”有浪漫想象,以为只要数据够多、算力够猛就行,实际过程更接近一门精细的工程学科,每一层都有大量的实验和调优。后来做AI应用时,理解模型是哪一层锻造出来的,会帮助你预判它能做什么、不能做什么:Base Model适合做分类、嵌入这类任务;SFT后的模型适合做垂直领域任务;完全对齐的模型则更适合做通用对话助手。
3. AI Agent的运行机制:AI为什么会“自己干活”
到了2025年,最热的话题已经从“ChatGPT真厉害”变成了“AI Agent”。Agent翻译过来叫“智能体”,指的是一种能够自主完成多步骤任务的AI系统,跟单纯的“一问一答”有本质区别。
老实说,我在2023年刚接触Agent概念时,觉得这东西有点过度包装。但当我真正动手写了一个能自己拆解任务、调用工具、迭代修正的Agent之后,才意识到这不是噱头——它确实代表了一种新的软件形态。想要理解AI Agent的运作机制,需要拆开它最核心的四件事:感知、规划、行动、观察。
3.1 Agent的核心循环:感知、规划、行动、观察
一个Agent不是跑一次就结束的程序,它处在一个循环里。可以用一个很朴素的场景说明:假设你给Agent下达一个任务——“把这个CSV文件里的数据整理成图表,并生成分析报告。”
第一步,感知。Agent接收到你的自然语言指令,同时它还可以搭载外部输入,比如读取文件内容、获取当前环境信息。这一步的关键是,Agent需要把非结构化的请求转化为内部可执行的语义表示。 第二步,规划。这是Agent最关键的能力。它把大目标拆解成子任务:先读文件、再清洗数据、然后选择图表类型、最后生成报告。比较先进的Agent还能根据中间结果动态调整规划,而不只是执行一个固定的步骤清单。 第三步,行动。Agent调用工具或API来执行子任务,比如调用数据处理库、调用绘图函数、调用外部搜索接口。 第四步,观察。Agent观察行动的返回值,判断执行结果是否符合预期。如果符合,继续下一步;如果不符合,返回规划环节重新调整方案。
循环往复,直到任务完成。这个机制听起来不复杂,但真正实现的时候会发现,每一步都有各自的坑:规划时可能拆解出步骤,但步骤之间的依赖关系没处理好;行动时工具调用参数给错了;观察时模型面对报错信息会晕,不知道怎么调整方案。
我当时做第一个Agent的体会是,真正让它“跑起来”不难,难的是让它“跑得好”——多步之后的偏差会累积,一步失误,后面全乱。这也是后来大家不断在Agent里加入反思机制、记忆模块、更结构化规划的原因。
3.2 工具调用:大模型的“手”是怎么长出来的
为什么说Agent是新的软件形态?核心在于——工具调用功能全面普及之后,大模型不只是一个“会说话的脑子”,它变成了有手有脚的行动派。
工具调用的本质是:模型在生成回复时,不只输出普通文本,还会输出一个结构化的调用指令,指示系统去调用某个特定函数、传入特定参数。举个例子,你问Agent“帮我设置一个明早八点的闹钟”,模型可能会输出一个JSON结构:{"action": "set_alarm"、"params": {"time": "08:00 AM"}}。程序拿到这个JSON之后,调用手机系统的闹钟接口。
这里有个关键的技术细节:模型怎么知道有哪些工具可以调用、参数应该怎么传?这要依赖“函数描述”。开发者把每个可用工具的名字、功能描述、参数结构以特殊格式写在系统提示词里,模型在生成时就会根据任务需要选择匹配的函数。
实际使用中,工具调用的可靠性是Agent系统好不好的关键评判标准。我做过测试,让不同模型执行20次工具调用任务,有的模型每次都正确选择工具,有的模型经常把参数名写错、把工具名拼错、或者在没有必要的时候强行调用。这几乎是模型智商最直观的体现之一。
给Agent提供工具接口,是整个AI应用开发中最值得投入的方向。在我自己设计的系统里,工具的统一管理、错误处理、超时机制、权限控制,比模型本身的选择更重要。因为模型能力大家拉不开差距,但工程底座扎实与否,直接决定了Agent能不能稳定干活。后面在“AI应用开发的新范式”章节里我会详细展开这部分落地的经验。
3.3 记忆与多轮状态:Agent不掉线的关键
一个工具调用型的Agent,光有规划和行动还不够,它还需要记忆。这个记忆分两层:短期记忆和长期记忆。
短期记忆就是对话历史。Agent在每轮对话时需要把之前几轮的交互信息拼接到当前请求里,让模型知道“上下文”在哪里。这受限于上下文窗口大小,所以设计时通常会做摘要压缩:太老的对话内容,先交给模型总结成几句话,再拼接到当前上下文,而不是把全量历史都塞进去。
长期记忆是Agent进阶的关键难点。Agent在第一次会话中学到的用户偏好,下一次会话还能不能记住?跨会话的持久化知识怎么存?现在主流方案是“向量数据库+检索”:把重要的信息抽取成向量表示存进数据库,每轮对话前根据当前语义,检索出相关历史记忆并注入上下文。这个机制通常也被称为RAG(检索增强生成)的一种应用形式。
记忆设计得好不好,直接影响Agent的“人设稳定度”。一个没有记忆设计的Agent,你隔几天回来问它同样的问题,它可能给你完全不同的答案,就像得了失忆症。而加入了长期记忆之后,它能记住你说过的偏好、之前已经确定的需求、甚至你的工作习惯。这在实际产品体验上的差异是巨大的。
不过也要提醒一下,记忆会越积越多,检索漏掉的、检索命中的错误记忆都可能带来负面影响。所以长期记忆系统需要定期清理和验证,不能让Agent“记住”了错误信息还当成事实来用。这套工程做下来,你才会真正理解:Agent的智能程度,一半靠模型,一半靠系统设计。
4. 把AI装进自己的电脑和服务器:本地部署与量化实战
上面讲的理论再热闹,最终还是要落到一个问题上:我自己怎么把模型跑起来?这一节我完全从实操角度来讲,内容会比较详细,适合打算本地部署或者自建AI服务的读者。
4.1 本地部署到底解决什么问题
为什么要做本地部署?我总结了四个最常见的理由:
- 数据不出内网:涉及隐私或商业机密的场景,很多公司不允许把数据发送到第三方API,本地部署是唯一的合规路径。
- 长期成本可控:API调用是按量付费的,高频使用成本会滚雪球,而本地部署是一次性硬件投入加电费。
- 定制自由度高:本地模型可以随便微调、随便改参数,不存在服务商限制。
- 延迟和可用性:本地部署没有网络延迟,也不依赖第三方服务的稳定性,断网也能用。
尤其是最后两条,在做AI编程助手、企业内部知识库这类高频率应用时,API的延迟和限流问题会非常让人头疼。本地部署等于把这部分控制权拿回到自己手里。
4.2 显存估算与量化等级选择:一张图看清预算要多少
本地部署最核心的约束是显存,模型参数要以一定精度存在显存里,推理时才算得动。这里给一个简单公式:显存占用 ≈ 参数量 × 每个参数的字节数 × 1.2(额外开销系数)。
- FP16(半精度):每个参数占2字节,一个7B模型大概需要 7B × 2B ≈ 14GB,加上开销需要17GB左右。
- INT8(8位量化):每个参数占1字节,7B模型需要约8.4GB显存。
- INT4(4位量化):每个参数占0.5字节,7B模型大约需要4.2GB,加上开销需要5GB左右。
所以如果你只有一张8GB显存的显卡,跑7B模型的INT4量化版是可行的;16GB显存可以舒服地跑7B/14B的量化模型;24GB以上才有条件去碰33B甚至70B的量化模型。
说到量化,很多人有顾虑:量化之后效果是不是很差?我实测下来,INT8量化对模型效果的影响微乎其微,INT4会有一点可感知的“变笨”,尤其在复杂推理和数学任务上。但如果主要用途是聊天、摘要、文本生成,量化后的模型性价比非常高。
4.3 主流部署工具选型与运行效果
本地部署的工具选型,我直接给结论:
- Ollama:最推荐新手入门,一条命令拉模型、一条命令启动服务,自带OpenAI兼容API。底层支持llama.cpp和不同量化格式,开箱即用。
- vLLM:适合中大规模生产部署,对高并发推理做了大量优化,吞吐量比普通方案高不少,但配置相对复杂。
- llama.cpp:纯CPU也能跑模型,靠的是各种优化技巧。适合没有GPU的机器做实验,性能比GPU差不少。
- LM Studio:如果你有图形界面需求,或者完全不想碰命令行,这个工具很友好。
我实际测试过用Ollama在MacBook M1 16GB上跑7B模型,速度大概每秒15-20个Token,日常对话完全够用,但在写长代码和长文本场景下会有明显延迟。同样的模型放到一张RTX 4090上,每秒能跑到80-120个Token,体验完全不同。所以硬件预算允许的话,GPU投资绝对是值得的。
另外很多团队已经有OpenAI API的代码,想换成本地模型但不想动代码。解决办法是使用各种工具提供的OpenAI兼容接口——Ollama和vLLM都支持这个模式,只需要把API地址从api.openai.com换成localhost,模型名换成本地模型名,代码基本不用改。这个兼容设计确实帮了很多人省了大功夫。
部署之外再说一个容易踩的坑:模型文件动不动就是几个GB到几十GB,下载源在国外的话速度可能很慢。建议优先找国内可用的镜像源,或者用支持断点续传的下载工具,不然下到一半断了是真的崩溃。等模型文件放好了,部署本身其实很快。
5. 提示词工程:不是“玄学”,是可解释的约束机制
提示词工程这个词这几年已经被聊烂了,但真正理解它底层机制的人其实不多。很多人觉得提示词就是“把问题写清楚一点”,但深入之后你会发现,提示词工程的核心不是措辞,而是在把“模型推理时的约束条件”结构化地表达出来。
因为我做了很多AI应用,每天面对各式各样的提示词,所以我自信可以讲清楚:提示词为什么有效、怎么写出高质量的提示词、以及最常见的问题在哪里。
5.1 提示词为什么能影响模型输出
上一节讲到大模型是“预测下一个Token”的概率模型,但预测本身不是无条件的。模型的每一步生成,都是以你提供的文本为条件来计算的。你的提示词,就是给它设定的条件空间。
举个例子,你问模型“介绍Java”,它可能输出一篇泛泛的文章。但如果你换成“你是拥有20年经验的Java架构师,请针对刚入门的中级开发者,用300字以内介绍Java的核心特性,重点说明与C++的差异和适用场景”,它会聚焦到更具体的方向。这不是因为它“懂”你是架构师,而是因为它训练时见过大量“以专家身份回答专业问题”的语料,这些语料影响它的输出分布,让它更倾向于生成专业风格、有针对性内容的回答。
进一步说,提示词其实在引导模型激活哪部分内部知识。语言模型是巨大的网络,不同输入会激活不同路径。把提示词写得详尽,实际上是让模型从“通用回答模式”切换到“特定领域模式”。很多结构化提示词模板之所以有效,就是充分利用了这个机制。
这也是为什么“思维链提示”有效的原因。你要求模型一步步思考,它就会按照逐步推理的模式生成,而不是直接跳到结论,这显著减少了大模型的逻辑跳跃和幻觉。
5.2 高质量提示词的组成结构
我自己总结了提示词工程的四个核心要素:角色、任务、约束、示例。
角色设定解决的是“输出风格”问题。给模型一个明确的身份(资深律师、算法工程师、语文老师),它会自动切换到相应领域的表达方式。
任务描述解决的是“做什么”的问题。这一步必须明确、具体、避免歧义。“帮我写个方案”就是典型的模糊指令,换成“帮我写一份新产品发布会的宣传方案,包含时间节奏、预算范围、目标人群、传播渠道”,效果会好很多。
约束条件解决的是“不做什么”的问题。包括输出长度、格式要求、语气风格、禁止事项等。约束写得越明确,模型跑偏的可能性就越低。我看到过很多团队,模型输出风格不稳定,最后排查下来都是因为提示词里只有“做什么”没有“不做什么”。
示例解决的是“怎么做”的问题。给模型一两个输入输出的样例,它就能模仿出你想要的模式和格式,效果远好于你用语言描述要求。
这套结构适用于绝大多数提示词场景。哪怕是写一个简单的摘要总结提示词,我也会至少把任务和约束写明白。
5.3 提示词的失效场景:这些话说了等于没说
提示词并不是万能的。我在实践中碰到过不少提示词失效的情况,其中最典型的是这三类:
第一类是任务超出模型能力边界。模型只有14B参数,你提示词写得再华丽,它也没办法像GPT-4那样处理高难度逻辑推理。提示词是在模型能力之上的“引导”,并不能创造能力。如果模型本身不具备某项能力,给再好的提示词也是徒劳。
第二类是上下文长度不够。你要它总结一篇万字长文,但上下文窗口只有4K,它在生成过程中其实已经“忘了”前面大部分内容,再好的提示词也无济于事。这种场景需要靠RAG或摘要压缩来处理,而不是硬塞进提示词。
第三类是提示词本身相互矛盾。比如你要求它“务必简洁”,又要求它“详细分析”;你要求它“使用专业术语”,又要求它“让小学生都能理解”。模型会无所适从,输出的结果往往两头不讨好。写提示词的时候,必须审视一下,你给的约束之间是否存在矛盾。
注意:提示词工程其实是一项系统的工程,它涉及对模型的深度理解、业务场景的准确判断、输出结果的反复验证。很多团队在应用里把提示词写得很复杂,结果生成的格式不稳定。我更推荐的做法是:提示词保持简洁、把复杂逻辑放到代码层去实现,只让模型做它擅长的事情。代码能算的,就不要让模型猜;逻辑能判断的,就不要靠提示词约束。
6. AI应用开发的新范式:从“功能调用”到“能力编排”
现在谈论AI应用开发,很多人已经注意到,它与传统软件开发在方法论上存在根本性的差异。与其说是编程,不如说是在做“能力编排”。你不再是写细粒度的业务逻辑函数,而是在编排模型能力、检索能力、外部工具和数据流。这一节我要讲的是应用层面的实践经验,偏工程,对做产品、搞开发的人会有参考价值。
6.1 RAG:让模型先“查资料”再“回答”
RAG(Retrieval-Augmented Generation)是目前AI应用落地最常用、最可靠的模式,没有之一。它的核心思想是:模型在回答问题之前,先从外部知识库里检索出相关文档片段,把检索结果拼接到提示词里,再让模型基于这些参考资料来生成答案。
这个模式解决了大模型两个致命问题。第一是“知识陈旧”问题。模型的训练数据是有截止日期的,它不知道最新的业务文档、产品规格和政策变化。RAG相当于给它接了一根实时输入管道,你用最新的文档库作为数据源,它的答案也会跟着更新。第二是“幻觉”问题。让模型纯粹凭记忆回答问题时,它可能一本正经地编出不存在的事实。RAG模式下,模型输出必须有文档依据,即使依据不太充分,你也知道它从哪里得出结论,便于溯源。
RAG系统由四个核心模块组成:
- 文档加载和解析:把PDF、Word、网页、数据库记录等不同格式的内容统一转换成纯文本。
- 文本切分:超长文档要切成块。切分策略很讲究,我踩过不少坑,后面专门讲。
- 向量化和索引:把文本块转换成向量表示,存入向量数据库。
- 检索和生成:用户提问时,把问题也转成向量,在库里做相似度搜索,找到最相关的文本块,拼接到提示词里,再交给模型生成最终答案。
把RAG跑起来不难,但要把效果调好,细节极其多。我见过很多团队上线了RAG系统,结果回答质量不如直接用模型,问题基本都出在检索质量上——相关的资料没被检索到,或者被错误的信息干扰。
6.2 传统软件与AI应用的协作分工
做完几个AI应用之后,我最大的体会是:AI应用开发不是用AI替代传统软件,而是AI做决策、传统代码做执行。
我举一个实际场景:一个智能客服系统。用户问“我的订单什么时候发货”,传统做法是写规则:识别意图、查数据库、返回结果。但用户的话术千奇百怪,“发没发呀”“货到哪了”都是同一个意图。规则系统需要穷举各种说法,写起来累,效果还不好。
AI来了之后的范式是:先用自然语言理解模块识别用户意图,再用传统代码查询实际的订单物流数据,最后让AI根据真实数据组织成回复话术。整个链路中,涉及事实准确的部分(查单号、查物流状态)交给确定性代码,涉及语言表达的弹性部分交给AI。这样既利用了AI的理解能力,又避免了AI在事实上编数据。
这个范式可以套用到几乎所有AI应用场景:写各种调研报告、生成周报、做数据解读、生成营销文案。数据是真实系统返回的,AI只负责把它转化成流畅的表达。这是我认为当前最成熟、最稳妥的AI应用构建方式。
6.3 AI变成“开发伙伴”:编程工具与Agent开发实战感受
最后想聊聊AI编程,这也是我个人每天都在用的场景。现在的AI编程工具已经不是简单的“代码补全”了,它们变成了真正的结对编程伙伴。像GitHub Copilot、通义灵码、Cursor这类工具,能理解整个项目的上下文——不只是你正在编辑的这个文件,还包括项目里相关的其他文件、依赖关系、历史改动。
我实际使用下来的感受是,AI在写样板代码、单元测试、基建脚手架、类型定义这些重复性高的任务上是真的快,能把开发者从繁琐的体力劳动中解放出来。但在涉及核心业务逻辑、复杂架构决策的地方,AI的建议还是需要人来做判断和取舍——它确实能写得不错,但没办法为你的架构负责。
更有意思的是,AI编程已经进入了“Agent”阶段。不是你在编辑器里让它补全,而是你把一个完整任务描述给它,比如“帮我写一个从数据库读取用户信息并生成月度报告的脚本”,它可以自己完成拆解、搜索项目代码、编写文件、运行测试、自动修复错误这一整个流程。我对着一叠Agents软件工程测试结果看了很久,发现它们已经能在给定明确需求的条件下,完成从零搭建一个简单项目的全流程。
这种感觉就像是在带一个进步神速的实习生:你告诉它目标和约束,它能自己干完80%的活,你需要做的是Review和微调剩下的20%。从“写代码”到“管理AI写代码”,这个转变对开发者来说,既是解放,也是新能力的挑战。
我自己现在的日常是:把耗时、重复、模式化的编码工作尽可能交给AI,把精力放在系统设计、数据模型、工程质量这些真正需要思考和判断的地方。这个协作方式让我在个人项目上的产出速度提升了一倍不止。如果你也在做AI应用开发,我建议你不妨多花一点时间研究提示词和Agent开发框架——不只是把AI当问答工具,而是真正把它变成你系统里的一个组件,一个会思考、会调工具、能被工程化管理的组件。
今天分享的这些东西,从原理到工程,从理论到实战,跨越了AI的各个层面。我最大的体会是:AI的复杂性没有外界渲染的那么可怕,但它也绝不是“拿来即用”的黑盒。理解了系统底层的运行机制,再结合自己的业务场景去设计合理的提示词、选择合适的模型、做好检索和工具调用,你才有可能做出真正稳定可用的AI应用。