學習一個框架的設計思想遠比其技術更加重要 原創
“ 一個開發框架的靈魂是其設計思想,而不是其技術實現。”
最近幾天在學習人工智能開發框架——Langgraph,雖然其理論看起來很簡單,但等真正開始使用的時候才發現其經典的架構設計遠比其技術更經典,更優雅。
人工智能開發框架
作為一個技術人員,很多時候都在學習各種各樣的開發框架;而且很容易沉迷于其技術實現無法自拔,但事實上一個經典的框架都有著其經典的設計哲學。
從javaweb的spring框架,到人工智能開發框架Langchain和Langgraph等;其核心的技術都在其設計哲學,很多時候學習一個框架覺得很累,學不明白,原因就在于你只看到了技術而沒看到其中的哲學思想。
以Langchain和Langgraph為例;Langchain的設計哲學在其名字中體現得淋漓盡致——chain也就是鏈;鏈式組合是Langchain框架的核心,其本質是把與人工智能應用開發的流程使用一個鏈式結構串聯起來;整個業務流程和業務數據都在這個鏈中進行流轉。
首先這樣做的好處就是,整個業務流程顯得很直觀,因為所有的步驟都是在鏈中一步一步的執行;不管是調用大模型也好,還是調用業務邏輯也好,亦或者是處理輸出也好;上一層的輸出可以直接作為下一層的輸入,一旦其中某個環節出現問題,那么鏈式調用就會終止。
而Langgraph的設計思想也在其名字中體現——圖(graph),圖結構相對于鏈式接口,其行為方式更復雜;但這里就有一個問題,鏈式結構中由于其邏輯比較連貫,數據只需要一層一層的傳遞即可,但在圖中怎么處理?
因此,這里就引申出Langgraph中的經典設計狀態圖,給圖加一個狀態;當然,狀態并不僅僅是Langgraph中特有的東西,在前端框架VUE中同樣有狀態管理的設計思想。
狀態圖的核心思想是,使用一個字典或用戶自定義參數作為數據管理工具;然后這個參數在整個圖中進行流轉,任何需要數據操作的節點,在完成處理流程之后,就把數據更新到狀態參數中,這樣只要能拿到狀態參數,就可以獲取到之前所有節點的處理結果(當然,這里可以根據具體的業務需求進行調整)。
# 定義狀態圖
class State(TypedDict):
# Messages have the type "list". The `add_messages` function
# in the annotation defines how this state key should be updated
# (in this case, it appends messages to the list, rather than overwriting them)
messages: Annotated[list, add_messages]
graph_builder = StateGraph(State)
除了狀態之外,Langgraph中還一個經典的設計就是節點;所謂的節點就是一個個功能模塊;節點和圖是無關的,一個業務模塊中可以存在任意多個節點,而且節點可以處于任意位置,只需要在合適的地方使用邊把節點串聯起來即可。
這種低耦合的設計方式,使得框架使用起來會非常輕松,并且可以根據具體的需求進行隨意調整,而不會影響到其它。
本文轉載自??AI探索時代?? 作者:DFires
