本节我们将了解 OpenAI 与 Groq Cloud 提供的功能和模型。此外,我们还将使用 CURL 测试 API 调用速度,并比较 API 设计。
OpenAI
OpenAI API 提供了广泛的功能和模型,包括:
嵌入模型。
如 GPT-4o 与 GPT-4 Turbo 等文本生成模型的访问。
代码解释器与文件搜索。
在自定义数据集上微调模型的能力。
图像生成模型的访问。
用于转录、翻译与文本转语音的音频模型。
理解图像的视觉模型。
函数调用。
OpenAI API 速度快,且成本随时间下降。
我们可以在终端中输入以下命令来访问最新的 OpenAI 模型。该 API 需要 OpenAI 的 API 密钥、模型名称以及包含系统提示与用户查询的 messages。
curl -X POST https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{"model":"gpt-4o","messages":[{"role":"system","content":"You are a helpful assistant."},{"role":"user","content":"How do I get better at programming?"}]}'技术支持
import os
from groq import Groq
from IPython.display import display, Markdown
client = Groq(
api_key=os.environ.get("GROQ_API_KEY"),)
chat_completion = client.chat.completions.create(
messages=[{"role":"system","content":"You are a professional Data Scientist."},{"role":"user","content":"Can you explain how the neural networks work?"},],
model="llama3-70b-8192",)
Markdown(chat_completion.choices[0].message.content)技术支持
结果是对神经网络的精心排版解释。
流式聊天补全
LLM 的“流式”指逐个 token 地处理与生成文本,从而实现高效的内存使用并提升 AI 应用的感知速度。
chat_streaming = client.chat.completions.create(
messages=[{"role":"system","content":"You are a monk from Thailand."},{"role":"user","content":"Can you explain the meaning of life?"},],
model="llama3-70b-8192",
temperature=0.3,
max_tokens=360,
top_p=1,
stop=None,
stream=True,)for chunk in chat_streaming:print(chunk.choices[0].delta.content, end="")技术支持
因此,代码一运行我们就开始收到响应。
异步聊天补全
异步 API 能够在不阻塞的情况下处理多个并发请求,使系统可以独立处理并响应每个请求。这种方式更高效且可扩展,能够处理更大量的请求并提供更快的响应时间。
import asyncio
from groq import AsyncGroq
client = AsyncGroq(
api_key=os.environ.get("GROQ_API_KEY"),)asyncdefmain():
chat_completion =await client.chat.completions.create(
messages=[{"role":"system","content":"You are a psychiatrist helping young minds"},{"role":"user","content":"I panicked during the test, even though I knew everything on the test paper.",},],
model="llama3-70b-8192",
temperature=0.3,
max_tokens=360,
top_p=1,
stop=None,
stream=False,)print(chat_completion.choices[0].message.content)await main()# for Python file use asyncio.run(main())技术支持
异步聊天补全的流式输出
我们也可以对异步 API 启用流式输出,只需在聊天补全函数中开启 stream 参数,并调整打印结果的方式。我们将使用异步 for 循环逐块打印。
import asyncio
from groq import AsyncGroq
client = AsyncGroq()asyncdefmain():
chat_streaming =await client.chat.completions.create(
messages=[{"role":"system","content":"You are a psychiatrist helping young minds"},{"role":"user","content":"I panicked during the test, even though I knew everything on the test paper.",},],
model="llama3-70b-8192",
temperature=0.3,
max_tokens=360,
top_p=1,
stop=None,
stream=True,)asyncfor chunk in chat_streaming:print(chunk.choices[0].delta.content, end="")await main()# for Python file use asyncio.run(main())技术支持
之后,我们将把索引转换为查询引擎,以执行基础的 RAG(检索增强生成),即结合检索与 AI 模型生成具备上下文的答案。
from llama_index.core import VectorStoreIndex
index = VectorStoreIndex.from_documents(de_tools_blog)
query_engine = index.as_query_engine(similarity_top_k=3)
response = query_engine.query("How many tools are there?")print(response)技术支持
如果您曾为等待 ChatGPT 回复而感到焦虑,那么您会对 Groq 语言处理单元(LPU)推理引擎感到惊喜。
借助 Groq,您可以快速获得查询的响应,将等待时间从 40 秒缩短到仅 2 秒。
在本教程中,我们将:
如果您是大型语言模型(LLM)新手,建议先学习开发大型语言模型技能路径,掌握微调 LLM 和从零搭建自有模型的基础。
什么是 Groq LPU 推理引擎?
Groq 的 LPU(语言处理单元)推理引擎是一种全新的处理系统,擅长处理包含序列组件的高计算量任务,尤其是在为大型语言模型生成响应方面。这项创新技术改变了我们处理与生成文本的方式,提供了无与伦比的性能与精度。
与传统的中央处理器(CPU)和图形处理器(GPU)相比,LPU 具有更强的计算能力。这意味着预测一个词所需的时间大幅缩短,从而显著加快文本序列的生成。此外,LPU 还能缓解内存瓶颈——这是在处理 LLM 时 GPU 常见的限制。
Groq 设计 LPU 旨在解决计算密度、内存带宽、低延迟和高吞吐等挑战。其性能提升可超越 GPU 和 TPU(张量处理单元)。例如,在 Llama-3 70B 上,LPU 每位用户每秒可生成超过 310 个 token。
您可以通过阅读官方研究论文 Groq ISCA 2022 Paper 进一步了解 LPU 架构。
OpenAI 与 Groq API 对比
目前,我们只能通过 groq.com、Groq Cloud API、Groq Playground 以及 Poe 等第三方平台访问 Groq LLM。
本节我们将了解 OpenAI 与 Groq Cloud 提供的功能和模型。此外,我们还将使用 CURL 测试 API 调用速度,并比较 API 设计。
OpenAI
OpenAI API 提供了广泛的功能和模型,包括:
OpenAI API 速度快,且成本随时间下降。
我们可以在终端中输入以下命令来访问最新的 OpenAI 模型。该 API 需要 OpenAI 的 API 密钥、模型名称以及包含系统提示与用户查询的 messages。
该请求耗时 13 秒完成。
要进一步了解 OpenAI 的 API 与功能,请查看这篇OpenAI API 新手指南:实践教程与最佳实践。
Groq
Groq 在 AI 行业尚属新秀,目前提供的功能与模型相对有限。其提供:
与 OpenAI API 相比,Groq Cloud API 提供更快的响应时间。为验证这一点,我们将在终端使用 CURL 命令,并向 Groq API 提供相同的信息。
Groq API 与 OpenAI API 十分相似,唯一的区别是 URL。
它仅用两秒就完成响应,相比 OpenAI API 快了 6.5 倍。
借助 Groq,您可以获得实时的响应生成,这对某些应用至关重要。
使用 Groq Cloud
Groq Cloud 自带 AI playground,您可以在此测试所有可用于构建 AI 产品与应用的模型和 API。
要访问 Groq Cloud,您需先通过此链接创建账户。
之后,点击左侧面板的 Playground 选项卡,选择 llama3-70b-8192 模型,然后开始在 USER 输入处编写提示。
生成完整响应耗时 2.94 秒,速度为每秒 305 个 token。这是我们在 ChatGPT 上难以达到的峰值表现。
现在我们选择较小的模型 mitral-8x7b-32768 并编写后续提示。
更小的模型生成响应的速度更快,达到了每秒 577 个 token。
您可以阅读这篇教程LLM 分类:如何为您的应用选择最佳 LLM,了解可用的 LLM 选项及选型时需考虑的因素。
本地使用 Groq
要在本地访问 Groq LLM,我们需要前往 API Keys 选项卡,点击 Create API Key 按钮生成 API 密钥。
Jan AI 允许我们在本地使用 LLM——涵盖开源与专有模型。它支持 OpenAI、Anthropic、Cohere、MistralAI 和 Groq 等模型提供商。
我们将通过访问官方网站下载并安装 Jan AI。然后启动该应用。
进入设置,选择 Groq Inference Engine 选项卡,并粘贴我们刚创建的 API 密钥。
退出设置菜单,进入 Thread,选择 Groq Llama 3 70b 模型。
输入问题或提示,以实时生成响应:
Groq Cloud 的免费订阅存在一定的速率限制。例如,llama3-70b-8192 计划允许每分钟 30 次请求、每天 14,400 次请求、每分钟 6,000 个 token。尽管这些限制相当宽松,但如果您打算使用 Groq API 构建正式的 AI 应用,可能需要考虑升级到 On Demand 或 Enterprise 套餐。
您可以阅读这篇关于本地运行 LLM的教程,探索在本地运行 AI 应用的七种简单方法。
在 VSCode 中集成 Groq
除了在聊天机器人应用中使用 Groq API,我们还可以通过 CodeGPT 扩展将其集成进 VSCode。它将成为我们超高速的 AI 编码助手。
要在 VSCode 中访问 Groq 模型,我们需要在扩展市场安装 CodeGPT 扩展。
安装完成后,我们将在左侧面板点击 CodeGPT 聊天图标,选择提供商与模型来设置 Groq API 密钥。我们选择 Groq 作为提供商、llama3-70b-8192 作为模型。
之后,我们即可在聊天框中编写提示并生成代码。仅用数秒便生成了合适的代码并搭建了邮件系统。
然后我们可以为代码撰写文档、重构,并使用内置命令创建单元测试。
您可以通过阅读这篇关于为 Python 配置 VSCode的教程进一步了解 VSCode。
Groq Python API 分步指南
本节我们将学习 Groq Python API 的基础知识及其关键功能,如流式与异步聊天补全。
本指南使用 DataCamp 的DataLab。DataLab 是一款 AI Cloud Jupyter Notebook,内置众多编写代码、数据分析与分享洞见的功能。
环境配置
首先,我们需要在 DataLab 中设置 Groq API 密钥。点击左侧面板的 Environment 按钮,点击加号 + 添加环境变量。
如图所示,填写变量名并粘贴 Groq API 密钥。
随后,点击 Groq 环境变量旁的三点,选择 Connect 激活该环境变量。
最后,我们使用 pip 命令安装 Groq Python 包。
基础补全与聊天
如果您使用过 OpenAI 的 Python API,可能会发现代码结构相似。运行聊天补全需要:
结果是对神经网络的精心排版解释。
流式聊天补全
LLM 的“流式”指逐个 token 地处理与生成文本,从而实现高效的内存使用并提升 AI 应用的感知速度。
在以下示例中,我们启用了流式输出,并通过调整 temperature、max_tokens 与 top_p 等超参数来自定义模型。
因此,代码一运行我们就开始收到响应。
异步聊天补全
异步 API 能够在不阻塞的情况下处理多个并发请求,使系统可以独立处理并响应每个请求。这种方式更高效且可扩展,能够处理更大量的请求并提供更快的响应时间。
要启用异步 API 调用,我们需要调整代码结构,步骤如下:
补充说明:以下代码可在 Jupyter Notebook 中运行;如果在 Python 文件中运行,您可能需要将最后一行改为 asyncio.run(main())。
异步聊天补全的流式输出
我们也可以对异步 API 启用流式输出,只需在聊天补全函数中开启 stream 参数,并调整打印结果的方式。我们将使用异步 for 循环逐块打印。
如果您运行代码时遇到问题,请参考此 DataLab 笔记本:Groq Cloud API。
使用 Groq API 与 LlamaIndex 构建 AI 应用
在本指南中,我们将更进一步,学习如何使用 Groq API 与 LlamaIndex(一个 LLM 框架)构建 AI 应用。我们将构建一个应用,它会从 PDF 文件中加载文本,将其转换为嵌入,并保存到向量存储。之后,我们会将向量存储转换为检索器,用于构建带有历史的 RAG 聊天引擎。
简而言之,我们正在构建一个具备上下文感知能力的 ChatPDF 应用,帮助您更快理解文档。
若想了解如何使用自然语言摄取、管理与检索私有与特定领域数据,请查看本教程:LlamaIndex:大型语言模型(LLM)的数据框架。
安装 Python 包
首先,我们将使用 pip 安装所有必要的 Python 包。我们使用 %%capture 魔法函数来抑制日志输出。
使用 Groq 配置 LLM
我们将通过 llama_index 函数创建 Groq LLM 客户端。LLM 客户端需要模型名称与 API 密钥。
配置嵌入模型
现在我们将通过 LlamaIndex 的 embeddings API 下载并加载 Hugging Face 的嵌入模型。
在这里,我们加载的是 Hugging Face 上最受欢迎的嵌入模型之一:mxbai-embed-large-v1。
全局设置配置
LlamaIndex 允许我们设置全局配置,从而无需在各处传递 LLM 或嵌入模型对象。
加载数据
数据方面,我们使用了博文2024 年 14 款必备数据工程工具,并通过打印命令将其转换为 PDF。
借助 SimpleDirectoryReader 函数,您可以从文件夹中加载各种文档。只需提供文件夹路径与所需的文件扩展名。
向量检索
VectorStoreIndex 提供了最快的方式来创建向量存储:加载文档并构建索引。该索引可用于查询引擎、检索器和查询流水线。
在我们的案例中,我们通过向向量存储提供文档来创建索引,系统会将文本转换为嵌入,然后保存到向量存储。
之后,我们将把索引转换为查询引擎,以执行基础的 RAG(检索增强生成),即结合检索与 AI 模型生成具备上下文的答案。
带历史的 RAG 聊天引擎
现在我们将创建带历史的 RAG 聊天引擎。加入历史后,聊天引擎可以记住用户消息与生成的回复,进而提供具备上下文的答案。
要构建该应用,我们需要创建一个 3900 token 的 ChatMemoryBuffer,并与检索器和 LLM 对象一同提供给聊天引擎。
当您提出问题时,聊天引擎会将 PDF 文档与之前的消息作为上下文,并据此作答。
我们提出了一个泛化的问题,系统在文档中搜索了数据处理工具,并给出了列表。所有工具均在该博文中提及。
让我们再问一个跟进问题,测试聊天引擎的记忆功能。
聊天引擎记住了先前的对话,并据此作出回应。
我们使用的全部代码可在此 DataLab 笔记本中获取:Groq Cloud API — DataLab。
结语
Groq LPU 推理引擎在 AI 领域具有颠覆性意义。当 OpenAI 与 Google 等巨头专注于开发高质量 LLM 时,Groq 让这些模型运行得更快。尽管在 AI 领域尚属新面孔,Groq 已在社区中掀起不小的波澜。
在本文中,我们了解了 Groq LPU 推理引擎,探索了 Groq Cloud,并将 Groq API 集成至 VSCode 与 Jan AI 应用。此外,我们还通过代码示例深入了解了 Groq Python 包,并学习了如何构建能够从聊天历史与 PDF 文档中学习的上下文感知型 AI 应用。
您学习之旅的下一步可以是:在自定义数据集上微调 LLM。请参考本教程了解如何操作:微调 Google Gemma:用定制化指令增强 LLM。