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使用这种格式。
提示词的输入格式:
- <|begin_of_text|>Color of sky is blue but sometimes can also be
复制代码 模型的相应格式:
- 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.
- 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.
提示词的输入格式:
- <|begin_of_text|><|start_header_id|>system<|end_header_id|>
- You are a helpful assistant<|eot_id|><|start_header_id|>user<|end_header_id|>
- Answer who are you in the form of jeopardy?<|eot_id|><|start_header_id|>assistant<|end_header_id|>
复制代码 模型的相应格式:
- Here's my response
- "What is a helpful assistant?"<|eot_id|>
复制代码 工具调用格式
可以使用系统提示词启用以下三个内置工具(brave_search、wolfram_alpha 和代码解释器Code Interpreter):
- Brave Search:实行网络搜刮的工具调用功能
- Wolfram Alpha:实行复杂数学盘算的工具调用功能
- Code Interpreter(代码解释器):使模型能够输出 Python 代码
内置工具调用
以下是使用 Brave Search 的对话示例:
提示词的输入格式:
- <|begin_of_text|><|start_header_id|>system<|end_header_id|>
- Environment: ipython
- Tools: brave_search, wolfram_alpha
- Cutting Knowledge Date: December 2023
- Today Date: 21 September 2024
- You are a helpful assistant.
- <|eot_id|><|start_header_id|>user<|end_header_id|>
- Search the web for the latest price of 1oz gold?<|eot_id|><|start_header_id|>assistant<|end_header_id|>
复制代码 模型的相应格式:
- <|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。
内置代码解释器功能
以下是模型相应并生成代码的实际示例:
提示词的输入格式:
- <|begin_of_text|><|start_header_id|>system<|end_header_id|>
- Environment: ipython<|eot_id|><|start_header_id|>user<|end_header_id|>
- 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|>
复制代码 模型的相应格式:
- <|python_tag|>def is_prime(n):
- if n <= 1
- return False
- for i in range(2, int(n**0.5) + 1):
- if n % i == 0:
- return False
- return True
- print(is_prime(7)) # Output: True<|eom_id|>
复制代码
- 模型起首生成 <|python_tag|> 标记,然后继承编写需要被实行器实行的 Python 代码。
- 系统提示词中无需显式指定 code_interpreter。只要包含 Environment: ipython 就会自动启用代码解释器功能。
内置工具完整交互示例
以下展示了一个完整的内置工具交互过程,包括工具的相应结果以及助手的最终相应内容。
提示词的输入格式
- <|begin_of_text|><|start_header_id|>system<|end_header_id|>
- Environment: ipython
- Tools: brave_search, wolfram_alpha
- <|eot_id|><|start_header_id|>user<|end_header_id|>
- What is the 100th decimal of pi?<|eot_id|><|start_header_id|>assistant<|end_header_id|>
- <|python_tag|>wolfram_alpha.call(query="100th decimal of pi")<|eom_id|><|start_header_id|>ipython<|end_header_id|>
- {
- "queryresult": {
- "success": true,
- "inputstring": "100th decimal of pi",
- "pods": [
- {
- "title": "Input interpretation",
- "subpods": [
- {
- "title": "",
- "plaintext": "100th digit | π"
- }
- ]
- },
- {
- "title": "Nearby digits",
- "subpods": [
- {
- "title": "",
- "plaintext": "...86208998628034825342117067982148086513282306647093..."
- }
- ]
- },
- {
- "title": "Result",
- "primary": true,
- "subpods": [
- {
- "title": "",
- "plaintext": "7"
- }
- ]
- }
- ]
- }
- }
- <|eot_id|><|start_header_id|>assistant<|end_header_id|>
复制代码 模型的相应格式:
- The 100th decimal of pi is 7.<|eot_id|>
复制代码
- 请注意助手相应中包含的 <|python_tag|> 特别标记。
- 当 Wolfram Alpha 的盘算结果被传回模型时,使用 ipython 角色标识。
- 助手的最终复兴消息中包含 <|eot_id|>(轮次结束)标记。
零样本Zero Shot工具调用
基于 JSON 的工具调用
Llama 模型现在支持在单条消息中输出自定义工具调用,这使得工具调用过程变得更加便捷。以下提示词示例将展示模型怎样输出自定义工具调用。需要特别阐明的是,模型自己并不实行这些工具调用;它只负责提供结构化的输出信息,供实行器举行具体的调用操作。
提示词的输入格式:
- <|begin_of_text|><|start_header_id|>system<|end_header_id|>
- Environment: ipython
- Cutting Knowledge Date: December 2023
- Today Date: 21 September 2024
- You are a helpful assistant.
- <|eot_id|><|start_header_id|>user<|end_header_id|>
- Answer the user's question by making use of the following functions if needed.
- If none of the function can be used, please say so.
- Here is a list of functions in JSON format:
- {
- "type": "function",
- "function": {
- "name": "trending_songs",
- "description": "Returns the trending songs on a Music site",
- "parameters": {
- "type": "object",
- "properties": [
- {
- "n": {
- "type": "object",
- "description": "The number of songs to return"
- }
- },
- {
- "genre": {
- "type": "object",
- "description": "The genre of the songs to return"
- }
- }
- ],
- "required": ["n"]
- }
- }
- }
- Return function calls in JSON format.<|eot_id|><|start_header_id|>user<|end_header_id|>
- Use tools to get latest trending songs<|eot_id|><|start_header_id|>assistant<|end_header_id|>
复制代码 模型的相应格式:
- <|python_tag|>{
- "type": "function",
- "name": "trending_songs",
- "parameters": {
- "n": "10",
- "genre": "all"
- }
- }<|eom_id|>
复制代码
- JSON 格式的工具定义必须包含工具名称(name)、形貌(description)和参数(parameters)
- 由于系统提示词中包含了 Environment: ipython 设置,模型会在相应中生成 <|python_tag|> 和 <|eom_id|> 标记
- 工具的使用阐明需要以用户消息的情势添加
- 当前版本仅支持单个工具的调用操作
用户自定义的工具调用示例
以下是基于function工具调用的示例。
此示例展示了怎样为模型编写自定义指令,以实现零样本工具调用。在该示例中,我们使用function标签定义了一种自定义工具调用格式。
提示词的输入格式:
- <|begin_of_text|><|start_header_id|>system<|end_header_id|>
- Environment: ipython
- Cutting Knowledge Date: December 2023
- Today Date: 21 September 2024
- You are a helpful assistant.
- <|eot_id|><|start_header_id|>user<|end_header_id|>
- You have access to the following functions:
- Use the function 'trending_songs' to 'Returns the trending songs on a Music site':
- {"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}}}
- Think very carefully before calling functions.
- If you choose to call a function ONLY reply in the following format with no prefix or suffix:
- <function=example_function_name>{"example_name": "example_value"}</function>
- Reminder:
- - If looking for real time information use relevant functions before falling back to brave_search
- - Function calls MUST follow the specified format, start with <function= and end with </function>
- - Required parameters MUST be specified
- - Only call one function at a time
- - Put the entire function call reply on one line<|eot_id|><|start_header_id|>user<|end_header_id|>
- Use tools to get latest trending songs<|eot_id|><|start_header_id|>assistant<|end_header_id|>
复制代码 模型的相应格式:
- <function=trending_songs>{"n": 10}</function><|eot_id|>
复制代码
- 在这种环境下,模型不会使用 <|python_tag|> 举行相应,并以 <|eot_id|> 结束。
- 工具的使用阐明被添加为用户消息。
参考文献
github.com/meta-llama
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |