定制加工
EasyLLM:简化语言模型处理,实现 OpenAI 和 Hugging Face 客户端的无缝切换
2024-12-31 16:49

在这短短不到一年的时间里,国内外涌现的大型语言模型(LLM)可谓是百花齐放,不管是开源还是闭源都出现了一些非常优秀的模型,然而在利用LLM进行应用开发的时候,会发现每个模型从部署、到训练、微调、API接口开发、prompt提示词格式等方面都存在或多或少的差异,导致如果一个产品需要接入不同的LLM或者快速切换模型的时候变得更加复杂,使用没有那么方便,也不便于维护。

首先,LLM的使用和部署过程相对复杂。不同的LLM提供商和框架之间存在着差异,导致用户需要进行繁琐的配置和适配工作。例如,使用OpenAI的Completion API、ChatCompletion、Completion和Embedding与使用Hugging Face的对应功能之间可能存在不兼容性,需要用户手动修改代码以适应不同的模型。

其次,LLM的提示格式也是一个问题。不同的LLM可能使用不同的提示格式,使得在不同模型之间切换时需要进行格式转换。这给用户带来了额外的工作量和学习成本。

此外,LLM的响应时间也是一个考虑因素。在某些场景下,特别是需要实时交互的情况下,等待整个LLM完成生成结果可能会导致延迟和不便。

为了解决以上存在的这些问题EasyLLM应运而生,可以帮我们很轻松的解决这些问题。

EasyLLM 是一个开源项目,旨在简化和提升处理LLM的过程。它提供了兼容的客户端,使用户能够轻松地在不同的LLM之间切换,只需修改一行代码即可实现。此外,EasyLLM还提供了一个提示助手,帮助用户在不同LLM的格式之间进行转换。而且,EasyLLM支持流式传输,用户可以立即获取部分生成结果,而无需等待整个响应。

EasyLLM第一个版本实现了与 OpenAI 的 Completion API 兼容的Client。这意味着您可以轻松地将, ,替换为 , 或者。只需要通过更改一行代码即可替换 。

通过EasyLLM,我们可以更加方便地利用和应用不同的LLM模型,提高工作效率和灵活性。接下来,让我们深入了解EasyLLM的主要特点和功能,以及它如何为我们带来更好的LLM体验。

以下是当前功能的列表

  • 兼容的客户端- 实现与 OpenAI 的 API、和兼容的客户端。通过更改一行代码即可轻松在不同的LLM之间切换。

  • 提示助手- 帮助在不同 LLM 的格式之间转换提示的实用程序。例如,从 OpenAI 消息格式转到 LLaMA 等模型的提示。

  • 流式传输支持- 从您的 LLM 流式传输完成结果,而不是等待整个响应。非常适合聊天界面之类的东西。

目前为止计划

  • (正在进行中) - 是一种使用LLM创建指令的方法,可以将简单的指令演变成复杂的指令。

  • - 帮助方法可以在 OpenAI Messages 等提示格式与 Llama 2 等开源模型的提示之间轻松转换。

  • 客户端可轻松与 Amazon SageMaker 上部署的 LLM 交互

通过 pip 安装 EasyLLM

 

然后导入一个客户端并开始使用它

 

输出结果

 

查看文档以获取更多示例和详细的使用说明。代码位于GitHub上。

在 EasyLLM 上下文中,“客户端”是指与特定 LLM API(例如 OpenAI)交互的代码。目前支持的客户端有

  • - ChatCompletion 用于与与 OpenAI ChatCompletion API 兼容的 LLM 进行交互。

  • - 用于与 OpenAI Completion API 兼容的LLM进行交互。

  • - 用于与 OpenAI Embedding API 兼容的 LLM 进行交互。

EasyLLM 提供了一个与 HuggingFace 模型连接的客户端。该客户端与HuggingFace Inference API、Hugging Face Inference Endpoints或任何运行文本生成推理或兼容 API 端点的Web 服务兼容。

  • - 用于与 HuggingFace 模型交互的客户端,该模型与 OpenAI ChatCompletion API 兼容。

  • - 用于与与 OpenAI Completion API 兼容的 HuggingFace 模型连接的客户端。

  • - 用于与与 OpenAI Embedding API 兼容的 HuggingFace 模型连接的客户端。

5.1、huggingface.ChatCompletion

该客户端用于与在文本生成推理上运行的 HuggingFace 模型交互,这些模型与 OpenAI ChatCompletion API 兼容。

 

支持的参数有

  • - 用于生成完成结果的模型。如果未提供,默认使用基本URL。

  • -用于生成完成结果的聊天消息列表。

  • - 用于生成完成结果的温度参数。默认为0.9。

  • - 用于生成完成结果的top_p参数。默认为0.6。

  • - 用于生成完成结果的top_k参数。默认为10。

  • - 要生成的完成结果数量。默认为1。

  • - 要生成的最大令牌数。默认为1024。

  • - 用于生成完成结果的停止序列。默认为None。

  • - 是否流式传输完成结果。默认为False。

  • - 用于生成完成结果的频率惩罚参数。默认为1.0。

  • - 是否启用调试日志记录。默认为False。

5.2、huggingface.Completion

该客户端用于与在文本生成推理上运行的 HuggingFace 模型进行交互,这些模型与 OpenAI Completion API 兼容。

 

支持的参数有

  • - 用于生成完成结果的模型。如果未提供,默认使用基本URL。

  • - 用于完成的文本,如果设置了prompt_builder,则提示将使用prompt_builder进行格式化。

  • - 用于生成完成结果的温度参数。默认为0.9。

  • - 用于生成完成结果的top_p参数。默认为0.6。

  • - 用于生成完成结果的top_k参数。默认为10。

  • - 要生成的完成结果数量。默认为1。

  • - 要生成的最大令牌数。默认为1024。

  • - 用于生成完成结果的停止序列。默认为None。

  • - 是否流式传输完成结果。默认为False。

  • - 用于生成完成结果的频率惩罚参数。默认为1.0。

  • - 是否启用调试日志记录。默认为False。

  • - 是否回显提示。默认为 False。

  • - 是否返回logprobs(对数概率)。默认为None。

5.3、huggingface.Embedding

该客户端用于与作为 API 运行的 HuggingFace 模型进行交互,这些模型与 OpenAI Embedding API 兼容。

 

支持的参数有

  • - 用于创建嵌入的模型。如果未提供,则默认为基本 url。

  • - 要嵌入的文档。

5.4、环境配置

可以通过设置 Hugging Face 环境变量或覆盖默认值来配置客户端。下面介绍如何调整 HF 令牌、URL 和提示生成器。

5.4.1、设置HF令牌

默认情况下客户端将尝试读取环境变量。如果未设置,它将尝试从文件夹中读取令牌。如果未设置,则不会使用令牌。

或者,您可以通过设置手动设置令牌

手动设置 api 密钥

 

使用环境变量

 

5.4.2、更改URL地址

默认情况下,客户端会尝试读取环境变量。如果未设置该变量,它将使用默认的URL地址

https://api-inference.huggingface.co/models

这对于想要使用不同的URL地址(如https://zj5lt7pmzqzbp0d1.us-east-1.aws.endpoints.huggingface.cloud)或本地URL地址(如http://localhost:8000)或Hugging Face推理端点非常有用。

另外,您可以通过设置来手动设置URL地址。如果您设置了自定义URL地址,则必须将参数留空。

手动设置 api base

 

使用环境变量

 

5.4.3、构建提示

默认情况下,客户端将尝试读取环境变量并尝试将值映射到字典。如果未设置,它将使用默认的提示生成器。您也可以手动设置。

手动设置提示生成器

 

使用环境变量

 

从 OpenAI 迁移到 HuggingFace 很容易。只需更改导入语句和要使用的客户端以及可选的提示生成器。

 

在切换使用不同的客户端(指使用不同的模型或系统)时,确保你的超参数仍然有效。例如,GPT-3模型的temperature参数可能与Llama-2模型的temperature参数不同。

超参数是在机器学习和深度学习中用于调整模型行为和性能的参数。其中一个常见的超参数是温度(temperature,它控制生成文本的多样性和随机性。不同的模型可能对温度参数有不同的要求或默认值,因此在切换使用不同的模型时,需要注意确保超参数的设置与所使用的模型相匹配,以获得预期的结果。

prompt_utils 模块包含了一些函数,用于将消息字典转换为可以与ChatCompletion客户端一起使用的提示。

目前支持的提示格式有

  • Llama 2

  • Vicuna

  • Hugging Face ChatML

  • WizardLM

  • StableBeluga2

  • Open Assistant

prompt utils 还导出了一个映射字典 prompt_MAPPING,它将模型名称映射到一个提示构建函数。可以通过环境变量来选择正确的提示构建函数。

 

以下代码演示了为 Hugging Face 客户端设置提示构建器

 

7.1、LLama 2 Chat构建器

用于创建LLama 2聊天对话的提示。在Hugging Face博客中可以了解如何使用LLama 2的提示。如果传递了一个不支持的角色的消息,将会抛出错误。

示例模型

  • meta-llama/Llama-2-70b-chat-hf

 

7.2、Vicuna Chat构建器

用于创建Vicuna聊天对话的提示。如果传递了一个不支持的角色的消息,将会抛出错误。

示例模型

  • ehartford/WizardLM-13B-V1.0-Uncensored

 

7.3、Hugging Face ChatML构建器

用于创建聊天对话的提示。Hugging Face ChatML针对不同的示例模型有不同的提示,例如。如果传递了一个不支持的角色的消息,将会抛出错误。

示例模型

  • HuggingFaceH4/starchat-beta

7.3.1、StarChat
 
7.3.2、Falcon
 

7.4、WizardLM Chat构建器

用于创建WizardLM聊天对话的提示。如果传递了一个不支持的角色的消息,将会抛出错误。

示例模型

  • WizardLM/WizardLM-13B-V1.2

 

7.5、StableBeluga2 Chat构建器

用于创建StableBeluga2聊天对话的提示。如果传递了一个不支持的角色的消息,将会抛出错误。

 

7.6、Open Assistant Chat构建器

创建Open Assistant ChatML模板。使用、、和标记。如果传递了一个不支持的角色的消息,将会抛出错误。

示例模型

  • OpenAssistant/llama2-13b-orca-8k-3319

 
 

以下是一些帮助您开始使用 easyllm 库的示例

例子描述详细的聊天完成示例
https://philschmid.github.io/easyllm/examples/chat-completion-api/演示如何使用 ChatCompletion API 与模型进行对话式聊天如何流式传输聊天请求的示例
https://philschmid.github.io/easyllm/examples/stream-chat-completions/演示流式传输多个聊天请求以与模型高效聊天。如何传输文本请求的示例
https://philschmid.github.io/easyllm/examples/stream-text-completions/演示如何流式传输多个文本完成请求。详细完成示例
https://philschmid.github.io/easyllm/examples/text-completion-api/使用 TextCompletion API 通过模型生成文本。创建嵌入
https://philschmid.github.io/easyllm/examples/get-embeddings/使用模型将文本嵌入到矢量表示中。拥抱脸部推理端点示例
https://philschmid.github.io/easyllm/examples/inference-endpoints-example/有关如何使用自定义端点(例如推理端点或本地主机)的示例使用 Llama 2 检索增强生成
https://philschmid.github.io/easyllm/examples/llama2-rag-example/有关如何使用 Llama 2 70B 进行上下文检索增强的示例Llama 2 70B 代理/工具使用示例
https://philschmid.github.io/easyllm/examples/llama2-agent-example/如何使用 Llama 2 70B 与工具交互并可用作代理的示例

这些示例涵盖了EasyLLM的主要功能 - 聊天、文本完成和嵌入。

最新文章
光威复材2024年下降逾15%,连续两年发生下滑
3月31日晚,(300699.SZ)发布2024年财报,实现营收24.5亿元,同比下降2.69%;归母净利润7.41亿元,同比下降15.12%;扣非净利润6.6
看完超人气游戏改编的《我的世界大电影》,我整个人都方了
观影《我的世界大电影》,感觉自己真的方了。毕竟,已经领略过风靡全球的沙盒游戏《我的世界》中那方块的世界,还有游戏带给人的
手机大脑手机阅读「手机大脑」
为什么只要醒着我们就离不开手机,为什么疫情中的我们更容易自投罗网?为什么比尔·盖茨不让小孩用手机,乔布斯不让孩子碰iPad?
远洋集团(03377):拟3.22亿元出售北京盛永置业投资23%股权
智通财经APP讯,远洋集团(03377)发布公告,于2025年4月11日,卖方(公司全资附属公司北京银港房地产开发有限公司)拟向买方(日照钢
600375,停牌,退市风险解除!
*ST汉马(600375)即将去星摘帽。4月16日晚间,该公司公告,公司股票将于2025年4月17日(星期四)开市起停牌一天,并于2025年4月
300万像素手写滑盖三星G618行货大跌530三星滑盖手机「300万像素手写滑盖三星G618行货大跌530」
  【7月15日太平洋电脑网上海站】今天,三星奥运手机G618行货从2288元跌至新低1758元。530元的降幅对于这款三星众多奥运手机中
最新手机续航TOP10排行榜:小米14垫底,Mate60和iPhone15落榜,第一名让人很意外手机续航排行「最新手机续航TOP10排行榜:小米14垫底,Mate60和iPhone15落榜,第一名让人
随着科技的进步,手机已经成为了我们生活中不可或缺的一部分。而手机续航能力也成为用户选择新机的重要考量因素之一。特别是对于
“好房子”新规激发楼市活力 北京3月新旧房成交量齐增
每经记者:陈梦妤    每经编辑:魏文艺“今年第一季度,我们所有项目均超额完成销售任务,完成率均达100%以上。这一成绩主要
智能手机:重塑现代人生活方式的双刃剑现代手机「智能手机:重塑现代人生活方式的双刃剑」
随着科技的飞速发展,智能手机已经成为现代人生活中不可或缺的一部分。它为我们带来了便捷的信息获取、高效的社交方式以及
10块钱的VR跟7000元的到底有啥区别?部手机「10块钱的VR跟7000元的到底有啥区别?」
步入VR元年,VR的关注度甚至乎呈直线上升,但是还有很多VR小白根本不知道VR为何物。VR频道特设《小白玩VR》系列文章,没看过的,