当前位置:首页|资讯|提示词|人工智能|大语言模型

零门槛,小白也能学会的GPT提示词

作者:wwwzhouhui发布时间:2024-08-02

1.什么是Prompt

Prompt是一种用于指导以大语言模型为代表的生成式人工智能生成内容(文本、图像、视频等)的输入方式。它通常是一个简短的文本或问题,用于描述任务和要求。

Prompt可以包含一些特定的关键词或短语,用于引导模型生成符合特定主题或风格的内容。例如,如果我们要生成一篇关于“人工智能”的文章,我们可以使用“人工智能”作为Prompt,让模型生成一篇关于人工智能的介绍、应用、发展等方面的文章。

Prompt还可以包含一些特定的指令或要求,用于控制生成文本的语气、风格、长度等方面。例如,我们可以使用“请用幽默的语气描述人工智能的发展历程”作为Prompt,让模型生成一篇幽默风趣的文章。

总之,Prompt是一种灵活、多样化的输入方式,可以用于指导大语言模型生成各种类型的内容。

2.什么是提示工程

提示工程是一种通过设计和调整输入(Prompts)来改善模型性能或控制其输出结果的技术。

在模型回复的过程中,首先获取用户输入的文本,然后处理文本特征并根据输入文本特征预测之后的文本,原理为next token prediction

提示工程是模型性能优化的基石,有以下六大基本原则:

  • 指令要清晰

  • 提供参考内容

  • 复杂的任务拆分成子任务

  • 给 LLM“思考”时间(给出过程)

  • 使用外部工具

  • 系统性测试变化

3.什么是LangGPT

LangGPT 是 Language For GPT-like LLMs 的简称,中文名为结构化提示词。LangGPT 是一个帮助你编写高质量提示词的工具,理论基础是我们提出的一套模块化、标准化的提示词编写方法论——结构化提示词。我们希望揭开提示工程的神秘面纱,为大众提供一套可操作、可复现的提示词方法论、工具和交流社群。我们的愿景是让人人都能写出高质量提示词。LangGPT社区文档:https://langgpt.ai

3.1LangGPT结构

LangGPT框架参考了面向对象程序设计的思想,设计为基于角色的双层结构,一个完整的提示词包含模块-内部元素两级,模块表示要求或提示LLM的方面,例如:背景信息、建议、约束等。内部元素为模块的组成部分,是归属某一方面的具体要求或辅助信息,分为赋值型和方法型。

一个好的结构化 Prompt 模板,某种意义上是构建了一个好的全局思维链。 如 LangGPT 中展示的模板设计时就考虑了如下思维链:

Role (角色) -> Profile(角色简介)—> Profile 下的 skill (角色技能) -> Rules (角色要遵守的规则) -> Workflow (满足上述条件的角色的工作流程) -> Initialization (进行正式开始工作的初始化准备) -> 开始实际使用

提示设计框架

CRISPE,参考:https://github.com/mattnigh/ChatGPT3-Free-Prompt-List

  • Capacity and Role (能力与角色):希望 ChatGPT 扮演怎样的角色。

  • Insight (洞察力):背景信息和上下文(坦率说来我觉得用 Context 更好)

  • Statement (指令):希望 ChatGPT 做什么。

  • Personality (个性):希望 ChatGPT 以什么风格或方式回答你。

  • Experiment (尝试):要求 ChatGPT 提供多个答案。

  • Context (背景): 提供任务背景信息

  • Objective (目标): 定义需要LLM执行的任务

  • Style (风格): 指定希望LLM具备的写作风格

  • Tone (语气): 设定LLM回复的情感基调

  • Audience (观众): 表明回复的对象

  • Response (回复): 提供回复格式

完成的提示如下:

#  CONTEXT  #
我是一名个人生产力开发人员。在个人发展和生产力领域,对系统的需求日益增长,这些系统不仅能帮助个人设定目标,还能将这些目标转化为可操作的步骤。许多人在从愿望转变为具体行动的过程中遇到困难,这凸显了对有效的目标到系统转换过程的需求。

#########

#  OBJECTIVE  #
你的任务是指导我创建一个全面的系统转换器。这涉及将流程分解为不同的步骤,包括确定目标、采用 5 个为什么技术、学习核心操作、设定意图和进行定期审查。目的是提供分步指南,以便无缝地将目标转化为可操作的计划。

#########

# STYLE #
以信息性和指导性风格撰写,类似于个人发展指南。确保每个步骤的呈现清晰连贯,迎合那些渴望提高生产力和实现目标技能的受众。

#########

# Tone #
自始至终保持积极和激励的语气,培养一种赋权和鼓励的感觉。它应该感觉像一个友好的向导,提供有价值的见解。

# AUDIENCE #
目标受众是对个人发展和生产力提高感兴趣的个人。假设读者寻求实用建议和可行步骤,以将目标转化为切实成果。

#########

# RESPONSE FORMAT #
提供目标到系统转换过程的结构化步骤列表。每个步骤都应明确定义,并且总体格式应易于遵循,以便快速实施。

#############

# START ANALYSIS #
如果你明白的话,就问我我的目标吧。

4.如何使用gpt来生成LangGPT结构格式的提示词

4.1 传统方式

了解以上背景知识后,如果单纯让我们按照规范编写提示词还是有一点难度的。我们可以借助gpt 来给我们创造和生成LangGPT结构格式的提示词,然后在此基础上修改一下这样就能大大加快提示词编写为我所用了。

 举例:

 我们有一个SQL 语句:

select
m.ip_address,
m.name,
count(*)
from
(
select
 a.id,
 a.ip_address,
 b.name,
 a.create_time
from
 dwa_user_ip a
left join dwa_user_name b on
 a.ip_address = b.ip_address
where
 a.create_time >'2024-01-19') m
group by
m.ip_address,
m.name
order by
count(*) desc

我们希望通过GPT 帮我 优化一下。传统的做法是这样的

用户输入一段SQL语句比如‘select m.ip_address,m.name,count(*) from (SELECT a.id, a.ip_address, b.name, a.create_time
FROM dwa_user_ip a
LEFT JOIN dwa_user_name b ON a.ip_address = b.ip_address
where a.create_time >'2024-01-19') m group by m.ip_address,m.name order by count(*) desc
’ 请帮我们优化一下SQL语句。

这样我们发给GPT 他给我们返回

       GPT 会给我们返回SQL 语句优化的解释,并给我们返回优化后的SQL 语句。总体来说这个回答还是不错的,有解释,有优化后的答案。这里面有一个问题就是我们问的问题如果非常简单GPT 随机性比较大回答每次可能不一样,这样就不一定能满足用户的需求。另外对用户来说 问题中每次夹杂着相关要求,对用户体验来说不够友好。所以我们需要改进一下,也就是利用LangGPT结构格式的提示词变成系统提示词。

4.2 GPT生成LangGPT结构格式的提示词

我们发如下的对话,发给GPT

用户输入一段SQL语句比如"select m.ip_address,m.name,count(*) from (SELECT a.id, a.ip_address, b.name, a.create_time
FROM dwa_user_ip a
LEFT JOIN dwa_user_name b ON a.ip_address = b.ip_address
where a.create_time >'2024-01-19') m group by m.ip_address,m.name order by count(*) desc
" 只返回优化后的SQL,用markdown格式输出,其他不要输出。 请根据以上内容编写提示词,使用LangGPT提示词(prompt)语法编写一个SQL语句优化提示词专家。

  GPT 给我返回生成好的符合LangGPT结构格式的系统提示词

# Role: SQL优化专家

## Profile
- 名称: SQL优化器
- 专长: SQL语句分析和优化
- 输出: 仅优化后的SQL语句,使用markdown格式

## Background
你是一位精通SQL优化的专家,能够快速分析SQL语句并提供优化方案。你的任务是接收用户输入的SQL查询,进行分析和优化,然后仅输出优化后的SQL语句,不提供其他解释或评论。

## Goals
- 分析用户提供的SQL语句
- 识别并解决性能问题
- 重写SQL以提高效率
- 仅输出优化后的SQL语句

## Constraints
- 只输出优化后的SQL语句,使用markdown代码块格式
- 不提供解释、评论或其他额外信息
- 保持SQL的原始功能和结果不变
- 如果SQL已经是最优的,则原样返回

## Skills
- 深入理解SQL语法和优化技巧
- 能够识别和解决常见的SQL性能问题
- 熟悉各种SQL优化策略,如索引优化、查询重写等

## Workflows
1. 仔细阅读用户提供的SQL语句
2. 分析SQL结构,识别潜在的性能问题
3. 应用适当的优化技术重写SQL
4. 使用markdown代码块格式输出优化后的SQL

## Output Format
```sql
[此处是优化后的SQL语句]

通过以上的方式我们就让GPT理解我们需要生成LangGPT结构格式的提示词了,让他给我编写系统提示词。

4.3  使用chatbox验证

我们将以上GPT 生成的LangGPT结构格式的提示词复制到chatbox系统提示中,让其设定成"SQL专家"

打开chatbox- 专属设定

我们将GPT生成好的系统提示词复制到,这个角色设定输入框中。保存设置,关闭窗口。

接下来我们只输入需要输入的SQL

select m.ip_address,m.name,count(*) from (SELECT a.id, a.ip_address, b.name, a.create_time
FROM dwa_user_ip a
LEFT JOIN dwa_user_name b ON a.ip_address = b.ip_address
where a.create_time >'2024-01-19') m group by m.ip_address,m.name order by count(*) desc

将上诉SQL 语句输入到chatbox 聊天对话窗口中

这样通过系统提示的限定,这样我们就打造出一个SQL优化的专家了。对用户来说输入的条件变少了,返回信息也是按照我要求的信息返回了。

5.用代码来实现

有的小伙伴可能觉得这样操作不方便,不能批量实现能不能通过编码的方式批量来实现呢。下面给出测试代码

OptimizingSQL.py

from openai import OpenAI

client = OpenAI(
   api_key='EMPTY',
   base_url='http://101.126.xx.xx:7002/v1',
)
model_type = "/tmp/pretrainmodel/Qwen2-7B-Instruct"
print(f'model_type: {model_type}')

messages = [
   {"role": "system", "content": "你是一个SQL优化专家。你的任务是分析给定的SQL查询,并提供优化后的版本。只返回优化后的SQL,使用markdown格式输出,不要提供任何其他解释或评论。"}
]

for query in ['select m.ip_address,m.name,count(*) from (SELECT a.id, a.ip_address, b.name, a.create_time\nFROM dwa_user_ip a\nLEFT JOIN dwa_user_name b ON a.ip_address = b.ip_address\nwhere a.create_time >\'2024-01-19\') m group by m.ip_address,m.name order by count(*) desc']:
   messages.append({
       'role': 'user',
       'content': query
   })
   resp = client.chat.completions.create(
       model=model_type,
       messages=messages,
       seed=42)
   response = resp.choices[0].message.content
   print(f'query: {query}')
   print(f'response: {response}')
   messages.append({'role': 'assistant', 'content': response})
   
# 流式
for query in ['select m.ip_address,m.name,count(*) from (SELECT a.id, a.ip_address, b.name, a.create_time\nFROM dwa_user_ip a\nLEFT JOIN dwa_user_name b ON a.ip_address = b.ip_address\nwhere a.create_time >\'2024-01-19\') m group by m.ip_address,m.name order by count(*) desc']:
   messages.append({'role': 'user', 'content': query})
   stream_resp = client.chat.completions.create(
       model=model_type,
       messages=messages,
       stream=True,
       seed=42)

   print(f'query: {query}')
   print('response: ', end='')
   response = ''
   for chunk in stream_resp:
       if chunk.choices[0].delta.content is not None:
           response += chunk.choices[0].delta.content
           print(chunk.choices[0].delta.content, end='', flush=True)
   print()
   messages.append({'role': 'assistant', 'content': response})

以上代码实际工作中流式输出和非流输出 2个保留一个即可,另外可以注释掉。

依赖包安装

# 安装openai 客户端调用依赖包
pip install openai

执行代码

python OptimizingSQL.py

输出结果。


6 总结

我们在实际工作中会遇到很多提示词不会写,通过以上方式也是可以编写一下好用的提示词。这样在借助用GPT工具来协助我们工作和学习,提高学习和工作的效率。



Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1