##### AI Agents 原理可參考這篇綜論: [How Agents for LLM Perform Task Planning。大型語言模型的代理如何進行任務規劃](https://hackmd.io/@YungHuiHsu/rkK52BkQp) 相關framework選擇 - [AI Agents in LangGraph](https://hackmd.io/@YungHuiHsu/BJTKpkEHC) - [Building Agentic RAG with LlamaIndex](https://learn.deeplearning.ai/courses/building-agentic-rag-with-llamaindex/lesson/1/introduction) - [Multi AI Agent Systems with crewAI](https://learn.deeplearning.ai/courses/multi-ai-agent-systems-with-crewai/lesson/1/introduction) - [Functions, Tools and Agents with LangChain](https://learn.deeplearning.ai/courses/functions-tools-agents-langchain/lesson/1/introduction) - [2024.06。reddit。Langchain vs LlamaIndex vs CrewAI vs Custom? Which framework to use to build Multi-Agents application?](https://www.reddit.com/r/LocalLLaMA/comments/1chkl62/langchain_vs_llamaindex_vs_crewai_vs_custom_which/) > - :pencil2:**The only libraries you need to build LLM apps are: the LLM API - OpenAI API library, liteLLM** (provides an OpenAI compatible interface for nearly all other APIs, ollama included) > - OpenAI API and Qdrant are well documented and rarely have issues. Its easier to track down and fix bugs, compared to dealing with langchain. :::info 現在建構LLM應用的框架五花八門,到底該自己打造到什程度? 可以參考這篇討論 Deeplearning.ai GenAI系列短課程很大程度是各AI新創來推銷自家產品,比較重要的理論跟觀念部分、各家LIB API是其次 ::: --- #### [AI Agents in LangGraph](https://learn.deeplearning.ai/courses/ai-agents-in-langgraph/lesson/1/introduction)筆記 * [Build an Agent from Scratch。從零開始建立AI代理](https://hackmd.io/@YungHuiHsu/BJTKpkEHC) --- # How Agents for LLM Perform Task Planning<br>大型語言模型的代理如何進行任務規劃 本文主要參考[2023.06。lilianweng.github.io。LLM Powered Autonomous Agents](https://lilianweng.github.io/posts/2023-06-23-agent/)。"Planning"章節進行翻譯與補充 這篇文章很好的回顧了當前(2023.06為止)LLM Agents(任務代理)重要的核心思想 lilianweng為OpenAI Head of Safety System,blog有很多質量非常好的技術文章,推! <div style="text-align: center;"> <figure> <img src="https://lilianweng.github.io/posts/2023-06-23-agent/agent-overview.png" width="600"> <figcaption> <span style="color: #3F7FBF; font-weight: bold;"> <a href="https://lilianweng.github.io/posts/2023-06-23-agent/" target="_blank">Overview of a LLM-powered autonomous agent system. </a> </figcaption> </figure> </div> ## **Agents如何進行任務規劃 Planning** ### **任務分解 (Task Decomposition)** 文章中探討如何利用大型語言模型(LLM)來分解複雜任務。包括「思緒鏈」(Chain of Thought, CoT)和「思緒樹」(Tree of Thoughts)等技術,這些技術能夠**將大任務分解為更小、更簡單的步驟**。此外,還有一種方法是利用外部的經典規劃工具(如 PDDL)來進行長期規劃,這在某些機器人設置中很常見。 ### **自我反思 (Self-Reflection)** 自我反思是自主代理的重要部分,它通過**改進過去的行動決策和糾正錯誤來實現迭代改進**。 如 ReAct 和 Reflexion,這些方法結合了推理和行動,並通過語言空間來進行複雜的推理步驟。這些方法使代理能夠在**執行任務時進行自我反思,從而提高其解決問題的能力**。 以下為內文提到的四種主要方法摘要 | 方法 | 說明 | | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ReAct | 讓Agent根據先前的思考進行行動,並從該行動的結果中獲得觀察,形成**「思考→行動→觀察」**的流程<br>[Thought]-->[Action]-->[Observation] | | Reflexion | 為Agent賦予記憶功能,使其能**回顧及評估先前的動作**{$a_0,o_0,...,a_n,o_n$}與其對應獎勵{$r_0,...,r_n$}((Self-reflection:正-負樣本對),進行行動好壞的判斷($h$) | | Chain of Hindsight(COH) | 透過不斷地為agent提供漸進的提示,使其在同一問題上進行迭代精煉,以得到更好的模型輸出![image.png](https://hackmd.io/_uploads/SJdwDOgXp.png =50x) | | Algorithm Distillation(AD)) | COH與強化學習(RL)相結合。它利用RL在不同任務上的學習歷程$H^{(n)}_{T}=(a_0,o_0,...,a_T,o_T,r_T)_{n}$作為資料,讓神經網路(如Transformer)學習這些歷程 ,從而實現“學習如何學習" $P_\theta(a_t|h_{t-1}, o_t)$ | --- - **ReAct**[(Yao et al. 2023)](https://arxiv.org/abs/2210.03629) **ReAct** 在大型語言模型 (LLM) 中結合了推理和行為,通過擴展行為空間,使其成為任務特定的行為和語言空間的組合。前者使LLM能夠與環境互動(例如,使用Wikipedia搜索API),而後者則提示LLM以自然語言生成推理軌迹。 ReAct的提示模板包含了讓LLM進行思考的明確步驟,大致流程如下: ```mermaid graph LR A(Thought) --> B(Action) B --> C(Observation) C -->|Repeated many times...| A ``` <div style="text-align: left;"> <figure> <img src="https://lilianweng.github.io/posts/2023-06-23-agent/react.png" width="800"> <figcaption> <span style="color: #3F7FBF; font-weight: bold;"> <a href="https://arxiv.org/pdf/2210.03629.pdf" target="_blank">Fig. 3. Illustration of the Reflexion framework. </a> <span style="color: #A9A9A9; font-size: 10px;"> (Image source: Shinn & Labash, 2023)</span> </figcaption> </figure> </div> 圖2. 知識密集型任務(例如HotpotQA、FEVER)和決策制定任務(例如AlfWorld Env、WebShop)的推理軌跡範例。 (圖片來源:Yao等人,2023年)。 在對知識密集型任務和決策制定任務的實驗中,ReAct的表現均優於僅有Action的基準 - **自我反思Reflexion**[(Shinn & Labash 2023)](https://arxiv.org/abs/2303.11366) Reflexion 旨在為代理(Agents)**裝備動態記憶和自我反思能力,以提高其推理技巧**。 :::info "Reflexion" 是一個設計來幫助電腦程序(我們叫它代理人agent)更好地思考的方法。這個方法會給代理人一個"記憶"功能,讓它能夠回顧自己過去的動作,並且思考如何做得更好。 ::: <div style="text-align: left;"> <figure> <img src="https://lilianweng.github.io/posts/2023-06-23-agent/reflexion.png" width="1200"> <figcaption> <span style="color: #3F7FBF; font-weight: bold; font-size: 14px"> <a href="https://arxiv.org/abs/2303.11366" target="_blank">Fig. 4. Experiments on AlfWorld Env and HotpotQA. Hallucination is a more common failure than inefficient planning in AlfWorld. </a> <span style="color: #A9A9A9; font-size: 10px;"> (Image source: Shinn & Labash, 2023)</span> </figcaption> </figure> </div> - 思考與行動: Reflexion 的遊戲規則 - 像玩遊戲時,成功得分就得到獎勵,失敗就沒有。在這裡,獎勵只有兩種:得到或沒得到,就像二進位的 0 和 1(binary reward)。而在Reflexion的遊戲規則中,角色不只是進行普通動作,還可以說話或思考來做更複雜的事情/推理。(the `Reward` model provides a simple binary `Reward` and the `Action` space follows the setup in `ReAct` where the task-specific action space is augmented with language to enable complex reasoning steps) :::info 在強化學習中(RL),「行動空間」(action space)是指智能體(agent)(例如機器人或計算機程序)可以選擇的所有可能行動。當我們說「行動空間增強了語言」(action space is augmented with language ),意思是智能體現在除了原本的行動選項之外,還可以**使用語言來表達或決策**。這使得智能體不僅能夠做出物理動作,還可以**進行更複雜的理解、推理和溝通**。這樣的設定使得學習過程更為豐富和多樣,因為智能體可以利用語言來解釋其行為、策略或甚至與其他智能體或人類進行互動。 ::: - 當角色進行一個動作後$a_t$,它會停下來思考這是不是一個好動作(the agent computes a heuristic $h_t$)。如果覺得這動作不好,它可以選擇重新開始遊戲,這就像我們玩遊戲時,如果感覺不太對,就選擇重新開始。 - 行動評估方法Heuristic function $Heuristic(h)$: - 一個判定標準,用來幫助agents判斷自己是否在浪費時間或者重複動作 - 若確定當軌跡效率低下或包含幻覺時應該停止 - 軌跡低效:指花費太多時間都沒有成功 - 幻覺:一系列連續相同的動作,這些動作在環境中導致相同的觀察 - 自我反思(Self-reflection):檢視過去失敗經驗 - 自我反思是通過給LLM顯示兩個例子來創建的。每個例子都是一組失敗的行動(failed trajectory)和理想的思考(ideal reflection for guiding future changes in the plan),這個思考可以幫助我們下次做得更好 - 這些反思會被存儲起(working memory),最多三個,以便之後提問LLM時使用(as context for querying LLM) :::info 這邊一個正、負樣本的配對有點對比學習的味道。但只有反例(正-負)的配對、沒有正樣本對(正-正) ::: - **回溯鏈 Chain of Hindsight**[(CoH; Liu et al. 2023)](https://arxiv.org/abs/2302.02676) CoH是一種**鼓勵模型改進其自身輸出的方法,它通過明確地向模型展示一系列過去的輸出序列和反饋來實現**。 :::info CoH方法就像是一位教練,不斷地給予模型過去的表現反饋,幫助它做得更好。這些反饋包括人們對模型的評分和建議。 比當模型回答了一個問題,我們不僅會給它一個分數,還會告訴它如何改進。這些分數和建議會被整理成一系列的資料,然後用這些資料來訓練模型,使其更加完善。 ::: <div style="text-align: left;"> <figure> <img src="https://lilianweng.github.io/posts/2023-06-23-agent/CoH.png" width="800"> <figcaption> <span style="color: #3F7FBF; font-weight: bold; font-size: 14px"> <a href="https://arxiv.org/abs/2302.02676" target="_blank">Fig. 5. After fine-tuning with CoH, the model can follow instructions to produce outputs with incremental improvement in a sequence. </a> <span style="color: #A9A9A9; font-size: 10px;">(Image source: Liu et al. 2023)</span> <br> <span style="font-size: 12px;"> 使用者首次提示生成文章摘要,模型提供回答 --> 再要求一個更精確的摘要;這一過程可以多次重複,促使模型嘗試產生更好的輸出。Rouge指標用於評估自動生成的摘要的質量。 </span> </figcaption> </figure> </div> - **CoH**的數學表達如下: - 人類反饋資料集$D_h = \{(x, y_i, r_i, z_i)\}^{n}_{i=1}$: 其中 $x$ 是提示,每個 $y_i$ 是模型的完成,$r_i$ 是對 $y_i$ 的人類評分,而 $z_i$ 是相應的人為提供的回顧反饋。 - 反饋的排序$r_n \geq r_{n-1} \geq ... \geq r_1$:這些反饋是根據獎勵 $r_n$ 進行排序的,其中 $r_n$ 是最大的。 - 有監督的微調:數據的形式是一個序列,並確保 $i$ 小於等於 $j$ 且 $j$ 小於等於 $n$。 - 數據的形式表示為: $T_h = (x, x_{j}, y_{j}, z_{j}, ..., x_{n}, y_{n})$,條件為:$i \leq j \leq n$ - 模型的預測:模型只預測 $y_n$,前提是考慮了前綴序列,這使得模型能夠根據反饋序列進行自我反思,從而產生更好的輸出。 - 多輪指示:在測試時,模型可以選擇性地接受來自人類註釋者的多輪指示。 - **演算法提取 Algorithm Distillation(AD)** :::info 想像強化學習(RL)就像學習騎腳踏車。訓練一個特定的策略就像是學習在一個特定的路面或環境中騎腳踏車。但這樣學到的技能可能只適用於那個特定的環境。而學習強化學習的過程,就像是學習如何在各種不同的路面和環境中騎腳踏車。這樣學到的技能更加通用,不受特定環境的限制。 AD的**目標是學習如何「學習」,而不僅僅是學習完成一個特定的任務。**(The goal is to learn the process of RL instead of training a task-specific policy itself.) ::: CoH的想法就像是向模型展示一系列不斷進步的答案,然後訓練模型學習這種進步的趨勢,從而得到更好的答案。**演算法提取 Algorithm Distillation**(AD; [Laskin et al. 2023](https://arxiv.org/abs/2210.14215))的方法與此類似,但它應用在強化學習的場景中(encapsulated in a long history-conditioned policy)。想像有一個機器人(或稱為智能代理agent)不斷地和外部世界互動,每一次互動,它都變得稍微聰明一點。AD的做法是將這些互動歷程連接起來(concatenates this learning history),然後輸入到模型中,這樣模型在下一次的預測就會更聰明一點。 <div style="text-align: left;"> <figure> <img src="https://lilianweng.github.io/posts/2023-06-23-agent/algorithm-distillation.png" width="800"> <figcaption> <span style="color: #3F7FBF; font-weight: bold; font-size: 14px"> <a href="https://arxiv.org/abs/2210.14215" target="_blank">Fig. 6. Illustration of how Algorithm Distillation (AD) works.</a> <span style="color: #A9A9A9; font-size: 10px;">(Laskin et al. 2023)</span> <br> <span style="font-size: 12px;"> - **Data Generation**: - 這部分顯示了多個任務(從任務1到任務n)的數據生成過程 - 每個任務都有一系列的學習進度,包含觀察(`O`), 行動(`a`), 和獎勵(`r`) - -> 從資料(軌跡)生成到模型訓練的整個強化學習(RL)演算法的學習過程 - **Model Training**: - 這個部分展示了如何使用上述生成的數據來訓練模型 - 數據流經過一個名為"Causal Transformer"的模塊 - -> 根據過去各種學習歷程(cross-episodic contexts)來預測行動 </span> </figcaption> </figure> </div> 如圖6所示,描述了演算法蒸餾(AD)的工作原理。這篇論文的主要想法是,只要有一套學習歷程,就可以把這些歷程轉化為一個神經網路模型的學習(a set of learning histories can be distilled into a neural network by performing behavioral cloning over actions)。這些學習歷程是由一系列為特定任務訓練的原始策略(source policies)生成的。在訓練過程中,會不斷地隨機選擇任務並使用部分互動歷程(a subsequence of multi-episode history)進行訓練,這使得學到的策略不會專屬於任何特定的任務(task-agnostic)。 但實際上,模型能夠考慮的互動歷程是有限的(limited context window length),所以要確保每一次的互動都簡短且明確(episodes should be short enough to construct multi-episode history)。要學會近乎完美的強化學習方法(near-optimal in-context RL ),模型需要2-4次的互動歷程(episodes)。而要實現這一目標,考慮的互動歷程必須足夠長。 與其他三個基準方法比較:ED(專家提取expert distillation,模仿專家行為而非學習歷程 behavior cloning with expert trajectories instead of learning history)、來源策略 source policy((used for generating trajectories for distillation by [UCB](https://lilianweng.github.io/posts/2018-01-23-multi-armed-bandit/#upper-confidence-bounds))和最高標準的$RL^2$方法([Duan et al. 2017](https://arxiv.org/abs/1611.02779); used as upper bound since it needs online RL)。結果發現,即使AD只使用離線RL,在(有提供過去學習歷程的)情境中強化學習(in-context RL)表現可以逼近$RL^2$,且學習速度比其他基準快得多。 而當AD參考了一部分的source policy的訓練記錄時,它可以學得比ED模型快很多 <div style="text-align: left;"> <figure> <img src="https://lilianweng.github.io/posts/2023-06-23-agent/algorithm-distillation-results.png" width="800"> <figcaption> <span style="color: #3F7FBF; font-weight: bold; font-size: 14px"> <a href="https://arxiv.org/abs/2210.14215" target="_blank">Fig. 7. Comparison of AD, ED, source policy and RL^2 on environments that require memory and exploration. Only binary reward is assigned. The source policies are trained with A3C for "dark" environments and DQN for watermaze.</a> <span style="color: #A9A9A9; font-size: 10px;">(Laskin et al. 2023)</span> <br> <span style="font-size: 12px;"> 圖7展示了在需要記憶和探索的環境中,AD、ED、source policy和RL^2的性能比較。AD在僅使用離線RL的情況下,學習速度較快,表現靠近RL^2 </span> </figcaption> </figure> </div> - 圖7補充: - X軸表示「Env Steps (Thousands)」,這是環境中的步數,用以表示算法的學習進度或者嘗試的次數 - Y軸代表「Return」,這反映了算法在特定環境中的表現或獲得的報酬。一般來說,高的返回值表示算法在該任務上有較好的表現 - 「Dark Room」、「Dark Room (Hard)」、「Dark Key-to-Door」和「Watermaze」,它們都是不同的學習環境或任務。每一個環境都需要算法探索和學習如何最有效地完成任務以獲得最高的報酬 ##### Algorithm Distillation補充 - source policy來源策略: - 在強化學習中一系列的動作步驟(軌跡)/行為序列,然後這些步驟被用來教導另一個模型 - 這些軌跡為提取法(distillation)提供了資料,使得一個新的模型可以從這些軌跡中學習和優化自己的策略 - 蒸餾/提取學習distillation :利用一個已經訓練過的模型(老師)來幫助另一個較小或較輕量的模型(學生)更快或更有效地學習 - "used for generating trajectories by UCB"的意涵 - 「用於生成軌跡的提取」是利用UCB策略的決策來生成一系列的學習經驗,然後這些經驗被用於訓練另一個更簡單或更高效的模型。 - $RL^2$提到的"used as upper bound since it needs online RL: - 這個方法被認為是一個最佳的參考點或最高標準 - 因為它使用在線強化學習,可以實時地互動和學習在未知的環境中調整策略,往往需要更多的資源和時間,但可能會獲得更好的結果 ::: info **上限信賴界限」Upper Confidence Bounds(UCB)** $$a^{UCB}_t = argmax_{a \in \mathcal{A}} \hat{Q}_t(a) + \hat{U}_t(a)$$ - 在強化學習中的探索策略,用於平衡已知的最佳動作和尚未充分嘗試的動作。由於隨機探索可能會導致非常糟糕的結果,UCB算法使用數學公式來確定每個動作的上限信賴值。 - 這個上限反映了基於我們迄今為止的知識,動作可能的最大獎勵。UCB算法總是傾向於選擇具有最大上限的動作,這不僅考慮到該動作過去的平均獎勵,還考慮到我們試過該動作的次數。 - 如果一個動作嘗試的次數少,它的上限會較高,促使我們再次嘗試它,從而確保所有動作都得到充分的探索 ::: ## **Memory** ### **記憶類型 (Types of Memory)** 人類大腦中的幾種記憶類型,包括感官記憶、短期記憶(或工作記憶)和長期記憶。這些記憶類型在大型語言模型中的對應物分別是學習嵌入表示、上下文學習和外部向量存儲。 ### **最大內積搜索 (Maximum Inner Product Search, MIPS)** 外部記憶可以緩解有限注意力跨度的限制。常見的方法是將信息的嵌入表示保存在一個向量存儲數據庫中,該數據庫支持快速的最大內積搜索Maximum Inner Product Search (MIPS)。為了優化檢索速度,通常選擇近似最近鄰approximate nearest neighbors (ANN)演算法,以換取少量準確度損失來實現巨大的速度提升。 ## **工具使用 Tool Use** ### **工具使用 (Tool Use)** 工具使用是人類的一個顯著特徵,我們創造、修改並利用外部物體來完成超出我們身體和認知極限的事情。將大型語言模型與外部工具相結合,可以顯著擴展模型的能力。例如,“Modular Reasoning, Knowledge and Language”MRKL(模塊化推理、知識和語言)是一種神經符號架構,它包含了一系列“專家”模塊,而通用的大型語言模型則作為路由器將查詢路由到最合適的專家模塊。此外,還有如"Tool Augmented Language Models" TALM(工具增強語言模型)和 Toolformer 等方法,它們通過微調語言模型來學習使用外部工具API。 <div style="text-align: left;"> <figure> <img src="https://hackmd.io/_uploads/SyeHFclm6.png" width="500"> <figcaption> <span style="color: #3F7FBF; font-weight: bold; font-size: 14px"> <a href="https://learn.deeplearning.ai/langchain/lesson/4/chains" target="_blank">Router Concept Schematics(LangChain)</a> <span style="color: #A9A9A9; font-size: 10px;">(Harrison Chase:LangChain for LLM Application Development)</span> <br> <span style="font-size: 12px;"> </span> </figcaption> </figure> </div> - HuggingGPT([Shen et al. 2023](https://arxiv.org/abs/2303.17580)) 使用 ChatGPT 作為任務規劃器的框架,根據模型描述選擇 HuggingFace 平台中可用的模型,並根據執行結果總結反應 <div style="text-align: left;"> <figure> <img src="https://hackmd.io/_uploads/ryJev9lQa.png" width="900"> <figcaption> <span style="color: #3F7FBF; font-weight: bold; font-size: 14px"> <a href="https://arxiv.org/abs/2303.17580" target="_blank">HuggingGPT 工作原理圖解</a> <span style="color: #A9A9A9; font-size: 10px;">(Shen et al. 2023)</span> <br> <span style="font-size: 12px;"> </span> </figcaption> </figure> </div> 整個流程大致可分為四個主要階段: 1. **任務計劃(Task Planning)**: - LLM 被視為系統的"大腦",它會將使用者的請求解析成多個任務 - 每個任務都有四個相關的屬性:任務類型、ID、依賴性和參數 - 使用者的輸入會被解析成多個任務,並記錄相關的屬性和參數,以便接下來的處理 2. **模型選擇(Model Selection)**: - LLM 將這些任務分發給專家模型,且這些請求被框架為多選題問題 - LLM 將獲得一個模型清單來供選擇 - 由於上下文的長度有限,所以需要基於任務類型進行篩選 - 根據特定的使用者請求和命令,AI 助理會幫助選擇最適合的模型來處理請求 3. **任務執行(Task Execution)**: - 專家模型將針對特定的任務進行操作並記錄結果 - 在此階段,具體的任務會由選定的模型進行計算和分析,產生預測或結果 4. **回應生成(Response Generation)**: - LLM 會接收到任務執行的結果並向使用者提供摘要結果 - LLM 會將所有任務的結果整合成一個有意義的回應,並返回給使用者 當考慮將 HuggingGPT 應用於實際場景時,需要解決幾個問題: - 效率需提高,因為 LLM 的推論回合和與其他模型的互動都會減慢過程 - 它依賴長的上下文窗口來傳遞複雜的任務內容 - LLM 的輸出和外部模型服務的穩定性需進一步改進 ## Reference - source: OpenAI. (2023). ChatGPT [Large language model]. #### [2023.05。simform.com。What is an AI Agent? Characteristics, Advantages, Challenges, Applications](https://www.simform.com/blog/ai-agent/) #### [2023.11。Luga Lee 架构驿站。一文读懂 AI Agents 技术](https://mp.weixin.qq.com/s?__biz=MzA4MjM3NzE5MQ==&mid=2649664566&idx=1&sn=240f06f1b0e22a264a48bb1b2a0d1c21&chksm=879cacbeb0eb25a8627addaa3f3d2c56ccfa36b0e0812e8d9bf1393da7a2a5020230e0656b9e&scene=178&cur_album_id=3108353880595267588#rd) #### [2023.11。Luga Lee 架构驿站。一文搞懂 AI Agents 的不同类型](https://mp.weixin.qq.com/s?__biz=MzA4MjM3NzE5MQ==&mid=2649664625&idx=1&sn=cc16416a1e58010000dd475b35f2ad83&chksm=879cacf9b0eb25ef03a37e6dc2a4bc622ae8c3bc353d76e785e0f1222ac230d0e80a48317d49&scene=178&cur_album_id=3108353880595267588#rd) ## 補充: - - MRKL 概念在lanchain中以"router chain"實作,詳見[Chains](https://hackmd.io/@YungHuiHsu/SJJvZ-ya2)筆記 https://chat.openai.com - 實作部分可參考Langchain筆記[Agents](https://hackmd.io/@YungHuiHsu/rkBMDgRM6)章節 ### Agent + RAG - [2024.05。Yantraka.ai。Deep Dive into Agentic Retrieval Augmented Generation (A-RAG)](https://www.linkedin.com/pulse/deep-dive-agentic-retrieval-augmented-generation-a-rag-sai-panyam-22dlc/) 如何用Agent 設計拓展RAG的能力 ![image](https://hackmd.io/_uploads/r1A10u47A.png =600x) > Plan And Execute Agent: Langchain Experimental ### AutoGen 微軟在2023.08推出的智能代理框架,使用上看來比Langchain更簡單易用 - [github](https://github.com/microsoft/autogen) ![image](https://hackmd.io/_uploads/rkFs55LIa.png) ![image](https://hackmd.io/_uploads/S1fA55LI6.png) #### [2023.10。01coder。AutoGen + LangChain + ChromaDB = Super AI Agents 有一系列LLM部署架構相關的教學 :::info AutoGen doesn't support connecting to various external data sources natively. This is exactly where LangChain can come into play. :::