跳至文章
ShemolEino學習筆記-2
Eino / LLM

Eino學習筆記-2

Components

大模型應用開發的三種應用模式:

  1. 直接對話模式:處理使用者輸入並生成相應回答
  2. 知識處理模式:對文本文檔進行語義化處理、儲存和檢索
  3. 工具呼叫模式:基於上下文做出決策並呼叫相應工具

Eino將常用能力抽象為可複用的組件(Components)

組件抽象和幾種模式對應關係如下:

對話處理類組件:

  1. 模組化處理和大模型交互參數的組件抽象:ChatTemplate
  2. 直接和大模型交互的組件抽象:ChatModel

文本語義處理類組件:

  1. 獲取和處理文本文檔的組件抽象:Document.Loader 、Document.Transformer
  2. 文本文檔語義化處理的組件抽象:Embedding
  3. Embedding之後將資料索引進行儲存的組件抽象:Indexer
  4. 將語義相關文本文檔進行索引和召回的組件抽象:Retriever

決策執行類組件:

大模型能夠做決策並呼叫工具的組件抽象:ToolsNode

自訂組件:

使用者自訂程式邏輯的組件抽象:Lambda

Eino的組件抽象秉持著以下設計原則:

  1. 模組化和標準化:將一系列功能相同的能力抽象成統一的模組,組件間職能明確、邊界清晰,支援靈活的組合。
  2. 可擴展性,介面的設計保持盡可能小的模組能力約束,讓組件的開發者能方便地實現自訂組件的開發。
  3. 可複用性,把最常用的能力和實作進行封裝,提供給開發者開箱即用的工具使用。

Chain & Graph 編排功能

編排:對Components原子能力進行組合、串聯。

  • 不能讓業務邏輯融入到編排中。
  • 大模型應用的核心是 「對提供原子能力的組件」 進行組合串聯,組件是編排的 「第一公民」。
  • 抽象視角看編排:編排是在構建一張網路,資料則在這個網路中流動,網路的每個節點都對流動的資料有格式/內容的要求,一個能順暢流動的資料網路,關鍵就是 「上下游節點間的資料格式是否對齊?」。
  • 業務場景的複雜度會反映在編排產物的複雜性上,只有橫向的治理能力才能讓複雜場景不失控。
  • 大模型是會持續保持高速發展的,大模型應用也是,只有具備擴展能力的應用才擁有生命力。

Eino提供了基於Graph模型(edge+node)的,以組件為原子節點的,以上下游類型對齊為基礎的編排解決方案。

  • 以組件為核心,規範了業務功能的封裝方式。
  • 業務邏輯複雜度封裝到組件內部,編排層擁有更全域的視角,讓邏輯層次變得清晰。
  • 提供了切面能力,callback機制支援了基於節點的統一治理能力(什麼是切面能力)
  • 提供了call option的機制,擴展性是快速迭代中的系統最基本的訴求
  • 提供了「類型對齊」的開發方式的強化,降低開發者心智負擔,把golang的類型安全特性發揮出來
  • 提供了「流的自動轉換」能力,讓「流」在編排系統的複雜性來源榜中除名(Eino流式編程)

Graph缺點:基於 「點」 「邊」 模型的 Graph 在使用時,要求開發者要使用 graph.AddXXXNode() 和 graph.AddEdge() 兩個介面來建立一個資料通道,強大但是略顯複雜。

Eino 封裝了介面更易於使用的 Chain。Chain 是對 Graph 的封裝,除了 「環」 之外,Chain 暴露了幾乎所有 Graph 的能力。