news 2026/5/16 10:20:42

极简LLM入门指南4

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
极简LLM入门指南4

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-shot"constraints":"约束"# 限制条件}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="句子情感分类:\n"forexinexamples:prompt+=f'"{ex["text"]}" ->{ex["label"]}\n'prompt+=f'\n现在分类:"{text}"'returnprompt

Chain-of-Thought(分步思考)

# 普通Prompt(易错)prompt_normal="23 * 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,n=3):"""多路径推理,投票决定"""importasynciofromcollectionsimportCounter# 并行生成多个答案tasks=[llm.agenerate(prompt,temperature=0.7)for_inrange(n)]responses=awaitasyncio.gather(*tasks)# 投票选择最常见答案answers=[extract_answer(r)forrinresponses]most_common=Counter(answers).most_common(1)[0][0]returnmost_common

ReAct(推理+行动)

# 注意:这里介绍ReAct的基本概念# 完整的Agent实现请参考第07篇classSimpleReActDemo:"""ReAct模式简单演示:思考-行动-观察"""def__init__(self):self.prompt_template=""" 任务:{task} 请按以下格式思考(仅示例,不执行实际工具): Thought: 分析需要做什么 Action: 如果有工具,会调用什么 Expected Result: 预期结果 Final Answer: 最终答案 示例: """defdemonstrate(self,task):"""演示ReAct思考过程"""prompt=self.prompt_template.format(task=task)# 这里仅展示思考过程,不实际执行# 第07篇将实现完整的工具调用returnf""" Thought: 我需要{task}Action: 如果有搜索工具,我会搜索相关信息 Expected Result: 获得相关资料 Final Answer: 基于资料给出答案 注:完整的Agent工具调用实现见第07篇。 """

Tree-of-Thoughts(思维树)

deftree_of_thoughts(problem,branches=3,depth=3):"""思维树搜索最佳解决方案"""defevaluate_thought(thought):# 评估思路质量prompt=f"评估这个解决方案的可行性(1-10):\n{thought}"score=llm.generate(prompt)returnfloat(score)defgenerate_thoughts(current_state,n=3):# 生成n个可能的下一步prompt=f""" 当前状态:{current_state}请提供{n}种不同的下一步方案: """returnllm.generate(prompt).split('\n')# BFS搜索queue=[(problem,0)]best_solution=Nonebest_score=0whilequeueanddepth>0:current,d=queue.pop(0)ifd>=depth:continuethoughts=generate_thoughts(current,branches)forthoughtinthoughts:score=evaluate_thought(thought)ifscore>best_score:best_score=score best_solution=thoughtifscore>7:# 阈值queue.append((thought,d+1))returnbest_solution

Constitutional AI(宪法AI)

classConstitutionalAI:"""确保输出符合原则"""def__init__(self,principles):self.principles=principlesdefgenerate_with_critique(self,prompt):# 第一步:生成初始响应response=llm.generate(prompt)# 第二步:自我批评critique_prompt=f""" 响应:{response}请检查以下原则:{chr(10).join(self.principles)}是否有违反?如有,请修改。 """critique=llm.generate(critique_prompt)# 第三步:修正响应if"违反"incritique:revision_prompt=f""" 原始响应:{response}批评:{critique}请提供修正后的版本。 """returnllm.generate(revision_prompt)returnresponse

实战案例

客服系统

classCustomerServiceBot:def__init__(self):self.system_prompt=""" 你是一位专业的客服代表。 核心原则: 1. 保持专业和友好 2. 准确理解客户问题 3. 提供具体解决方案 4. 必要时转人工 回复格式: 【问题理解】:复述客户问题 【解决方案】:具体步骤 【后续建议】:预防措施 """defhandle_query(self,query,context=None):prompt=f"""{self.system_prompt}客户历史:{contextor'新客户'}当前问题:{query}请回复: """returnllm.generate(prompt)# 使用示例bot=CustomerServiceBot()response=bot.handle_query("我的订单已经3天没收到了",context="VIP客户,上月购买5次")

代码审查

defreview_code(code,language="python"):prompt=f""" 角色:资深{language}开发者,代码审查专家 任务:审查以下代码 代码:{code}请从以下方面审查: 1. 【安全性】是否有安全隐患 2. 【性能】是否有性能问题 3. 【可读性】命名和结构是否清晰 4. 【最佳实践】是否遵循{language}最佳实践 5. 【潜在bug】是否有逻辑错误 输出格式: 问题级别:严重/中等/建议 位置:行号 描述:问题说明 修复建议:具体代码 只输出发现的问题,如果代码很好,说"LGTM"。 """returnllm.generate(prompt)

数据分析

classDataAnalyst:defanalyze(self,data_description,goal):# 结构化分析流程analysis_prompt=f""" 角色:数据分析专家 数据描述:{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的有效性。以下工具可以帮助你测试和改进Prompt:

classPromptDebugger:"""Prompt效果测试工具"""def__init__(self):self.metrics=[]deftest_prompt(self,prompt_template,test_cases):"""批量测试Prompt效果"""results=[]forcaseintest_cases:prompt=prompt_template.format(**case['input'])response=llm.generate(prompt)# 评估响应质量score=self.evaluate(response,case['expected'])results.append({'input':case['input'],'response':response,'score':score})# 统计分析avg_score=sum(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)# 使用示例debugger=PromptDebugger()test_cases=[{'input':{'text':'产品很好'},'expected':'正面'},{'input':{'text':'太贵了'},'expected':'负面'}]debugger.test_prompt("分类:{text}",test_cases)

常见错误与正确做法

编写Prompt时容易犯一些错误。了解这些错误可以帮助你快速改进:

错误问题正确做法
“处理这个”指令太模糊“将JSON数据转为CSV格式”
“请你作为一个有20年经验的…”Prompt过长“作为数据分析师”
“简洁但详细解释”相互矛盾“用3个要点总结”
“整理一下数据”格式不明“输出为Markdown表格”

关键是保持Prompt清晰、具体、一致。在实践中不断测试和改进。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/14 8:02:09

MyBatis 扩展BaseTypeHandler 转换泛型 JSON 列表

最近发现一个mybatis里面json转换的bug, 写了这么多年Java这方面还是没有理清楚, 把正确的处理方法记录一下. 一. 对象JSON转换 这个是比较简单的情况, 有通用的处理方法, 例如 用Jackson实现一个通用的 TypeHandler Slf4j public class JacksonTypeHandler<T> extends B…

作者头像 李华
网站建设 2026/5/14 8:02:02

18、日期和时间管理函数全解析

日期和时间管理函数全解析 1. LAST_DAY 与 TRUNC、ADD_MONTHS 获取月末日期的差异 在处理日期时,我们常常需要获取一个月的最后一天。这里有两种常见的方法:使用 LAST_DAY 函数和结合 TRUNC 与 ADD_MONTHS 函数。 使用 LAST_DAY 函数 : select LAST_DAY(sysdate…

作者头像 李华
网站建设 2026/5/15 7:23:27

曾经的王,SpringBoot 倒下了!!!

2025年&#xff0c;不会AI的Java工程师&#xff0c;真的要被淘汰了吗&#xff1f;这两年AI编程确实很火热&#xff0c;甚至很多非程序员都能使用AI编程来开发APP应用&#xff0c;所有人都在看着程序员这个岗位什么时候能够被AI替代掉。但是反直觉的是&#xff0c;虽然在传统开发…

作者头像 李华
网站建设 2026/5/9 2:17:03

51、构建安全的 Syslog-ng 服务器:SSL 密钥创建与配置指南

构建安全的 Syslog-ng 服务器:SSL 密钥创建与配置指南 在网络管理中,确保日志服务器的安全性至关重要。本文将详细介绍在 Debian 和 Fedora 系统上为 Syslog-ng 服务器创建 SSL 密钥,以及配置 stunnel 和 Syslog-ng 的具体步骤。 1. 邮件服务器消息测试与访问控制 在进行…

作者头像 李华
网站建设 2026/5/13 11:44:44

4、F-RAN技术:应用案例与发展趋势

F-RAN技术:应用案例与发展趋势 1. F-RAN概述 F-RAN(Fog Radio Access Network)作为5G的先进技术解决方案,与仅使用C-RAN模式相比,通过自适应模型选择,F-RAN可以带来更高的频谱效率(SE)和更低的延迟,同时还能够提高能源效率(EE)。在实际的F-RAN中,关联模式是关键,…

作者头像 李华
网站建设 2026/5/10 4:16:00

ADC策略引擎集成LLama-Factory输出结果实现智能决策转发

ADC策略引擎集成LLama-Factory输出结果实现智能决策转发 在当今企业级服务架构中&#xff0c;用户请求的语义复杂性正以前所未有的速度增长。一个简单的“我打不开账户”可能指向登录失败、密码错误、风控锁定甚至页面加载异常等多个问题。传统基于关键词和静态规则的路由系统面…

作者头像 李华