模型是特化的 Agent,作為一個關鍵的抽象層,為與外部 AI 服務 (例如大型語言模型 (LLM) 和圖像生成平台) 的互動提供了一個標準化介面。它們封裝了 API 通訊的複雜性,讓開發者能透過一個一致且統一的合約來與各種 AI 供應商合作。
AIGNE 框架定義了一個基礎的 Model 類別,它被兩個主要的特化類別所擴展:ChatModel 用於基於文本的對話式 AI,而 ImageModel 則用於圖像生成任務。這些抽象是建構更高級別 Agent (如 AIAgent 和 ImageAgent) 的基礎。
核心概念
Model 層的設計旨在簡化與不同 AI 供應商的互動。您無需為每個服務 (如 OpenAI、Anthropic 或 Google Gemini) 編寫特定於供應商的程式碼,而是與標準化的 ChatModel 或 ImageModel 介面互動。AIGNE 框架透過特定的模型套件 (例如 @aigne/openai) 來處理這種標準格式與供應商原生 API 之間的轉換。
這種設計提供了幾個關鍵優勢:
- 供應商無關: 只需最少的程式碼變更即可更換底層的 AI 模型。例如,您可以僅透過更改模型的實例化,就從 OpenAI 的 GPT-4 切換到 Anthropic 的 Claude 3。
- 標準化的資料結構: 所有模型都使用一致的輸入和輸出結構 (
ChatModelInput、ImageModelOutput等),從而簡化了資料處理和 Agent 的組合。 - 簡化的 API: 模型提供了一個清晰、高級的 API,它抽象化了每個外部服務在驗證、請求格式化和錯誤處理方面的細微差異。
下圖說明了基礎 Agent、Model 抽象以及它們所連接的外部 AI 服務之間的關係。

ChatModel 抽象
ChatModel 是一個為與大型語言模型 (LLM) 互動而設計的抽象類別。它提供了一種結構化的方式來處理對話互動,包括多輪對話、工具使用和結構化資料提取。
ChatModelInput
ChatModelInput 介面定義了發送給語言模型的請求的資料結構。它標準化了訊息、工具和其他設定的傳遞方式。
- messages
ChatModelInputMessage[](required) — 構成對話歷史和當前提示的訊息物件陣列。 - responseFormat
ChatModelInputResponseFormat— 指定模型輸出的期望格式,例如純文字或基於所提供綱要的結構化 JSON。 - tools
ChatModelInputTool[]— 模型可以請求調用以執行操作或檢索資訊的可用工具 (函式) 列表。 - toolChoice
ChatModelInputToolChoice— 控制模型如何使用提供的工具。可以設定為 "auto"、"none"、"required",或強制進行特定的函式調用。 - modelOptions
ChatModelInputOptions— 一個用於存放特定於供應商選項的容器,例如 temperature、topP 或 parallelToolCalls。 - outputFileType
'local' | 'file'— 指定任何基於檔案的輸出的期望格式,可以是本地檔案路徑 (local) 或 base64 編碼的字串 (file)。
ChatModelInputMessage
messages 陣列中的每條訊息都遵循定義好的結構。
- role
'system' | 'user' | 'agent' | 'tool'(required) — 訊息發送者的角色。system 提供指令,user 代表使用者輸入,agent 用於模型回應,而 tool 則用於工具調用的輸出。 - content
string | UnionContent[]— 訊息的內容。可以是一個簡單的字串,也可以是一個用於多模態內容的陣列,結合了文字和圖像 (FileUnionContent)。 - toolCalls
object[]— 在 agent 訊息中使用,表示由模型發起的一個或多個工具調用。 - toolCallId
string— 在 tool 訊息中使用,將工具的輸出連結回對應的 toolCalls 請求。
ChatModelOutput
ChatModelOutput 介面標準化了從語言模型收到的回應。
- text
string— 模型回應的基於文本的內容。 - json
object— 當 responseFormat 設定為 "json_schema" 時,模型返回的 JSON 物件。 - toolCalls
ChatModelOutputToolCall[]— 模型發出的工具調用請求陣列。每個物件都包含函式名稱和參數。 - usage
ChatModelOutputUsage— 一個包含 token 使用統計資訊的物件,包括 inputTokens 和 outputTokens。 - model
string— 生成回應的模型的識別碼。 - files
FileUnionContent[]— 模型生成的檔案陣列 (如果有的話)。
ImageModel 抽象
ImageModel 是一個用於與圖像生成模型互動的抽象類別。它為根據文本提示創建或編輯圖像提供了一個簡化的合約。
ImageModelInput
ImageModelInput 介面定義了圖像生成任務的請求結構。
- prompt
string(required) — 對所需圖像的文本描述。 - image
FileUnionContent[]— 一個可選的輸入圖像陣列,用於圖像編輯或創建變體等任務。 - n
number— 要生成的圖像數量。預設為 1。 - outputFileType
'local' | 'file'— 指定輸出圖像應儲存為本地檔案 (local) 還是以 base64 編碼的字串 (file) 形式返回。 - modelOptions
ImageModelInputOptions— 一個用於存放特定於供應商選項的容器,例如圖像尺寸、品質或風格預設。
ImageModelOutput
ImageModelOutput 介面定義了來自圖像生成服務的回應結構。
- images
FileUnionContent[](required) — 生成圖像的陣列。每個元素的格式取決於輸入中指定的 outputFileType。 - usage
ChatModelOutputUsage— 一個包含使用統計資訊的物件,其中可能包括 token 計數或其他特定於供應商的指標。 - model
string— 生成圖像的模型的識別碼。
檔案內容類型
模型透過 FileUnionContent 類型處理多模態任務的各種檔案輸入形式。這種可辨識聯合類型允許檔案以三種方式表示:
LocalContent:代表儲存在本地檔案系統上的檔案。type:「local」path:檔案的絕對路徑。
UrlContent:代表可透過公開 URL 存取的檔案。type:「url」url:檔案的 URL。
FileContent:代表以 base64 編碼字串形式呈現的檔案。type:「file」data:檔案的 base64 編碼內容。
Model 基礎類別包含一個 transformFileType 方法,可根據需要在這些格式之間自動進行轉換,從而簡化跨不同 Agent 和模型供應商的檔案處理。
總結
ChatModel 和 ImageModel 抽象是使 AIGNE 框架靈活且與供應商無關的核心元件。它們為與廣泛的外部 AI 服務互動提供了一個穩定、標準化的介面。
- 要了解如何在實踐中使用這些模型,請參閱 AI Agent 和 Image Agent 的文件。
- 有關設定特定供應商 (如 OpenAI、Anthropic 或 Google Gemini) 的詳細資訊,請參閱 模型 部分的指南。