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中StopWatch的使用示例详解

《Java中StopWatch的使用示例详解》stopWatch是org.springframework.util包下的一个工具类,使用它可直观的输出代码执行耗时,以及执行时间百分比,这篇文章主要介绍... 目录stopWatch 是org.springframework.util 包下的一个工具类,使用它

Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)

《SpringBoot3.4.3基于SpringWebFlux实现SSE功能(代码示例)》SpringBoot3.4.3结合SpringWebFlux实现SSE功能,为实时数据推送提供... 目录1. SSE 简介1.1 什么是 SSE?1.2 SSE 的优点1.3 适用场景2. Spring WebFlu

springboot security快速使用示例详解

《springbootsecurity快速使用示例详解》:本文主要介绍springbootsecurity快速使用示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录创www.chinasem.cn建spring boot项目生成脚手架配置依赖接口示例代码项目结构启用s

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

golang 日志log与logrus示例详解

《golang日志log与logrus示例详解》log是Go语言标准库中一个简单的日志库,本文给大家介绍golang日志log与logrus示例详解,感兴趣的朋友一起看看吧... 目录一、Go 标准库 log 详解1. 功能特点2. 常用函数3. 示例代码4. 优势和局限二、第三方库 logrus 详解1.

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Redis 中的热点键和数据倾斜示例详解

《Redis中的热点键和数据倾斜示例详解》热点键是指在Redis中被频繁访问的特定键,这些键由于其高访问频率,可能导致Redis服务器的性能问题,尤其是在高并发场景下,本文给大家介绍Redis中的热... 目录Redis 中的热点键和数据倾斜热点键(Hot Key)定义特点应对策略示例数据倾斜(Data S

一文教你Python引入其他文件夹下的.py文件

《一文教你Python引入其他文件夹下的.py文件》这篇文章主要为大家详细介绍了如何在Python中引入其他文件夹里的.py文件,并探讨几种常见的实现方式,有需要的小伙伴可以根据需求进行选择... 目录1. 使用sys.path动态添加路径2. 使用相对导入(适用于包结构)3. 使用pythonPATH环境

JavaScript Array.from及其相关用法详解(示例演示)

《JavaScriptArray.from及其相关用法详解(示例演示)》Array.from方法是ES6引入的一个静态方法,用于从类数组对象或可迭代对象创建一个新的数组实例,本文将详细介绍Array... 目录一、Array.from 方法概述1. 方法介绍2. 示例演示二、结合实际场景的使用1. 初始化二