譯者 | 朱先忠
審校 | 重樓
當今時代,各種人工智能模型的能力整合到一起已經(jīng)釋放出一股巨大的潛力。這種力量已經(jīng)涉及到從需要視覺、語音、寫作和合成等多種能力的復雜任務自動化到增強決策過程等諸多領域。然而,如何高效協(xié)調(diào)這些合作?無論在管理內(nèi)部關系還是在管理依賴性方面都提出了重大挑戰(zhàn)。傳統(tǒng)的線性管理方案往往達不到要求,難以管理各種模型和動態(tài)依賴關系的復雜性。
通過將機器學習工作流程轉(zhuǎn)換為圖形式,我們可以更為直觀地了解每個模型間的相互作用,并為把自然語言處理、計算機視覺和語音模型共同整合到一起的整體效果發(fā)揮作用。在使用圖方法的過程中,節(jié)點表示模型或任務,邊定義它們之間的依賴關系。這種基于圖的映射提供了幾個優(yōu)勢,可以識別哪些模型依賴于其他模型的輸出,并利用并行處理來完成獨立任務。此外,我們可以根據(jù)任務優(yōu)先級使用現(xiàn)有的圖導航策略(如廣度優(yōu)先或深度優(yōu)先)來執(zhí)行任務。
然而,通往和諧的人工智能模型協(xié)作之路并非沒有障礙。想象一下,指揮一個管弦樂隊,每個人都會說不同的語言,樂器獨立演奏,等等。這一挑戰(zhàn)反映了集成不同人工智能模型時的溝通差距;因此,急需一個框架來管理關系以及確定哪些模型可以接收每種輸入格式。
多模型協(xié)作典型使用場景
基于圖論技術的多模型編排方法為各個領域的激動人心的可能性應用敞開了無數(shù)的大門:
藥物發(fā)現(xiàn)領域的協(xié)作任務
作為數(shù)據(jù)分析任務中部分任務的三模型協(xié)作圖
研究人員可以使用一系列人工智能助理來加速藥物發(fā)現(xiàn)過程。例如,使用三步法發(fā)現(xiàn)任務,每個AI助理都是為特定任務設計的。第一步涉及一個語言模型,該模型負責掃描大量科學數(shù)據(jù),以突出與特定疾病密切相關的潛在蛋白質(zhì)靶點。然后是一個視覺模型,以解釋復雜的圖表或圖像,提供對已識別蛋白質(zhì)結構的詳細觀察。這一視覺效果對于理解潛在藥物如何與蛋白質(zhì)相互作用至關重要。最后,第三個模型整合了語言和視覺模型的輸入,以預測化合物可能如何影響靶蛋白,為研究人員有效把控這一過程提供寶貴洞察力。
不過,在交付整個管道的模型集成過程中,也將出現(xiàn)一些挑戰(zhàn)。從掃描內(nèi)容中提取相關圖像并將該圖像輸入到視覺模型中并不像看上去那么簡單。例如,在文本掃描和視覺任務之間需要使用一個中間處理器來過濾相關圖像。其次,分析任務本身往往需要合并多個輸入:數(shù)據(jù)掃描輸出、視覺模型的解釋和用戶指定的指令。這需要通過一個模板來組合語言模型的這些信息,以便處理所有相關信息。接下來后面的內(nèi)容中,我們將介紹如何利用一個開源Python框架Intelli來處理這些復雜的關系。
創(chuàng)造性的內(nèi)容生成
用于生成動畫的四個任務之間的關系示意圖
模型協(xié)作可以通過集成音樂創(chuàng)作、動畫和設計模型等元素來生成動畫場景,從而促進交互式內(nèi)容創(chuàng)建。例如,在基于圖的協(xié)作方法中,第一個任務可以像導演一樣規(guī)劃場景,并傳遞每個音樂和圖像生成任務的輸入。最后,動畫模型將使用藝術和音樂模型的輸出來生成短視頻。
為了優(yōu)化這一過程,我們的目標是實現(xiàn)音樂和圖形生成的并行執(zhí)行,因為它們是獨立的任務。因此,音樂不需要等待圖形的完成。此外,我們需要通過動畫任務處理不同的輸入格式。雖然像Stable Video Diffusion這樣的一些模型只能處理圖像,但音樂數(shù)據(jù)可以使用一種后處理器組合到一起。
其實,上面這些例子只是展示了模型集成過程中運用圖技術潛力的小小的一瞥??傊瑘D集成方法允許您根據(jù)特定需求定制多個任務,并提出一些創(chuàng)新性解決方案。
通過開源Intelli框架并運用圖技術編排人工智能模型
用圖表示的任務
Intelli是一個開源Python模塊,它通過三個關鍵組件并利用圖形學原理來編排人工智能工作流程:
- 代理(Agents):代表人工智能模型,開發(fā)者可以通過指定其類型(文本、圖像、視覺或語音)、提供商(如OpenAI、Gemini、Agents、Mistral等)和任務共三部分信息來定義每個代理。
- 任務(Tasks):是人工智能工作流程中的單個單元。每個任務都利用代理來執(zhí)行特定操作,并使用用戶提供的自定義預處理和后處理方案。
- 流(Flow):負責將所有內(nèi)容綁定在一起,協(xié)調(diào)任務的執(zhí)行,遵守通過圖結構建立的依賴關系。流管理確保任務以正確的順序高效執(zhí)行,盡可能實現(xiàn)順序和并行處理。
當連接多個模型時,使用流組件將任務關系作為圖方式管理會帶來一些好處。但是,對于僅有一個任務的情況,這種方式可能有些浪費,直接調(diào)用模型就足夠了。
擴展(Scaling):隨著項目復雜性的增加,添加更多的模型和任務需要重復的代碼更新,以解決數(shù)據(jù)格式不匹配和復雜的依賴關系。圖方法通過定義一個表示任務的新節(jié)點來簡化這一過程,并且可以由框架來自動解決輸入/輸出差異,以協(xié)調(diào)數(shù)據(jù)流。
動態(tài)適應(Dynamic Adaptation):對于傳統(tǒng)方法,復雜任務的更改將影響整個工作流程,需要進行調(diào)整。使用流時,它可以自動處理添加、刪除或修改連接這樣的任務。
可解釋性(Explainability):圖方案通過可視化模型的交互方式,使開發(fā)人員能夠更深入地了解人工智能工作流程,并優(yōu)化任務路徑導航。
【說明】作者本人也參與了Intelli框架的設計和開發(fā),這個框架是一個擁有Apache許可證的開源項目。
Intelli框架入門
首先,確保您已經(jīng)安裝了Python 3.7+,因為Intelli框架利用了最新的Python異步功能,安裝命令如下:
pip install intelli
代理:任務執(zhí)行器
Intelli框架中的代理被設計為與特定的人工智能模型接口。每個代理都包括一個統(tǒng)一的輸入層,用于訪問任何模型類型,并提供一個字典,允許向模型傳遞自定義參數(shù),如最大尺寸、溫度和模型版本等。
from intelli.flow.agents import Agent
# 定義執(zhí)行各類AI任務的代理
text_agent = Agent(
agent_type="text",
provider="openai",
missinotallow="write social media posts",
model_params={"key": OPENAI_API_KEY, "model": "gpt-4"}
)
任務:構建塊
任務表示要由代理執(zhí)行的單個工作單元或操作,并包括處理前一個任務的輸出邏輯。每項任務都可以是一個簡單的操作,比如生成文本,也可以是更復雜的過程,比如分析用戶反饋的情緒。
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
)
處理器:協(xié)調(diào)I/O任務
通過定義負責任務輸入的定制前處理和負責輸出任務的后處理,處理器實現(xiàn)了一個額外的控制層。下面的示例代碼演示了在調(diào)用圖模型之前創(chuàng)建一個函數(shù)來縮短前一步的文本輸出。
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,
)
流:指定依賴項
流負責將您的人工智能工作流程轉(zhuǎn)換為有向無循環(huán)圖(DAG),并利用圖技術進行依賴性管理。這使您能夠輕松地可視化任務關系,并優(yōu)化任務的執(zhí)行順序。
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規(guī)定了任務的依賴關系,指導流(Flow)編排執(zhí)行順序,并確保每個任務都能從其前置任務接收到必要的輸出。
以下是使用流導航節(jié)點的原理:
- 映射流:流(Flow)使用任務作為節(jié)點,使用依賴項作為邊來構建DAG。此可視化表示闡明了任務執(zhí)行順序和數(shù)據(jù)流。
- 拓撲排序:流負責分析圖以便確定最佳執(zhí)行順序。沒有傳入依賴項的任務會被優(yōu)先排序,確保每個任務在執(zhí)行前都能從前置任務接收到必要的輸入。
- 任務執(zhí)行:框架迭代經(jīng)過排序的任務,使用相應的輸入執(zhí)行每個任務。根據(jù)依賴關系圖,輸入可能來自以前的任務輸出和用戶定義的值。
- 輸入準備:在執(zhí)行之前,任務應用為任務定義的任何預處理功能,根據(jù)需要修改輸入數(shù)據(jù)并調(diào)用指定的代理。
- 輸出管理:代理返回一個輸出,該輸出存儲在以任務名稱為關鍵字的字典中,并返回給用戶。
下面代碼展示了如何將流可視化為圖形:
flow.generate_graph_img()
任務和分配代理的可視化(Intelli圖函數(shù))
結論
總之,通過引入圖論技術,能夠?qū)崿F(xiàn)不同模型之間的協(xié)作,從而改變編排人工智能模型的傳統(tǒng)線性方法。
借助于像Intelli這樣的開源框架,可以將開發(fā)過程中的工作流程轉(zhuǎn)換為可視化表示。其中,任務成為節(jié)點,依賴關系映射為邊,從而創(chuàng)建整個流程的概覽,最終把復雜的任務自動化。
上述這種方法可以擴展到需要協(xié)作人工智能模型的許多不同領域,包括科學研究、商業(yè)決策自動化和交互式內(nèi)容創(chuàng)建等等。然而,如何有效地管理模型之間的數(shù)據(jù)交換的規(guī)模還需要進一步細化。
參考文獻
- Intelli框架git代碼倉庫:https://github.com/intelligentnode/Intelli。
- 圖論知識:https://www.britannica.com/topic/graph-theory。
譯者介紹
朱先忠,51CTO社區(qū)編輯,51CTO專家博客、講師,濰坊一所高校計算機教師,自由編程界老兵一枚。
原文標題:Graph Theory to Harmonize Model Integration,作者:Ahmad Albarqawi