ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

从零开始的AI工程:Prompt、Harness与Agent实战拆解

2026/10/3 10:52:56 拓冰建站 浏览量
从零开始的AI工程:Prompt、Harness与Agent实战拆解 1. 从零开始的AI工程这个领域到底在解决什么问题1.1 当会用AI变成能交付AI系统差距就出来了这两年我一直在做AI相关项目的落地交付接触过大量团队后感受特别深真正卡住大家的地方早就不再是模型怎么调或者提示词怎么写这类入门问题而是——怎么把一个能跑通的Demo变成稳定、可控、可持续迭代的工程系统。ai-engineering-from-scratch这句话字面意思是从零开始的AI工程但它背后的潜台词其实是另一层很多团队是从传统软件开发转过来的原以为会调接口就能做AI应用结果上线后被各种长尾问题打崩——模型输出不稳定、上下文管理混乱、没有任何灰度手段、线上出问题连回滚都不知道怎么回。我见过太多项目死在Demo很好看生产环境跑不起来这一步。这个从Demo到生产的过程就是AI工程要解决的硬骨头。1.2 我们缺的不是模型是工程化能力坦白讲模型能力和API调用工具今天已经很成熟了你有大量基座模型可选也有大量编排框架可用。真正稀缺的是一个团队把AI能力组织成产品的能力。打个比方传统开发好比盖一栋固定结构的楼图纸画好、钢筋浇好后面就是照图施工。而AI应用更像搭一个自适应生态系统——你种下种子给它阳光、水分和边界让它长成符合预期的样子。种子本身的基因模型能力只是下限你怎么浇水、怎么修枝、怎么防治病虫害才是决定最终收成的上限。工程化的落地手段包括但不限于Prompt的版本化与回归体系、模型输出的校验与容错、Agent的编排与状态机设计、多模型协作的分工路由、可观测性和审计追踪。这些都是标题拆解后能展开的核心技术方向也是这篇文章要深入写的内容。这篇文章适合两类人一类是从传统后端或前端转向AI应用开发的工程师另一类是已经在用AI但总觉得差点工程味的技术管理者。我会结合自己做过项目的经验把从零搭建AI工程能力的实战路径拆开讲清楚。2. 先把地基打牢Prompt Engineering的核心方法论2.1 Prompt不是话术是你在设计的接口很多初学者把Prompt Engineering理解为怎么把话说得更花哨让AI听你的。这个理解偏差很要命。真正做工程的人应该把Prompt当成一个接口定义模型是你的下游服务Prompt就是你传给这个服务的入参结构和指令协议。既然是接口设计你就得考虑入参的Schema是否稳定异常输入时行为是否可预期输出格式是否能被程序解析有没有版本兼容问题我在团队里推行过一个规则效果非常好每条生产级Prompt必须配套一个JSON输出Schema。不管任务多简单只要面向生产模型的输出就必须被结构化解析而不是让人肉去读。举个例子做一个招聘简历筛选的AI模块错误的Prompt方式帮我看看这个简历适不适合这个岗位说说理由。正确的Prompt方式定义清楚输入结构JD关键信息候选人简历段落指定输出为固定JSON格式candidate_name、match_score、strengths数组、risks数组、recommendation同时声明评分规则和判断边界。这两种做法前一种适合聊天后一种才能被下游系统工程化地消费。2.2 一个可复用的结构化Prompt模板下面这套模板我在多个项目里反复使用结构已经沉淀稳定# 1. ROLE角色定义 你是一位资深的{领域}专家擅长{核心技能描述}。 # 2. CONTEXT任务上下文 当前场景{应用场景说明}。 用户身份{描述目标用户和行为背景}。 数据来源{说明输入数据的格式和范围}。 # 3. OBJECTIVE任务目标 你需要完成{一句话精确描述任务目的}。 成功标准{可量化的完成标准}。 # 4. INPUT输入数据 {structured_input} # 5. CONSTRAINTS硬性约束 - 禁止输出{内容}。 - 不确定信息必须标注unknown禁止编造。 - 输出语言{语言}。 - 字数/格式限制{具体要求}。 # 6. OUTPUT_FORMAT输出格式 {JSON_Schema描述}为什么这个模板有效因为它把模型理解任务时需要的所有上下文显式分开了。角色稳定语气模型上下文缩小语义空间目标锚定输出方向约束拦截幻觉和越界输出格式保证可解析性。这在工作中特别重要你可能要调用的模型能力今天用的A家、明天可能换B家的但Prompt模板如果结构清晰模型换掉后往往只需微调少数措辞甚至不用改。这就是接口设计的好处——把模型API当成一种可替换的底层实现而不是绑定死的组合。2.3 上下文管理Token预算就是你的内存控制做过几个长对话项目后我对Token预算的敬畏越来越深。很多人觉得把上下文塞得越满越好其实完全不是那么回事。一个关键原则相关性优先于完整性。模型在长上下文里反而更容易迷失重点尤其是超过一定长度之后中段信息被忽略的概率显著上升。我常用的上下文组织策略把任务指令和当前问题放在最前、最后两个关注度最高的位置中间放参考材料。建立记忆摘要层对历史对话做滚动摘要而不是全量堆积。对知识库检索采用先粗筛、后精读策略第一轮召回10个候选段落再用一个轻量模型或规则挑出最相关的3段喂给主模型。给每个上下文块打标签系统指令、用户输入、检索片段、历史摘要在落库和排查时能快速定位问题来源。这套方法在真实项目里直接改变过线上效果。同样的模型只调整上下文组装策略评估指标涨了将近三成。别小看工程细节的价值。3. Harness Engineering被大多数人忽略的AI系统稳定层3.1 Harness的本质是给模型装护栏和刹车Harness Engineering这个词最近在圈子里讨论多了起来但真正理解的人并不太多。Harness直译是马具、挽具引申到AI工程里它指的是围绕模型外部的控制层、校验层、兜底层。说得直白一点大模型天生是概率系统你没法保证它100%不犯错、不跑偏、不说胡话。Harness工程做的事情就是承认这个现实然后在模型外部搭建一套机制去约束它、纠正它、兜住它。我自己习惯把Harness拆成五个层次输入护栏拦截非法/恶意/超长的输入做敏感信息脱敏。指令加固把业务规则注入到Prompt中让模型在生成链路里自带约束。输出校验模型生成结果后用确定性程序做格式和内容的断言校验。兜底降级校验不通过时走重试、换通道、回退默认值等策略。审计追踪所有输入输出落日志方便事后追溯和改进。这五层架起来之后AI应用才具备稳定系统的雏形。3.2 输入防护与输出校验的实操要点输入防护的核心是不要把不可控的东西直接丢给模型。用代码做了一道安检门def sanitize_user_input(raw_text: str, max_len: int 2000) - str: # 过滤超长输入防止上下文溢出 if len(raw_text) max_len: raw_text raw_text[:max_len] # 规则过滤明显的注入尝试 injection_markers [忽略以上, Ignore previous, 系统提示词] for marker in injection_markers: raw_text raw_text.replace(marker, [REDACTED]) # 手机号/身份证敏感信息打码示例 import re raw_text re.sub(r1[3-9]\d{9}, [PHONE], raw_text) return raw_text.strip()输出校验是我的重点习惯。每个生产级模型输出我至少要做一个JSON Schema校验加一个业务断言。用JSON Schema做格式检查用业务规则做内容合理性检查。import jsonschema schema { type: object, properties: { recommendation: {type: string}, confidence: {type: number, minimum: 0, maximum: 1} }, required: [recommendation, confidence] } def validate_output(result: dict) - bool: try: jsonschema.validate(result, schema) # 业务断言示例 if result[confidence] 0.3 and result[recommendation] in (接受, 拒绝): return False return True except jsonschema.ValidationError: return False检查不通过就进入重试或降级链路。你会发现这样做一轮之后线上事故率会直线下降。3.3 一个完整Harness的分层实现示例我一般称这套完整的护城河为三级防线。第一级防线前置处理 用户请求 - 敏感信息扫描 - 长度控制 - 输入注入检测 - 通过则放行不通过则直接拒绝并记录 第二级防线模型调用层 Prompt组装 - 调用模型 - 拿到原始输出 - 非重试类错误直接返回 - 重试类错误限流/超时按指数退避重试 第三级防线后置处理 原始输出 - JSON Schema格式校验 - 业务规则断言 - 通过则包装返回 - 不通过则交给修复器Repairer做二次修正 - 仍然失败则走兜底策略默认答案人工介入标记很多同学问过这个修复器怎么实现其实不一定要再让模型去修。修复器分三层先做文本级修复正则补全缺失括号、截断JSON尾部再做格式转换用代码适配器把模型输出映射到标准Schema最后才交给模型二次生成带错误信息重新调用。实际项目里前两层修复器能覆盖大部分问题真正需要模型二次修复的情况不到5%。这5%都不值得调模型直接走降级更省成本。4. AI Agent与多AI协作从孤立的调用走向自主系统4.1 Agent的本质拆解循环、工具、记忆Agent这个词被炒得很热但把黑话剥掉之后核心其实就三件事循环决策、工具调用、记忆管理。传统程序是写死的流程A步骤做完走BB做完了走C。Agent则是给你一个目标让它自己判断当前需要查资料吗需要调计算器吗需要问用户确认吗执行完之后再检查结果是否满足目标不满足就换条路再试。循环部分的核心是控制好什么时候算完成我习惯给Agent设最大迭代轮数比如5轮同时每一轮都要有明确的检查点输出当前判断、下一步行动、置信度方便人追踪和干预。工具部分要强调一点工具不在于多在于边界清晰。一个Agent挂了20个工具它自己都可能选不明白。宁可只挂3个高内聚的工具也不要把七零八落的零散接口都塞进去。记忆部分很多人忽略短期记忆和长期记忆的区分。短期记忆存当前任务上下文长期记忆落向量数据库或KV存储。记忆不是越多越好加了噪音反而干扰决策。要设计记忆的写入门槛什么信息值得记存多久谁负责清理4.2 多AI协作不是人多力量大是分工合理多Agent协作现在是个热门方向我拆过不少生产系统后发现多Agent协作真正的工程价值不是让多个模型一起想同一个问题而是用多个专家角色解决单一模型难以同时满足的多重约束。举个例子做一个自动写技术周报的AI系统。如果让单一Agent一口气搞定要求它既要技术全面又要文笔生动还要格式规范——模型很容易顾此失彼。但拆成三个角色协作后信息收集Agent只负责读取项目记录、合并请求、任务活码输出结构化事件列表。内容生成Agent基于事件列表撰写周报初稿重点是逻辑和完整性。风格审校Agent重写润色统一语气风格检查格式规范。每个Agent职责单一Prompt设计更简单输出质量也更稳定。这就是多而不乱的价值。4.3 Agent编排的工程落地多Agent系统如果不讲工程规范很快就会变成灾难现场。我在落地中积累了几条硬规则状态机先行先把Agent之间的状态流转画清楚再用代码落地。哪个Agent什么时候接管、失败之后由谁兜底必须有明确转移逻辑不能靠模型自由发挥。明确切换信号Agent之间传递的中间结果需要结构化标记字段名、类型、状态码让下一个Agent能顺利接棒。可中断可恢复整套流程要能被人工干预打断也能从断点恢复运行。生产系统不是学术Demo失控风险必须可控。全局会话ID每个多Agent任务生成一个traceId贯穿所有Agent的输入输出日志。排查问题的时候这一条能救你的命。提示工具调用命名空间要隔离A Agent的私有工具不能暴露给B Agent否则会互相干扰或者被越权调用。这个细节我在项目里吃过亏。Agent的工程化核心反而不是让它多聪明而是让它多可控。先把可控做到位再谈聪明。5. 走向AI原生研发范式工具链与团队协同怎么变5.1 AI Native的核心不是用AI写代码而是重构研发流程AI Native研发范式这个词组最近经常出现。很多团队误以为用AI辅助写代码就是AI Native。其实区别非常大。用AI写代码的本质是流程还是原来的流程——需求分析、开发、测试、上线的环节都不变只是部分环节用工具提效。而AI Native研发范式是把AI作为协作主体纳入到研发团队的人员结构里AI Agent参与需求拆分、生成任务卡、写实现代码、跑自测、查日志、找Bug……人在这个闭环里做的是评审、决策和兜底。从我的实践看这套范式引进后最大的变化不是速度变快了而是团队的协作接口变了。人和人之间的沟通越来越多通过结构化的任务描述、验收标准、测试用例文档来完成AI Agent在这些结构化描述下自主工作人只需要做结果审查。5.2 工具链选型CodeBuddy这类编程AI工具怎么用出价值工具层面像CodeBuddy这类的AI编程助手已经不止是补全代码的工具了。它背后的Harness Engineering思路很有意思AI能自主完成读需求 - 写代码 - 跑测试 - 查错误 - 修复的循环人主要在关键节点做决策。我整理过一套工具选型的判断维度评估维度关注问题上下文感知能力是否能理解项目全局结构还是只能看局部文件多文件编辑能力一次改动涉及多个文件的场景能否协调处理测试与验证能力能否自动运行并修复测试还是只产出代码代理稳定性多轮自主执行时是否会跑偏、中断、死循环安全边界代码权限、仓库权限、执行权限是否可控我的个人建议别把AI编程工具当成一个人在Dollar Shave Club式的贴身顾问而要当成一个需要喂结构化需求的外包初级工程师。你给它的任务卡越清晰——有背景、有改动范围、有验收标准——它写出来的结果就越能直接提测。5.3 团队协同从人指挥人到人指挥AI、AI协作人AI Native范式对团队的真正挑战不在技术在流程和心态。实操里最见效的做法是推行任务卡制度任务编号TASK-20250115-001 目标登录模块增加短信验证码登录 范围说明仅修改 auth/login 相关接口不动其他模块 改动清单新增 LoginBySmsRequest DTO、新增 SmsAuthService、更新 UserController 依赖项依赖短信服务SDK谷底版本 v3.2.1 验收标准 - 短信验证码正确校验通过错误验证码返回特定错误码 - 5分钟内同一手机号最多发送3条短信 - 相关单测覆盖率达到90%以上 - 不引入新的安全漏洞人花10分钟写清楚这张卡AI Agent可以自主工作很长时间。团队里的工程师角色从写代码的人逐渐转向写任务、审结果、兜意外的人。这个转变过程会有阵痛。很多老工程师一开始会怀疑自己是不是要被替代了实际跑下来发现不是这回事。人从重复劳动里被解放出来之后反而有了精力去啃那些真正需要创造力和业务判断的问题。6. 从零落地的实现路径与避坑实录6.1 我推荐的四阶段落地路径如果你是从零开始搭建AI工程能力建议按下面这条路线推进每阶段都有明确的交付物第一阶段基础能力验证交付物评估报告选择2~3个基座模型针对你的核心业务场景做一次系统的效果评估。跑通Prompt基础模板确定基线指标。别急着搭复杂系统先确认天花板有多高。第二阶段最小Harness建设交付物可运行的受控调用链路)搭建输入检查、Prompt组装、输出校验、兜底降级这一套基础链路。不用做得太重但必须全链路跑通并且有日志。第三阶段单Agent闭环交付物一个能自主处理单任务流的Agent选一个价值最高、流程最清晰的任务流做成带工具调用和记忆管理的单Agent系统。这一步最容易踩坑建议控制范围、控制工具数量、加大监控密度。第四阶段多Agent编排交付物失败有兜底、流程可追踪的完整系统在前一阶段稳定运行基础上拆角色、加协作层、补审计能力。多Agent的价值建立在单Agent可靠的基础上别跳级。6.2 常见问题速查表我把自己和身边团队踩过的坑整理成了表格每一条都是真金白银买来的经验常见问题典型表现排查思路经验解法模型输出结构不稳定时而给JSON时而给文本检查输出格式约束是否足够强用few-shot强约束JSON Schema兜底校验Agent频繁死循环反复调用同一工具不收敛补全终止条件增加最大轮数限制迭代检查点输出轮数硬限制上下文越来越大响应越来越慢、效果下降确认是否无脑堆历史启用滚动摘要相关性筛选Prompt小改动引发大波动一个措辞变化导致效果剧变做好Prompt版本管理围绕每次变更做回归测试不经回归不上线多Agent互相干扰A的输出被B错误消费梳理状态流转和数据结构统一消息Schema两两之间的适配层限流导致线上失败高峰期大量超时确认重试策略是否合理指数退避备用通道异步削峰调试困难无法复现同一个输入有时好有时坏缺统一日志链路全局traceId贯穿所有链路每条问题的共性根源几乎都是在系统设计时没给不确定性留位置。大模型应用和传统软件最大的区别就是——你的系统必须假设组件会出错、行为会波动并围绕这个假设做架构设计。6.3 我踩过的几个大坑挑几个印象最深的教训分享。第一个坑是把Prompt当一次性消耗品。早期我们的一个生成类功能改了一版Prompt后线上效果忽上忽下排查了快一周才发现是Prompt变更没做回归评估老版本被覆盖导致下游解析不兼容。后来我给Prompt体系上了版本管理和回归测试再小的措辞调整都必须跑评估集这个习惯救过多次。第二个坑是过度依赖模型自我纠错。当时做信息抽取模型输出格式错了我的第一反应是让模型自己重新生成一次。效果往往更差——因为模型在错误的基础上二次修正容易衍生出新的幻觉。后来改成规则优先修复、模型兜底修正成功率大幅提升成本也降下来了。第三个坑是Agent没有明确的退出信号。一个生成长文本的Agent如果用户中途更改需求旧Agent仍然按旧目标跑完白白浪费时间和Token。后来我引入了目标一致性校验每轮执行前Agent先判断当前目标和用户最新输入是否一致不一致就主动退出请求新指令。这一项直接降了约三成无效消耗。6.4 最后再分享几个省钱又省心的技巧按我个人经验有几个小技巧成本极低但收益极高。技巧一搭建一个离线评估集。收集100条覆盖典型场景的输入输出对任何Prompt变更、模型升级、参数调整先跑一遍评估集看整体指标再决定放不上线。刚开始花半天搭后面每次都省半天。技巧二给自己的工程链路加熔断开关。发现模型异常波动时一键切换到备用通道或者只读模式避免影响全部用户。技巧三定期清理和审计日志里的敏感数据。模型请求日志里会包含用户输入如果没有脱敏处理时间久了就是合规隐患。设定定期任务做敏感信息探测和清理能省未来噩梦。技巧四模型选型时别只看顶配。很多场景用7B~14B量级的小模型就够速度快、成本低、可私有化部署反而在生产环境里跑得比超大模型更稳。先拿大模型做效果基线再用小模型上线是成本控制的不二法门。从零开始搭建AI工程能力的路并不难走但也没捷径可走。把基础层做扎实、把Harness层建完整、把Agent编排管控好这套体系一旦成型你会发现AI项目的交付质量会上一个明显的台阶。我经历过从模型调参爽一把到工程化落地稳一阵的转变后者才是做产品该有的姿态。