AI菜鳥向前飛 — LangChain系列之十五 - Agent系列:從現象看機制(中篇)一個Agent的“旅行”

Agent基本架構

????先談談Agent基本架構概念,如果看得云里霧里,等看完本篇之后,再回頭看就會豁然開朗的,而我盡量寫得更易懂:?) 這里面會穿插著上一篇的內容,請大家記得往回翻翻,傳送門:

AI菜鳥向前飛 — LangChain系列之十四 - Agent系列:從現象看機制(上篇)

  • AgentAction

? ? 其中,兩個重要屬性(其實、還有tool_call_id,以后用到再介紹)

    • tool:可理解成“函數名”

    • tool_input:可理解成“函數參數”

????為了好理解,我這樣寫

func_ret = {"search_article": search_article()}[each.tool].invoke(each.tool_input)

????其實,如果按照更正規的寫法應該這樣

# 注意,這里我用了observation(“觀察”),可參考我的上一篇文章進行回顧
observation = {tool.name: tool for tool in tools}[each.tool].invoke(each.tool_input)
  • AgentFinish

????可以通過這個key:return_values獲得結果內容

intermediate_steps = []
while not isinstance(res := agent.invoke({"input": "AI菜鳥向前飛系列文章出自哪里?", "intermediate_steps": intermediate_steps}), AgentFinish):for each in res:observation = {tool.name: tool for tool in tools}[each.tool].invoke(each.tool_input)intermediate_steps.append((each, observation))# 請注意這里:)
print(res.return_values)
  • Intermediate Steps (中間步驟)

????感覺稱它為“之前”的步驟,更易懂

????記錄之前AgentAction的內容和結果

intermediate_steps.append((each, func_ret.content))

????在下一次調用的時候,一定要帶上它

agent.invoke({"input": "AI菜鳥向前飛系列文章出自哪里?", "intermediate_steps": intermediate_steps}
  • AgentInput

    所需要輸入的intermediate_steps,上面介紹了👆

  • AgentOutput

????所要采取的下一步行動(Action)或發送給用戶的最終響應結果(return_values),即:AgentAction或AgentFinish.

????現在,相信你更懂它了,對吧?

????讓我們稍微深入了解它們,官方資料如是說:

next_action = agent.get_action(...)  
while next_action != AgentFinish:  
observation = run(next_action)  
next_action = agent.get_action(..., next_action, observation)  
return next_action

????但是也是浮于表面,例如:什么時候才真正的AgentFinish?Tool與LLM的交互到底是怎樣的?先看這張圖吧, 讓我們通過源碼分析吧。

????不會真的看代碼吧,那太復雜了,當然不會,請看圖吧:?)

Agent運行機制

????抽絲剝繭~ 看以下兩張圖就懂了,不懂可找我:?)

  • 圖一:(是不是很熟悉,這就是LCEL,同時也是Agent的創建方式)

圖片

請參考:

AI菜鳥向前飛 — LangChain系列之六 - 深入淺出LCEL與Chain(上篇)

AI菜鳥向前飛 — LangChain系列之七 - 深入淺出LCEL與Chain(中篇)

AI菜鳥向前飛 — LangChain系列之八 - 深入淺出LCEL與Chain(下篇)

  • 圖二:(重點來了,一個Agent的“旅行”)

圖片

????看完之后是不是清晰多了,但還不夠,例如:

    • tool_calls是如何與Agent執行結果以及和LLM交互之后,可以找到正確的結果的

    • 這里面沒提到的ToolCall、ToolMessage 以及它們之間的關系

    • 過程對象,如:ChatResult、LLMResult,它們各是指什么?

    • 還有,各種XXChunks是什么?各代表什么含義?

    • additional_kwargs的用處是什么?

    • …………

????若大家對這方面感興趣,可持續關注我,有需要我還會“娓娓道來”,再給大家做深入介紹:)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/18451.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/18451.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/18451.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL 慢查詢優化指南

MySQL 慢查詢優化指南 在現代數據庫管理中,性能優化是一個不可忽視的重要環節。尤其是對于高并發、大數據量的應用,慢查詢可能會成為系統的性能瓶頸。本文將介紹如何查看和優化 MySQL 的慢查詢,幫助你提高數據庫性能。 一、什么是慢查詢&am…

C語言 | Leetcode C語言題解之第118題楊輝三角

題目&#xff1a; 題解&#xff1a; int** generate(int numRows, int* returnSize, int** returnColumnSizes) {int** ret malloc(sizeof(int*) * numRows);*returnSize numRows;*returnColumnSizes malloc(sizeof(int) * numRows);for (int i 0; i < numRows; i) {re…

C#實現計算數據和刷新ListView列表并發執行

下面是一個示例代碼&#xff0c;演示如何在C#中實現計算列表的數據和刷新ListView控件的數據的并發執行&#xff1a; using System; using System.Collections.Generic; using System.Threading; using System.Windows.Forms;class Program {static List<int> dataList …

前端API: IntersectionObserver的那一二三件事

IntersectionObserver 基礎 IntersectionObserver 可以監聽一個元素和可視區域相交部分的比例&#xff0c;然后在可視比例達到某個閾值的時候觸發回調。比如可以用來處理圖片的懶加載等等 首先我們來看下基本的格式&#xff1a; const observer new IntersectionObserver(c…

yolov10 使用自己的數據集訓練目標檢測模型

1 環境配置(使用anaconda) conda create -n yolov10 python=3.9 //創建虛擬環境 conda activate yolov10 //激活虛擬環境 pip install -r requirements.txt //執行yolov10 路徑下requirements.txt 安裝依賴 pip install -e .2.數據集制作 使用lableImage制作數據集(win版…

華為云Astro Zero低代碼平臺案例:小、輕、快、準助力銷售作戰數字化經營

客戶背景&#xff1a; 隨著業務的不斷擴展&#xff0c;華為云某一線作戰團隊發現&#xff0c;原本基于線上Excel的項目跟蹤方式面臨新的挑戰&#xff1a;多區域、多場景下的業務管理越來越復雜&#xff0c;項目管道存在多種不可控因素&#xff0c;客戶關系、進展跟蹤同步不及時…

【Qt秘籍】[003]-Qt環境變量配置-磨刀不誤砍柴工

一、為什么要設置環境變量 &#xff1f;[原因] 配置PATH環境變量的主要用處在于讓操作系統能夠識別并執行不在當前工作目錄下的可執行文件。具體來說&#xff0c;它的作用包括&#xff1a; 命令執行便捷性&#xff1a;當你在命令行輸入一個命令&#xff08;如java, python或np…

【Unity程序】Unity游戲開發中常用的設計模式【一】

&#x1f468;?&#x1f4bb;個人主頁&#xff1a;元宇宙-秩沅 &#x1f468;?&#x1f4bb; hallo 歡迎 點贊&#x1f44d; 收藏? 留言&#x1f4dd; 加關注?! &#x1f468;?&#x1f4bb; 本文由 秩沅 原創 &#x1f468;?&#x1f4bb; 收錄于專欄&#xff1a;Uni…

【C語言習題】26.字符逆序

文章目錄 1.描述2.解題思路3.具體代碼 1.描述 輸入描述: 將一個字符串str的內容顛倒過來&#xff0c;并輸出。可以有空格 數據范圍&#xff1a;1≤&#x1d459;&#x1d452;&#x1d45b;(&#x1d460;&#x1d461;&#x1d45f;)≤10000 1≤len(str)≤10000 輸出描述&…

Android基礎-數據庫

在Android系統中&#xff0c;數據庫扮演著至關重要的角色&#xff0c;它負責存儲、管理和檢索應用程序所需的數據。隨著移動應用的日益復雜和功能的不斷增加&#xff0c;對數據庫的需求也日益提高。在Android中&#xff0c;有多種數據庫管理系統和工具可供選擇&#xff0c;其中…

NDIS協議驅動(四)

NDIS 定義對象標識符 (OID) 值&#xff0c;以標識適配器參數&#xff0c;其中包括設備特征、可配置設置和統計信息等操作參數。 協議驅動程序可以查詢或設置基礎驅動程序的操作參數。 NDIS 還為 NDIS 6.1 及更高版本的協議驅動程序提供直接 OID 請求接口。 直接 OID 請求路徑支…

利用EasyCVR視頻智能監控技術,構建智慧化考場監管體系

隨著科技的進步&#xff0c;視頻監控在各個領域的應用越來越廣泛&#xff0c;其中在考場中的應用尤為顯著。視頻監控不僅能夠提高考場的監管水平&#xff0c;確保考試的公平、公正和公開&#xff0c;還能有效預防和打擊作弊行為&#xff0c;為考生營造一個良好的考試環境。 傳…

前后端分離跨域問題解決方案

Vue和SpringBoot的跨域問題的4中解決方案 跨域問題產生的原因&#xff1a;瀏覽器的保護機制&#xff0c;同源策略協議&#xff0c;域名&#xff0c;端口&#xff1b;三個中有一個不同就會產生跨域問題 解決方案&#xff08;后端&#xff09;&#xff1a; 1.CrossOrigin注解&…

界面控件DevExtreme v23.2亮點 - 標簽、表單、編輯器功能升級

DevExtreme擁有高性能的HTML5 / JavaScript小部件集合&#xff0c;使您可以利用現代Web開發堆棧&#xff08;包括React&#xff0c;Angular&#xff0c;ASP.NET Core&#xff0c;jQuery&#xff0c;Knockout等&#xff09;構建交互式的Web應用程序。從Angular和Reac&#xff0c…

腦圖工具 在學習系統架構中的使用

系統&#xff0c;有人把它比作一個黑盒&#xff0c;有人比作一個樹洞。呃&#xff0c;其實二者都隱含的表達了一個意思&#xff0c;盤根錯節&#xff0c;一言難盡&#xff0c;欲說還休&#xff0c;說了又像是隔靴搔癢&#xff0c;感覺沒說透。 學習&#xff0c;理解和展示一個…

計算機組成原理----移碼

在網上搜索移碼是什么,大概率會搜到一個結論:移碼是補碼符號位取反,可是真的是這樣嗎? 傳統的有符號整數是將二進制數的首位作為符號位,0表示正數,1表示負數。 但在移碼中,我們不再使用單獨的符號位來表示正負。而是通過一個固定的偏置量來將所有可能的指數值映射到一個無符…

力扣每日一題 5/28

題目&#xff1a;2951-找出峰值 給你一個下標從 0 開始的數組 mountain 。你的任務是找出數組 mountain 中的所有 峰值。 以數組形式返回給定數組中 峰值 的下標&#xff0c;順序不限 。 注意&#xff1a; 峰值 是指一個嚴格大于其相鄰元素的元素。數組的第一個和最后一個元…

C語言.順序表.通訊錄

基于順序表示實現通訊錄 1.通訊錄項目的功能要求2.代碼實現3.頭文件處理4.通訊錄的具體實現4.1通訊錄的初始化與銷毀4.1.1通訊錄的初始化4.1.2通訊錄的初始化銷毀 4.2通訊錄的添加與刪除數據4.2.1通訊錄的添加數據4.2.1通訊錄的刪除數據 4.3通訊錄的修改4.4通訊錄的查找4.5通訊…

熟悉電腦快捷鍵(包含部分VS)

有很多不太電腦的小白&#xff0c;這里給大家一些常用快捷鍵&#xff0c;希望幫助到大家學習~ ctrl c 復制&#xff08;保留原內容&#xff09; ctrl v 粘貼 ctrl x 剪切&#xff08;跟復制不一樣的地方在于原內容清空&#xff09; ctrl z …

【python】OpenCV—Tracking(10.2)

文章目錄 BackgroundSubtractorcreateBackgroundSubtractorMOG2createBackgroundSubtractorKNN BackgroundSubtractor Opencv 有三種背景分割器 K-Nearest&#xff1a;KNN Mixture of Gaussian&#xff08;MOG2&#xff09; Geometric Multigid&#xff08;GMG&#xff09; …