ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

LLM应用工程师实战路线:从Prompt到RAG再到Agent的工程化指南

LLM应用工程师实战路线:从Prompt到RAG再到Agent的工程化指南

做这行快三年,从最早自己折腾文案改写脚本,到后来给好几条业务线搭大模型应用底座,我最大的感受是:LLM Application Engineer 这个岗位,讨论热度很高,门槛却被严重低估——市面上很多人属于“会用API在 Notebook 里跑通 Demo”,而离“能独立交付一个稳定系统”还有相当距离。这篇指南想把从入门到实战的完整路线讲透,不灌鸡汤,只讲那些我踩过坑之后才真正想明白的东西。

这篇文章适合正在转型的朋友、正在准备面试的候选人,以及被业务方要求“上个AI功能”但不知道怎么拆解需求的开发同学。不管你现在是零基础还是已经调过几个接口,按这条路径走,能少走很多弯路。

1. 重新认识这个岗位:LLM 应用工程师到底在做什么

1.1 它和算法工程师、提示词工程师的区别

很多人以为 LLM 应用工程师就是“写提示词的”,或者觉得它跟算法工程师是同一个东西。差别其实非常大。

算法工程师的核心战场在模型本身:数据清洗、训练、微调、评测,目标是让模型的能力天花板更高。而 LLM 应用工程师的战场在模型之外:数据怎么进、输出怎么解析、业务逻辑怎么编排、异常怎么兜底、成本怎么控制。提示词工程只是其中一环,甚至不是最难的一环。

打一个比方:算法工程师是冶炼厂,负责把矿石炼成钢;LLM 应用工程师是车间装配工,负责把钢材变成能交付的零件和设备。你会调模型,但如果不懂车间流水线怎么走,做出来的东西只能停留在实验室自嗨阶段。

还有一个容易混淆的角色叫“提示词工程师”。这个角色在特定场景下确实有价值,但它偏“文案策略”,不偏“系统设计”。真正的 LLM 应用工程师需要写代码、理解系统架构、能做性能调优,提示词只是工具箱里的一个工具。

1.2 日常工作内容与交付物

这个岗位的日常可以高度浓缩成三个动作:接入、编排、运维。

接入是把模型服务集成到现有系统里,包括 API 封装、鉴权、限流、超时重试。编排是把提示词、工具调用、检索、多轮对话这些元素组合成一条完整的业务流程,比如“用户提问-判断意图-检索资料-生成回复”。运维则是最容易被忽略的一环——监控回答质量、GPU/接口成本、延迟,持续做回归和调优。

具体交付物通常长这样:一个客服知识库问答系统、一个文档摘要与信息抽取工作流、一个带工具调用的业务助手,再复杂一点,可能是多角色协作的 Agent 系统。这些系统都不涉及模型训练,但要把模型能力稳稳接进真实业务里。

1.3 一个真实项目的工作流切片

我接手过一个某保险业务线的理赔问答项目。客服团队每天被大量重复问题淹没,业务方提了个需求:“做个机器人,能自动回复客户”。听起来很简单,真正落地时工作流比想象复杂得多。

第一周只做需求拆解:哪些问题适合机器人答,哪些必须转人工;回答错误的风险边界在哪里;需要对接哪些业务数据。第二周才进入技术方案设计:选模型、定检索方案、设计评测集。第三周开始数据清洗与切分,同时另一条线在做系统的接口对接。上线后又花了两周做灰度回流和 badcase 修复。

这个切面说明了一件事:这个岗位的难点往往不是“调模型”,而是“把产品需求翻译成技术方案,再把技术方案变成稳定服务”的整套工程能力。

2. 入门先筑基:必须掌握的五项底层能力

2.1 Python 与 API 调用基本功

做 LLM 应用开发,Python 绕不开。但不需要成为语言专家,需要的是“够用且规范”的程度。

至少要做到:能熟练处理字典和列表的嵌套取数,能写异常处理,能用一个请求库快速调用 REST API,能区分同步和异步,会写基础的类型标注。看起来简单,实际面试时很多人栽在“用 requests 调接口时,不知道如何处理流式响应”这类细节上。

还有一个容易被低估的技能是异步编程。应用上线后,模型接口的响应通常是秒级,如果每来一个请求就阻塞一个线程,并发稍微上来系统就拖垮了。我当时做第一个线上项目时,同步改异步之后,同样一台机器能支撑的并发数翻了几倍。

动手建议:用某个公开的天气接口,写一个小脚本每天定时拉取数据,存成结构化文件。把异常重试、超时设置、日志输出都做进去,这比刷一百道算法题物有所值。

2.2 理解大模型的工作原理

这关不过,后面全是空中楼阁。至少要搞懂这几个概念:Token、上下文窗口、温度、采样。

Token 是模型处理文本的最小单位,中文里一个字可能拆成多个 Token,直接决定了你的成本预算和上下文长度规划。上下文窗口是模型一次能“看到”的内容上限,不是一个无限大的内存,需要自己管理什么该放进去、什么不该放。

温度参数控制随机性:调得越低,输出越稳定、越保守;调得越高,回答越发散、越有“创意”。做业务系统时,绝大部分场景我都把温度压在 0.2 以下。

还要建立一条最基本的认知:大模型不是数据库,也不是搜索引擎。它是一个“概率性的文字续写器”,会根据前文推测最可能的下文。这意味着它的每一次输出都有不确定性,再小的概率在规模化调用下都会被放大。系统的稳定性不能建立在“模型一定正确”这个假设上。

2.3 结构化输出与数据解析

业务系统里,模型生成的文字通常不是给人看的,而是给代码用的。我们要的是干净的 JSON、字段齐全的数据结构,不是一段带语气词的散文。

主流方案是让模型按 JSON 格式输出,但这里有两个坑:一是输出偶尔会截断,二是偶尔会混入多余文字。解决思路是把解析代码写得足够健壮,抽取式地寻找 JSON 片段再解析,而不是期望整个响应体都是合法 JSON。

更稳妥的做法是:在提示词里给出严格的字段要求和示例;如果模型服务商提供了结构化输出模式或者函数调用能力,优先用,这是从根上解决格式问题的手段。我自己的经验是,纯靠提示词约束 JSON 格式,长文本场景下成功率只有七八成;配合结构化输出模式,可以稳定到九成五以上。

2.4 向量检索的基础认知

RAG(检索增强生成)是目前落地最广的大模型应用模式,而它的根基是向量检索。要理解 Embedding 是什么:把一个文本片段映射成一串几百维到上千维的浮点数数组,让语义相近的文本在向量空间里距离更近。

你可以把它理解成图书管理员给每本书贴标签——不是一个标签,而是几百个维度的特征标签。搜索的时候,把问题也转换成同样的特征向量,然后在库里找最接近的书。这个“找最接近”的过程就是向量检索。

入门不需要自己实现向量算法,会用开源向量数据库就够了。重点是理解两类检索的差异:向量检索适合“语义匹配”,关键词检索适合“精确匹配”,生产环境里两者往往要结合使用。另外,文本切分的粒度极其重要,我见过太多人把所有内容切成 200 字一篇的小块,结果一个完整事件被拆得七零八落,检索出来的片段断章取义。

2.5 工程化思维

大模型应用的本质还是软件工程。Git 版本管理、环境隔离、日志规范、配置管理、监控告警,一样都不能少。

有一个成本上的铁律:模型接口每次调用都在烧钱,线上排查问题不能全靠肉眼看书式调试。必须从一开始就接入结构化日志,把每次调用的模型名称、Token 数、延迟、输入输出摘要都记录下来。出了问题能回溯,算成本时有据可依。

还要养成“先定义指标再动手”的习惯。这个功能怎么算做得好?是回答准确率,还是响应延迟,还是成本?没有指标就没有优化方向,上线后被业务方问“效果到底好不好”时,你只能说出“感觉还行”这种话。

3. 从调接口到做系统:三个核心能力的深度拆解

3.1 Prompt 工程:从“会写”到“会设计”

Prompt 工程是入门第一课,但很多人对它的理解停留在“把需求写清楚”。真正做系统时,Prompt 不是一句话,而是一份结构化文档。

我常用的结构包含五个部分:角色定义、任务说明、约束条件、输入槽位、输出格式。角色定义告诉模型它是什么;任务说明把复杂需求拆成清晰的子任务;约束条件写明不能做什么——比如“不知道就说不知道,不要编造”;输入槽位是变量的占位位置;输出格式则严格规定数据结构。

少样本示例是提升稳定性的关键手段。我会在 Prompt 里放进一两个完整的输入输出示例,让模型照着“规矩”办事。这比加十句“请一定按格式输出”有效得多。

还有一个容易忽略的细节:Prompt 版本管理。线上效果一次比一次差时,要能快速回退回之前的表现。我的做法是把 Prompt 当作代码一样纳入 Git,每次修改都记录原因,线上才能回滚。

反模式清单也得心里有数:不要写“你是万能助手”这种空洞角色;不要在 Prompt 里堆砌大量无关的背景;不要用“最好的”“最准确的”这种形容词期待模型自我约束。模型只吃结构与示例,不喝鸡汤。

3.2 RAG:检索增强不是加个 PDF 那么简单

很多人以为 RAG 就是把文档丢进向量库,用户提问时检索一下,把结果拼进 Prompt。能做通,但做好很难。

完整的 RAG 链路是:加载文档、切分文本、向量化、写入向量库、用户查询、检索候选、重排、融合上下文、生成回答。每一步都有坑。

切分策略是第一个坑。固定 500 字切一刀看似省事,但语义完整的段落会被切断。实践上我通常先按文档结构切分(章节、段落),再对过长段落做二次切片。配合重叠区域,比如每块与前一块重叠 50 个字,能减少边界截断带来的信息丢失。

检索环节第二个坑是只做向量检索。向量检索擅长语义相似,但会把一些无关但表述相近的内容捞上来。我的做法是“多路召回”:向量检索加关键词检索,再用重排模型对两组结果统一打分,最后取分数最高的几条。这一步通常能让最终回答质量上一个台阶。

还有一个经验:不要把检索片段直接堆给模型完事。先做“压缩”,把多篇文档去重、合并摘要,提炼出跟问题最相关的段落,再拼进 Prompt。我试过把十篇相关文档全塞进去,模型反而被无关信息带偏;精选三到五段高质量片段后,准确率明显提升。

根据我个人的项目经验,RAG 上线后的优化顺序应该是:先看检索召回的命中率,再看生成质量。命中率都上不去,换再强的模型也只是在错误信息基础上“一本正经地胡说八道”。

3.3 Function Calling 与 Agent:让模型“动手干活”

RAG 解决的是“知道什么”,Function Calling 和 Agent 解决的是“能做什么”。

函数调用的核心机制是:模型不直接回答,而是输出一个结构化的调用请求,比如“调用查天气函数,参数 city=北京”。你的代码负责真正执行这个调用,再把结果返回给模型,模型根据结果生成最终回复。这么设计的价值在于,把模型的灵活性跟工程的确定性结合起来——模型负责理解意图、规划参数,真实的操作由代码完成,可控、可审计。

做 Agent 时,思路进一步扩展为“规划-调用-观察-再规划”的循环。模型先判断需要调用哪些工具,你的循环代码执行工具,拿到结果再喂回给模型,直到它认为任务完成。

这个环节最大的问题是失控。模型可能在一次简单查询里反复调用五次工具,也可能在一个错误分支里死循环。我的解决手段有三个:第一,严格限制可调用的工具范围,不用的工具不注册;第二,设置最大循环次数和单次超时,超过就强制终止并转人工兜底;第三,关键操作(比如删除、付款)需要人工确认后才能执行。

还有一条要泼冷水:不是所有场景都适合上 Agent。如果业务流程固定,一条带状态机的工作流比自由 Agent 稳定得多、便宜得多。Agent 是手段,不是目的。

3.4 评测与兜底机制

大模型应用上线前必须回答一个问题:怎么证明它“行”。没有评测体系,后面所有优化都无从谈起。

评测集要覆盖三类样本:核心场景的正常样本,边界场景的极限样本,以及对抗样本——故意刁难模型、容易引发幻觉的提问。每个样本都标注好标准答案或评分标准。上线前用评测集批量跑,上线后持续收集真实用户问题补充进评测集。

评测方式分自动和人工。自动评测可以算匹配率、关键词命中率,也可以用更强的模型当“裁判”打分;人工评测虽然慢,但对用户体验相关的维度不可替代。我的做法是发布新版本前,人工抽测至少五十条 badcase 之外的新问题,再结合自动回归跑全量。

兜底机制是最后的防线。我做过一个知识库问答系统,再强的 Prompt 和检索也拦不住模型偶尔飘忽。于是加了三个兜底:首先是置信度门槛,检索相似度太低时直接放弃回答;其次是规则白名单,命中明确指令(“查余额”“退订”)时走固定逻辑,不经过模型;最后是默认回复,模型判定回答不了时,统一转人工工单而不是硬编。

4. 实战路线图:用三档项目从入门到独立交付

4.1 第一档:做一个研究型 Demo,跑通完整链路

第一个项目不要碰业务,目标是跑通“文档-向量库-检索-生成”的完整链路。

我当时做了一个个人知识库问答 Demo:把自己的一批技术笔记整理成文档,切分后灌进向量库,然后写一个最小化的问答脚本——用户提问,检索 Top3 片段,拼进 Prompt,生成回答。

这个阶段要搞清楚的关键问题包括:什么文本该保留、什么该丢弃;切分粒度怎么影响检索效果;Temperature 调到多少最舒服。不要贪多求全,把五十篇以内的资料做精就够。

验收标准很明确:覆盖范围内的常见问题能做到大概率的准确回答;问覆盖范围外的问题时,模型能明确说“不知道”,而不是硬编一个答案。做到这两点,第一档就算过关。

4.2 第二档:做一个工具调用型应用,解决真实小场景

第二档要开始碰真实问题。我推荐做“会议纪要助手”这类场景:输入一段会议录音转写文本,输出结构化会议纪要,提取待办事项和负责人,再把待办内容写入某个外部协作工具。

这个项目真正的难点不在于摘要生成,而在于结构化抽取稳定性。会议文本又长又乱,说话人混杂、口语化严重,要让模型每次都能输出统一字段格式的 JSON,需要精心设计输出格式约束和少样本示例。另一个难点是外部系统的鉴权和错误处理,写入失败时如何重试、如何告知用户。

验收标准要量化:对同一批测试会议文本,端到端正确生成待办并成功写入的比例要达到某个可接受水平。我当时给自己定的目标是这个比例主要场景稳定在较高区间才敢说完成。这一档做完,你才算体会过什么叫“模型接入真实业务链路”。

4.3 第三档:做一个业务级系统,考虑并发与成本

第三档要求把一个原型体面地商业化。这一档的技术含量不在模型调用,而在边角工程。

并发与性能是第一个考验。模型接口动辄一秒以上响应,必须做缓存和异步化。相同问题在短时间内重复提问,直接命中缓存;耗时操作放进队列处理,前端轮询结果。我踩过的最痛的坑是给网关设了很短的超时时间,导致模型还在生成时,请求已经被断开,用户看到“服务异常”。

成本控制是第二个考验。上线前必须算清楚一笔账:平均单次回答消耗多少 Token,日活多少,单日成本落在什么区间。如果超预算,就引入更便宜的模型做路由、缩短上下文、对长文档走摘要替代全文进 Prompt。

数据安全与权限是第三个考验。哪些用户能问哪些文档,不是模型能判断的,要在检索阶段就按用户维度做过滤。上线前还要做灰度发布:先放百分之五流量,观测各项指标稳定后再逐步放量,同时把线上实时日志接进监控。

这一档做完,你可以独立撑起一个业务级大模型应用从立项到上线的全过程,这才是真正的“应用工程师”。

4.4 作品集与面试准备

作品集的作用不是展示你“做了什么”,而是展示你“思考过什么、权衡过什么”。比如写 RAG 项目,不要只说“我用了向量数据库”,要说清楚“为什么选用切分策略”“检索效果不好时是怎么排查的”“重排比不重排在评测集上提了多少”。

面试高频问题里,我印象最深的是这几类:给定业务场景让设计解决方案、解释幻觉成因并给出规避手段、描述一次线上故障排查全过程、如何评估一个对话系统好坏。这些问题没有标准答案,核心考察的是有没有真实做过取舍。

还有一个常被忽视的准备点是:能讲清楚你的项目的失败案例。我当时面试时讲了一个检索效果很差的案例,讲了我是怎么意识到问题不在 Embedding 模型、而在数据切分粒度过大的——这类真实反思比复述一遍 Demo 效果更能打动面试官。

5. 入行避坑实录:十个让我头大的问题

5.1 上下文爆炸与截断

多轮对话中把历史消息全塞给模型,Token 消耗飞快,很快突破上下文窗口。解决方案是滑动窗口加摘要压缩:设定最近 N 轮消息完整保留,更早的历史滚成摘要再放进去。注意不要把“截断了上下文”当成“回答了问题”,很多逻辑错误就是这么来的。

5.2 模型幻觉到底怎么查

怀疑某个回答是幻觉时,我的排查链路是:先回看检索片段里有没有这个信息,没有就说明是凭空生成;有但回答偏离了,说明是 Prompt 引导不到位或模型被无关信息干扰。给每个回答附上引用来源,能让幻觉排查效率提升很多倍。

5.3 模型输出 JSON 一直解析失败

大概率是温度太高或者 Prompt 示例不清晰。先用结构化输出模式;没有的话调低温度、给出严格示例、在解析端做容错抽取。不要反复重试同一请求,白白增加成本和延迟。

5.4 向量检索结果差,不一定是 Embedding 的锅

大多数情况下问题出在文档切分质量。切得太碎,语义被割裂;切得太粗,检索粒度不匹配。还有个高频原因是查询问题太口语化,先做查询改写,把口语转成更接近文档的表达方式,效果往往立竿见影。

5.5 成本像一个无底洞

主要原因是无效 Token 太多。我做过一次成本审计,发现相当比例的请求把超长历史会话和无用文档片段一股脑塞给模型。减少这部分无用输入后,成本直线下降。另一个手段是做模型路由:简单问题走便宜模型,复杂问题才上高配模型。

5.6 Agent 跑进死循环

限制最大步数永远是最有效的第一道防线。其次给工具调用加上“前置条件校验”,模型想调用一个工具,你的代码先检查参数是否合法、该用户有没有权限,不合格就拒绝并告诉模型换一种方式。这颗保险丝能救回很多失控现场。

5.7 并发一高就超时

先确认瓶颈在哪:是模型服务本身的限流,还是自家网管的连接数不够。通常要做的三件事:连接池复用、超时分级、限流降级。更重要的是,别把所有同步请求都卡在入口,必要时做异步化改造。我见过一个系统把模型调用串在 Django 的同步视图里,并发稍微上来就雪崩,改成异步后问题直接消失。

5.8 不知道回答得好不好

没有评测集,就好像在没有尺子的情况下量长度。我的建议是,从第一天就建一个“问题池”,每发现一个 badcase 就丢进去,上线前跑一遍回归。长期积累下来的问题池是应用工程师最宝贵的资产。

5.9 Prompt 看起来很好但线上表现飘

这是提示词的“过拟合”现象:在少数例子上反复调出来的 Prompt,换个表达方式就不行了。解决办法永远是用评测集说话,不要用个例感觉来判断好坏。每次改 Prompt 前,先在固定评测集上跑出基线分数,再对照看改动是正向还是负向。

5.10 面试时最大的误区

面试里答不上来的常见原因,是背书式回答概念却讲不出实际的权衡。比如被问“RAG 和微调怎么选”,把两边的优缺点背一遍只能算合格,远谈不上优秀。更好的回答方式是结合你做过的项目,讲在什么数据量、什么场景、什么成本约束下做的选择。经验就是发生在具体情境里的那些决策痕迹。


我个人走到现在最深的体会是:大模型应用工程师真正的护城河,不是最新的模型参数,不是某个神奇的提示词模板,而是稳定交付系统的工程能力——你越能控制不确定性,越能在模型能力之外建立确定性,你的系统就越可靠。这些能力没有捷径,只能靠一个项目一个项目地持续打磨。希望这份路线图能帮你节省一些试错时间。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进