尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

94-实战Prompt优化师Agent-迭代优化-效果评分-自动生成Few-Shot

94-实战Prompt优化师Agent-迭代优化-效果评分-自动生成Few-Shot 文章目录【94.PythonAI】实战写一个Prompt优化师Agent——输入你的需求输出最优Prompt导入语1 ~ 架构设计四个模块一个闭环1.1 核心闭环2 ~ 评分器设计把感觉好变成打得出分2.1 四个评分维度2.2 迭代终止条件3 ~ 核心实现150行走完全流程4 ~ 加分项一自动生成Few-Shot示例4.1 加分项二多模型横评5 ~ 工程化收尾生成即用思考 总结结尾【94.PythonAI】实战写一个Prompt优化师Agent——输入你的需求输出最优Prompt文章简介本文是Prompt工程板块的收官实战手把手实现一个Prompt优化师Agent输入一句大白话需求输出经过多轮迭代打磨的最优Prompt。文章从手写Prompt的三大瓶颈切入质量看手感、优化靠玄学、效果无度量给出Agent的四模块架构——需求理解器、初稿生成器、效果评分器、反思迭代器以及生成→评分→反思→重写的核心闭环提供完整可运行的Python实现基于OpenAI SDK约150行含评分维度设计清晰度/约束完备性/格式明确性/可执行性四维打分、迭代终止条件分数达标或达到上限、Few-Shot示例的自动生成策略按需求场景合成正反例并附多模型对比功能——同一Prompt在GPT、DeepSeek、通义千问上的横向实测。配以Mermaid流程图展示迭代闭环适合学完Prompt工程理论、想把它沉淀为工具的开发者阅读参考。 个人主页源码骑士❄专栏传送门《Android开发基础》《python基础课程》⭐️热衷从源码视角拆解技术底层原理将复杂架构讲得通俗易懂 源码骑士的简介5年Android Framework系统开发经验曾主导多项系统级性能优化专项技术栈覆盖Android系统全链路Binder/Handler/AMS/WMS/启动流程及Java后端全家桶Spring MyBatis Redis Oracle累计产出原创技术文章100篇文章以流程图为特色被读者评价为看一篇胜过啃一周源码导入语前面几篇我们把Prompt工程的招式拆解得差不多了结构化分层、思维链、Few-Shot、System Prompt设计、自动优化、模板化。但现实中还有一个尴尬的问题——道理都懂轮到自己写还是凭手感。同一个需求今天写的和上周写的质量不一样同一份Prompt换个模型表现就翻车觉得还能更好但说不清哪里能改、怎么改。手写Prompt的三大瓶颈就在这质量看手感、优化靠玄学、效果无度量。破局思路和软件工程一样——把手艺变成流水线。这篇实战我们就造这条流水线一个Prompt优化师Agent你扔给它一句大白话需求它自己生成初稿、给自己打分、找出毛病、重写优化循环几轮后交给你一个带评测分数的成品。全程约150行Python每一行都讲透。1 ~ 架构设计四个模块一个闭环优化师Agent的内部结构其实就是把人类专家优化Prompt的思考过程拆成四个工位模块职责对应人类动作需求理解器把大白话需求解析成结构化规格写之前先问清楚需求初稿生成器按规格生成第一版Prompt打草稿效果评分器多维度给Prompt打分指出具体缺陷自我审查反思迭代器根据缺陷清单重写循环直到达标改稿1.1 核心闭环渲染错误:Mermaid 渲染失败: Parse error on line 6: ...否| F[反思迭代器\n针对缺陷重写 v(n1)] F -- D -----------------------^ Expecting SQE, DOUBLECIRCLEEND, PE, -), STADIUMEND, SUBROUTINEEND, PIPE, CYLINDEREND, DIAMOND_STOP, TAGEND, TRAPEND, INVTRAPEND, UNICODE_TEXT, TEXT, TAGSTART, got PS这个闭环的灵魂不在生成而在评分——没有可量化的评分标准迭代就退化成随机改写。所以评分器是整个系统里最值得花心思的模块。2 ~ 评分器设计把感觉好变成打得出分2.1 四个评分维度维度考察什么扣分项举例清晰度任务一句话能说清吗目标含糊、动词缺失约束完备性该禁止的都禁止了吗没说不许编造、没说边界格式明确性输出长什么样有样板吗只描述输出JSON却不给结构可执行性模型拿着它能直接干活吗依赖未提供的上下文、要求做不到的事每个维度0~25分总分100。评分不靠拍脑袋让模型按量规rubric逐项检查JUDGE_PROMPT你是Prompt质量评审专家。按以下量规评审待评Prompt 【量规】 1. 清晰度(0-25)任务目标是否一句话可概括、无歧义 2. 约束完备性(0-25)边界、禁区、异常情况是否都有约束 3. 格式明确性(0-25)输出结构是否有明确定义或示例 4. 可执行性(0-25)模型仅凭此Prompt能否直接完成任务 【待评Prompt】 {prompt} 【输出JSON】 {{scores: {{clarity: int, constraint: int, format: int, executability: int}}, total: int, defects: [具体缺陷1, 具体缺陷2]}}注意输出里的defects字段——分数只是仪表盘缺陷清单才是方向盘迭代器拿着它才知道往哪改。2.2 迭代终止条件MAX_ROUNDS3# 迭代上限防死循环也防边际收益递减TARGET_SCORE85# 达标线85分以上收工经验之谈迭代超过3轮分数提升通常不到5分Token成本却翻倍——见好就收。3 ~ 核心实现150行走完全流程importjsonfromopenaiimportOpenAI clientOpenAI()defchat(system:str,user:str,temperature:float0.3)-str:respclient.chat.completions.create(modelgpt-4o-mini,messages[{role:system,content:system},{role:user,content:user}],temperaturetemperature,)returnresp.choices[0].message.content# ── 模块一需求理解 ──defparse_requirement(raw_need:str)-dict:outchat(你是需求分析师。把用户的Prompt需求解析成JSON规格。,f需求{raw_need}\n输出JSON{task: 核心任务, audience: 使用者, constraints: [约束], output_format: 期望的输出格式},)returnjson.loads(extract_json(out))# extract_json见第46篇的清洗技巧# ── 模块二初稿生成 ──defdraft_prompt(spec:dict,defects:list|NoneNone)-str:fix_hintf\n上一版缺陷必须修复{defects}ifdefectselsereturnchat(你是顶级Prompt工程师。按规格撰写生产级System Prompt要求角色明确、约束完整、含输出格式定义、语言精炼。,f规格{json.dumps(spec,ensure_asciiFalse)}{fix_hint},)# ── 模块三评分 ──defjudge(prompt:str)-dict:outchat(JUDGE_PROMPT.format(promptprompt),开始评审)returnjson.loads(extract_json(out))# ── 主闭环生成 → 评分 → 迭代 ──defoptimize(raw_need:str)-dict:specparse_requirement(raw_need)current,historydraft_prompt(spec),[]forround_noinrange(1,MAX_ROUNDS1):reportjudge(current)history.append({round:round_no,score:report[total]})ifreport[total]TARGET_SCORE:breakcurrentdraft_prompt(spec,defectsreport[defects])# 拿着缺陷清单改稿return{prompt:current,final_score:report[total],trajectory:history,spec:spec}跑一遍的实际效果输入帮我写个给餐饮店用的差评回复Prompt 输出轨迹 round1→68分 缺陷未约束回复语气、无输出长度限制、缺品牌人设 round2→84分 缺陷缺少涉及食品安全问题的特殊处理分支 round3→91分 ✔ 达标输出终稿三轮迭代从能用到能上线——缺陷清单指哪打哪每一步都有据可依。4 ~ 加分项一自动生成Few-Shot示例Prompt定稿后优化师顺手把示例也造了。策略是按场景合成正反例defgen_few_shot(spec:dict,prompt:str,n:int3)-str:returnchat(你是测试数据构造专家。根据Prompt的任务生成f{n}组Few-Shot示例。要求1) 覆盖典型场景2) 含1组边界case容易答错的3) 输出严格符合Prompt定义的格式。,fPrompt{prompt}\n规格{json.dumps(spec,ensure_asciiFalse)},)关键点在那个边界case——普通示例模型自己也能编容易答错的示例才有教学价值第87篇讲过示例的任务是教会模型处理它原本会错的输入。4.1 加分项二多模型横评终稿Prompt别急着交付同一份Prompt在不同模型上实测一遍defcross_model_test(prompt:str,test_input:str)-dict:results{}forname,modelin[(gpt,gpt-4o-mini),(deepseek,deepseek-chat),(qwen,qwen-plus)]:outchat(prompt,test_input)ifnamegptelsecall_other(model,prompt,test_input)results[name]judge_output_quality(out)# 对输出再评一次分returnresults横评的价值在于破除一模型适配幻觉在GPT上调到95分的Prompt换DeepSeek可能掉到70——Prompt的兼容性也是质量指标尤其是你的应用打算多模型热切换时第40篇。5 ~ 工程化收尾生成即用优化师的产出物不只是一段文本而是一个可直接入库的包optimize()的最终交付结构{prompt:终稿Prompt文本,final_score:91,trajectory:各轮分数轨迹审计用,few_shot:自动生成的示例组,cross_model:多模型实测报告}落地动作1. 终稿 示例 → 按第90篇规范存成 Jinja2 模板文件版本号v1.0.02. 评分报告 → 写入 CHANGELOG这版Prompt凭什么上线3. 模板进git → 走评审、灰度、可回滚至此闭环Agent负责从需求到合格品第90篇的模板体系负责从合格品到可运维资产。前者解决写得出来后者解决管得住。思考 总结手写Prompt的三大瓶颈——手感、玄学、无度量对应的解法是流水线、缺陷清单、可量化评分。把专家的思考过程拆成四个模块Agent才能替你干活。评分器是灵魂清晰度、约束完备性、格式明确性、可执行性四维量规分数是仪表盘defects缺陷清单才是迭代的方向盘。迭代要设终止线分数达标或触顶3轮即收工超过3轮边际收益骤降纯属烧Token。Few-Shot示例自动合成的关键是边界case普通示例锦上添花易错示例才教得会模型。交付物是资产不是文本终稿存Jinja2模板带版本号评分报告进CHANGELOG多模型横评防一模型适配幻觉。Prompt工程板块到这里正式收官。从下一篇开始我们进入一片新大陆向量嵌入——大模型时代所有语义检索、RAG应用的数学地基。先回答最根本的问题Embedding到底是什么为什么一串数字能表示语义结尾各位小伙伴本文的内容到这里就全部结束了源码骑士在这里再次感谢您的阅读源码骑士 — Android Framework 全栈开发关注跟博主一起从源码视角深耕底层原理见证每一次成长❤️点赞让优质内容被更多人看见让知识传递更有力量⭐收藏把核心知识点存好在需要时随时查、随时用评论分享你的经验或疑问评论区一起交流避坑一键四连不要忘记给博主一键四连哦️寄语技术之路难免有困惑但同行的人会让前进更有方向结语当优化Prompt这件事本身也被写成了Prompt你就完成了从手艺人到工具建造者的跃迁——最好的工程师永远在给自己的工作写工具。不要忘记给博主一键四连哦
返回列表