当前位置: 代码网 > 科技>人工智能>数据分析 > 【AI 大模型】提示工程 ③ ( 提示词用法 | 提示词 Prompt 构成 | 提示词位置对权重的影响 | 提示词 Prompt 调优 | OpenAI 的 API 类型 | 提示词重要参数说明 )

【AI 大模型】提示工程 ③ ( 提示词用法 | 提示词 Prompt 构成 | 提示词位置对权重的影响 | 提示词 Prompt 调优 | OpenAI 的 API 类型 | 提示词重要参数说明 )

2024年07月31日 数据分析 我要评论
一、提示词用法二、提示词 Prompt 构成1、提示词构成2、提示词位置对权重的影响3、定义角色的好处三、提示词 Prompt 调优1、结合 训练数据 写提示词2、不知道训练数据的情况 - 不断尝试3、高质量提示词特征 - 小作文四、OpenAI 的 API 类型1、续写文本 API 示例2、对话 API 示例五、OpenAI API 中的重要参数说明






一、提示词用法



提示词 prompt 的 两种用法 :

  • 直接提问 : 直接向 gpt 大模型提问 , 得到一个具体问题的答案 , 如 : xxx 错误如何处理 ;
  • 集成应用 : 将 提示词 prompt 集成到自己开发的应用程序中 , 结合自己公司的实际业务状况 , 生成与自己业务相关的一系列提示词 , 如 : 基于公司的一套知识库 + gpt 大模型 进行使用 ;




二、提示词 prompt 构成




1、提示词构成


提示词 prompt 构成 :

  • 指定角色 : 为 大模型 指定一个角色 , 明确指出 " 你是一个 xx " 是很有用的 ;
    • 如 : 你是一位软件工程师 , 请写出 xxx 代码 ;
    • gpt 大模型 在训练文本 时 , 没有想过角色 , 后来使用时发现添加 " 你是一个 xx " 角色设置 非常有效 , 慢慢后面 训练 大模型时 , 都会将角色作为一个 参数 设置到训练中, 之后就越来越有效 ;
    • 将 指定角色 " 你是一个 xx " 提示词 , 必须放在最前面 , 已经有论文研究过了 , 指定角色提示词放在最前面 , 生成的结果最准确 ;
    • 大模型 对 提示词 prompt 开头和结尾的文本更加敏感 , 最重要的内容要放在开头和结尾 , 开头 > 结尾 ;
  • 任务描述 : 给出一个具体的 任务 , 信息越丰富越好 ;
    • 如 : 写出 xx 代码 , 实现以下功能 : xx ;
  • 案例说明 : 期望 大模型 生成 特定 的 输出时 , 给出一个例子 , 可以帮助模型更好地理解任务并生成正确的输出 , 提升输出质量 ;
    • 如 : 你是程序员 , 实现 xx 功能 , 例如 下面的代码 : xx , 在上述代码的基础上进行微调 ;
  • 输入信息 : 任务的输入信息 要在 提示词 中 明确的标识出来 ;
    • 如 : 写出的函数 输入参数 有 x 个 , 分别是 x / x … ;
  • 输出信息 : 详细的描述你对输出信息的要求 , 比如 : 输出格式 , 输出结果个数 , 输出语言 ;
    • 如 : 输出 markdown 格式的文本 , 输出为英文 , 300 字 ;

2、提示词位置对权重的影响


大模型 对 提示词 prompt 开头和结尾的文本更加敏感 , 最重要的内容要放在开头和结尾 , 开头 > 结尾 ;

相对来说 重要性不太强的内容 , 放在中间位置 ;


3、定义角色的好处


在文章开头 定义角色 , 会将 问题领域 收窄 , 减少歧义 ,

比如 : 你定义 " 你是一个 程序员 " 提示词 , 就会将整个问题领域 局限在 编程领域 , 当我们提出 " 模式 " 一词 时 ,

  • 大模型 就会想到 设计模式 , 开发模式 ,
  • 而不会想到 做饭模式 , 睡觉模式 ,

这样能极大的提升准确性 , 得到更好的输出结果 ;





三、提示词 prompt 调优



提示词 prompt 需要 不断的进行调优 , 每当 通过 提示词 得到的结果不满意 , 我们就对 提示词 进行迭代修改 , 不断进行调优 , 直到得到 令我们满意的输出为止 ;


1、结合 训练数据 写提示词


知道训练数据 : 了解 提示词 的 训练数据 , 如果是 自己训练的数据 , 肯定知道 写什么提示词 能得到最佳结果 ;


2、不知道训练数据的情况 - 不断尝试


不知道训练数据 : 如果不知道 gpt 的训练数据 , 那就需要 不断与 大模型 进行聊天 , 了解 gpt 都训练了哪些数据 , 都输出了哪些数据 ;


如何 知道 gpt 大模型训练了哪些数据 , 借助这些数据 进行 提示词 prompt 的 调优 , 以 " 西游记 " 为例 ,

如果知道 gpt ( generative pre-trained transformer ) 大模型 训练 " 西游记 " 相关知识文本 的 数据 , 参考 该方面知识 的 " 训练数据 " 进行 提示词 prompt 调优 , 是最佳途径 ;

跟 gpt 大模型聊天 , 就 聊 " 西游记 " 相关内容 , 聊 几十轮 对话 , 看看 大模型 都训练了哪些数据 ;

尽量选择 与 gpt 输出的内容 类似的 文本 作为 提示词 ;


不断尝试 修改 提示词 , 增加一个字 , 减少一个字 , 使用不同的间隔 和 标点符号 , 对输出结果都有一定的影响 ;

该方案有一定的运气成分 , 门槛比较低 ;


3、高质量提示词特征 - 小作文


高质量提示词 有如下特点 :

  • 描述具体 : 提示词不能太概括 , 描述的越具体越好 ;
  • 信息丰富 : 提供丰富的上下文信息 , 给出 几百上千字 的参考信息 ;
  • 没有歧义 : 目标必须明确 , 不能有歧义 , 不能让 大模型 理解错方向 , 反面案例就是 " 武汉市长江大桥 " ;

高质量的提示词 , 都是 几百字 或者 上千字 的 , 内容丰富 的 " 小作文 " ;





四、openai 的 api 类型



openai 的大模型 出现最早 , 其它的大模型的 api 基本都参考 openai 的大模型 , 学会使用 openai 的 api , 基本其它的大模型提供的 api 都可以很快学会 ;


openai 提供了两种 api 版本 :


基本上使用 对话 api 就可以解决所有问题 , 续写文本 api 几乎很少使用 ;


1、续写文本 api 示例


续写文本 api : https://platform.openai.com/docs/api-reference/completions/create

在这里插入图片描述

官方给出了一个 调用 openai 续写文本 api 的 python 示例代码 :

from openai import openai
client = openai()

client.completions.create(
  model="gpt-3.5-turbo-instruct",
  prompt="say this is a test",
  max_tokens=7,
  temperature=0
)

在之前的博客 【ai 大模型】openai 接口调用 ① ( 安装 openai 软件包 | 查看 openai 软件包版本 | pycharm 中开发 python 程序调用 openai 接口 ) 中 , 购买了 api-key , 设置 api-key 和 请求地址 ,

  • api-key 为 sk-6o3kjuuocexpb1ug39d0a4913a844fcaba892ede9814df8a ,
  • 请求地址是 https://api.xiaoai.plus/v1 ,

这是一个 gpt 3.5 的 api-key ;

from openai import openai

client = openai(
    api_key="sk-6o3kjuuocexpb1ug39d0a4913a844fcaba892ede9814df8a",
    base_url="https://api.xiaoai.plus/v1",
)

completion = client.completions.create(
  model="gpt-3.5-turbo-instruct",
  prompt="say this is a test",
  max_tokens=7,
  temperature=0
)

print(completion.choices[0].message)

在 pycharm 中 直接执行该代码 , 这个代码执行的时间比较长 , 需要等待 几分钟 左右 , 执行结果如下 :

{'role': 'assistant', 'content': '*nods* understood. i am now roleplaying as an ai assistant with broad knowledge'}

在这里插入图片描述


2、对话 api 示例


对话 api : https://platform.openai.com/docs/api-reference/chat/create

在这里插入图片描述

官方给出的示例如下 :

from openai import openai
client = openai()

completion = client.chat.completions.create(
  model="gpt-4o",
  messages=[
    {"role": "system", "content": "you are a helpful assistant."},
    {"role": "user", "content": "hello!"}
  ]
)

print(completion.choices[0].message)

同理 , 设置 api-key 和 请求地址 ,

  • api-key 为 sk-6o3kjuuocexpb1ug39d0a4913a844fcaba892ede9814df8a ,
  • 请求地址是 https://api.xiaoai.plus/v1 ,

这是一个 gpt 3.5 的 api-key ;

最终代码如下 :

from openai import openai

client = openai(
    api_key="sk-6o3kjuuocexpb1ug39d0a4913a844fcaba892ede9814df8a",
    base_url="https://api.xiaoai.plus/v1",
)

completion = client.chat.completions.create(
  model="gpt-3.5-turbo",
  messages=[
    {"role": "system", "content": "you are a helpful assistant."},
    {"role": "user", "content": "hello!"}
  ]
)

print(completion.choices[0].message)

在 pycharm 中执行上述代码 , 执行结果为 :

chatcompletionmessage(content='hello! how can i assist you today?', role='assistant', function_call=none, tool_calls=none)

在这里插入图片描述





五、openai api 中的重要参数说明



openai api 中的重要参数说明 :

  • temperature 参数 : 控制生成结果的多样性 ; 默认值为 0 , 取值范围 0 ~ 2 ;
    • 值越高 , 生成的结果越随机 , 设置为 2 基本胡说八道 ;
    • 值越低 , 生成的结果越固定 , 0 的时候基本固定 ;
  • seed 参数 : 随机种子 , 如果不指定 则 openai 自己随机决定用什么随机种子 ;
    • 指定该 seed 参数后 , 如果 temperature = 0 , 则固定的种子生成的结果是固定的 ;
  • stream 参数 : 控制是否以数据流模式进行生成 ; 默认值为 false ;
    • 如果设置为 true , 在数据流模式下 , 一个字一个字的输出 , 浪费流量 ;
    • 默认 false , 整个生成完了 , 在一次性返回 ;
  • top_p 参数 : 在随机采样时 , 只考虑累计概率前百分之多少的 token , 有助于控制生成文本的多样性 ;
    • 与 temperature 参数作用相似 , 不建议与 temperature 一起使用 ;
  • n 参数 : 一次生成的结果数量 ;
    • 使用提示词的 自洽性 时使用 , 一次返回多个结果再进行比较 ;
  • max_tokens 参数 : 每条生成结果的最大 token 数量 , 超过这个限制的部分会被截断 ;
    • 省钱方案 , 防止某个用户大量消耗 token ;
  • presence_penalty 参数 : 对已经出现过的 token 的概率进行降权 , 帮助生成更多样化的文本结果 ;
    • 避免输出很多重复的话 , 浪费 token ;
  • frequency_penalty 参数 : 根据 token 的出现频次 , 对其生成概率进行降权 ;
  • logit_bias 参数 : 对指定的 token 进行手工加权或降权 , 可以通过这个参数来调整特定 token 的生成概率 , 但不常用 ;

openai 参数示例 :

from openai import openai

client = openai(
    api_key="sk-6o3kjuuocexpb1ug39d0a4913a844fcaba892ede9814df8a",
    base_url="https://api.xiaoai.plus/v1",
)

completion = client.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=[
        {"role": "system", "content": "you are a helpful assistant."},
        {"role": "user", "content": "hello!"}
    ],

    # 下面的参数都是默认参数值

    temperature=1,          # 控制生成结果的多样性
    stream=false,           # 控制是否以数据流模式进行生成
    top_p=1,                # 在随机采样时 只考虑累计概率前百分之多少的 token
    n=1,                    # 一次生成的结果数量
    max_tokens=100,         # 每条生成结果的最大 token 数量
    presence_penalty=0,     # 对已经出现过的 token 的概率进行降权
    frequency_penalty=0,    # 根据 token 的出现频次 对其生成概率进行降权
    logit_bias={},          # 对指定的 token 进行手工加权或降权
)

print(completion.choices[0].message)

执行上述代码结果 :

chatcompletionmessage(content='hello! how can i assist you today?', role='assistant', function_call=none, tool_calls=none)

在这里插入图片描述

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com