公众号:kate人不错
引言
上个月,Together AI发布的一个消息引起我的注意,不过当时并没有实际上手测试。
www.together.ai/blog/togeth...
近日,Groq员工发布一则推文让上手MoA的难度低了不少,而且免费(Groq API免费)。
仓库地址:github.com/skapadia321...
由于Groq最近上了llama 3.1 8B和Gemma 2等多个模型,所以想要实际体验下。
Groq Mixture-of-Agents (MoA) 演示项目
项目概述
这是一个基于 Groq 语言模型的多智能体系统(Mixture of Agents,MOA)演示项目。该项目实现了 Together AI 提出的 MOA 架构,通过 Streamlit 提供了一个交互式聊天界面。
主要特性
- 基于 MoA 架构的交互式聊天界面
- 可配置的主模型和层级智能体
- 实时响应流式输出
- 中间层输出可视化
- 通过 UI 自定义智能体参数
安装指南
-
克隆仓库:
bashgit clone https://github.com/skapadia3214/groq-moa.git cd groq-moa
-
安装依赖:
pip install -r requirements.txt
-
配置环境变量:创建
.env
文件并添加 Groq API 密钥:iniGROQ_API_KEY=your_api_key_here
使用方法
-
运行 Streamlit 应用:
arduinostreamlit run app.py
-
在浏览器中打开提供的 URL
-
使用侧边栏配置 MoA 设置:
-
- 选择主模型
- 设置循环次数
- 自定义层级智能体配置
-
使用页面底部的输入框与 MoA 系统进行对话
配置说明
MoA 系统可通过 Streamlit UI 或修改 app.py
中的默认配置进行配置。主要配置参数包括:
- 主模型:生成最终响应的主要语言模型
- 循环次数:层级智能体在主智能体之前被调用的次数
- 层级智能体配置:定义每个层级智能体的系统提示、模型名称等参数的 JSON 对象
仓库代码里层级代理、层级以及主模型与其他模型的搭配方式:
1. 层级代理(Layer Agents)
层级代理是构成Mixture of Agents(MOA)架构的基本组件。每个层级代理都是一个独立的AI模型,具有特定的系统提示和配置。在代码中,层级代理通过layer_agent_config
字典定义,每个代理都有自己的系统提示、模型名称和其他参数。
2. 层级(Layers)
层级指的是MoA架构中的处理阶段。每个层级包含多个并行运行的层级代理。代码中的cycles
参数定义了层级的数量。每个层级的输出会作为下一个层级的输入。
3. 主模型和其他模型的搭配
- 主模型(Main Model) :主模型是整个MOA架构的核心,用于生成最终响应。在代码中,通过
main_model
参数指定,如"llama-3.1-70b-versatile"。 - 层级代理模型:每个层级代理可以使用不同的模型。例如,代码中使用了"llama-3.1-8b-instant"、"gemma2-9b-it"等模型作为层级代理。
搭配方式
- 用户输入被发送到第一个层级的所有代理。
- 每个层级的代理并行处理输入,生成中间输出。
- 这些中间输出被合并,并作为下一个层级的输入。
- 这个过程重复进行,直到达到指定的层级数量。
- 最后,主模型使用所有层级的处理结果来生成最终响应。
这个架构通过层级代理的并行处理和多次迭代,可以提高响应的准确性和丰富度。
我的配置如下
Agent1-3都是小模型,分别是llama 3.1 8B,Gemma2 9B,llama 3.1 8B,最后��果分析由llama 3.1 70B处理。
json
{
"layer_agent_1": {
"system_prompt": "Think through your response step by step. {helper_response}",
"model_name": "llama-3.1-8b-instant"
},
"layer_agent_2": {
"system_prompt": "Respond with a thought and then your response to the question. {helper_response}",
"model_name": "gemma2-9b-it",
"temperature": 0.7
},
"layer_agent_3": {
"system_prompt": "You are an expert at logic and reasoning. Always take a logical approach to the answer. {helper_response}",
"model_name": "llama-3.1-8b-instant"
}
}
json
{
"层级代理_1": {
"系统提示": "逐步思考你的回答。{助手回应}",
"模型名称": "llama-3.1-8b-instant"
},
"层级代理_2": {
"系统提示": "先给出一个想法,然后回答问题。{助手回应}",
"模型名称": "gemma2-9b-it",
"温度": 0.7
},
"层级代理_3": {
"系统提示": "你是一位逻辑和推理方面的专家。始终采用逻辑方法来回答。{助手回应}",
"模型名称": "llama-3.1-8b-instant"
}
}
9.11和9.9哪个大
当我设置只有2个layer时,来算算9.11和9.9哪个大,MoA最后的结果计算错误。
当设置为3层时,9.11和9.9哪个大,计算正确。
另一个例子
金庸的十大经典作品和角色
第一层3个LLM都有错误
最后的MoA结果没有错误。
得益于Groq的高速处理速度,即时是3层,每层3个LLM,从我提问到最后得到答案,生成速度和GPT-4o差不多。
MoA论文解析
根据开头我提到的论文arxiv.org/pdf/2406.04...
这篇论文的主要结论可以总结如下
- Mixture-of-Agents (MoA) 方法的有效性:MoA方法通过利用多个大型语言模型(LLMs)的集体优势,显著提高了自然语言处理任务的性能。
- 性能提升:MoA在多个标准基准测试(如AlpacaEval 2.0、MT-Bench和FLASK)上取得了显著的性能提升,甚至超越了一些最先进的模型,如GPT-4 Omni。
- 开源模型的潜力:仅使用开源模型的MoA配置在某些测试中就能超越GPT-4 Omni,展示了开源模型的巨大潜力。
- 模型协作的重要性:论文发现了LLMs之间的"collaborativeness"现象,即模型在获得其他模型输出的情况下,能生成更高质量的响应。
- 模型角色的差异化:不同模型在作为提议者(proposer)和聚合器(aggregator) 时表现出不同的优势,这种差异化有助于MoA的整体性能提升。(提议者对应是上面例子里我设置的小模型,聚合器对应的是大模型)
- 迭代改进的效果:通过多层结构,MoA能够逐步提高输出质量,每一层都对最终性能有所贡献。
- 成本效益:MoA方法在某些配置下可以达到与GPT-4 Turbo相当的性能,同时成本更低。
- 多样性的重要性:使用多样化的模型作为提议者比使用同一模型生成多个输出更有效。
- 适用性广泛:MoA方法适用于各种复杂的自然语言处理任务,特别是那些需要多角度思考和迭代改进的任务。
Ollama现在也支持多个模型一起运行,我认为MoA完全可以在本地跑起来。
论文里对主模型设置的提示词是:
您已经获得了来自多个开源模型的对最新用户查询的响应集。您的任务是将这些响应综合为一个高质量的回复。关键在于批判性地评估提供的信息,认识到其中可能存在偏见或错误。您的回复不应简单地复制给定的答案,而应提供一个精炼、准确且全面的回应。确保您的回复结构良好、连贯一致,并符合最高的准确性和可靠性标准。
论文里讲解了每一层的作用
- 第一层 (Layer 1):
作用:生成初始回答。第一层的多个LLM模型(称为agents)独立地对给定的提示生成回答。这一层的目的是产生多样化的初始回答,为后续层提供基础材料。
- 中间层 (Layer 2 到 Layer n-1):
作用:迭代改进和综合前一层的回答。中间层的agents接收前一层所有agents的输出作为辅助信息,然后进行进一步的改进和综合。这些中间层可能重复使用第一层的某些模型,但它们的任务是在前一层输出的基础上进行迭代改进。
- 最后一层 (Layer n):
作用:生成最终的高质量回答。
最后一层的作用是对前面所有层的输出进行最终的综合和改进,生成一个更加健壮和全面的回答。
- 整体结构的作用:
通过在过程中引入多个聚合器(即各层的agents),MoA方法可以迭代地综合和改进回答,利用多个模型的优势来产生更优质的结果。
可能有人要问,那几个层级,每个层级里有几个LLM合适呢?
根据论文,最佳的Mixture-of-Agents (MoA)设计是3层结构,每层包含6个模型。
- 层数:3层
论文构建了3个MoA层,每一层使用相同的模型集。这个设计在复杂性和性能之间取得了良好的平衡。3层结构允许足够的迭代改进,同时保持计算效率。
- 每层模型数:6个
每层包含6个不同的模型。这些模型包括Qwen1.5-110B-Chat、Qwen1.5-72B-Chat、WizardLM-8x22B、LLaMA-3-70B-Instruct、Mixtral-8x22B-v0.1和dbrx-instruct。使用多样化的模型集合可以提供不同的视角和能力,从而提高最终输出的质量。
- 效果:
这种设计在多个基准测试中表现出色。特别是在AlpacaEval 2.0测试中,仅使用开源模型的MoA就超越了GPT-4o的表现,相比之前的顶级模型GPT-4o,绝对提升了8.2%。
- 变体:MoA-Lite
论文还提出了一个名为MoA-Lite的变体,它更注重成本效益。MoA-Lite使用相同的6个模型作为提议者,但只包含2个MoA层,并使用Qwen1.5-72B-Chat作为聚合器。这个变体在保持较高性能的同时,降低了计算成本。
那提议模型和聚合模型如何设置?
根据论文
- 6个提议模型(Proposers)的设置:
这6个模型包括了不同大小和架构的模型,从72B到110B不等。这种多样性有助于提供不同的视角和能力。
- 聚合模型(Aggregator)的设置:
作者选择了最大的模型Qwen1.5-110B-Chat作为最后一层的聚合器。
- 模型选择的考虑因素:
模型选择基于两个主要标准:性能指标和多样性考虑。性能好的模型更有可能被选入下一层,而模型输出的多样性也很重要。
- 大模型的放置:
根据论文的描述,合理的做法是将最大和性能最好的模型(在这种情况下是Qwen1.5-110B-Chat)作为最后一层的聚合器。这是因为:
a) 聚合器需要理解和综合所有先前的输出,这需要更强的能力。b) 最后一层的输出直接决定了最终的结果质量。
较大的模型如GPT-4o、Qwen和LLaMA-3在辅助和聚合任务中都表现出色,这支持了将大模型用作聚合器的做法。
- 轻量级变体的考虑:
在更注重成本效益的情况下,作者选择了稍小一些的Qwen1.5-72B-Chat作为聚合器,同时减少了MoA的层数。
这张表格展示了不同语言模型在Mixture-of-Agents (MoA)框架中作为聚合器(aggregator)和提议者(proposer)时的表现。
- 表格含义:
-
- "As aggregator"列显示了每个模型作为聚合器时的性能得分。
- "As proposer"列显示了每个模型作为提议者时的性能得分。
- 性能差异:
-
- 有些模型(如Qwen1.5-110B-Chat和Qwen1.5-72B-Chat)作为聚合器时表现更好。
- 而其他模型(如LLaMA-3-70b-Instruct和WizardLM 8x22B)作为提议者时表现更出色。
- 模型特性:
-
- 这表明不同模型在MoA框架中可能有不同的"专长"。
- 有些模型更适合综合和改进其他模型的输出(作为聚合器),而有些则更擅长生成初始回答(作为提议者)。
- MoA设计启示:
-
- 这些结果可以指导如何在MoA中选择和安排模型。
- 例如,可能会选择Qwen1.5-110B-Chat作为最终聚合器,而将WizardLM 8x22B用作提议者。
- 模型互补性:
-
- 表格显示了模型之间的互补性,这正是MoA方法的核心优势。
- 通过组合不同模型的优势,MoA可以实现比单个模型更好的整体性能。
那MoA适合处理哪些问题?
根据论文
- 复杂的指令跟随任务
MoA 方法特别适合处理需要深度理解和复杂生成的自然语言任务,尤其是那些需要精确跟随复杂指令的任务。
- 需要多角度思考的问题
MoA 方法通过结合多个模型的优势,特别适合那些需要从多个角度思考或需要综合多种专业知识的问题。
- 需要迭代改进的任务
MoA 的多层结构特别适合那些需要多次迭代和改进才能得到高质量答案的任务。
- 需要强大推理能力的问题
这些基准测试涵盖了各种需要强大推理能力的任务,MoA 在这些测试中表现出色,说明它特别适合处理需要复杂推理的问题。
- 需要多样化输出的任务
MoA 方法特别适合那些需要多样化输出或创意思考的任务,因为它能够综合多个不同模型的输出。
- 需要高准确度和可靠性的任务
通过多个模型的协作和迭代改进,MoA 方法特别适合那些对准确性和可靠性要求较高的任务。
- 需要强大常识推理和事实性的问题
MoA 在常识推理、事实性等方面显示出明显改进,因此特别适合需要这些能力的任务。