Agent輕松通-P1:什么是Agent?

歡迎來到啾啾的博客🐱。
記錄學習點滴。分享工作思考和實用技巧,偶爾也分享一些雜談💬。
有很多很多不足的地方,歡迎評論交流,感謝您的閱讀和評論😄。

目錄

  • 1 引言
  • 2 基礎概念
  • 3 Agent的挑戰
    • 3.1 復雜度帶來的“可控性”與“可靠性”的挑戰
      • 3.1.1 工具使用幻覺
    • 3.2 ReAct循環帶來 “成本”與“狀態管理”的挑戰
    • 3.3 “評估”與“錯誤處理”的挑戰
  • 4 展望:超越ReAct
    • 4.1 Plan-and-Execute Agents
    • 4.2 Agentic Workflows with Graphs

1 引言

LLM應用開發的主要內容就是RAG與Agent。
在RAG輕松通系列中,我們已經了解了RAG基本流程與些許原理。
RAG的邏輯是固定的:檢索——>組裝提示——>生成。它只會“查資料”這一種行為。

而我們接下來要了解的Agent是動態的。它擁有一個“工具箱”,并且具備“思考”和“決策”的能力。面對一個任務,它會自己決定:

  1. 我應該使用哪個工具? (例如:是上網搜索,還是計算數學題,還是查詢數據庫?)
  2. 我應該給這個工具輸入什么參數?
  3. 我拿到工具的輸出后,下一步該做什么? (是繼續使用別的工具,還是已經可以得出最終答案了?)

下面,就讓我們一起來了解一下Agent。

2 基礎概念

Agent是一個能感知并自主地采取行動的實體,這里的自主性極其關鍵,Agent要能夠實現設定的目標,其中包括具備學習和獲取知識的能力以提高自身性能。
![[Agent入門-1.png]]

Agent核心思想:ReAct (Reason + Act)

在Agent中,LLM不再是一次性生成最終答案,而是在一個“思考-行動”的循環中工作:

  1. Thought (思考): LLM首先會分析當前的任務和情況,然后生成一段“內心獨白”,說明它接下來的計劃。例如:“用戶想知道今天北京的天氣,我需要一個能查天氣的工具。”
  2. Action (行動): 基于這個思考,LLM會決定調用一個具體的 工具 (Tool),并確定該工具的 輸入 (Input)。例如:Tool: weather_api, Tool Input: “北京”。
  3. Observation (觀察): 系統執行這個行動(即調用天氣API),然后將返回的結果(例如:“北京今天晴,25攝氏度”)作為“觀察結果”反饋給LLM。
  4. Repeat (重復): LLM接收到這個觀察結果,然后再次進入“思考”階段。它可能會想:“我已經拿到了天氣信息,現在可以回答用戶了。”然后生成最終答案,結束循環。也可能它會想:“用戶還問了明天是否適合戶外活動,我還需要查詢明天的天氣預報。”然后開始一個新的“思考-行動-觀察”循環。

這個循環往復的過程,賦予了LLM規劃復雜任務和與外部世界互動的能力。

Q:目前的Agent是“真自主”還是“偽自主”?
A:Agent所有行為都源于其提示(Prompt)中的指令和工具描述。它的“自主性”更像是一種被精確引導的、在有限選項內的“決策能力”,而非人類意義上的自由意志。

3 Agent的挑戰

不同于RAG的挑戰主要在分塊與檢索相對單調。
Agent的ReAct明顯要復雜的多。

3.1 復雜度帶來的“可控性”與“可靠性”的挑戰

Agent的復雜度體現在“可控性”與“可靠性”:

  • 可控性 (Controllability)
    Q:如何引導它走在“正確的道路”上?
    RAG的流程是線性的、確定的。而Agent的路徑是動態的、非確定的。它可能會選擇一條你意想不到的工具調用路徑,或者陷入一個無意義的循環(比如反復搜索同一個關鍵詞)。這是一個巨大的挑戰。

  • 可靠性 (Reliability)
    Q:如何用最少的ReAct步驟生成最準確的結果?
    一個Agent可能會因為對工具的錯誤理解、對觀察結果的錯誤解讀,或者糟糕的推理鏈,而導致任務失敗。比如,它可能決定用“計算器”工具去回答“蘋果和橘子哪個好吃”的問題。

A:高質量的工具描述+引導(提示詞+計劃圖)。

  • 精巧的提示工程: 在主提示中加入更強的約束和示例(Few-shot Prompting),向Agent展示“好的思考路徑”是什么樣的。
  • 高質量的工具描述: 給工具起一個清晰的名字,并寫一段詳盡、無歧-義的描述,告訴Agent這個工具“能做什么”、“不能做什么”、“輸入應該是什么格式”。這是引導Agent正確選擇工具的最重要手段。
  • 強制的路徑規劃: 對于一些關鍵任務,可以不讓Agent完全自由發揮,而是預先定義一個大致的“計劃圖”,Agent可以在這個框架內選擇工具,而不是天馬行空。

3.1.1 工具使用幻覺

在“可靠性”挑戰下,有一個非常具體且常見的問題,叫做 “工具使用幻覺” (Tool-use Hallucination)
這指的是LLM“幻想”出了一個工具的執行結果,而不是真的去等待并使用工具的實際輸出。例如,它可能會在“Action”步驟后,不等“Observation”返回,就直接在下一步的“Thought”中編造一個觀察結果。這是導致Agent“脫軌”的重要原因之一,需要通過更強的提示約束和流程控制來解決。

3.2 ReAct循環帶來 “成本”與“狀態管理”的挑戰

在ReAct的每一次循環中,歷史的“思考-行動-觀察”記錄都會被加入到下一次的提示中,以維持Agent的“記憶”。這會導致上下文像滾雪球一樣越來越大。

  • 成本 (Cost)
    多次調用LLM,并且每次調用的上下文都在增長,會導致API費用急劇上升。

  • 狀態管理 (State Management)
    當上下文變得極長時,除了max_tokens的硬限制,還會遇到我們之前討論過的“中間迷失”問題。Agent可能會“忘記”它最初的目標或者早期的重要發現。

Q:循環中成本和狀態要怎么控制?
A:總結摘要+選擇記憶+限制循環次數

  • 上下文摘要 (Context Summarization): 在幾次循環后,可以調用一次LLM,讓它將之前的對話歷史“總結”成一段簡短的文字,然后用這個摘要來代替冗長的歷史記錄。
  • 選擇性記憶 (Selective Memory): 設計更復雜的記憶模塊,只保留與當前任務最相關的歷史記錄,而不是全部保留。
  • 限制循環次數 (Max Iterations): 強制規定Agent最多只能進行N次循環,防止其陷入無限循環,同時也控制了成本上限。

這個總結摘要類似處理操作日志時保留數據的最終狀態。

除了“總結”,還有一種常見的記憶管理方式叫 “向量化記憶流” (Vectorized Memory Stream)。即,將每一步的“思考-行動-觀察”都向量化并存入一個臨時的向量數據庫,當上下文過長時,Agent可以“檢索”自己過去的記憶,找出與當前子任務最相關的歷史記錄來參考,而不是依賴一個線性的、易于遺忘的完整對話歷史。

3.3 “評估”與“錯誤處理”的挑戰

Agent的每一步都可能出錯,比如每次LLM生成的評估是9/10分,然后LLM再依據9/10的結果繼續循環。最后會產生類似“滑坡”的錯誤現象。給出一個看似合理但實際上完全錯誤的最終答案。
甚至過程中可能執行錯誤,以至于Agent的工具們難以解析LLM輸入,導致Agent崩潰。

應對方案思考:

  • 健壯的工具封裝: 在代碼中,每個工具都應該被包裹在一個try…except塊中,捕獲所有可能的異常,并將錯誤信息作為“觀察結果”返回給Agent,讓它知道“這條路走不通,請換個思路”。
  • 輸出解析器 (Output Parser): 使用專門的解析器來處理LLM的輸出。如果解析失敗,可以自動向LLM發送一條“你的輸出格式不對,請按此格式重試”的反饋,實現自動糾錯。
  • 評估框架 (Evaluation Framework): 這是第二階段的另一個核心。我們將學習如何使用像LangSmith、RAGAs或自定義評估腳本這樣的工具,來量化評估Agent在特定任務上的成功率、效率和成本,用數據驅動的方式來發現和修復“結果滑坡”的問題。

4 展望:超越ReAct

ReAct的“一步一思考”模式,對于需要復雜規劃和多步推理的任務來說,可能效率不高且容易“短視”。它就像一個只看腳下一步路的登山者,很難規劃翻越整座山脈的路線。

為了解決這個問題,社區已經發展出更高級的Agent架構。

4.1 Plan-and-Execute Agents

這類Agent會先把任務分解成一個詳細的“計劃(Plan)”,然后逐一“執行(Execute)”計劃中的每一步。它把“規劃”和“執行”兩個階段分開了,避免了ReAct的短視問題。

4.2 Agentic Workflows with Graphs

使用圖(Graph)結構來定義Agent的工作流。圖中的每個節點是一個操作(如調用工具、LLM推理),邊代表了不同操作之間的依賴關系。這允許我們設計出可以并行執行、可以條件分支、可以循環的、高度復雜的Agent行為,而不僅僅是ReAct的線性鏈條。

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

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

相關文章

Grafana MySQL監控大盤指標圖趨勢不連續分析

問題現象 通過benchmarksql對MySQL數據庫做壓測完發現Grafana關于該數據庫的監控圖趨勢不連續,監控數據異常。 說明:Prometheusmysqlexpoter都通過容器運行 日志分析 檢查了其他數據庫節點跟主機節點趨勢圖均正常,排除 Prometheus 的問題&a…

Python實例題:基于區塊鏈的去中心化應用平臺(區塊鏈、智能合約)

目錄 Python實例題 題目 問題描述 解題思路 關鍵代碼框架 難點分析 擴展方向 Python實例題 題目 基于區塊鏈的去中心化應用平臺(區塊鏈、智能合約) 問題描述 開發一個基于區塊鏈的去中心化應用平臺,包含以下功能: 區塊…

接口請求重復觸發問題的排查流程:iOS抓包實戰中的工具協作

有時候,Bug 并不體現在程序錯誤上,而是行為偏差。在一次常規功能測試中,我們發現移動端某個提交請求被觸發了兩次,雖然后端做了冪等處理,但頻繁請求仍可能帶來性能問題、錯誤日志膨脹、以及潛在副作用。 這類問題常被…

oracle 表空間與實例妙用,解決業務存儲與權限處理難題

oracle 表空間與實例妙用,解決業務存儲與權限處理難題 一、方案背景 在同一個研發數倉中,現使用 Oracle 數據庫存儲生產和質量的數據。為了滿足業務發展需求,需要新增財務數據的存儲,同時確保不影響現有的生產和質量數據。本方案…

迅為RK3576開發板NPU環境搭建和使用rknn-toolkit2功能演示模型轉換

開發板采用核心板底板結構,在我們的資料里提供了底板的原理圖工程以及PCB工程,可以實現真正意義上的裁剪、定制屬于自己的產品,滿足更多應用場合。 迅為針對RK3576開發板整理出了相應的開發流程以及開發中需要用到的資料,并進行詳…

如何在 Python 中連接 Elasticsearch 并使用 Qwen3 來實現 RAG

今天的這篇文章是 “在本地電腦中部署阿里 Qwen3 大模型及連接到 Elasticsearch” 的續篇。我們接著上次的文章,繼續探索如何使用 Qwen3 來實現 RAG。在本練習中,我們使用 Elastic Stack 9.0.1 版本。 創建 Elasticsearch API key 我們按照如下的步驟來…

Domain 層完全指南(面向 iOS 開發者)

目錄 為什么需要 Domain 層清晰的三層架構核心概念:Entity / Value Object / Use Case / RepositorySwift 代碼實戰測試策略在舊項目中落地的步驟結語 1 為什么需要 Domain 層 在傳統 MVC / MVVM 中,我們往往把業務規則寫進 ViewController 或 ViewMod…

華為OD機試_2025 B卷_矩形相交的面積(Python,100分)(附詳細解題思路)

題目描述 給出3組點坐標(x, y, w, h)&#xff0c;-1000<x,y<1000&#xff0c;w,h為正整數。 (x, y, w, h)表示平面直角坐標系中的一個矩形&#xff1a; x, y為矩形左上角坐標點&#xff0c;w, h向右w&#xff0c;向下h。 (x, y, w, h)表示x軸(x, xw)和y軸(y, y-h)圍成…

17、Rocket MQ快速實戰以及核?概念詳解

? 、MQ簡介 MQ&#xff1a;MessageQueue&#xff0c;消息隊列。是在互聯?中使??常?泛的—系列服務中間件。 這個詞可以分兩個部分來看&#xff0c; —是Message&#xff1a;消息。消息是在不同進程之間傳遞的數據。這些進程可以部署在同—臺機器上&#xff0c;也可以 分…

設計模式之手寫策略模式實現動態支付(Java實現)

首先&#xff0c;定義一個接口類 import java.util.Map;public interface PayInterface {/*** 支付方法* param amount 支付金額* param paymentInfo 支付信息&#xff08;如卡號、密碼等&#xff09;* return 支付結果*/boolean pay(double amount, Map<String, String>…

Spring Boot 虛擬線程 vs WebFlux:誰更勝一籌?

Spring Boot 作為構建現代 Java 應用程序的強大框架,為開發者提供了多種處理并發和可擴展性的解決方案。其中最受關注的兩種方案是 Spring Boot 虛擬線程(Java 21 引入)和 Spring Boot WebFlux(基于響應式編程)。雖然兩者都致力于優化資源利用率和提升高并發處理能力,但在…

淘寶商品搜索接口|關鍵字獲取商品列表API接入指南

在電商領域&#xff0c;淘寶作為中國最大的電子商務平臺之一&#xff0c;擁有海量的商品資源。對于開發者而言&#xff0c;通過淘寶開放平臺提供的 API 接口&#xff0c;能夠實現與淘寶平臺的深度整合&#xff0c;其中關鍵字搜索商品 API 接口尤為重要。它允許開發者根據特定的…

Centos 離線部署(MQTT)EMOX腳本并設置開機自啟

文件結構 install_emqx.sh #!/bin/bash # Filename: install_emqx.sh # Description: EMQX離線一鍵部署腳本 (針對特殊目錄結構)# 檢查root權限 if [[ $EUID -ne 0 ]]; thenecho "請使用root權限運行此腳本&#xff01;" exit 1 fi# 定義依賴包和安裝路徑 DEP_RPM&…

機器學習基礎:從概念到應用的全面解析

&#x1f9d1; 博主簡介&#xff1a;CSDN博客專家、CSDN平臺優質創作者&#xff0c;高級開發工程師&#xff0c;數學專業&#xff0c;10年以上C/C, C#, Java等多種編程語言開發經驗&#xff0c;擁有高級工程師證書&#xff1b;擅長C/C、C#等開發語言&#xff0c;熟悉Java常用開…

【機器學習1】線性回歸與邏輯回歸

?邏輯回歸與線性回歸的主要區別在于理論基礎、應用場景和數學模型。 1 線性回歸 1.1 理論基礎 線性回歸主要用于建模自變量與連續性因變量之間關系的統計方法&#xff0c;試圖利用一條線來擬合自變量與因變量之間的線性關系。 1.2 應用場景 從應用場景來說&#xff0c;適…

小程序 頂部欄標題欄 下拉滾動 漸顯白色背景

![在這里插入圖片描述](https://i-blog.csdnimg.cn/direct/3164fd0e6d6848efaa1e87e02c35179e.png 下拉 100px 后 變成漸變成白色 顯示原理 <wd-navbar fixed safeAreaInsetTop :bordered"false":custom-style"background-color: rgba(255, 255, 255, op…

Java底層原理:深入理解類加載機制與反射

一、Java類加載機制 Java類加載機制是Java運行時環境的重要組成部分&#xff0c;它負責將字節碼文件加載到JVM內存中&#xff0c;并將其轉換為可執行的類。類加載機制的實現涉及類加載器&#xff08;ClassLoader&#xff09;、類加載過程和類加載器的層次結構。 &#xff08;…

Android 中查看數據庫內容方式

一、背景 創建的db數據庫&#xff0c;有時候需要查看數據庫中的數據內容,或者查看數據是否有更新到數據等等。這時候就需要查看數據庫的內容。 二、數據庫路徑 博主用的是第三方的greendao數據庫框架,生成的.db文件路徑如下:(路徑僅供參考) /data/data/app_package/database…

unity實現浮動組件

目錄 前言方法后言組件代碼 前言 在unity中&#xff0c;要讓一個物體變得讓人感到輕飄飄的&#xff0c;就可以給一個物體添加上浮動組件。今天我們就來實現它。 方法 我們先來看一下 sin ? \sin sin函數的曲線。 在這條曲線上&#xff0c;隨著 x x x向右移動&#xff0c; y…

Cisco Nexus93240接口帶寬顯示異常高故障- bug

hardware: cisco N93240 software: 9.3(10) 1個萬兆接口&#xff0c;顯示的rate超出幾萬倍 開case查詢&#xff0c;告知是bug&#xff0c;需要版本升級解決。