ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

大模型应用开发实战:两周从提示词工程到RAG与Agent

大模型应用开发实战:两周从提示词工程到RAG与Agent AI大模型应用开发不是让你先从论文和数学推导开始。很多人学了两周还在看概念一个能跑的Demo都没有原因是把应用开发误当成了模型训练。这篇文章围绕一条两周可以走完的实战主线展开从本地部署或API调用起步依次打通提示词、RAG知识库、Agent、Web集成、批量任务最后判断什么情况才需要微调。适合想转AI应用开发方向的后端程序员也适合正在做毕业设计或企业Demo的同学。最值得先记住的一句话是不要等所有概念学完再动手先用最少的代码跑通一次完整请求再逐步把系统补全。1. AI大模型应用开发到底练什么两周能学到什么程度1.1 应用开发和模型训练是两回事很多人听到“大模型开发”第一反应是自己得懂Transformer、懂训练、懂部署GPU集群。实际落到应用层情况完全不一样。应用开发的核心不是把模型从零训练出来而是把能力已经现成的模型接进业务系统让它稳定、可控、高效地完成任务。举一个类比你不会造发动机但不影响你造车。发动机是模型车架是你的代码司机是你的用户。你要做的是知道发动机的油门、刹车、仪表盘分别对应什么接口然后把方向盘和驾驶体验设计好。具体到AI大模型应用开发值得练的能力包括模型调用。本地部署或API调用能够发起一次完整请求。上下文与提示词设计。让模型按照指定格式输出减少随机性。知识注入。用RAG把私有文档、手册、业务数据变成模型可检索的内容。Agent与工具调用。让模型能够调用函数、查询接口、完成多步任务。Web服务集成。把模型能力包装成后端接口供前端或业务系统调用。批量任务与运维。处理失败重试、并发、日志、成本控制和结果验收。这个清单两周不可能全部精通但完全可以走完主链路。走完主链路的标志不是“会背概念”而是“能独立做出一个最小系统”并且知道每个环节为什么这样设计。1.2 两周主线调用、增强、集成、部署我建议把两周时间拆成三条并行线不要一条线学到黑。第一条线是模型能力理解消息格式、上下文窗口、Token、温度参数、流式输出。这是所有应用开发的地基。第二条线是增强机制提示词工程、RAG检索、Agent工具调用。这三者是让模型从“能聊天”变成“能干活”的关键。第三条线是工程化接口服务、批量任务、日志、错误重试、并发控制。没有这一层前面做得再花哨也很难上线。第一周集中做前两条线里的基础部分先把单次调用和提示词调通第二周做RAG和Agent再用一个Web框架把能力包成接口。微调放到最后先判断到底有没有必要。1.3 学习预期要调整“两周学完”的真正含义不是两周成为专家而是两周建立完整地图。你能知道当用户问一个复杂问题时哪些环节应该由模型决定哪些环节应该由代码决定。你能判断一个问题应该用提示词解决还是应该先检索文档还是应该交给工具函数去查库。这种判断力比记住某几个API参数更值钱。注意如果你的目标不是学习而是直接上线收费服务两周时间不够。生产环境还要处理鉴权、限流、数据合规、日志审计、模型安全这些不是一两周能补完的。2. 先确认路线本地部署还是调用模型API2.1 两条路线怎么选大模型应用开发的第一步不是写代码是先确认模型从哪里来。目前主流方式就两种本地部署开源模型或者调用模型平台的API接口。本地部署的优点是数据可控、离线可用、调试方便。缺点是需要硬件资源模型体积大推理速度受机器限制维护成本也不低。API调用的优点是省去显卡和部署精力能直接使用能力更强的在线模型。缺点是要依赖外部服务需要考虑费用、网络、数据合规。选择标准其实很简单。如果是学习起步机器有10GB以上的空闲内存或一块中端显卡可以先试本地部署。如果做严肃业务或者需要更强的推理能力优先走API。如果数据敏感必须离线那只能本地部署同时要把硬件预算准备好。对比项本地部署API调用数据隐私数据留在本地依赖自建环境数据会发送到平台需确认合规要求硬件要求需要内存、显存、磁盘空间不需要额外GPU成本形态主要为硬件和电费按Token或套餐计费模型能力取决于本地模型规模可选择能力更强的在线模型学习门槛要处理部署、依赖、资源问题主要处理Key、文档和参数不要一上来就纠结要不要自己训练或微调。绝大多数业务第一版不需要微调先用现成模型把链路跑通再根据效果决定下一步。2.2 本地部署用Ollama的最小流程Ollama是目前本地部署开源模型最常用的工具之一。它把模型下载、加载、服务启动封装成简单命令很适合学习阶段快速起一个服务。大致流程是安装Ollama。不同系统安装方式不同以官方文档为准。装完在终端执行ollama --version验证是否成功。拉取一个开源模型。例如ollama pull qwen2.5。模型名以你查看的仓库和硬件条件为准。初次下载会占用较多磁盘空间建议预留足够的剩余容量。启动服务。执行ollama serve服务会默认监听一个本地端口。具体端口以你的安装配置为准常见是11434。调用接口。用curl或代码请求本地服务。一个最简单的curl请求示例curl http://localhost:11434/api/chat -d { model: qwen2.5, messages: [{role: user, content: 你好}] }能正常返回说明本地模型服务已经可用。这一步就把“模型从哪来”的问题解决了。2.3 API调用需要准备哪些东西如果选择API路线你需要提前准备几件事注册模型开放平台账号完成实名认证。获取API Key按权限范围保存好。阅读目标模型的文档确认请求地址、模型名称、上下文长度、费用说明。确认是否支持流式输出、JSON输出、函数调用等能力。注意不要把API Key硬编码在代码里。哪怕只是学习也应该用环境变量或配置文件来管理。示例import os api_key os.getenv(LLM_API_KEY)很多模型平台也提供新人体验额度或免费调用额度。具体以平台活动为准生产环境建议走付费或企业认证避免因为免费额度的并发和稳定性限制影响业务。3. 第一周核心模型调用、提示词与上下文管理3.1 最小可运行代码第一周的任务顺序应该是先跑通一个最小请求再看参数再处理流式输出最后尝试不同类型业务提问。以本地Ollama为例一个最小可运行的Python请求长这样import requests url http://localhost:11434/v1/chat/completions payload { model: qwen2.5, messages: [ {role: system, content: 你是一个后端开发助手。}, {role: user, content: 请用Python写一个读取CSV文件的函数} ], stream: False, temperature: 0.3 } resp requests.post(url, jsonpayload, timeout60) print(resp.status_code) data resp.json() print(data[choices][0][message][content])这里有几个容易忽略的点第一timeout必须设置。模型推理可能很慢如果不设置超时请求可能会一直挂在那里。第二返回结构要先打印出来看一眼。不同模型平台返回结构会有些差异不要凭记忆猜字段名。第三stream先设为False。等普通输出稳定之后再改成True去处理流式接收。我一般会先跑一个“翻译一句话”的任务。因为输入简单输出也简单最适合验证链路通不通。链路通了之后再逐步增加复杂度。3.2 提示词工程是实现稳定输出的关键提示词工程不是玄学它的本质是把“用户的需求”翻译成模型更容易执行的指令。好的提示词能明显减少随机性但它不是万能钥匙不能保证100%正确。几个实战中很实用的技巧给模型明确角色。不是“扮演”这种虚词而是明确职责你是代码审查助手负责检查代码错误。指定输出格式。例如输出JSON包含content和suggestion两个字段。说明边界。例如如果无法判断回答“未知”不要编造。给一到两个示例。想让模型按照某种风格或结构回答示例比描述更有用。每条提示词都要放进真实模型里跑以实际结果为准。调试提示词时一次只改一个点。不要同时改角色、格式、示例否则出了问题不知道是谁导致的。3.3 Token、上下文窗口和流式输出Token是模型处理文本的基本单位。直观理解一个中文汉字可能对应一到几个Token英文单词通常是一到几个Token。不同模型的切词算法不一样所以“一个Token等于多少字”没有统一答案。上下文窗口决定了单次请求里能放多少输入和输出。窗口大小一般标注在模型文档里例如8K、32K、128K。注意一个关键点窗口是输入加输出的总长度。如果系统提示词很长用户输入也很长留给输出的空间就会变小。遇到上下文超长报错不要急着换大模型先压缩输入。常见做法是把过长的文档切片或者改成检索后只拼接相关片段。流式输出是指模型边生成边返回而不是全部生成完再一次性返回。从用户感知上流式输出会显得快很多。实现方式通常是把stream设为true再按流式协议读取增量内容。注意启用流式输出后超时判断方式也要改。普通请求的超时是“等最后一个字”流式请求要区分“首字延迟”和“总耗时”。首字延迟太久说明排队或输入处理有问题总耗时过长说明生成内容太多。4. 第二周进阶RAG知识库和Agent应用4.1 RAG解决什么问题链路怎么拆很多业务场景里模型并不知道你公司的内部文档、产品手册、私有知识。RAG的思路是把用户问题先拿去检索找到最相关的知识片段再把问题和片段一起交给模型让模型基于这些材料回答。RAG解决了三个直接问题知识更新。文档变了重新入库即可不需要重训模型。降低幻觉。模型只能基于给定材料回答减少编造。控制成本。不用每次都把整本知识库塞到上下文里只检索相关片段。RAG主链路拆成几步文档加载。读取PDF、Word、Markdown、HTML等文件内容。切片。把长文档切成合适长度的片段。太小会丢失上下文太大可能超过窗口或降低检索精度。向量化。用嵌入模型把每个片段转成向量。存储。把向量和原文存入向量数据库。检索。用户提问时把问题转成向量通过相似度取前K个片段。拼接。把用户问题、检索片段、提示词组合成完整请求。调用模型。让模型基于材料回答并说明材料中没有的内容不要编造。新手最容易出问题的不是向量化而是切片和检索质量。你可能会遇到“代码没报错但模型答非所问”的情况。这时先看检索到的片段和问题是否相关不要急着改模型参数。4.2 Agent的基础结构Agent让模型从“回答问题”变成“执行任务”。它和普通对话的关键区别在于工具调用和循环决策。一个典型的Agent结构包括拆解任务。把复杂目标拆成若干子任务。选择工具。决定调用哪个函数或接口。执行工具。实际执行代码、查询数据库、发送网络请求。观察结果。把工具返回结果带回给模型。循环决策。继续下一步或结束。最终输出。整理结果给用户。开发Agent时不要一上来就追求全自动。更稳的路径是先手动定一个固定流程让模型在几个关键步骤里做决策。例如用户查询订单让模型先提取订单号再调用查询函数最后生成回复。每一步都能单独测试整体可靠性会高很多。工具返回结果必须是模型能理解的格式。工具执行可能失败要设置错误信息和重试机制。真实业务里的Agent多数时间不是在处理“模型聪明不聪明”而是在处理“工具定义得好不好、返回值规不规范”。4.3 用Spring AI或Django把模型变成Web服务模型能力最终要通过Web接口暴露给业务系统。技术栈不同选择也不同。Spring AI适合Java技术栈团队。它把大模型调用、提示词管理、结构化输出等能力做了抽象如果项目本来就是Spring Boot后端接入时改动较小。Django适合Python技术栈尤其在需要快速实现后台管理、数据导入导出、简单页面时比较方便。选型标准不是谁更强而是你团队的服务端语言。学习阶段建议直接用习惯的Web框架把模型调用封装成一个POST接口。请求参数是对话消息响应结果就是模型生成内容。一个很值得做的练习是写一个带历史记录的聊天后端。它能让你理解会话状态、上下文拼接、超时控制这些真实业务细节而不是停留在命令行脚本调用。把这条练完RAG和Agent也都可以挂在这套Web服务上。5. 从单条测试到批量任务和接口服务5.1 批量任务不是“循环请求”那么简单很多人在第一次做批量文本处理时会写出类似这样的代码for text in texts: result call_llm(text) save(result)这个写法在十几天数据时没问题。但到了几百条以上问题会很快暴露没有失败重试。某一次请求因为网络抖动失败整个程序可能直接中断。没有输出命名规划。结果全部混在一个文件里出错后很难定位。没有进度记录。跑了一半挂了你不知道哪些已经完成。并发开太高模型服务被请求打满整体速度反而更慢。更稳妥的方式是先把任务列表准备好给每条任务分配唯一ID。每处理一条单独保存结果并同步记录执行状态。失败后按次数重试连续失败就跳过并记录原因。不需要一开始就上复杂的消息队列先把状态机和日志做好批量任务就已经可靠很多。5.2 接口服务要提前设计并发、超时和限流如果模型能力要被多个用户同时调用就不能只写一个内部函数了。要提前考虑并发数。同一时刻最多处理多少请求。超时时间。单个请求最长允许执行多久。限流策略。每个用户或每个Key每分钟最多调用多少次。排队策略。请求过多时是排队还是直接拒绝。鉴权。谁能调用Token怎么校验和刷新。这些是后端基本功但在大模型应用里更容易被忽略。因为模型推理往往比普通接口慢很多如果并发设置过高下游服务、数据库连接、内存都可能被打满。判断标准不是凭感觉先做简单压测。分别测并发为1、5、10时接口的响应耗时、错误率和资源占用再根据业务容忍度选择一个合理值。5.3 输出结果怎么验收大模型输出具有不确定性所以验收不能只看“有没有返回内容”还要看几个维度完整度。内容有没有被截断结果字段有没有缺失。格式正确性。是不是合法的JSON有没有夹杂多余解释。内容相关性。回答和用户问题之间有没有明显偏差。稳定性。同样输入跑三次结果差异大不大。成本。一次请求消耗了多少Token放到长期任务里能不能接受。如果输出经常不满足要求优先调整提示词和上下文而不是一直加大模型尺寸。大模型不一定能解决“业务指令不清晰”的问题放大模型只会让成本更高。6. 微调什么时候该做什么时候别做6.1 先判断问题能不能用RAG或提示词解决微调是很多人最容易踩坑的点。很多需求其实用不到微调。需要微调的典型情况模型必须严格按照某种固定格式输出只靠提示词不稳定。你有一批标注好的业务数据希望模型在垂直领域更稳定。输入和输出有很强的固定模式和术语模型完全不了解。不需要微调的情况只是想让它知道某些知识。这种情况优先RAG因为知识更新方便。只是想让它换一个表达风格。先改提示词不要动模型权重。链路还没跑通。先跑通链路再谈微调。判断原则很简单如果现成模型配合提示词和RAG已经能做到80分微调的收益往往不值得投入如果只能做到40分而且问题明确出在模型不懂领域语言才需要考虑微调。6.2 微调的基本流程和资源门槛微调的基本流程和其他模型训练类似但应用开发者至少要知道这一步准备数据。每条包含指令、输入、期望输出。清洗和标准化。数据格式要统一质量要人工抽查。拆分训练集和验证集。不能用训练过的数据做最终评估。用微调框架或平台训练。评估效果。用未见过的样本测试。部署新模型。和旧模型做对比测试再决定是否替换。资源门槛方面微调比推理更吃显存和内存。显卡容量不够时可以考虑量化训练、减少参数规模、用更小模型先验证也可以租用云上算力。具体显存需求取决于模型大小、数据量、训练框架。我没有办法给出一个固定结论建议以你实际使用的工具文档为准先用一个小数据集跑通流程。6.3 数据准备和验证方式微调中数据质量比数据量重要。几百条高质量数据常常好过上万条重复、矛盾的数据。准备数据的核心是贴近真实场景。比如业务里用户会问“我的订单到哪了”训练样本就不能全是“订单查询是什么意思”这类抽象问答。数据之间不要互相矛盾同样的问题不能有不同的标准答案。验证方式也很重要。找一批有代表性的业务样本让新旧模型分别跑一遍输出结果交给实际使用者打分。如果微调后效果变差不要急着叠加数据先检查数据是否有冲突、训练格式和推理格式是否一致、评估样本和训练分布是否差异过大。7. 常见报错和排查链路7.1 启动失败依赖、端口、路径、权限本地部署时启动失败的报错看起来五花八门但很多问题跟模型本身无关。排查顺序建议固定下来看启动日志。缺依赖就补依赖缺文件就补文件。看端口。端口被占用时选择换端口或释放占用进程。看磁盘空间。模型没下载完整或磁盘满了服务也会启动失败。看路径和权限。路径里有中文或特殊字符、权限不足、配置文件编码不对都会导致启动异常。不要一看到报错就以为是模型坏了。先把环境问题排除掉。尤其是刚接触Ollama这类工具时安装目录、数据目录、缓存目录的设置都可能影响启动。7.2 请求报错先看输入再看参数服务已经启动但请求失败或返回异常时按这个顺序排查请求地址、请求方法、请求头是否正确。消息格式是否正确。messages里的角色字段有没有拼写错误内容字段是否存在。输入文本编码。有些文件不是UTF-8请求时可能导致解析失败。上下文是否超长。报错里有长度相关提示时先缩小输入内容。超时设置。模型推理慢请求响应耗时会很高超时设太短会直接失败。大部分请求报错都能归到这几类里。先把输入和参数检查完再去看模型配置。7.3 输出质量差改输入再改参数输出结果不理想时不要一上来就调temperature。先看输入是否清晰上下文是否充足示例是否给够。如果输入已经明确输出还是不稳定再调整生成参数temperature降低输出更保守调高输出更多样。top_p和temperature通常配合使用不要两个同时调得太高。输出长度上限设置太低结果会被截断。确认max_tokens或对应参数是否足够。但不要迷信参数。大多数质量问题来自任务描述不清晰、上下文缺失或输出格式要求不明确。参数只是微调不能替代输入质量。7.4 性能差看资源占用和任务队列速度慢的排查顺序看CPU、内存、显存占用。是不是已经接近满载。看同一时间有多少请求在排队。看并发是否过高导致资源争抢。看模型规模和机器配置是否匹配。看日志里的单次推理耗时。如果波动很大可能是资源抖动。低配机器不要想着同时跑大模型和高并发服务。可以先降低模型规模、减少并发数、缩小单次输入长度。先让链路稳定再考虑性能优化。8. 两周学习计划的落地版本8.1 按天拆任务以下安排是我比较推荐的一种节奏。前提是每天能拿出2到3小时并且已经掌握一门开发语言的基本用法。第一阶段第1-3天先解决“模型从哪里来”第1天确认本地部署还是API路线把环境准备好。第2天跑通Ollama或API调用写一个能对话的命令行脚本。第3天理解消息、Token、模型参数写一个能流式输出的示例。第二阶段第4-7天解决“怎么让模型回答得准”第4天学习提示词设计做一个输出JSON的解析示例。第5天实现一个最小RAG版本包括文档读取、切片、向量化、检索、问答。第6天整理一个小型本地知识库针对自己的文档做问答测试。第7天总结RAG链路画出每个环节的输入输出。第三阶段第8-11天解决“让模型能干活”第8天写一个工具函数让模型调用它并返回结果理解Agent基础。第9天做一个多工具示例例如查数据库或查接口。第10天用常用Web框架把模型包成API。第11天给接口加历史记录和错误处理。第四阶段第12-14天解决“从Demo到项目”第12天做一个批量任务处理50条真实文本记录状态和失败重试。第13天评估输出质量写一份自己项目的优缺点清单。第14天整理完整Demo写一份演示文档或项目说明。8.2 每个阶段的验收标准学习不能只看“看了多少视频”要看“完成了什么”。简单定一个验收标准第1天结束时能说清本地部署和API调用的区别。第3天结束时能解释temperature和max_tokens对输出的影响。第7天结束时能解释RAG每一步在做什么。第11天结束时接口能实现带历史记录的连续对话。第14天结束时有一整条完整主链路以及一份踩坑记录。不需要把市面上所有工具都学会。能把一条主链路里的“一套打法”做深比收藏几十份教程更有价值。8.3 给新手的实在建议最后写几条我自己反复验证过的经验。第一先跑通最小示例再扩展功能。不要一开始就搭很复杂的目录结构和抽象类。模型应用的难点在细节不在架构。第二日志和状态管理要从第一次批量任务就加上。没有状态记录的批量任务跑挂了很难恢复。你可以用“输入文件-输出文件-进度日志”的最小结构不要嫌简陋。第三不要只盯着一个模型。多试几个开源模型和在线API不同模型对同一提示词的反应差异很大。适合你任务的模型才是好模型。第四遇到报错时控制变量。一次只改一个参数。不要同时换模型、换提示词、换框架否则出问题你根本不知道是哪一环引起的。第五看一些开源项目和高校园队公开的动手教程确实能补不少知识。但最重要的是自己亲手把Demo跑起来再往里加功能。踩过几轮之后你会发现大模型应用开发真正难的不是哪一个模型能力多强而是怎么把模型嵌入真实业务链路做到稳定、可控、可维护。先把这条路走通再谈更好的模型和更复杂的Agent会顺畅得多。
返回列表