自 ChatGPT 发布以来,几乎每隔几天就会出现一个新的大型语言模型(LLM),以及专注于这项技术的新公司。每个新 LLM 都在不同方面力图超越前代。例如,我们越来越常见针对特定用例优化的 LLM:聊天模型、编码助手以及长上下文理解等。
为一个新的基于 LLM 的应用或项目选择合适的模型可能是一项艰巨的任务 ,更不用说还要跟上最新模型及其功能的更新。
就我个人而言,这常常让我默认通过 API 调用使用 ChatGPT 或 GPT 模型。
本文旨在梳理当下多样的可用模型,并强调在根据项目特性选择合适模型时应重点考量的关键能力。
我们将特别关注与这些模型交互的不同方式,这是在众多可用模型之间做出选择时需要考虑的关键特性之一。
目标是让这份全面指南成为一张速查表 ,帮助您在琳琅满目的 LLM 中为特定任务做出选择。
如果您刚接触 LLM,强烈推荐先学习 AI Fundamentals 和 Large Language Models Concepts 课程,以熟悉基本术语和模型。
LLM 的交互方式
在基于 LLM 的应用或项目中访问并与 LLM 交互可通过多种方法实现,具体取决于技术需求。
#1. Playground
与 LLM 交互的最友好方式是通过浏览器中的对话界面。这就是 ChatGPT 的情况,其用户界面本质上是一个聊天窗口,允许您与模型互动。
通常,这类界面允许用户对模型进行的控制或自定义非常有限,但它是尝试模型处理简单任务的便捷方式。OpenAI 的 ChatGPT 和 Google 的 Gemini 都提供这类界面:
OpenAI 的 ChatGPT(左)和 Google 的 Gemini(右)聊天界面截图。
有时,一些提供商也会通过类似的友好聊天界面提供一定程度的自定义。以 OpenAI 为例,该平台称为 “Playground”。
OpenAI Playground 界面截图。
Playground 界面允许我们在有限的设置控制下尝试不同的模型。通过这种方式,我们可以探索哪些参数适合您的任务。不过,正如您可能已经意识到的,playground 或聊天界面并不能让我们将与 LLM 的交互嵌入到某个应用或项目中。
#2. 原生 API 访问
查询 LLM 最流行的方式之一是通过 API 访问。当我们不需要进一步自定义模型时,这种方式尤其有利。
API 调用可以无缝集成到我们的脚本中,无需我们自行搭建和维护基础设施。
不过,便捷性是有代价的。尽管依赖外部服务——如果您不打算自行托管模型及其必要的基础设施,这种依赖将一直存在——成本也会随着使用量而不可避免地增加。
对于 API 调用,较好的做法是围绕 API 本身封装一个简单的包装器,以模块化方式与模型交互。以我目前使用最多的 OpenAI API 为例,我总是使用下一节中的包装器,让模型选择对用户透明。
GPT API 调用
如果您希望顺畅且更少出错地与模型交互,为通过 OpenAI API 查询 GPT 模型编写一个标准而灵活的方法非常有用。这就是为什么我通常在程序开头将 GPT 调用设置为一个包装函数,确保模型的使用对应用程序透明。
openai 库(pip install openai)已经提供了 ChatCompletion 端点,允许我们通过 .create 方法调用任意 GPT 模型。
.create 方法有两个必需参数:
要使用的 GPT 模型。 ChatGPT 由 OpenAI 的先进模型驱动,包括 gpt-4。
用户提示(prompt)的格式化 有其特定要求。
基于这两个参数,我们可以按如下方式编写 GPT 调用:
prompt = "Hello world"
chat_completion = openai. ChatCompletion. create( model= "gpt-3.5-turbo" , messages= [ { "role" : "user" , "content" : prompt} ] ) 技术支持
调用模型时,我们会以 JSON 格式收到补全结果:
{
"choices" : [
{
"finish_reason" : "stop" ,
"index" : 0 ,
"message" : {
"content" : "Hello! How can I assist you today?" ,
"role" : "assistant"
}
}
] ,
"created" : 1692042919 ,
"id" : "chatcmpl-7nXwl0tywcTb91xeEuhpQbpRD6XLM" ,
"model" : "gpt-3.5-turbo-0613" ,
"object" : "chat.completion" ,
"usage" : {
"completion_tokens" : 9 ,
"prompt_tokens" : 9 ,
"total_tokens" : 18
}
} 技术支持
因此,作为函数返回值,仅提取模型的补全内容会更实用。把这些要点拼在一起,我们的包装器实现可以写成:
def chatgpt_call ( prompt, model= "gpt-3.5-turbo" ) :
response = openai. ChatCompletion. create(
model= model,
messages= [ { "role" : "user" , "content" : prompt} ]
)
return response. choices[ 0 ] . message[ "content" ] 技术支持
如果您对该实现的更多细节感兴趣,文章 ChatGPT API Calls: A Gentle Introduction 有进一步解读!
最后需要指出的是,大多数 API 提供商(包括 OpenAI)在您创建账户时都会提供一些免费调用。但额度有限(通常少于 20 美元),并且通常有时间窗口限制(一般为一个月)。
无论如何,始终将 LLM 调用封装在一个函数——或一组函数——中是个好习惯,这样无论提供商是谁,模型对应用都是透明的。
#3. 本地托管模型
自行托管模型意味着下载模型权重,并在本地机器或私有服务器上运行。
这种方式很有吸引力,因为它允许对模型基础设施进行完全控制,但也意味着技术投入会显著增加。
如果您想了解运行 LLM 基础设施涉及的步骤,请查看 LLMOps Essentials 这篇文章!
在本地运行模型可以根据我们的需求进行进一步定制。在此背景下,自主托管最受欢迎的选择之一是 Meta AI 的知名 LLaMa 模型。他们发布了轻量级模型,只需 8GB 内存的笔记本电脑即可运行。
借助 Ollama 等平台,在我们的笔记本上运行 LLaMa 模型相当容易。
Ollama 平台
Ollama 提供了一个平台,用于在本地设备上运行 LLaMa 2 和 Code LLaMa 等 LLM。它支持 macOS、Linux 和 Windows,能够自定义并创建自有模型。详情可访问 Ollama 的网站 。
Ollama 平台可从官网下载安装,而模型权重可直接通过终端界面拉取。
我们先前往其主页安装 Ollama!
Ollama 官网 主页截图。
在这个例子中,Ollama 是一个命令行工具:
Ollama 命令行工具安装截图。
安装命令行工具后,我们可以使用 ollama run <model name> 命令启动模型。如果这是我们设备上首次运行该模型,Ollama 会自动为我们拉取模型:
通过 Ollama 命令行工具首次运行 LLaMa 2 模型的截图。如为首次使用,模型会自动拉取。
从那以后,在命令行中向模型提问和退出模型都非常直接:
通过 Ollama 命令行工具与模型交互的用户界面截图。
如上图所示,模型还提供了一小组额外命令。
Ollama 也支持其他模型,如新的 Mistral:
通过 Ollama 命令行工具首次运行 Mistral 模型的截图。如为首次使用,模型会自动拉取。
该模型同样可开箱即用,一条命令即可运行!
这种方式的优势在于只消耗我们设备的资源。但请记住,模型性能通常会随着参数数量的增加而提高。
因此,模型参数越多,所需资源也越多。 因此,对于自托管的 LLM 应用,更大的模型很可能需要在私有服务器上运行。
如果我们要构建大规模应用,值得注意的是,Ollama 也可在 Mac 上通过 Docker Desktop 运行,并在 Linux 上借助 GPU 加速在 Docker 容器内运行。
此时您可能会问:我能把 OLLAMA 嵌入到我的脚本里吗?
当然可以,自行托管模型并不意味着无法集成到您的 Python 脚本中!Ollama 还提供通过 Python 与自托管模型交互的方式。
Ollama 的 Python 和 JavaScript 库允许我们在脚本中集成模型推理。
如果我们想自己托管模型,Ollama 并不是唯一的选择。总体而言,LLM 常可在多个开源平台下载,这些平台也提供社区支持。
开源 LLM 通常可免费用于学术和研究目的。不过,商业用途条款会因具体许可证而异。务必明确您是在试验 LLM,还是在为商业目的构建基于 LLM 的应用。
您愿意从今天开始踏上开发 LLM 的旅程吗?那么 Developing Large Language Models 课程正适合您!
云端托管
在本地托管强大的模型可能会消耗大量资源,因此使用云服务是可行的替代方案,可按需扩展资源 并获得云提供商的支持。
值得一提的是,如今传统云服务(如 Azure)已提供用于托管 LLM(如 Mistral)的定制化流水线,因此我们无需自行实现专门的托管方案。
这对于在组织内部署应用是一个显著优势,因为许多公司已就邮箱和通用云解决方案与这些提供商签订了合同。
#4. 第三方 API
选择第三方提供商可以在不管理托管基础设施与相较仅使用原生 API 服务之间,取得在模型控制方面的一定平衡。
这些提供商通常提供 API 访问,但需注意的是,与使用原生 OpenAI API 类似,广泛使用会显著推高成本。
关键差异在于托管方。第三方提供商而非原生 LLM 服务在其基础设施上托管模型,并暴露 API 端点 ,且常常提供来自不同来源的多种模型,便于灵活集成。
一个受欢迎的第三方 API 提供商是 LLAMA API 。
LLAMA API 网站 主页截图。
该 API 并非永久免费,但您可以免费试用,因为新账户会获得 5 美元的免费额度。不过请记住,这些额度自发放之日起仅在一个月内有效。
使用 LLAMA API 非常直接。安装完成(pip install llamaapi)后,我们可以进行如下首次试调用:
from llamaapi import LlamaAPI
import json
llama = LlamaAPI( '<Insert API key here>' )
prompt = "Which is the capital of France?"
api_request_json = {
"model" : "llama-13b-chat" ,
"messages" : [
{ "role" : "system" , "content" : "You are a friendly chatbot." } ,
{ "role" : "user" , "content" : prompt} ,
]
}
response = llama. run( api_request_json)
print ( json. dumps( response. json( ) , indent= 2 ) ) 技术支持
然而,与 OpenAI API 一样,将 API 调用嵌入到包装函数中是个好习惯。沿用之前的方法:
def llm_call ( prompt, model= "llama-13b-chat" ) :
api_request_json = {
"model" : model,
"messages" : [
{ "role" : "system" , "content" : "You are a friendly chatbot." } ,
{ "role" : "user" , "content" : prompt} ,
]
}
response = llama. run( api_request_json)
return response. json( ) [ "choices" ] [ 0 ] [ "message" ] [ "content" ] 技术支持
基于该实现,我们只需调用 llm_call() 即可从 LLM 获取字符串响应:
LLAMA API 支持多种最前沿模型,不仅限于 Meta 的 LLaMa。我们将在下一节了解它支持哪些模型!
最后,就 LLAMA API 而言,API 费用取决于模型的参数数量,且似乎在所有模型间保持一致:
LLAMA API 定价截图。该信息仅在您创建账户后可见。
Hugging Face 世界
最受欢迎的 LLM 第三方提供商是 Hugging Face 。Hugging Face 以其 transformers 库而著称,该库是 Python 中最流行的自然语言处理库。
Hugging Face 提供多种访问 LLM 的接口。它有一个名为 “Spaces” 的用户友好型 playground 界面:
Hugging Face 的 “Spaces” playground 截图。
它还支持模型托管和端点部署,以及直接下载并在本地使用模型。
需要牢记的是,Hugging Face 某种程度上是一个“开发者网站”,尽管您可以找到上手教程,但要用其模型来扩展应用,仍需要具备技术知识。
如果您想进一步了解 Hugging Face,强烈推荐阅读 What is Hugging Face? The AI Community's Open-Source Oasis 一文。
我在从零构建基于 LLM 的应用时,通常会与 Hugging Face 搭配使用的另一个工具是 LangChain。教程 How to Build LLM Applications with LangChain 提供了不错的上手机会。
LLM 分类
我们已经讨论了访问和运行 LLM 的不同方法,例如 GPT、LLaMa 和 Mistral 模型。然而,还有更多模型可用,包括上述模型的多个变体。本节将对当今主要模型进行分类, 列出其特性、价格和使用场景。
GPT 模型 - OpenAI
OpenAI 的模型自 ChatGPT 发布以来广受欢迎,根据您的订阅不同,目前由 GPT-3.5 或 GPT-4 提供支持。对于许多基础任务,GPT-3.5 与 GPT-4 的差异并不显著。
然而,在更复杂的推理场景中,GPT-4 显示出比以往任何模型都更强的能力。
此外,GPT-4 是一个多模态模型,可接受文本或图像输入并输出文本。它还提供使用插件与外部来源对接的能力。通过 Bing 搜索浏览互联网就是一个例子。
对于付费用户 ,通过 OpenAI API 可访问的 GPT-4 主要有三个变体:
Model
Characteristics
Context Window
API
Local
Token Pricing
Training Data
GPT-4
2023 年 6 月 13 日的 gpt-4 快照。
该端点会持续获得更新。
针对聊天优化。
8,192 tokens
Yes
No
$0.03 / 1K tokens(输入)
$0.06 / 1K tokens(输出)
Dec 2023
GPT-4 Turbo
API 名为 gpt-4-turbo-preview。
擅长代码生成等任务,并旨在减少“惰性 ”情况。
128k tokens
Yes
No
$0.01 / 1K tokens(输入)
$0.03 / 1K tokens(输出)
Dec 2023
GPT-4 Vision
API 名为 gpt-4-vision-preview。
在具备 GPT-4 Turbo 全部能力的基础上,增加理解图像的能力。
128k tokens
Yes
No
$0.01 / 1K tokens(输入)
$0.03 / 1k tokens(输出)
Apr 2023
总体而言,值得注意的是,GPT 模型与 LLaMa 模型不同,属于闭源。 这意味着我们无法在本地运行它们或部署自有端点。
不过,可以通过 OpenAI 的 微调 API 进行定制。此外,它们无法通过 Ollama、LLAMA API 或 Hugging Face 等第三方提供商访问。
关于 OpenAI Playground,其底层使用的模型信息并未清晰展示,但似乎基于具备 DALL-E、浏览和分析能力的 GPT-4 模型。
我们也来看看可用的 GPT-3 模型!
Model
Characteristics
Context Window
API
Local
Token Pricing
Training Data
GPT-3.5 Turbo
API 名为 gpt-3.5-turbo。
该系列的旗舰模型。
针对对话优化,并在按所需格式作答方面准确性更高。
16,385 tokens
Yes
No
$0.0005 / 1K tokens(输入)
$0.0015 / 1K tokens(输出)
Sep 2021
GPT-3.5 Turbo
Instruct
API 名为 gpt-3.5-turbo-instruct。
着重提高回复的准确性和相关性,更贴合用户需求。
4,096 tokens
Yes
No
$0.0015 / 1K tokens(输入)
$0.0020 / 1K tokens(输出)
Sep 2021
表中的 GPT-3.5 Turbo Instruct 模型已通过人类反馈强化学习 (RLHF)微调,以更好地遵循用户意图 。
RLHF 是一种将人类反馈融入强化学习过程以引导并改进 AI 体学习效果的技术。通过将人类判断、纠正或偏好直接纳入训练周期,这种方法能开发出更符合人类价值观和偏好的模型。
最后,从表中可以看到,任一 GPT-3.5 模型的使用成本都明显低于 GPT-4。
在这方面,我通常建议在一组定义良好的示例上比较各模型的表现,以判断 GPT-3.5 是否足以胜任当前任务,从而节省推理成本。
正如我们在前文讨论的,LLaMa 模型可免费下载并在本地运行 ,也可在其之上进行定制。
LLaMa 模型实际上是由 Meta AI 提供的一个规模和变体都很庞大的开放模型家族:
Model
Characteristics
Context Window
API
Local
Variant
Training Data
LLaMa 2
用于补全任务的基础非聊天模型。
4096 tokens
Yes
LLAMA API
Yes*
7B
13B
70B
Sep 2022
LLaMa 2 Chat
在基础 LLaMa 2 上进行指令微调,将简单补全转化为能遵循用户意图的聊天模型。
4096 tokens
Yes
LLAMA API
Yes*
Ollama
7B
13B
70B
Sep 2022
LLaMa 2 Guard
输入-输出安全防护模型,训练用于检测有毒和有害内容。
4096 tokens
Yes**
No
7B
Sep 2022*
*Hugging Face 也提供一些 LLaMa 变体,如基础 和聊天 模型。**目前,LLaMa 2 Guard 可在 Amazon SageMaker 的云环境中使用。
与内置编码能力的 GPT 模型不同,LLaMa 针对编码提供了专门模型,并通过长上下文微调实现了 16k tokens 的更大上下文窗口 。
Model
Characteristics
Context Window
API
Local
Variant
Training Data
Code LLaMa
用于代码补全任务(如 GitHub Copilot)的基础非聊天模型。
由 LLaMa 2 模型在代码数据和长上下文上额外训练并进行微调而成。
16k
No
Yes
Ollama
7B
13B
34B
Sep 2022*
Code LLaMa - Instruct
源自 Instruct 模型。擅长代码补全和代码片段解释。
16k
Yes
LLAMA API
Yes
Ollama
7B
13B
34B
Sep 2022*
Code LLaMa - Python
针对 Python 编程语言进行微调。
16k
No
Yes
Ollama
34B
Sep 2022*
* LLaMa 模型的官方截断日期为 2022 年 9 月。然而,微调数据更为更新,尤其是较新的变体,其数据可追溯至 2023 年。
Google 的 LLM 家族
Google 在开发大型语言模型方面历史悠久。随着 Gemini 模型的推出,Google 开启了多模态 LLM 的时代。
在 Google 的产品中,Gemini 成为其旗舰模型,属于闭源 ,类似 ChatGPT。不过,他们近期推出了 Gemma ,即源自 Gemini 的一套开源模型 ,旨在促进易用的 AI 开发。
本文将同时关注 Gemini 和 Gemma:
Model
Characteristics
API
Local
Variants
Gemini
闭源通用模型(文本生成、翻译、问答、代码等)
Yes*
No
Ultra - 解决复杂任务。
Pro - 覆盖广泛任务,具备可扩展性。
Nano - 面向设备端的高效运行。
Gemma
与 Gemini 任务类似,但侧重集成到自定义应用和研究。为轻量级模型。
Yes**LLAMA API
YesOllama
Hugging Face
2B
7B
*Gemini 提供面向商业用途的 API(不开放部署)。不过,我们可以通过其 Playground 界面试用该模型。
**没有原生的 Google 端点,但可通过 Kaggle 和 Google Colab 访问。更多信息见 Google 官方文档 。
就 Gemini 的变体而言,Gemini Ultra 是在复杂分析任务中表现突出的多模态模型。Gemini Pro 在性能与可扩展性之间取得平衡,擅长代码和文本生成。最后,Gemini Nano 注重在设备端的高效性,可在移动端和边缘设备上运行而无需大量资源。
关于 Google 的模型,在撰写本文时,公开可得的上下文窗口大小和训练数据截断日期信息并不多。
Mistral AI 的 LLM 家族
Mistral AI 是一家成立于 2023 年 4 月的法国 AI 公司,由来自 Meta Platforms 和 Google DeepMind 的前员工创办。公司专注于开发开源 LLM,强调相对于专有模型而言开源软件的重要性。其提供的模型包括 Mistral 7B 和 Mixtral 8x7B,具备先进的语言处理能力。
*我们可以通过名为 “La Plataforme” 的 Playground 界面与 Mistral AI 的模型交互。
** Hugging Face 也为部分模型提供通过其 API 进行实时推理的试验环境。它也是第三方提供商,允许您为可用模型部署付费端点 。
关于 Mixtral 模型,“专家混合”架构允许模型将整体能力划分到不同的专业组或“专家”中。每个专家针对特定任务或数据类型进行优化。
在处理输入时,Mixtral 会动态调用相关专家,从而在每个 token 上仅使用其总参数的一小部分即可高效处理复杂任务。这种方法提升了 Mixtral 的性能,使其在多种语言和任务上表现出色,同时优化计算资源。Mixtral 模型名为 “Mixtral 8x7B”,正是指其使用了 8 组不同的“专家”。
最后,Mistral AI 还提供三款商用模型:Mistral Small、Mistral Medium 和 Mistral Large。如您感兴趣,可在官方文档中找到关于模型 与定价 的更多信息。
其他
到目前为止,我们已经看到业内最知名公司的多种模型及其变体。不过,还有更多值得探索!
我想特别提及来自阿布扎比技术创新研究院的 Falcon 模型,可在 Ollama 和 LLAMA API 中使用。另有微软研究院的 Orca2 模型,特别擅长推理,同样可在 Ollama 和 Hugging Face 上使用。
您还可以在 8 Top Open-Source LLMs for 2024 and Their Uses 一文中阅读更多开源可用模型。
回顾:如何选择最佳 LLM?
本文讨论了在为目标应用选择最佳大型语言模型时需要考虑的若干方面。尽管本指南旨在充当速查表,但并不存在一条立即选出最佳模型的金科玉律。
根据我的个人经验,我认为先明确希望如何与 LLM 交互是一个不错的起点,因为这已经能减少可选模型及其变体的数量。
第二个要考虑的方面是模型将执行的目标任务:通用聊天机器人、摘要专家、编码助手等。
虽然我们总可以为目标任务微调模型,但我们已经看到,针对特定用例的现成微调变体能为我们节省时间、计算资源和技术投入。根据应用所需的上下文窗口大小进行选择同样至关重要。
最后,价格始终是选择哪种模型的良好指标。遗憾的是,大多数时候,项目本身受限于初期投入和长期维护成本。关于价格,还需牢记,训练 和微调 在项目开发过程中都不是免费的,并且相当耗时。
自 ChatGPT 发布以来,几乎每隔几天就会出现一个新的大型语言模型(LLM),以及专注于这项技术的新公司。每个新 LLM 都在不同方面力图超越前代。例如,我们越来越常见针对特定用例优化的 LLM:聊天模型、编码助手以及长上下文理解等。
为一个新的基于 LLM 的应用或项目选择合适的模型可能是一项艰巨的任务,更不用说还要跟上最新模型及其功能的更新。
就我个人而言,这常常让我默认通过 API 调用使用 ChatGPT 或 GPT 模型。
本文旨在梳理当下多样的可用模型,并强调在根据项目特性选择合适模型时应重点考量的关键能力。
我们将特别关注与这些模型交互的不同方式,这是在众多可用模型之间做出选择时需要考虑的关键特性之一。
目标是让这份全面指南成为一张速查表,帮助您在琳琅满目的 LLM 中为特定任务做出选择。
如果您刚接触 LLM,强烈推荐先学习 AI Fundamentals 和 Large Language Models Concepts 课程,以熟悉基本术语和模型。
LLM 的交互方式
在基于 LLM 的应用或项目中访问并与 LLM 交互可通过多种方法实现,具体取决于技术需求。
#1. Playground
与 LLM 交互的最友好方式是通过浏览器中的对话界面。这就是 ChatGPT 的情况,其用户界面本质上是一个聊天窗口,允许您与模型互动。
通常,这类界面允许用户对模型进行的控制或自定义非常有限,但它是尝试模型处理简单任务的便捷方式。OpenAI 的 ChatGPT 和 Google 的 Gemini 都提供这类界面:
OpenAI 的 ChatGPT(左)和 Google 的 Gemini(右)聊天界面截图。
有时,一些提供商也会通过类似的友好聊天界面提供一定程度的自定义。以 OpenAI 为例,该平台称为 “Playground”。
OpenAI Playground 界面截图。
Playground 界面允许我们在有限的设置控制下尝试不同的模型。通过这种方式,我们可以探索哪些参数适合您的任务。不过,正如您可能已经意识到的,playground 或聊天界面并不能让我们将与 LLM 的交互嵌入到某个应用或项目中。
#2. 原生 API 访问
查询 LLM 最流行的方式之一是通过 API 访问。当我们不需要进一步自定义模型时,这种方式尤其有利。
API 调用可以无缝集成到我们的脚本中,无需我们自行搭建和维护基础设施。
不过,便捷性是有代价的。尽管依赖外部服务——如果您不打算自行托管模型及其必要的基础设施,这种依赖将一直存在——成本也会随着使用量而不可避免地增加。
对于 API 调用,较好的做法是围绕 API 本身封装一个简单的包装器,以模块化方式与模型交互。以我目前使用最多的 OpenAI API 为例,我总是使用下一节中的包装器,让模型选择对用户透明。
GPT API 调用
如果您希望顺畅且更少出错地与模型交互,为通过 OpenAI API 查询 GPT 模型编写一个标准而灵活的方法非常有用。这就是为什么我通常在程序开头将 GPT 调用设置为一个包装函数,确保模型的使用对应用程序透明。
openai库(pip install openai)已经提供了ChatCompletion端点,允许我们通过.create方法调用任意 GPT 模型。.create方法有两个必需参数:gpt-4。基于这两个参数,我们可以按如下方式编写 GPT 调用:
调用模型时,我们会以 JSON 格式收到补全结果:
因此,作为函数返回值,仅提取模型的补全内容会更实用。把这些要点拼在一起,我们的包装器实现可以写成:
如果您对该实现的更多细节感兴趣,文章 ChatGPT API Calls: A Gentle Introduction 有进一步解读!
最后需要指出的是,大多数 API 提供商(包括 OpenAI)在您创建账户时都会提供一些免费调用。但额度有限(通常少于 20 美元),并且通常有时间窗口限制(一般为一个月)。
无论如何,始终将 LLM 调用封装在一个函数——或一组函数——中是个好习惯,这样无论提供商是谁,模型对应用都是透明的。
#3. 本地托管模型
自行托管模型意味着下载模型权重,并在本地机器或私有服务器上运行。
这种方式很有吸引力,因为它允许对模型基础设施进行完全控制,但也意味着技术投入会显著增加。
如果您想了解运行 LLM 基础设施涉及的步骤,请查看 LLMOps Essentials 这篇文章!
在本地运行模型可以根据我们的需求进行进一步定制。在此背景下,自主托管最受欢迎的选择之一是 Meta AI 的知名 LLaMa 模型。他们发布了轻量级模型,只需 8GB 内存的笔记本电脑即可运行。
借助 Ollama 等平台,在我们的笔记本上运行 LLaMa 模型相当容易。
Ollama 平台
Ollama 提供了一个平台,用于在本地设备上运行 LLaMa 2 和 Code LLaMa 等 LLM。它支持 macOS、Linux 和 Windows,能够自定义并创建自有模型。详情可访问 Ollama 的网站。
Ollama 平台可从官网下载安装,而模型权重可直接通过终端界面拉取。
我们先前往其主页安装 Ollama!
在这个例子中,Ollama 是一个命令行工具:
Ollama 命令行工具安装截图。
安装命令行工具后,我们可以使用
ollama run <model name>命令启动模型。如果这是我们设备上首次运行该模型,Ollama 会自动为我们拉取模型:通过 Ollama 命令行工具首次运行 LLaMa 2 模型的截图。如为首次使用,模型会自动拉取。
从那以后,在命令行中向模型提问和退出模型都非常直接:
通过 Ollama 命令行工具与模型交互的用户界面截图。
如上图所示,模型还提供了一小组额外命令。
Ollama 也支持其他模型,如新的 Mistral:
通过 Ollama 命令行工具首次运行 Mistral 模型的截图。如为首次使用,模型会自动拉取。
该模型同样可开箱即用,一条命令即可运行!
这种方式的优势在于只消耗我们设备的资源。但请记住,模型性能通常会随着参数数量的增加而提高。
因此,模型参数越多,所需资源也越多。因此,对于自托管的 LLM 应用,更大的模型很可能需要在私有服务器上运行。
如果我们要构建大规模应用,值得注意的是,Ollama 也可在 Mac 上通过 Docker Desktop 运行,并在 Linux 上借助 GPU 加速在 Docker 容器内运行。
此时您可能会问:我能把 OLLAMA 嵌入到我的脚本里吗?
当然可以,自行托管模型并不意味着无法集成到您的 Python 脚本中!Ollama 还提供通过 Python 与自托管模型交互的方式。
Ollama 的 Python 和 JavaScript 库允许我们在脚本中集成模型推理。
如果我们想自己托管模型,Ollama 并不是唯一的选择。总体而言,LLM 常可在多个开源平台下载,这些平台也提供社区支持。
开源 LLM 通常可免费用于学术和研究目的。不过,商业用途条款会因具体许可证而异。务必明确您是在试验 LLM,还是在为商业目的构建基于 LLM 的应用。
您愿意从今天开始踏上开发 LLM 的旅程吗?那么 Developing Large Language Models 课程正适合您!
云端托管
在本地托管强大的模型可能会消耗大量资源,因此使用云服务是可行的替代方案,可按需扩展资源并获得云提供商的支持。
值得一提的是,如今传统云服务(如 Azure)已提供用于托管 LLM(如 Mistral)的定制化流水线,因此我们无需自行实现专门的托管方案。
这对于在组织内部署应用是一个显著优势,因为许多公司已就邮箱和通用云解决方案与这些提供商签订了合同。
#4. 第三方 API
选择第三方提供商可以在不管理托管基础设施与相较仅使用原生 API 服务之间,取得在模型控制方面的一定平衡。
这些提供商通常提供 API 访问,但需注意的是,与使用原生 OpenAI API 类似,广泛使用会显著推高成本。
关键差异在于托管方。第三方提供商而非原生 LLM 服务在其基础设施上托管模型,并暴露 API 端点,且常常提供来自不同来源的多种模型,便于灵活集成。
一个受欢迎的第三方 API 提供商是 LLAMA API。
LLAMA API 网站主页截图。
该 API 并非永久免费,但您可以免费试用,因为新账户会获得 5 美元的免费额度。不过请记住,这些额度自发放之日起仅在一个月内有效。
使用 LLAMA API 非常直接。安装完成(
pip install llamaapi)后,我们可以进行如下首次试调用:然而,与 OpenAI API 一样,将 API 调用嵌入到包装函数中是个好习惯。沿用之前的方法:
基于该实现,我们只需调用
llm_call()即可从 LLM 获取字符串响应:LLAMA API 支持多种最前沿模型,不仅限于 Meta 的 LLaMa。我们将在下一节了解它支持哪些模型!
最后,就 LLAMA API 而言,API 费用取决于模型的参数数量,且似乎在所有模型间保持一致:
LLAMA API 定价截图。该信息仅在您创建账户后可见。
Hugging Face 世界
最受欢迎的 LLM 第三方提供商是 Hugging Face。Hugging Face 以其
transformers库而著称,该库是 Python 中最流行的自然语言处理库。Hugging Face 提供多种访问 LLM 的接口。它有一个名为 “Spaces” 的用户友好型 playground 界面:
Hugging Face 的 “Spaces” playground 截图。
它还支持模型托管和端点部署,以及直接下载并在本地使用模型。
需要牢记的是,Hugging Face 某种程度上是一个“开发者网站”,尽管您可以找到上手教程,但要用其模型来扩展应用,仍需要具备技术知识。
如果您想进一步了解 Hugging Face,强烈推荐阅读 What is Hugging Face? The AI Community's Open-Source Oasis 一文。
我在从零构建基于 LLM 的应用时,通常会与 Hugging Face 搭配使用的另一个工具是 LangChain。教程 How to Build LLM Applications with LangChain 提供了不错的上手机会。
LLM 分类
我们已经讨论了访问和运行 LLM 的不同方法,例如 GPT、LLaMa 和 Mistral 模型。然而,还有更多模型可用,包括上述模型的多个变体。本节将对当今主要模型进行分类,列出其特性、价格和使用场景。
GPT 模型 - OpenAI
OpenAI 的模型自 ChatGPT 发布以来广受欢迎,根据您的订阅不同,目前由 GPT-3.5 或 GPT-4 提供支持。对于许多基础任务,GPT-3.5 与 GPT-4 的差异并不显著。
然而,在更复杂的推理场景中,GPT-4 显示出比以往任何模型都更强的能力。
此外,GPT-4 是一个多模态模型,可接受文本或图像输入并输出文本。它还提供使用插件与外部来源对接的能力。通过 Bing 搜索浏览互联网就是一个例子。
对于付费用户,通过 OpenAI API 可访问的 GPT-4 主要有三个变体:
Model
Characteristics
Context Window
API
Local
Token Pricing
Training Data
GPT-4
2023 年 6 月 13 日的 gpt-4 快照。
该端点会持续获得更新。
针对聊天优化。
8,192 tokens
Yes
No
$0.03 / 1K tokens(输入)
$0.06 / 1K tokens(输出)
Dec 2023
GPT-4 Turbo
API 名为 gpt-4-turbo-preview。
擅长代码生成等任务,并旨在减少“惰性”情况。
128k tokens
Yes
No
$0.01 / 1K tokens(输入)
$0.03 / 1K tokens(输出)
Dec 2023
GPT-4 Vision
API 名为 gpt-4-vision-preview。
在具备 GPT-4 Turbo 全部能力的基础上,增加理解图像的能力。
128k tokens
Yes
No
$0.01 / 1K tokens(输入)
$0.03 / 1k tokens(输出)
Apr 2023
总体而言,值得注意的是,GPT 模型与 LLaMa 模型不同,属于闭源。这意味着我们无法在本地运行它们或部署自有端点。
不过,可以通过 OpenAI 的 微调 API 进行定制。此外,它们无法通过 Ollama、LLAMA API 或 Hugging Face 等第三方提供商访问。
关于 OpenAI Playground,其底层使用的模型信息并未清晰展示,但似乎基于具备 DALL-E、浏览和分析能力的 GPT-4 模型。
我们也来看看可用的 GPT-3 模型!
Model
Characteristics
Context Window
API
Local
Token Pricing
Training Data
GPT-3.5 Turbo
API 名为 gpt-3.5-turbo。
该系列的旗舰模型。
针对对话优化,并在按所需格式作答方面准确性更高。
16,385 tokens
Yes
No
$0.0005 / 1K tokens(输入)
$0.0015 / 1K tokens(输出)
Sep 2021
GPT-3.5 Turbo
Instruct
API 名为 gpt-3.5-turbo-instruct。
着重提高回复的准确性和相关性,更贴合用户需求。
4,096 tokens
Yes
No
$0.0015 / 1K tokens(输入)
$0.0020 / 1K tokens(输出)
Sep 2021
表中的 GPT-3.5 Turbo Instruct 模型已通过人类反馈强化学习(RLHF)微调,以更好地遵循用户意图。
RLHF 是一种将人类反馈融入强化学习过程以引导并改进 AI 体学习效果的技术。通过将人类判断、纠正或偏好直接纳入训练周期,这种方法能开发出更符合人类价值观和偏好的模型。
最后,从表中可以看到,任一 GPT-3.5 模型的使用成本都明显低于 GPT-4。
在这方面,我通常建议在一组定义良好的示例上比较各模型的表现,以判断 GPT-3.5 是否足以胜任当前任务,从而节省推理成本。
LLaMa 模型 - Meta AI
正如我们在前文讨论的,LLaMa 模型可免费下载并在本地运行,也可在其之上进行定制。
LLaMa 模型实际上是由 Meta AI 提供的一个规模和变体都很庞大的开放模型家族:
Model
Characteristics
Context Window
API
Local
Variant
Training Data
LLaMa 2
用于补全任务的基础非聊天模型。
4096 tokens
Yes
LLAMA API
Yes*
7B
13B
70B
Sep 2022
LLaMa 2 Chat
在基础 LLaMa 2 上进行指令微调,将简单补全转化为能遵循用户意图的聊天模型。
4096 tokens
Yes
LLAMA API
Yes*
Ollama
7B
13B
70B
Sep 2022
LLaMa 2 Guard
输入-输出安全防护模型,训练用于检测有毒和有害内容。
4096 tokens
Yes**
No
7B
Sep 2022*
*Hugging Face 也提供一些 LLaMa 变体,如基础和聊天模型。**目前,LLaMa 2 Guard 可在 Amazon SageMaker 的云环境中使用。
与内置编码能力的 GPT 模型不同,LLaMa 针对编码提供了专门模型,并通过长上下文微调实现了 16k tokens 的更大上下文窗口。
Model
Characteristics
Context Window
API
Local
Variant
Training Data
Code LLaMa
用于代码补全任务(如 GitHub Copilot)的基础非聊天模型。
由 LLaMa 2 模型在代码数据和长上下文上额外训练并进行微调而成。
16k
No
Yes
Ollama
7B
13B
34B
Sep 2022*
Code LLaMa - Instruct
源自 Instruct 模型。擅长代码补全和代码片段解释。
16k
Yes
LLAMA API
Yes
Ollama
7B
13B
34B
Sep 2022*
Code LLaMa - Python
针对 Python 编程语言进行微调。
16k
No
Yes
Ollama
34B
Sep 2022*
* LLaMa 模型的官方截断日期为 2022 年 9 月。然而,微调数据更为更新,尤其是较新的变体,其数据可追溯至 2023 年。
Google 的 LLM 家族
Google 在开发大型语言模型方面历史悠久。随着 Gemini 模型的推出,Google 开启了多模态 LLM 的时代。
在 Google 的产品中,Gemini 成为其旗舰模型,属于闭源,类似 ChatGPT。不过,他们近期推出了 Gemma,即源自 Gemini 的一套开源模型,旨在促进易用的 AI 开发。
本文将同时关注 Gemini 和 Gemma:
Model
Characteristics
API
Local
Variants
Gemini
闭源通用模型(文本生成、翻译、问答、代码等)
Yes*
No
Ultra - 解决复杂任务。
Pro - 覆盖广泛任务,具备可扩展性。
Nano - 面向设备端的高效运行。
Gemma
与 Gemini 任务类似,但侧重集成到自定义应用和研究。为轻量级模型。
Yes**LLAMA API
YesOllama
Hugging Face
2B
7B
*Gemini 提供面向商业用途的 API(不开放部署)。不过,我们可以通过其 Playground 界面试用该模型。
**没有原生的 Google 端点,但可通过 Kaggle 和 Google Colab 访问。更多信息见 Google 官方文档。
就 Gemini 的变体而言,Gemini Ultra 是在复杂分析任务中表现突出的多模态模型。Gemini Pro 在性能与可扩展性之间取得平衡,擅长代码和文本生成。最后,Gemini Nano 注重在设备端的高效性,可在移动端和边缘设备上运行而无需大量资源。
关于 Google 的模型,在撰写本文时,公开可得的上下文窗口大小和训练数据截断日期信息并不多。
Mistral AI 的 LLM 家族
Mistral AI 是一家成立于 2023 年 4 月的法国 AI 公司,由来自 Meta Platforms 和 Google DeepMind 的前员工创办。公司专注于开发开源 LLM,强调相对于专有模型而言开源软件的重要性。其提供的模型包括 Mistral 7B 和 Mixtral 8x7B,具备先进的语言处理能力。
Model
Characteristics
Context
Window
API
Local
Token Pricing
Training Data
Mistral
通用模型,含 7B 参数。
针对英语和代码生成任务优化。
32k
Yes*
LLAMA API
Hugging Face**
Yes
Ollama
Hugging Face**
$0.25 / 1M tokens(输入与输出)
Sep 2023
Mixtral
最强的通用模型。
精通英语、法语、意大利语、德语、西班牙语,并在编码任务方面表现出色。
基于 7B 参数的稀疏专家混合(Mixture-of-Expert)架构。
32k
Yes*
LLAMA API
Hugging Face**
Yes
Ollama
Hugging Face**
$0.7 / 1M tokens(输入与输出)
Dec 2023
*我们可以通过名为 “La Plataforme” 的 Playground 界面与 Mistral AI 的模型交互。
** Hugging Face 也为部分模型提供通过其 API 进行实时推理的试验环境。它也是第三方提供商,允许您为可用模型部署付费端点。
关于 Mixtral 模型,“专家混合”架构允许模型将整体能力划分到不同的专业组或“专家”中。每个专家针对特定任务或数据类型进行优化。
在处理输入时,Mixtral 会动态调用相关专家,从而在每个 token 上仅使用其总参数的一小部分即可高效处理复杂任务。这种方法提升了 Mixtral 的性能,使其在多种语言和任务上表现出色,同时优化计算资源。Mixtral 模型名为 “Mixtral 8x7B”,正是指其使用了 8 组不同的“专家”。
最后,Mistral AI 还提供三款商用模型:Mistral Small、Mistral Medium 和 Mistral Large。如您感兴趣,可在官方文档中找到关于模型与定价的更多信息。
其他
到目前为止,我们已经看到业内最知名公司的多种模型及其变体。不过,还有更多值得探索!
我想特别提及来自阿布扎比技术创新研究院的 Falcon 模型,可在 Ollama 和 LLAMA API 中使用。另有微软研究院的 Orca2 模型,特别擅长推理,同样可在 Ollama 和 Hugging Face 上使用。
您还可以在 8 Top Open-Source LLMs for 2024 and Their Uses 一文中阅读更多开源可用模型。
回顾:如何选择最佳 LLM?
本文讨论了在为目标应用选择最佳大型语言模型时需要考虑的若干方面。尽管本指南旨在充当速查表,但并不存在一条立即选出最佳模型的金科玉律。
根据我的个人经验,我认为先明确希望如何与 LLM 交互是一个不错的起点,因为这已经能减少可选模型及其变体的数量。
第二个要考虑的方面是模型将执行的目标任务:通用聊天机器人、摘要专家、编码助手等。
虽然我们总可以为目标任务微调模型,但我们已经看到,针对特定用例的现成微调变体能为我们节省时间、计算资源和技术投入。根据应用所需的上下文窗口大小进行选择同样至关重要。
最后,价格始终是选择哪种模型的良好指标。遗憾的是,大多数时候,项目本身受限于初期投入和长期维护成本。关于价格,还需牢记,训练和微调在项目开发过程中都不是免费的,并且相当耗时。