AI大模型综合(四)prompt提示词工程

目录

一、提示词作用

[1.1 提示词含义与作用](#1.1 提示词含义与作用)

[1.2 良好的提示词](#1.2 良好的提示词)

[1.3 提示词在大模型及智能体中的作用](#1.3 提示词在大模型及智能体中的作用)

[1.4 系统提示词的原理](#1.4 系统提示词的原理)

[1.5 所有通用大模型的提示词都是相通的](#1.5 所有通用大模型的提示词都是相通的)

二、如何写出好的提示词

[方法1: 预设角色](#方法1: 预设角色)

[方法2: 给大模型提供样本或示例(One-shot或Few-shot)](#方法2: 给大模型提供样本或示例(One-shot或Few-shot))

[方法3 :告诉大模型具体的任务或步骤](#方法3 :告诉大模型具体的任务或步骤)

[方法4: 思维链,让大模型给出思考/推理过程,方便验证大模型给出答案或结果的合理性。](#方法4: 思维链,让大模型给出思考/推理过程,方便验证大模型给出答案或结果的合理性。)

方法5:加分隔符避免模型解读提示词造成混淆

方法6:增加要求

方法7:以AI优化AI,实现自我迭代生成提示词

[方法8 :控制返回结果的随机性及输出长度](#方法8 :控制返回结果的随机性及输出长度)

三、工程级"提示词要素"构成

四、deepseek提示词示例

[4.1 生成代码](#4.1 生成代码)

[4.2 代码改写:对代码进行修改,来实现纠错、注释、调优等。](#4.2 代码改写:对代码进行修改,来实现纠错、注释、调优等。)

五、动态提示词使用举例


一、提示词作用

提示词与提示词工程的起源与定义

提示词(Prompt)的概念最早伴随大语言模型(LLM)的兴起而普及。2020年后,随着GPT-3等模型的突破性进展,提示词工程(Prompt Engineering) 逐渐成为一门系统性学科。特别是吴恩达在YouTube上分享的提示词工程一系列教学视频后,更把让提示词工程一次在AI专业领域被熟知。

1.1 提示词含义与作用

提示词是大模型的输入,告诉大模型要执行什么指令;

调用大模型的接口,人机互动的接口;

++高效提示词可以优化模型输出;简单来说就是,提示词写的越好,模型的输出效果越好++

++注:只有输入恰当的提示词,大模型才能高效给出你答案++

大模型始终是根据「提示词」给出最可能的词(token),提示词直接决定大模型预测的准确性(即大模型给出的答案与用户真实意图的逼近程度。)

提示词的本质是为大模型提供背景知识、上下文知识,以便大模型生成更符合用户意图的内容。

1.2 良好的提示词

优质的提示词,必须能清晰传达用户的意图

1.3 提示词在大模型及智能体中的作用

系统提示词和 用户提示词:

系统提示词: 用来定义大模型的角色、行为规范和回答的框架, 是全局性的提示词,每次回话都会自动携带的。

用户提示词: 即用户输入给大模型的具体指令,用来表明用户希望它做什么。

1.4 系统提示词的原理

本质上来说:我们使用的对话界面是专门开发出的"AI大模型的对话应用",这个应用本身使用了存储,来存储我们之前的对话和大模型的输出,你下次再对话式,AI大模型对话应用其实是把你之前的输入内容、输出内容连同你本次的内容一块给到大模型,重新输出的。

所以,大模型虽然没有真正的记忆能力,但在使用AI大模型对话时,他能够记住我们的上下文信息。

1.5 所有通用大模型的提示词都是相通的

二、如何写出好的提示词

从"能用"到"好用"的验证方法论

方法1: 预设角色

给提示词模板预设某个角色,能让大模型迅速激活专业背景及上下文。

比如,你想让大模型生成Java试卷时, 提示词中可以添加: 你是一位资深的计算机专业教师。

比如,你想让大模型生成代码时, 提示词中可以添加:你是一位资深的编程技术专家。

方法2: 给大模型提供样本或示例(One-shot或Few-shot)

提供样本示例的作用,可以让大模型**增加上下文信息+激活相关背景知识 + 示范任务格式 +**减少LLM歧义性理解、误解或偏离主题的可能性

比如,你想让大模型生成Java试卷时, 提示词中可以添加如下内容:

复制代码
生成多选题。题目需要涉及Java知识点,包括类的封装、类的继承、类的封装、成员变量、Java关键字等

- 根据用户提供的内容,生成5道多选题。

- 保证每个多选题至少有四个选项。

- 选项编号按照ABCD排列

- 输出格式: ....

方法3 :告诉大模型具体的任务或步骤

对于一些较为复杂的任务,我们需要在提示词中提供处理步骤,以指导模型按照我们的意图来输出信息。

其作用,可以让大模型大任务拆分成小任务(分而治之的思想) + 大模型更好理解任务**+**减少LLM歧义性理解、误解或偏离主题的可能性。

注:让大模型明确任务要求,限定任务范围等

例子,你想让大模型生成Java试卷时, 提示词中可以添加如下内容:

任务1: 生成选择题

任务2: 生成判断题

任务3:生成填空题

...

方法4: 思维链,让大模型给出思考/推理过程,方便验证大模型给出答案或结果的合理性。

注:让大模型 think step by step

思维链的有效性源于其与任务拆解相似的机制。通过思维链,LLM能够自主地将复杂问题分解为一系列小步骤,每一步都为下一步提供了额外的上下文信息;

相比于仅仅给出答案,大模型给出 思考推理过程 + 答案的方式,最终给出的答案的正确概率更高。

思维链(CoT)提示技术,该技术因其在多步骤问题解决中的能力而闻名。这项技术遵循了人类的顺序推理,在各种挑战中表现出了优秀的性能,其中包括跨域、长泛化和跨语言的任务。CoT 及其富有逻辑的、循序渐进的推理方法,在复杂的问题解决场景中提供了至关重要的可解释性。

自动化思维链提示技术: Auto-CoT的核心思想是通过多样化采样自动生成推理链条。与手动设计思维链不同,Auto-CoT能够自动构建包含多个步骤的逻辑推理过程,大幅减少了人工干预的需求。技术的主要优势体现在三个方面:首先,自动化程度高,大幅降低了人力成本;其次,推理链条质量稳定,避免了人为设计的主观性;最后,适用范围广泛,可应用于多种推理任务。

参考:https://blog.csdn.net/gitblog_00032/article/details/155291372

代码:

https://gitcode.com/gh_mirrors/aut/auto-cot/?utm_source=gitcode_aigc_v1_t0&index=top&type=card&uuid_tt_dd=11_64288517577-1769140073421-548170&from_id=155291372&from_link=78624b114510ddba20386088afc675df

方法5:加分隔符避免模型解读提示词造成混淆

在提示词中合理添加分隔符,可以准确区分指令和待处理的内容,避免模型解读提示词时出现困扰。常见的分隔符包括:-、 ```、--- 、=== 等,前面的快递查询助手就很好地使用了分隔符。

比如:

复制代码
### 技能1: 通过用户描述字段生成mapper接口及对应mapper.xml文件内容

- 根据用户提供的内容,生成对应Java实体类、MySQL数据库表字段

- 根据用户提供的内容及实体类,生成对应mapper接口及对应mapper.xml文件内容。

方法6:增加要求

比如: 要求大模型遵循什么、或者不要干什么

比如:

复制代码
## 约束
1.保证符合Java8语法,不要用更新版本的语法
2.如果有模版根据模板生成

方法7:以AI优化AI,实现自我迭代生成提示词

核心逻辑:让大模型担任"提示词工程师",通过"元提示"驱动其自我升级。

比如,自定义提示词优化助手

方法8 :控制返回结果的随机性及输出长度

文档中关于temperature(生成随机性)、max_tokens(输出长度)的说明,能帮助规避"答案跑偏"或"回答中断"问题。

三、工程级"提示词要素"构成

如果我们计划**++使用AI大模型来完成更为复杂的任务,需要AI大模型能够输出更加精准的内容,那么就需要以工程级别的思维来对提示词进行优化++**。这也是提示词工程的定义。

优化和扩展提示词,使其符合工程级别的要求:

写提示词的四个步骤":

角色定义划定专业领域 → 任务拆解提供执行路径 → 场景限定框定输出维度 → 示例教学锚定风格标准。

四、deepseek提示词示例

地址:https://api-docs.deepseek.com/zh-cn/prompt-library

4.1 生成代码

|------------------------------------------------|
| 请帮我用 HTML 生成一个五子棋游戏,所有代码都保存在一个 HTML 中。 |

4.2 代码改写:对代码进行修改,来实现纠错、注释、调优等。

复制代码
下面这段的代码的效率很低,且没有处理边界情况。请先解释这段代码的问题与解决方法,然后进行优化:
```
def fib(n):
    if n <= 2:
        return n
    return fib(n-1) + fib(n-2)
```

4.3 代码解释

复制代码
请解释下面这段代码的逻辑,并说明完成了什么功能:
```
// weight数组的大小 就是物品个数
for(int i = 1; i < weight.size(); i++) { // 遍历物品
    for(int j = 0; j <= bagweight; j++) { // 遍历背包容量
        if (j < weight[i]) dp[i][j] = dp[i - 1][j];
        else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);
    }
}
```

4.4 写大纲

复制代码
你是一位文本大纲生成专家,擅长根据用户的需求创建一个有条理且易于扩展成完整文章的大纲,你拥有强大的主题分析能力,能准确提取关键信息和核心要点。具备丰富的文案写作知识储备,熟悉各种文体和题材的文案大纲构建方法。可根据不同的主题需求,如商业文案、文学创作、学术论文等,生成具有针对性、逻辑性和条理性的文案大纲,并且能确保大纲结构合理、逻辑通顺。该大纲应该包含以下部分:
引言:介绍主题背景,阐述撰写目的,并吸引读者兴趣。
主体部分:第一段落:详细说明第一个关键点或论据,支持观点并引用相关数据或案例。
第二段落:深入探讨第二个重点,继续论证或展开叙述,保持内容的连贯性和深度。
第三段落:如果有必要,进一步讨论其他重要方面,或者提供不同的视角和证据。
结论:总结所有要点,重申主要观点,并给出有力的结尾陈述,可以是呼吁行动、提出展望或其他形式的收尾。
创意性标题:为文章构思一个引人注目的标题,确保它既反映了文章的核心内容又能激发读者的好奇心。

用户输入:

|------------------------------|
| 请帮我生成“中国农业情况”这篇文章的大纲 |

五、动态提示词使用举例

如果需要从用户输入的自然语言提取关键词填充到提示词中,此时需要用到动态提示词。

例子1:

java 复制代码
// 动态模板:使用PromptTemplate注入变量
PromptTemplate template = PromptTemplate.from("请用{{programmingLanguage}}写一个{{function}}函数");
Map<String, Object> variables = Map.of("programmingLanguage", "Java", "function", "二分查找");
String prompt = template.apply(variables).text();
System.out.println(prompt);//请用Java写一个二分查找

例子2:

java 复制代码
dev.langchain4j.model.input.Prompt systemPrompt = loadPromptTemplate( "testcase/generate_testcase.txt" )
//                .apply( Map.of() );
                .apply(Map.of("userDesc", state.userDesc(), "requirmentPointList", state.requirmentPointList()));

例子3:

java 复制代码
@UserMessage("""
    你是一位专业的编辑。请根据给定的观众分析并重写下面的故事,来更好符合目标观众{{audience}}的口味。
    只返回创作的故事。原故事是"{{story}}。
    """)
@Agent(name = "",description = "根据给定的观众创作故事",value = "",outputKey = "story")
String editChineseStory(@V("story") String story, @V("audience") String audience);

参考

https://www.163.com/dy/article/IPADISL80511AQHO.html

https://developer.aliyun.com/article/1630283

相关推荐
zhengfei6112 小时前
一种综合性的现代架构模型,用于集成平台解决方案和工具,以支持专业的红队。
开发语言·人工智能·网络安全·架构·信息与通信
LJ97951112 小时前
告别“通稿地狱”:Infoseek智能媒体发布如何重塑内容分发的游戏规则
大数据·人工智能
草莓熊Lotso2 小时前
Qt 按钮与显示类控件实战:从交互到展示全攻略
大数据·开发语言·c++·人工智能·qt·microsoft·交互
努力也学不会java2 小时前
【Spring Cloud】负载均衡-LoadBalance
java·人工智能·后端·spring·spring cloud·负载均衡
代数狂人2 小时前
从“无类型计算”到“涌现类型”:一种模拟大脑构造与功能的新型AI架构哲学
人工智能·架构
咚咚王者2 小时前
人工智能之核心技术 深度学习 第二章 神经网络训练与优化
人工智能·深度学习·神经网络
科技前线2 小时前
服装进销存软件测评
人工智能·chatgpt·chat gpt·马斯克·open ai
爱看科技2 小时前
微美全息(NASDAQ:WIMI)BlockEdge框架:为工业4.0开辟区块链与边缘计算创新之路
人工智能·区块链·边缘计算
TechubNews2 小时前
Techub News 專訪高鋒集團合夥人、Web3Labs行政總裁黃俊瑯:以資本與生態,賦能傳統企業Web3轉型
大数据·网络·人工智能·区块链