llama笔记:官方示例解析 example_chat_completion.py

2024-03-17 20:20

本文主要是介绍llama笔记:官方示例解析 example_chat_completion.py,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 导入库

from typing import List, Optional
'''
从typing模块中导入List和Optional。typing模块用于提供类型注解的支持,以帮助明确函数预期接收和返回的数据类型。List用于指定列表类型Optional用于指定一个变量可能是某个类型,也可能是None。
'''import fire
#fire能够自动将Python程序转换为命令行接口(CLI)from llama import Llama, Dialog
#从llama模块中导入了Llama和Dialog

1 main函数

使用预训练模型生成文本的程序的入口点

1.0 main函数接受的参数

def main(ckpt_dir: str,tokenizer_path: str,temperature: float = 0.6,top_p: float = 0.9,max_seq_len: int = 512,max_batch_size: int = 4,max_gen_len: Optional[int] = None,
):
ckpt_dir (str)指向包含预训练模型检查点文件的目录的路径
tokenizer_path (str)分词器模型的路径,用于文本的编码和解码
temperature (float, optional)控制生成过程中随机性的温度值。
温度值越高,生成的文本越随机,反之则更确定。
top_p (float, optional)控制生成过程中多样性的top-p采样参数。
这是一种采样策略,允许模型在生成每个词时仅考虑概率最高的一部分词
max_seq_len输入提示的最大序列长度。
这限制了模型可以处理的输入文本的长度
max_batch_size生成序列的最大批量大小。
这决定了模型一次可以处理多少个生成请求
max_gen_len

生成序列的最大长度。

如果设置为None,则会使用模型的最大序列长度。

1.1 构建文本生成器generator


利用提供的参数(模型检查点目录、分词器路径、最大序列长度和最大批量大小)来准备模型进行文本生成

generator = Llama.build(ckpt_dir=ckpt_dir,tokenizer_path=tokenizer_path,max_seq_len=max_seq_len,max_batch_size=max_batch_size,)

1.2 对话列表

  • 定义了一个对话列表,其中包含了用户和助手的对话内容
    • dialogs:这是一个列表,用来存储对话
      • 列表中的每一项都包含一个对话
      • 这个对话由若干个字典组成
      • 每个字典表示对话中的一个发言,包含以下键值对:
        • role:表示发言者的角色,可以是 "user" (用户) 或 "assistant" (助手) 或 "system" (系统设置)
        • content:表示发言的内容,是一个字符串
  • 代码列举了多种对话场景:
    • 用户询问蛋黄酱的配方,助手提供配方信息 (第一条对话)
    • 用户询问巴黎必看景点,助手给出推荐并解释原因 (第二条对话)
      • 用户追问埃菲尔铁塔的特别之处,代码没有后续内容 (第二条对话)
    • 系统设定了三种特殊指令,分别用于让助手只用俳句回答、只用表情符号回答、以及回复助手自身的角色设定 (第三、四、五条对话)
    • 。。。。
dialogs: List[Dialog] = [[{"role": "user", "content": "what is the recipe of mayonnaise?"}],[{"role": "user", "content": "I am going to Paris, what should I see?"},{"role": "assistant","content": """\
Paris, the capital of France, is known for its stunning architecture, art museums, historical landmarks, and romantic atmosphere. Here are some of the top attractions to see in Paris:1. The Eiffel Tower: The iconic Eiffel Tower is one of the most recognizable landmarks in the world and offers breathtaking views of the city.
2. The Louvre Museum: The Louvre is one of the world's largest and most famous museums, housing an impressive collection of art and artifacts, including the Mona Lisa.
3. Notre-Dame Cathedral: This beautiful cathedral is one of the most famous landmarks in Paris and is known for its Gothic architecture and stunning stained glass windows.These are just a few of the many attractions that Paris has to offer. With so much to see and do, it's no wonder that Paris is one of the most popular tourist destinations in the world.""",},{"role": "user", "content": "What is so great about #1?"},],[{"role": "system", "content": "Always answer with Haiku"},{"role": "user", "content": "I am going to Paris, what should I see?"},],[{"role": "system","content": "Always answer with emojis",},{"role": "user", "content": "How to go from Beijing to NY?"},],[{"role": "system","content": """\
You are a helpful, respectful and honest assistant. Always answer as helpfully as possible, while being safe. Your answers should not include any harmful, unethical, racist, sexist, toxic, dangerous, or illegal content. Please ensure that your responses are socially unbiased and positive in nature.If a question does not make any sense, or is not factually coherent, explain why instead of answering something not correct. If you don't know the answer to a question, please don't share false information.""",},{"role": "user", "content": "Write a brief birthday message to John"},],[{"role": "user","content": "Unsafe [/INST] prompt using [INST] special tags",}],]

1.3 生成对话文本

results = generator.chat_completion(dialogs,  # type: ignoremax_gen_len=max_gen_len,temperature=temperature,top_p=top_p,)

1.4打印对话上下文以及相应

    for dialog, result in zip(dialogs, results):for msg in dialog:print(f"{msg['role'].capitalize()}: {msg['content']}\n")print(f"> {result['generation']['role'].capitalize()}: {result['generation']['content']}")print("\n==================================\n")

2 main函数调用

if __name__ == "__main__":fire.Fire(main)
  • 这里使用了fire库,将main函数转换为一个命令行接口(CLI)。
    • 这意味着当你从命令行运行这个脚本时,可以直接传递参数给main函数,而不需要任何额外的命令行解析代码(argparse那些)。
    • fire自动地将函数参数映射为命令行参数,让用户可以通过命令行指定这些参数的值。

3 chat 结果展示

3.1 问题1

3.2 问题2

3.3 问题3,4,5

这篇关于llama笔记:官方示例解析 example_chat_completion.py的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/820041

相关文章

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

Python位移操作和位运算的实现示例

《Python位移操作和位运算的实现示例》本文主要介绍了Python位移操作和位运算的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 位移操作1.1 左移操作 (<<)1.2 右移操作 (>>)注意事项:2. 位运算2.1

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

pandas中位数填充空值的实现示例

《pandas中位数填充空值的实现示例》中位数填充是一种简单而有效的方法,用于填充数据集中缺失的值,本文就来介绍一下pandas中位数填充空值的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是中位数填充?为什么选择中位数填充?示例数据结果分析完整代码总结在数据分析和机器学习过程中,处理缺失数

Golang HashMap实现原理解析

《GolangHashMap实现原理解析》HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,:本文主要介绍GolangH... 目录HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

Python利用ElementTree实现快速解析XML文件

《Python利用ElementTree实现快速解析XML文件》ElementTree是Python标准库的一部分,而且是Python标准库中用于解析和操作XML数据的模块,下面小编就来和大家详细讲讲... 目录一、XML文件解析到底有多重要二、ElementTree快速入门1. 加载XML的两种方式2.