AdalFlow:把 prompt 當參數來訓練的 PyTorch 式 LLM 框架
AdalFlow: The library to build & auto-optimize LLM applications.
秒懂
- 它是什麼?
- AdalFlow 用 PyTorch 的抽象方式重寫 LLM 工作流:把 prompt 拆成可訓練參數,提供 Agent、Runner、ModelClient 等積木,並以 LLM-AutoDiff 與 few-shot 優化器自動調整提示詞。本文檢視它的機制、安裝路徑、真實限制與替代方案。
- 適合誰用?
- AdalFlow 適合已經在用 PyTorch 思考、且願意把 prompt 當成可訓練參數的團隊,尤其是需要零樣本或少量樣本自動優化、又不想把 tracing 與 Human-in-the-Loop 交給外部服務的專案。若你只要一條固定的 RAG 管線、不想引入 Trainer 與優化迴圈的概念負擔,這個框架的抽象會比你的問題更重,改用 LangChain 或直接呼叫 SDK 更省事。
- 可以商用嗎?
- 可以。MIT 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
- 還在維護嗎?
- 有在維護。儲存庫最近一次提交在 110 天前。
- 用什麼語言寫的?
- 主要是 Python(依據 GitHub 的語言統計)。
以上回答依據專案的 GitHub 資料(最近同步於 2026年9月15日)與我們的分析,不構成法律意見。
開源專案深度解析
它想解決的是 prompt 無法被訓練這件事
多數 LLM 框架把 prompt 當成字串:你寫死一段指令,跑完看結果,不滿意就手改。AdalFlow 的立場不同,README 開頭就寫它是「a PyTorch-like library to build and auto-optimize any LM workflows」,並把 prompt 放進一個「unified auto-differentiative framework」,同時支援 zero-shot optimization 與 few-shot prompt optimization。換句話說,它假設 prompt 是可以被優化器調整的參數,而不是工程師憑經驗雕出來的文字。
目標使用者寫得也算清楚:需要建 Chatbot、RAG、Agent 的 Python 開發者,而且願意接受訓練迴圈那一套心智模型。README 另外提到這個框架「powers AdaL CLI」,也就是同一家公司自家的 AI coding agent,這至少說明它不是只有範例、沒有實際用途的專案。至於它宣稱自家研究 LLM-AutoDiff 與 Learn-to-Reason Few-shot In Context Learning「achieve the highest accuracy among all auto-prompt optimization libraries」,這是專案自己的說法,我沒有獨立驗證,讀者也不該把它當成中立的第三方結論。
Agent、Runner、ModelClient:三個積木與它們的資料流
README 的 Hello World 把架構攤得很明白。最底層是 model_client,範例用 OpenAIClient(),搭配 model_kwargs 指定模型與溫度,例如 {"model": "gpt-4o", "temperature": 0.3}。這一層負責與供應商通訊,也是「switch your LLM app to any model via a config」這個主張的落點:換模型理論上只動這一塊。
中間是 Agent。建構時傳入 name、tools 清單、model_client、model_kwargs 與 max_steps=5。工具就是普通的 Python 函式,可以是同步的 calculator,也可以是 async 的 web_search,甚至可以是產生器 counter,逐一 yield 出 ToolCallActivityRunItem。這代表工具層不需要為了框架改寫成特殊介面,函式簽章與 docstring 就是它理解工具的方式。
最外層是 Runner,用 Runner(agent=agent) 包起來後呼叫 runner.call(prompt_kwargs={"input_str": "..."}),回傳一個 RunnerResult,裡面有 answer 與完整執行歷史。README 也示範了串流事件型別,包括 ToolCallRunItem、ToolOutputRunItem、FinalOutputItem 與 RunItemStreamEvent,讓你能在工具被呼叫、工具回傳、最終輸出這幾個節點上接到通知。這套事件設計是它宣稱「no additional API to setup Human-in-the-Loop and Tracing」的技術基礎:中斷與追蹤不需要外部服務,因為事件本來就在你的行程裡流動。
安裝與最小可跑範例
安裝只有一行:pip install adalflow。README 另外提供一個 Colab 的 Quickstart 連結,想先看效果的人可以從那裡進。
最小範例的骨架是這樣:先 from adalflow import Agent, Runner,再 from adalflow.components.model_client.openai_client import OpenAIClient,型別則從 adalflow.core.types 匯入。定義好工具函式後建立 agent,再建立 runner。同步模式用 runner.call(prompt_kwargs={"input_str": "Calculate 15 * 7 + 23 and count to 5"}),README 給的輸出是「The result of 15 * 7 + 23 is 128. The counter counted up to 5: 1, 2, 3, 4, 5.」,可以看出它把 calculator 與 counter 兩個工具串在同一次執行裡。
有幾個配置點值得先記住:model_kwargs 決定模型與取樣參數,max_steps 決定 Agent 最多走幾步,tools 清單決定可呼叫的函式集合。這三個是你在寫第一支程式時就會碰到、也最常需要調的鍵。至於非 OpenAI 的供應商要怎麼接,我手上的材料只示範了 OpenAIClient,其他 client 的存在與命名無法從這份 README 確認,需要自己去翻文件。
自動優化是賣點,也是導入成本所在
AdalFlow 與一般 LLM 框架最大的分歧點在優化器。README 說它同時提供 zero-shot optimization 與 few-shot prompt optimization,並把這件事形容成「Say goodbye to manual prompting」。倉庫的 topics 也列出 optimizer、trainer、auto-prompting,說明這不是附帶功能,而是專案主線。
代價是抽象層變厚。一旦進入優化流程,你面對的就不只是「呼叫模型拿答案」,而是資料集、評估指標、訓練步數這一組概念。這對已經熟悉 PyTorch 訓練迴圈的人是熟悉的地形,對只想把 RAG 接起來的人則是額外的學習曲線。我的判斷是:如果你的 prompt 已經穩定、準確率夠用,優化器帶來的收益有限,反而讓你多維護一條訓練路徑;真正值得投入的情境,是任務有明確的評估方式、而且你打算反覆調整提示詞。
另外要留意,README 引用的準確率數字來自團隊自己的研究,圖片也只呈現優化後的 prompt 對照。這類自我報告的基準在選型時只能當作方向參考,不能當作你場景下的預期值。
限制與不適合的場景
第一個限制是供應商覆蓋面。README 的完整範例只走 OpenAI 路徑,Model-agnostic 是設計目標,但你實際能不能換成手上的模型,取決於對應的 model_client 是否已存在。這一點在導入前必須先確認,否則「換模型只改 config」會變成自己寫 client。
第二個是版本節奏。近期釋出是 v1.1.3(2025-09-25)、v1.1.2(2025-08-16)、v1.1.1(2025-08-10),三個版本集中在一個半月內,之後到 2026-05-29 仍有推送。這種節奏通常意味著 API 還在演進,鎖定版本、讀 release notes 再升級是必要的紀律。
第三個是它不解決的問題。AdalFlow 提供的是工作流與優化的骨架,不是向量資料庫,也不是檢索品質的保證。topics 裡雖然有 faiss、bm25、reranker、retriever,但這些是積木清單,實際檢索效果仍取決於你的資料與切塊策略。如果你的瓶頸在檢索召回率,換框架不會有幫助。
最後,Agent 有 max_steps 上限,這是安全閥也是天花板:步驟設得小,複雜任務會被截斷;設得大,成本與延遲就往上走。這個取捨沒有預設答案,只能用量測決定。
與 LangChain 的差異:訓練迴圈 vs 組合鏈
拿 LangChain 對照最能看出分歧。LangChain 的核心是組合:把 prompt template、retriever、model、output parser 串成 chain,用 LCEL 之類的語法表達資料流,重心在「把既有元件接起來」。它的抽象是為了編排。
AdalFlow 的重心則放在「接起來之後還能被優化」。它同樣有積木(Agent、Runner、ModelClient、retriever),但多了一層 PyTorch 式的參數與優化器概念,讓 prompt 進入可訓練的框架。README 反覆強調 auto-optimize 與 auto-differentiative,就是這個差異的宣言。
選擇上很直接:如果你要的是快速組裝一條管線、生態系整合多,LangChain 的組合模型更貼近需求。如果你的問題是「提示詞怎麼調都差一點,而且我有評估資料可以量化」,AdalFlow 的優化路徑才顯出價值。兩者不是同一種工具,硬要比誰「更好」沒有意義。
授權、維護與升級該看什麼
授權是 MIT,寬鬆條款,商用與修改的空間都大。這對企業採用是加分項,但授權本身不保證維護品質,兩件事要分開看。以下是一般性提醒,不構成法律意見:MIT 要求保留著作權聲明與授權文字,若你要把 AdalFlow 包進自家產品,記得確認散布方式是否觸發這個義務。
維護成本主要來自兩個方向。一是 API 演進:從 v1.1.1 到 v1.1.3 的密集釋出,加上 2026 年仍有推送,說明介面可能變動,升級前應該先讀 release notes,並在測試環境跑過你的 Agent 與優化流程。二是相依套件:LLM 生態的套件版本衝突很常見,pip install adalflow 之後的相依解析結果值得先看一眼。
至於專案活躍度,我不引用 star 或 issue 數當作證據,那些數字不能說明品質。真正能判斷的是你有沒有跑過自己的案例:先用 OpenAIClient 與一個小工具集跑通 runner.call,確認 RunnerResult 的內容符合預期,再決定要不要往優化器走。這一步比讀任何評測都可靠。
編輯結論
AdalFlow 適合已經在用 PyTorch 思考、且願意把 prompt 當成可訓練參數的團隊,尤其是需要零樣本或少量樣本自動優化、又不想把 tracing 與 Human-in-the-Loop 交給外部服務的專案。若你只要一條固定的 RAG 管線、不想引入 Trainer 與優化迴圈的概念負擔,這個框架的抽象會比你的問題更重,改用 LangChain 或直接呼叫 SDK 更省事。導入前先確認三件事:一,pip install adalflow 後你的 Python 版本與相依套件是否衝突;二,OpenAIClient 之外的 model_client 是否已覆蓋你要用的供應商,README 只示範了 OpenAI;三,Agent 的 max_steps 與 Runner 回傳的 RunnerResult 是否符合你對執行歷史與中斷控制的要求。這三點在文件裡都能查到,但沒查就上線,代價會落在事後除錯上。
社群筆記