Skip to content

概述

Koog 提供了一種使用 AIAgentStorage 來儲存和傳遞資料的方式,這是一個鍵值儲存系統,旨在提供一種型別安全的方式,用於在不同節點甚至子圖之間傳遞資料。

儲存空間可透過代理節點中可用的 storage 屬性 (storage: AIAgentStorage) 進行存取,從而實現 AI 代理系統不同元件之間的無縫資料共享。

鍵與值結構

鍵值資料儲存結構依賴於 AIAgentStorageKey data class。有關 AIAgentStorageKey 的更多資訊,請參閱以下章節。

AIAgentStorageKey

該儲存空間使用型別化的鍵系統,以確保在儲存和檢索資料時的型別安全:

  • AIAgentStorageKey<T>:一個 data class,代表用於識別和存取資料的儲存鍵。以下是 AIAgentStorageKey 類別的主要功能:
    • 泛型型別參數 T 指定與此鍵關聯的資料型別,確保型別安全。
    • 每個鍵都有一個 name 屬性,它是一個字串識別符,唯一代表該儲存鍵。

使用範例

以下章節提供一個實際範例,說明如何建立儲存鍵並使用它來儲存和檢索資料。

定義代表您資料的類別

儲存您要傳遞的資料的第一步是建立一個代表您資料的類別。這是一個包含基本使用者資料的簡單類別範例:

kotlin
class UserData(
   val name: String,
   val age: Int
)

定義後,請使用該類別建立儲存鍵,如下所述。

建立儲存鍵

為已定義的資料結構建立一個型別化的儲存鍵:

kotlin
val userDataKey = createStorageKey<UserData>("user-data")

createStorageKey 函數接受一個單一字串參數,該參數唯一識別該鍵。

儲存資料

若要使用已建立的儲存鍵儲存資料,請在節點中使用 storage.set(key: AIAgentStorageKey<T>, value: T) 方法:

kotlin
val nodeSaveData by node<Unit, Unit> {
    storage.set(userDataKey, UserData("John", 26))
}

檢索資料

若要檢索資料,請在節點中使用 storage.get 方法:

kotlin
val nodeRetrieveData by node<String, Unit> { message ->
    storage.get(userDataKey)?.let { userFromStorage ->
        println("Hello dear $userFromStorage, here's a message for you: $message")
    }
}

API 文件

有關 AIAgentStorage 類別的完整參考資料,請參閱 AIAgentStorage

有關 AIAgentStorage 類別中可用的個別函數,請參閱以下 API 參考資料:

其他資訊

  • AIAgentStorage 是執行緒安全的,使用 Mutex 來確保並行存取得到妥善處理。
  • 此儲存的設計旨在與任何擴展 Any 的型別協同工作。
  • 檢索值時,型別轉換會自動處理,確保在您的應用程式中保持型別安全。
  • 對於值的非空存取,請使用 getValue 方法,如果鍵不存在,該方法將拋出一個異常。
  • 您可以使用 clear 方法完全清除儲存,該方法將移除所有已儲存的鍵值對。