免费自助创建网站,深圳营销网站建设联系方式,客户管理系统在哪进入,免费咨询的图片Prompt工程#xff1a;如何让AI更好地理解你
构建LLM应用的核心不只是调用API#xff0c;更关键的是如何给模型写出有效的指令。同样的问题#xff0c;用不同的方式提问#xff0c;结果质量可能相差很大。这就是Prompt工程的核心价值。
本文需要先完成第03篇的内容#xf…Prompt工程如何让AI更好地理解你构建LLM应用的核心不只是调用API更关键的是如何给模型写出有效的指令。同样的问题用不同的方式提问结果质量可能相差很大。这就是Prompt工程的核心价值。本文需要先完成第03篇的内容并理解system_prompt的概念。从失败案例开始要理解好的Prompt是什么不妨先看看常见的写法问题# ❌ 糟糕的Promptprompt_bad写代码# ✅ 优秀的Promptprompt_good 任务实现用户登录功能 要求 1. 使用Python FastAPI 2. JWT认证 3. 包含错误处理 4. 返回标准JSON响应 输出格式完整可运行的代码 Prompt核心要素classPromptTemplate:高质量Prompt模板def__init__(self):self.elements{role:角色定义,# 你是谁task:任务描述,# 做什么context:背景信息,# 相关信息format:输出格式,# 期望格式examples:示例,# Few-shotconstraints:约束# 限制条件}defbuild(self,**kwargs):returnf 角色{kwargs.get(role,专业助手)}任务{kwargs[task]}背景{kwargs.get(context,)}要求{kwargs.get(constraints,)}输出格式{kwargs.get(format,文本)}好的Prompt应该包含几个关键要素角色定义你是谁、任务描述做什么、背景信息相关条件、输出格式什么形式。核心技巧Zero-shot 到 Few-shot# Zero-shot准确率60%prompt_zero将以下句子分类为正面或负面这个产品真棒# Few-shot准确率90%prompt_few 句子分类示例 服务很好 - 正面 太贵了 - 负面 质量差 - 负面 现在分类这个产品真棒 # 代码实现deffew_shot_classify(text,examples):prompt句子情感分类\nforexinexamples:promptf{ex[text]} -{ex[label]}\npromptf\n现在分类{text}returnpromptChain-of-Thought分步思考# 普通Prompt易错prompt_normal23 * 47 ?# CoT Prompt准确prompt_cot 问题23 * 47 ? 让我们一步步思考 1. 首先分解23 * 47 23 * (40 7) 2. 计算23 * 40 920 3. 计算23 * 7 161 4. 相加920 161 1081 答案1081 # 自动CoT生成器defgenerate_cot_prompt(question):returnf 问题{question}请按以下步骤思考 1. 理解问题的核心要求 2. 分解为子问题 3. 逐个解决子问题 4. 综合得出最终答案 让我们开始 Self-Consistency多路径推理asyncdefself_consistency_inference(prompt,n3):多路径推理投票决定importasynciofromcollectionsimportCounter# 并行生成多个答案tasks[llm.agenerate(prompt,temperature0.7)for_inrange(n)]responsesawaitasyncio.gather(*tasks)# 投票选择最常见答案answers[extract_answer(r)forrinresponses]most_commonCounter(answers).most_common(1)[0][0]returnmost_commonReAct推理行动# 注意这里介绍ReAct的基本概念# 完整的Agent实现请参考第07篇classSimpleReActDemo:ReAct模式简单演示思考-行动-观察def__init__(self):self.prompt_template 任务{task} 请按以下格式思考仅示例不执行实际工具 Thought: 分析需要做什么 Action: 如果有工具会调用什么 Expected Result: 预期结果 Final Answer: 最终答案 示例 defdemonstrate(self,task):演示ReAct思考过程promptself.prompt_template.format(tasktask)# 这里仅展示思考过程不实际执行# 第07篇将实现完整的工具调用returnf Thought: 我需要{task}Action: 如果有搜索工具我会搜索相关信息 Expected Result: 获得相关资料 Final Answer: 基于资料给出答案 注完整的Agent工具调用实现见第07篇。 Tree-of-Thoughts思维树deftree_of_thoughts(problem,branches3,depth3):思维树搜索最佳解决方案defevaluate_thought(thought):# 评估思路质量promptf评估这个解决方案的可行性(1-10)\n{thought}scorellm.generate(prompt)returnfloat(score)defgenerate_thoughts(current_state,n3):# 生成n个可能的下一步promptf 当前状态{current_state}请提供{n}种不同的下一步方案 returnllm.generate(prompt).split(\n)# BFS搜索queue[(problem,0)]best_solutionNonebest_score0whilequeueanddepth0:current,dqueue.pop(0)ifddepth:continuethoughtsgenerate_thoughts(current,branches)forthoughtinthoughts:scoreevaluate_thought(thought)ifscorebest_score:best_scorescore best_solutionthoughtifscore7:# 阈值queue.append((thought,d1))returnbest_solutionConstitutional AI宪法AIclassConstitutionalAI:确保输出符合原则def__init__(self,principles):self.principlesprinciplesdefgenerate_with_critique(self,prompt):# 第一步生成初始响应responsellm.generate(prompt)# 第二步自我批评critique_promptf 响应{response}请检查以下原则{chr(10).join(self.principles)}是否有违反如有请修改。 critiquellm.generate(critique_prompt)# 第三步修正响应if违反incritique:revision_promptf 原始响应{response}批评{critique}请提供修正后的版本。 returnllm.generate(revision_prompt)returnresponse实战案例客服系统classCustomerServiceBot:def__init__(self):self.system_prompt 你是一位专业的客服代表。 核心原则 1. 保持专业和友好 2. 准确理解客户问题 3. 提供具体解决方案 4. 必要时转人工 回复格式 【问题理解】复述客户问题 【解决方案】具体步骤 【后续建议】预防措施 defhandle_query(self,query,contextNone):promptf{self.system_prompt}客户历史{contextor新客户}当前问题{query}请回复 returnllm.generate(prompt)# 使用示例botCustomerServiceBot()responsebot.handle_query(我的订单已经3天没收到了,contextVIP客户上月购买5次)代码审查defreview_code(code,languagepython):promptf 角色资深{language}开发者代码审查专家 任务审查以下代码 代码{code}请从以下方面审查 1. 【安全性】是否有安全隐患 2. 【性能】是否有性能问题 3. 【可读性】命名和结构是否清晰 4. 【最佳实践】是否遵循{language}最佳实践 5. 【潜在bug】是否有逻辑错误 输出格式 问题级别严重/中等/建议 位置行号 描述问题说明 修复建议具体代码 只输出发现的问题如果代码很好说LGTM。 returnllm.generate(prompt)数据分析classDataAnalyst:defanalyze(self,data_description,goal):# 结构化分析流程analysis_promptf 角色数据分析专家 数据描述{data_description}分析目标{goal}请按以下步骤分析 Step 1: 数据理解 - 数据类型和规模 - 关键字段识别 Step 2: 分析方法选择 - 推荐的统计方法 - 可视化建议 Step 3: 代码实现 - 提供完整的pandas代码 - 包含数据处理逻辑 - 生成可视化 Step 4: 洞察总结 - 关键发现3-5点 - 业务建议 returnllm.generate(analysis_prompt)优化建议速查技巧效果提升使用场景代码示例明确角色20%所有场景你是Python专家提供示例30%分类/格式化Few-shot分步思考40%复杂推理CoT输出格式25%结构化输出JSON/Markdown约束条件15%精确控制字数/风格限制Prompt测试与调试实际应用中需要验证Prompt的有效性。以下工具可以帮助你测试和改进PromptclassPromptDebugger:Prompt效果测试工具def__init__(self):self.metrics[]deftest_prompt(self,prompt_template,test_cases):批量测试Prompt效果results[]forcaseintest_cases:promptprompt_template.format(**case[input])responsellm.generate(prompt)# 评估响应质量scoreself.evaluate(response,case[expected])results.append({input:case[input],response:response,score:score})# 统计分析avg_scoresum(r[score]forrinresults)/len(results)print(f平均得分:{avg_score:.2f})# 失败案例分析failed[rforrinresultsifr[score]0.6]iffailed:print(f失败案例:{len(failed)})forfinfailed[:3]:print(f 输入:{f[input]})print(f 问题:{self.diagnose(f)})returnresultsdefevaluate(self,response,expected):评估响应质量# 这里可以用更复杂的评估逻辑ifexpectedinresponse:return1.0return0.0defdiagnose(self,failed_case):诊断失败原因# 自动诊断Prompt问题issues[]iflen(failed_case[response])10:issues.append(响应过短)if不确定infailed_case[response]:issues.append(模型不确定)return, .join(issues)# 使用示例debuggerPromptDebugger()test_cases[{input:{text:产品很好},expected:正面},{input:{text:太贵了},expected:负面}]debugger.test_prompt(分类{text},test_cases)常见错误与正确做法编写Prompt时容易犯一些错误。了解这些错误可以帮助你快速改进错误问题正确做法“处理这个”指令太模糊“将JSON数据转为CSV格式”“请你作为一个有20年经验的…”Prompt过长“作为数据分析师”“简洁但详细解释”相互矛盾“用3个要点总结”“整理一下数据”格式不明“输出为Markdown表格”关键是保持Prompt清晰、具体、一致。在实践中不断测试和改进。