AI 日报

基于图技术提升多模型协作性能

  • By 51ITO
  • Apr 11, 2024 - 2 min read



译者 | 朱先忠

审校 | 重楼

当今时代,各种人工智能模型的能力整合到一起已经释放出一巨大的潜力这种力量已经涉及到从需要视觉、语音、写作和合成等多种能力的复杂任务自动化到增强决策过程等诸多领域。然而,如何高效协调这些合作?无论在管理内部关系还是在管理依赖性方面都提出了重大挑战。传统的线性管理方案往往达不到要求,难以管理各种模型和动态依赖关系的复杂性。

通过将机器学习工作流程转换为图形式,我们可以更为直观地了解每个模型间的相互作用,并为把自然语言处理、计算机视觉和语音模型共同整合到一起的整体效果发挥作用。在使用图方法的过程中,节点表示模型或任务,边定义它们之间的依赖关系。这种基于图的映射提供了几个优势,可以识别哪些模型依赖于其他模型的输出,并利用并行处理来完成独立任务。此外,我们可以根据任务优先级使用现有的图导航策略(如广度优先或深度优先)来执行任务。

然而,通往和谐的人工智能模型协作之路并非没有障碍。想象一下,指挥一个管弦乐队,每个人都会说不同的语言,乐器独立演奏,等等。这一挑战反映了集成不同人工智能模型时的沟通差距;因此,急需一个框架来管理关系以及确定哪些模型可以接收每种输入格式。

多模型协作典型使用场景

基于图论技术的多模型编排方法为各个领域的激动人心的可能性应用敞开了无数的大门:

药物发现领域的协作任务

作为数据分析任务中部分任务的三模型协作图作为数据分析任务中部分任务的三模型协作图

研究人员可以使用一系列人工智能助理来加速药物发现过程。例如,使用三步法发现任务,每个AI助理都是为特定任务设计的。第一步涉及一个语言模型,该模型负责扫描大量科学数据,以突出与特定疾病密切相关的潜在蛋白质靶点。然后是一个视觉模型,以解释复杂的图表或图像,提供对已识别蛋白质结构的详细观察。这一视觉效果对于理解潜在药物如何与蛋白质相互作用至关重要。最后,第三个模型整合了语言和视觉模型的输入,以预测化合物可能如何影响靶蛋白,为研究人员有效把控这一过程提供宝贵洞察力。

不过,在交付整个管道的模型集成过程中,也将出现一些挑战。从扫描内容中提取相关图像并将该图像输入到视觉模型中并不像看上去那么简单。例如,在文本扫描和视觉任务之间需要使用一个中间处理器来过滤相关图像。其次,分析任务本身往往需要合并多个输入:数据扫描输出、视觉模型的解释和用户指定的指令。这需要通过一个模板来组合语言模型的这些信息,以便处理所有相关信息。接下来后面的内容中,我们将介绍如何利用一个开源Python框架Intelli来处理这些复杂的关系。

创造性的内容生成

用于生成动画的四个任务之间的关系示意图用于生成动画的四个任务之间的关系示意图

模型协作可以通过集成音乐创作、动画和设计模型等元素来生成动画场景,从而促进交互式内容创建。例如,在基于图的协作方法中,第一个任务可以像导演一样规划场景,并传递每个音乐和图像生成任务的输入。最后,动画模型将使用艺术和音乐模型的输出来生成短视频。

为了优化这一过程,我们的目标是实现音乐和图形生成的并行执行,因为它们是独立的任务。因此,音乐不需要等待图形的完成。此外,我们需要通过动画任务处理不同的输入格式。虽然像Stable Video Diffusion这样的一些模型只能处理图像,但音乐数据可以使用一种后处理器组合到一起

其实,上面这些例子只是展示了模型集成过程中运用图技术潜力的小小的一瞥。总之,图集成方法允许您根据特定需求定制多个任务,并提出一些创新性解决方案。

通过开源Intelli框架并运用图技术编排人工智能模型

用图表示的任务用图表示的任务

Intelli是一个开源Python模块,通过三个关键组件利用图形原理来编排人工智能工作流程:

  1. 代理(Agents:代表人工智能模型,开发者可以通过指定其类型(文本、图像、视觉或语音)、提供商(如OpenAIGemini、Agents、Mistral等)和任务共三部分信息来定义每个代理。
  2. 任务(Tasks):是人工智能工作流程中的单个单元。每个任务都利用代理来执行特定操作,并使用用户提供的自定义预处理和后处理方案。
  3. 流(Flow:负责将所有内容绑定在一起,协调任务的执行,遵守通过图结构建立的依赖关系。流管理确保任务以正确的顺序高效执行,尽可能实现顺序和并行处理。

当连接多个模型时,使用流组件将任务关系作为图方式管理会带来一些好处。但是,对于仅有一个任务的情况,这种方式可能有些浪费,直接调用模型就足够了。

扩展(Scaling:随着项目复杂性的增加,添加更多的模型和任务需要重复的代码更新,以解决数据格式不匹配和复杂的依赖关系。图方法通过定义一个表示任务的新节点来简化这一过程,并且可以由框架来自动解决输入/输出差异,以协调数据流。

动态适应(Dynamic Adaptation:对于传统方法,复杂任务的更改将影响整个工作流程,需要进行调整。使用流时,它可以自动处理添加、删除或修改连接这样的任务。

可解释性(Explainability:图方案通过可视化模型的交互方式,使开发人员能够更深入地了解人工智能工作流程,并优化任务路径导航。

【说明】作者本人也参与了Intelli框架的设计和开发,这个框架是一个拥有Apache许可证的开源项目。

Intelli框架入门

首先,确保您已经安装了Python 3.7+,因为Intelli框架利用了最新的Python异步功能,安装命令如下

pip install intelli

代理:任务执行器

Intelli框架中的代理被设计为与特定的人工智能模型接口。每个代理都包括一个统一的输入层,用于访问任何模型类型,并提供一个字典,允许向模型传递自定义参数,如最大尺寸、温度和模型版本

from intelli.flow.agents import Agent

# 定义执行各类AI任务的代理
text_agent = Agent(
 agent_type="text",
 provider="openai",
 missinotallow="write social media posts",
 model_params={"key": OPENAI_API_KEY, "model": "gpt-4"}
)

任务:构建块

任务表示要由代理执行的单个工作单元或操作,并包括处理前一个任务的输出逻辑。每项任务都可以是一个简单的操作,比如生成文本,也可以是更复杂的过程,比如分析用户反馈的情绪。

from intelli.flow.tasks import Task
from intelli.flow.input import TextTaskInput

#定义生成文本的任务
task1 = Task(
 TextTaskInput("Create a post about AI technologies"),
 text_agent,
 log=True
)

处理器:协调I/O任务

通过定义负责任务输入的定制前处理和负责输出任务的后处理,处理器实现了一个额外的控制层。下面的示例代码演示了在调用图模型之前创建一个函数来缩短前一步的文本输出。

class TextProcessor:
 @staticmethod
 def text_head(text, size=800):
 retupytrn text[:size]

task2 = Task(
 TextTaskInput("Generate image about the content"),
 image_agent,
 pre_process=TextProcessor.text_head,
 log=True,
)

流:指定依赖项

流负责将您的人工智能工作流程转换为有向无循环图(DAG),并利用图技术进行依赖性管理。这使您能够轻松地可视化任务关系,并优化任务的执行顺序。

from intelli.flow.flow import Flow

flow = Flow(
 tasks={
 "title_task": title_task,
 "content_task": content_task,
 "keyword_task": keyword_task,
 "theme_task": description_theme_task,
 "image_task": image_task,
 },
 map_paths={
 "title_task": ["keyword_task", "content_task"],
 "content_task": ["theme_task"],
 "theme_task": ["image_task"],
 },
)

output = await flow.start()

上述代码中,map_path规定了任务的依赖关系,指导流(Flow编排执行顺序,并确保每个任务都能从其前置任务接收到必要的输出。

以下是使用流导航节点的原理

  1. 映射流:流(Flow使用任务作为节点,使用依赖项作为边来构建DAG。此可视化表示阐明了任务执行顺序和数据流。
  2. 拓扑排序:流负责分析图以便确定最佳执行顺序。没有传入依赖项的任务会被优先排序,确保每个任务在执行前都能从前置任务接收到必要的输入。
  3. 任务执行:框架迭代经过排序的任务,使用相应的输入执行每个任务。根据依赖关系图,输入可能来自以前的任务输出和用户定义的值。
  4. 输入准备:在执行之前,任务应用为任务定义的任何预处理功能,根据需要修改输入数据并调用指定的代理。
  5. 输出管理:代理返回一个输出,该输出存储在以任务名称为关键字的字典中,并返回给用户。

下面代码展示了如何将流可视化为图形:

flow.generate_graph_img()

任务和分配代理的可视化(Intelli图函数)任务和分配代理的可视化(Intelli图函数)

结论

总之,通过引入图论技术,能够实现不同模型之间的协作,从而改变编排人工智能模型的传统线性方法。

借助于像Intelli这样的开源框架,可以开发过程中的工作流程转换为可视化表示其中任务成为节点,依赖关系映射为边,从而创建整个流程的概览,最终把复杂的任务自动化。

上述这种方法可以扩展到需要协作人工智能模型的许多不同领域,包括科学研究、商业决策自动化和交互式内容创建等等。然而,如何有效地管理模型之间的数据交换的规模还需要进一步细化。

参考文献

译者介绍

朱先忠,51CTO社区编辑,51CTO专家博客、讲师,潍坊一所高校计算机教师,自由编程界老兵一枚。

原文标题:Graph Theory to Harmonize Model Integration,作者:Ahmad Albarqawi