30 秒看懂
Matthew Berman 在这篇由赞助商支持、发布于 2024 年 7 月的教程中,演示如何将 Together AI 的 Mixture of Agents 代码仓库适配到 Groq API。他配置 Python 环境、模型、凭据和端点,并修复流式输出中遇到的 None 值错误。 示例生成了一个笑话和以指定词结尾的句子。它们展示了工作流程,但不能证明该方案总体上优于 GPT-4o,也没有量化与基准方案相比的速度和成本。
- 1分层集成图示将中间回答经过三层传递,最后由聚合器生成答案。
- 2凭据与设置主持人使用环境文件和 Groq 密钥;视频简介澄清无需有效的 OpenAI API 密钥。
- 3修改默认模型教程选择了 2024 年 Groq 支持的参考模型,并以 Llama 3 70B 作为聚合模型。
- 4API 适配Together API 引用被替换为 Groq 兼容 OpenAI 的端点和密钥引用。
- 5修复并重新测试拼接之前通过检查跳过 None 流式值。随后主持人测试了笑话和句尾约束提示词。
要点建议
- Mixture of Agents 将多次模型调用的输出逐层传给聚合器。
- 多次调用可能增加延迟;教程使用 Groq 推理服务来应对这一问题。
- 这次 2024 年的适配修改了模型、API 端点、凭据和环境加载方式。
- 根据视频简介中的更新,本教程不需要有效的 OpenAI API 密钥。
- 第一次测试暴露了 None 值拼接错误;主持人添加检查后重试。
- 两个示例提示词并不能构成对质量、延迟或成本的受控基准测试。
按章节阅读整理后的全文
Mixture of Agents 与延迟
Berman 解释分层集成和多次调用带来的延迟。他在这篇 2024 年的赞助教程中提议使用 Groq 推理服务。
Mixture of Agents 结合多个语言模型的回答来生成答案。我对一项评测中开放模型集成方案优于 GPT-4o 的报告结果感到兴奋,但反复调用模型可能让这个方法变慢。在这篇 2024 年 7 月的教程中,我修改原始代码以使用 Groq 的快速推理服务;Groq 是本视频的合作方。
图示架构将提示词交给多层模型,并把中间回答逐层传递,最后由聚合器生成答案。图中有三个中间层,每层包含三个智能体,最后还有一个聚合器。结果取决于模型、提示词和评测方式;演示不能证明它在所有任务上都优于 GPT-4o。

我从 Together AI 的开源 MoA 仓库开始,修改代码以使用 Groq。这是务实的适配,而不是完全重新设计;我预计模型选择和服务商支持会不断变化。展示的代码、模型标识和服务接口反映的是 2024 年教程的情况。
克隆代码仓库并配置凭据
他设置 Python 环境并解释 API 密钥。视频简介澄清本教程不需要有效的 OpenAI 密钥。
在 VS Code 中打开终端并克隆代码仓库。我创建一个使用 Python 3.11 的独立 conda 环境,激活它,进入 MoA 目录,然后用 pip 安装仓库所需的依赖。接着打开项目文件夹,并确认环境处于激活状态。

我创建一个 .env 文件存放凭据。原教程讨论了 OpenAI 密钥,因为仓库还包含 OpenAI 基准脚本,并使用 OpenAI Python 库进行兼容的 API 调用。视频简介后来澄清,本教程不需要有效的 OpenAI API 密钥;使用这个库和拥有实际的 OpenAI 凭据是两回事。
我从 Groq 控制台获取 API 密钥,并放入环境文件。我在视频中说,录制时展示的密钥会在发布前撤销。主要修改涉及 bot.py 和 utils.py 两个文件;我的改法有些取巧,但足以完成这次演示。
修改模型与 API 调用
他更新参考模型、聚合模型、token 默认值、环境加载和端点。具体模型名称及服务接口反映的是教程发布时的情况。
在 bot.py 中,我将默认参考模型替换为当时 Groq 支持的选项:Llama 3 8B、Llama 3 70B、Mixtral 8x7B 和 Gemma 7B。我选择 Llama 3 70B 作为默认聚合模型,并更新相应的模型引用。随着服务支持变化,也可以测试其他组合。

我还将最大 token 默认值改为 2,048,同时保留现有温度设置。在 utils.py 中,我使用 python-dotenv 加载 .env 文件,并安装这一依赖。这样脚本就能读取配置的环境变量,而无需手动导出。

接下来,我将 Together 的 API 端点和密钥引用替换为 Groq 兼容 OpenAI 的端点和 Groq API 密钥。端点路径包含 /openai/v1。我在普通调用和流式调用中都进行修改,然后保存文件并测试交互式机器人。
测试并修复流式输出
第一次测试暴露了 None 值拼接错误和过时的提示标签。修正后,他测试了笑话及带句尾约束的提示词。
运行 python bot.py 后,程序提示输入聚合模型、温度和最大 token 数。显示的提示仍写着 512,尽管实际默认值是 2,048;我后来修正了这个标签。第一次请求笑话时,模型收到了请求,但一个流式输出为 None,在与字符串拼接时出现错误。

我在 bot.py 中添加检查,在拼接前跳过 None 值,并更新过时的最大 token 提示。重新启动程序并接受默认值后,我请求一个笑话,得到了那个熟悉的自行车笑话的结尾。这确认演示中的请求在修复后完成,并不代表所有故障情况都已处理。

接着,我要求生成十个以“Apple”结尾的句子。程序查询参考模型并聚合它们的回答;我说这些句子满足约束。这两个例子展示了可运行的交互工作流,但并不是与 GPT-4o 在延迟、成本或答案质量方面的受控比较。
同频道的其他文章
34:21EN → 简体中文
25:50EN → 简体中文
32:20EN → 简体中文
1:03:37EN → 简体中文
0:53EN → 简体中文
0:22EN → 简体中文