AI大模型Llama 3系统级提示词格式Prompt Format

打印 上一主题 下一主题

主题 833|帖子 833|积分 2499

AI模型Llama 3系统级提示词格式Prompt Format

本文将讨论Llama 3.1模型系统级提示中使用的特别标记和角色。它涵盖了如<|begin_of_text|>、<|end_of_text|>等标记,这些标记有助于定义文本的开始和结束、填充以及不同角色(如系统、用户、助手和ipython)的头部。文章还解释了这些标记在各种场景中的使用,包括工具调用和用户互动。此外,它提供了Llama 3.1支持的角色的详细信息,这些角色对于设置交互上下文和在对话式AI设置中生成相应至关重要。
Tokens

以下是 Llama 3.1提示词Prompt支持的特别标记(token)列表:


  • <|begin_of_text|>:指定提示词的开始
  • <|end_of_text|>:模型将停止生成更多标记。此标记仅由基础模型生成。
  • <|finetune_right_pad_id|>:此标记用于在批处置惩罚中将文本序列填充到相同长度。
  • <|start_header_id|> 和 <|end_header_id|>:这些标记用于包围特定消息的角色。可能的角色包括:[system, user, assistant 和 ipython]
  • <|eom_id|>:消息结束标记。表现实行一个使命的潜伏停止点,此时模型可以通知实行器需要举行工具调用Tool Calling。当系统提示词中使用 Environment: ipython 指令时,或者模型调用内置工具时,会生成此标记。
  • <|eot_id|>:轮次结束标记。表现模型已确定完成对启动其相应的用户消息的交互。此标记在两种场景中使用:

    • 在模型和用户的直接交互结束时
    • 在模型与可用工具的多次交互结束时,此标记向实行器发出信号,表明模型已完成相应生成。

  • <|python_tag|>:模型相应中用于标识工具调用的特别标记。
Llama 3.1的4种角色

Llama 3.1 支持以下 4 种不同的角色:


  • system:设置与 AI 模型交互的上下文环境。通常包括帮助模型有效相应的规则、指南或须要信息。
  • user:代表与模型交互的人类用户。包括向模型提供的输入内容、命令和题目。
  • ipython:Llama 3.1 中新引入的角色,在语义上代表"工具"角色。当实行器将工具调用的输出发送回模型时,使用此角色标记相干消息。
  • assistant:代表 AI 模型基于 system、ipython 和 user 提示词所生成的相应内容。

Llama 3.1 基础模型

Llama 3.1基础模型Text completion使用这种格式。
提示词的输入格式:
  1. <|begin_of_text|>Color of sky is blue but sometimes can also be
复制代码
模型的相应格式:
  1. red, orange, yellow, green, purple, pink, brown, gray, black, white, and even rainbow colors. The color of the sky can change due to various reasons such as time of day, weather conditions, pollution, and atmospheric phenomena.
  2. The color of the sky is primarily blue because of a phenomenon called
复制代码
Llama 3.1 指令模型

User角色与Assistant角色对话

Here is a regular multi-turn user assistant conversation and how its formatted.
提示词的输入格式:
  1. <|begin_of_text|><|start_header_id|>system<|end_header_id|>
  2. You are a helpful assistant<|eot_id|><|start_header_id|>user<|end_header_id|>
  3. Answer who are you in the form of jeopardy?<|eot_id|><|start_header_id|>assistant<|end_header_id|>
复制代码
模型的相应格式:
  1. Here's my response
  2. "What is a helpful assistant?"<|eot_id|>
复制代码
工具调用格式

可以使用系统提示词启用以下三个内置工具(brave_search、wolfram_alpha 和代码解释器Code Interpreter):


  • Brave Search:实行网络搜刮的工具调用功能
  • Wolfram Alpha:实行复杂数学盘算的工具调用功能
  • Code Interpreter(代码解释器):使模型能够输出 Python 代码
内置工具调用

以下是使用 Brave Search 的对话示例:
提示词的输入格式:
  1. <|begin_of_text|><|start_header_id|>system<|end_header_id|>
  2. Environment: ipython
  3. Tools: brave_search, wolfram_alpha
  4. Cutting Knowledge Date: December 2023
  5. Today Date: 21 September 2024
  6. You are a helpful assistant.
  7. <|eot_id|><|start_header_id|>user<|end_header_id|>
  8. Search the web for the latest price of 1oz gold?<|eot_id|><|start_header_id|>assistant<|end_header_id|>
复制代码
模型的相应格式:
  1. <|python_tag|>brave_search.call(query="latest price of 1oz gold")<|eom_id|>
复制代码


  • 只需在系统提示词中包含 Environment: ipython 即可启用代码解释器功能;因此,无需在 Tools: 行中特别指定代码解释功能。模型可以生成 Python 代码,这些代码会由实行器举行解释实行,并将实行结果反馈给模型。
  • 助手角色Assistant相应的消息正文始终以特别标记 <|python_tag|> 开头。
  • 模型生成 <|eom_id|>(消息结束标记)而不仅仅是尺度的 <|eot_id|>(轮次结束标记)。轮次结束标记表现对话轮次已完成,而消息结束标记则表现模型正在举行多步推理。这意味着模型正在等候吸收包含工具调用实行结果的后续消息。
  • 模型的工具调用相应格式为 tool.call(query=“…”),其中 tool 可以是 brave_search 或 wolfram_alpha。
内置代码解释器功能

以下是模型相应并生成代码的实际示例:
提示词的输入格式:
  1. <|begin_of_text|><|start_header_id|>system<|end_header_id|>
  2. Environment: ipython<|eot_id|><|start_header_id|>user<|end_header_id|>
  3. Write code to check if number is prime, use that to see if the number 7 is prime<|eot_id|><|start_header_id|>assistant<|end_header_id|>
复制代码
模型的相应格式:
  1. <|python_tag|>def is_prime(n):
  2.     if n <= 1
  3.         return False
  4.     for i in range(2, int(n**0.5) + 1):
  5.         if n % i == 0:
  6.             return False
  7.     return True
  8. print(is_prime(7))  # Output: True<|eom_id|>
复制代码


  • 模型起首生成 <|python_tag|> 标记,然后继承编写需要被实行器实行的 Python 代码。
  • 系统提示词中无需显式指定 code_interpreter。只要包含 Environment: ipython 就会自动启用代码解释器功能。
内置工具完整交互示例

以下展示了一个完整的内置工具交互过程,包括工具的相应结果以及助手的最终相应内容。
提示词的输入格式
  1. <|begin_of_text|><|start_header_id|>system<|end_header_id|>
  2. Environment: ipython
  3. Tools: brave_search, wolfram_alpha
  4. <|eot_id|><|start_header_id|>user<|end_header_id|>
  5. What is the 100th decimal of pi?<|eot_id|><|start_header_id|>assistant<|end_header_id|>
  6. <|python_tag|>wolfram_alpha.call(query="100th decimal of pi")<|eom_id|><|start_header_id|>ipython<|end_header_id|>
  7. {
  8.     "queryresult": {
  9.         "success": true,
  10.         "inputstring": "100th decimal of pi",
  11.         "pods": [
  12.             {
  13.                 "title": "Input interpretation",
  14.                 "subpods": [
  15.                     {
  16.                         "title": "",
  17.                         "plaintext": "100th digit | π"
  18.                     }
  19.                 ]
  20.             },
  21.             {
  22.                 "title": "Nearby digits",
  23.                 "subpods": [
  24.                     {
  25.                         "title": "",
  26.                         "plaintext": "...86208998628034825342117067982148086513282306647093..."
  27.                     }
  28.                 ]
  29.             },
  30.             {
  31.                 "title": "Result",
  32.                 "primary": true,
  33.                 "subpods": [
  34.                     {
  35.                         "title": "",
  36.                         "plaintext": "7"
  37.                     }
  38.                 ]
  39.             }
  40.         ]
  41.     }
  42. }
  43. <|eot_id|><|start_header_id|>assistant<|end_header_id|>
复制代码
模型的相应格式:
  1. The 100th decimal of pi is 7.<|eot_id|>
复制代码


  • 请注意助手相应中包含的 <|python_tag|> 特别标记。
  • 当 Wolfram Alpha 的盘算结果被传回模型时,使用 ipython 角色标识。
  • 助手的最终复兴消息中包含 <|eot_id|>(轮次结束)标记。
零样本Zero Shot工具调用

基于 JSON 的工具调用

Llama 模型现在支持在单条消息中输出自定义工具调用,这使得工具调用过程变得更加便捷。以下提示词示例将展示模型怎样输出自定义工具调用。需要特别阐明的是,模型自己并不实行这些工具调用;它只负责提供结构化的输出信息,供实行器举行具体的调用操作。
提示词的输入格式:
  1. <|begin_of_text|><|start_header_id|>system<|end_header_id|>
  2. Environment: ipython
  3. Cutting Knowledge Date: December 2023
  4. Today Date: 21 September 2024
  5. You are a helpful assistant.
  6. <|eot_id|><|start_header_id|>user<|end_header_id|>
  7. Answer the user's question by making use of the following functions if needed.
  8. If none of the function can be used, please say so.
  9. Here is a list of functions in JSON format:
  10. {
  11.     "type": "function",
  12.     "function": {
  13.         "name": "trending_songs",
  14.         "description": "Returns the trending songs on a Music site",
  15.         "parameters": {
  16.             "type": "object",
  17.             "properties": [
  18.                 {
  19.                     "n": {
  20.                         "type": "object",
  21.                         "description": "The number of songs to return"
  22.                     }
  23.                 },
  24.                 {
  25.                     "genre": {
  26.                         "type": "object",
  27.                         "description": "The genre of the songs to return"
  28.                     }
  29.                 }
  30.             ],
  31.             "required": ["n"]
  32.         }
  33.     }
  34. }
  35. Return function calls in JSON format.<|eot_id|><|start_header_id|>user<|end_header_id|>
  36. Use tools to get latest trending songs<|eot_id|><|start_header_id|>assistant<|end_header_id|>
复制代码
模型的相应格式:
  1. <|python_tag|>{
  2.     "type": "function",
  3.     "name": "trending_songs",
  4.     "parameters": {
  5.         "n": "10",
  6.         "genre": "all"
  7.     }
  8. }<|eom_id|>
复制代码


  • JSON 格式的工具定义必须包含工具名称(name)、形貌(description)和参数(parameters)
  • 由于系统提示词中包含了 Environment: ipython 设置,模型会在相应中生成 <|python_tag|> 和 <|eom_id|> 标记
  • 工具的使用阐明需要以用户消息的情势添加
  • 当前版本仅支持单个工具的调用操作
用户自定义的工具调用示例

以下是基于function工具调用的示例。
此示例展示了怎样为模型编写自定义指令,以实现零样本工具调用。在该示例中,我们使用function标签定义了一种自定义工具调用格式。
提示词的输入格式:
  1. <|begin_of_text|><|start_header_id|>system<|end_header_id|>
  2. Environment: ipython
  3. Cutting Knowledge Date: December 2023
  4. Today Date: 21 September 2024
  5. You are a helpful assistant.
  6. <|eot_id|><|start_header_id|>user<|end_header_id|>
  7. You have access to the following functions:
  8. Use the function 'trending_songs' to 'Returns the trending songs on a Music site':
  9. {"name": "trending_songs", "description": "Returns the trending songs on a Music site", "parameters": {"genre": {"description": "The genre of the songs to return", "param_type": "str", "required": false}, "n": {"description": "The number of songs to return", "param_type": "int", "required": true}}}
  10. Think very carefully before calling functions.
  11. If you choose to call a function ONLY reply in the following format with no prefix or suffix:
  12. <function=example_function_name>{"example_name": "example_value"}</function>
  13. Reminder:
  14. - If looking for real time information use relevant functions before falling back to brave_search
  15. - Function calls MUST follow the specified format, start with <function= and end with </function>
  16. - Required parameters MUST be specified
  17. - Only call one function at a time
  18. - Put the entire function call reply on one line<|eot_id|><|start_header_id|>user<|end_header_id|>
  19. Use tools to get latest trending songs<|eot_id|><|start_header_id|>assistant<|end_header_id|>
复制代码
模型的相应格式:
  1. <function=trending_songs>{"n": 10}</function><|eot_id|>
复制代码


  • 在这种环境下,模型不会使用 <|python_tag|> 举行相应,并以 <|eot_id|> 结束。
  • 工具的使用阐明被添加为用户消息。
参考文献

github.com/meta-llama

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

熊熊出没

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表