【大模型核心技術】Agent 理論與實戰

在這里插入圖片描述

一、基本概念

  • LLM 特性:擅長理解和生成文本,但采用 “一次性” 響應模式,本質上是無記憶的生成模型。
  • Agent 本質:包含 LLM 的系統應用,具備自主規劃、工具調用和環境反饋能力,是將 LLM 從 “聊天機器人” 升級為能處理復雜任務的 “智能助理”。
  • 常見誤解:ChatGPT 等應用本身并非 Agent,其 “記憶” 功能來自外部記憶模塊而非 LLM 本身。
  • 基本特點:具有自主性(根據預設目標自主決策執行)、感知能力(多渠道獲取環境狀態)、行動系統(執行具體操作)、目標導向(行為圍繞預設目標展開),且感知數據來自前序行動反饋,形成 “感知 - 決策 - 行動” 閉環。

二、大模型與 Agent 的關系及理論

  • LLM 核心:如同 “缸中大腦”,具備理解輸入、思考生成結果的能力。
  • Agent 構成:是 LLM + 記憶模塊 + 工具使用 + 長任務規劃的系統組合。
  • 螺旋共生:Agent 使用產生數據反哺 LLM 訓練,LLM 升級使 Agent 更智能,形成數據飛輪與性能迭代的良性循環。
  • 具身智能:如宇樹科技機器人、波士頓動力等,展示 LLM 與物理世界的結合可能。
  • 理論模型
    • BDI 模型:即信念(對環境的認知)、愿望(想要達成的狀態)、意圖(為實現愿望制定的計劃和承諾)模型。
    • 理性 Agent 模型:在給定的感知序列下,能做出使性能度量最大化的行動,具有自主性、適應性和協作性。
  • Agent 分類
    • 簡單反射 Agent(僅依當前感知反應,無記憶和規劃)
    • 基于模型的反射 Agent(通過內部模型追蹤世界狀態)
    • 基于目標的 Agent(依狀態和目標決策,有一定規劃)
    • 基于效用的 Agent(考慮行動效用,權衡多目標)
    • 學習 Agent(通過學習改進性能)

三、Agent 的組件、能力與技術棧

  • 核心組件
    • 傳感器系統(收集環境數據)
    • 推理引擎(LLM + 提示詞構成決策核心)
    • 執行機構(將決策轉化為具體行動)
    • 交互閉環(行動結果反饋形成持續循環)
  • 核心能力與優勢
    • 任務分解:拆解復雜目標為可執行步驟,動態調整計劃。
    • 工具調用:集成多樣化工具,由 LLM 決策使用時機和方式。
    • 長期記憶:通過向量數據庫存儲歷史信息,實現連貫交互和持續學習。
    • 環境交互:突破文本生成局限,實際影響外部系統。
  • 核心技術棧
    • 模型服務層:底層基礎設施,主流服務包括 Hugging Face、GPT-4、Meta(閉源)及 Llama 3 等開源模型。
    • 開發框架層:LangChain 生態最健全,支持多智能體開發;LlamaIndex 專注 RAG 數據處理;Semantic Kernel 為微軟開源基礎工具,LangChain 因功能全面為首選。
    • 核心能力層:規劃(依賴 LLM 能力)、記憶(含 RAG 設計和向量數據庫應用)、工具(涉及接口設計)、執行(實現決策到操作閉環)。
    • 類型與智能化程度:場景維度從操作型到模擬型再到自主型(智能遞增);技術維度包括聊天機器人、多智能體等;智能維度從簡單反射型到自主學習型(實現難度遞增)。

四、Agent 開發模塊、流程與迭代

  • 關鍵模塊特性:支持 60 + 大模型接入,提供 60 + 工具和工具包,記憶系統分短期(GPU 顯存)和長期(40 + 向量數據庫支持);通過預定義 15 種 Agent 類型和提示詞模板降低開發門檻。
  • 開發流程
    1. 定義目標與范圍:明確具體任務和邊界約束,80% 時間用于思考問題定義。
    2. 選擇核心 LLM:需具備指令遵循、推理和工具使用能力,直接影響 Agent 表現上限。
    3. 設計智能體架構:核心邏輯或控制器負責流程控制與決策;規劃模塊由 LLM 實現任務分解;工具集定義可調用工具及接口;記憶模塊分短期和長期,行動執行器負責實際調用功能。
    4. 工具開發與集成:約 50% 工具可能需自主開發,確保 LLM 理解工具信息,封裝成標準化模塊。
    5. 提示工程:占 Agent 性能差異的 50%,需包含角色定位、任務目標等要素,放大 LLM 能力。
    6. 記憶機制實現:可采用簡單列表或向量數據庫,需保存歷史對話和執行結果。
    7. 測試評估與迭代:從任務完成率、執行效率、魯棒性評估,優化 prompt、工具等,形成持續閉環。

五、基于 LangChain 的 Agent 實戰

環境準備

安裝相關庫并配置環境變量:

pip install langchain openai python-dotenv

創建.env文件設置 API 密鑰:

OPENAI_API_KEY=<your_api_key>

簡單工具調用 Agent

實現一個調用計算器工具的簡單 Agent:

from langchain.agents import initialize_agent, Tool, AgentType
from langchain.chat_models import ChatOpenAI
from langchain.tools import BaseTool
from dotenv import load_dotenv
import os
load_dotenv()
class CalculatorTool(BaseTool):name = "Calculator"description = "用于進行數學計算"def _run(self, query: str) -> str:try:result = eval(query)return f"計算結果:{result}"except Exception as e:return f"計算錯誤:{str(e)}"async def _arun(self, query: str) -> str:return self._run(query)
llm = ChatOpenAI(temperature=0, model_name="gpt-3.5-turbo")
tools = [CalculatorTool()]
agent = initialize_agent(tools, llm, agent=AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
result = agent.run("計算3的平方加上5的立方等于多少?")
print(result)

復雜任務處理 Agent(含記憶)

實現能處理復雜任務且具備記憶功能的 Agent:

from langchain.agents import initialize_agent, Tool, AgentType
from langchain.chat_models import ChatOpenAI
from langchain.tools import BaseTool
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
from langchain.memory import ConversationBufferMemory
from dotenv import load_dotenv
import os
load_dotenv()
# 時間工具
class TimeTool(BaseTool):name = "Time"description = "用于獲取當前時間"def _run(self, query: str) -> str:from datetime import datetimereturn datetime.now().strftime("%Y-%m-%d %H:%M:%S")async def _arun(self, query: str) -> str:return self._run(query)
# 規劃工具
planning_prompt = PromptTemplate(input_variables=["task"],template="你需要完成以下任務:{task}。請列出完成該任務需要的步驟。"
)
llm = ChatOpenAI(temperature=0, model_name="gpt-3.5-turbo")
planning_chain = LLMChain(llm=llm, prompt=planning_prompt)
class PlanningTool(BaseTool):name = "Planning"description = "用于對復雜任務進行規劃,列出步驟"def _run(self, query: str) -> str:return planning_chain.run(task=query)async def _arun(self, query: str) -> str:return self._run(query)
# 初始化記憶功能
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
# 初始化Agent
tools = [TimeTool(), PlanningTool()]
agent = initialize_agent(tools,llm,agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,memory=memory,verbose=True
)
# 測試復雜任務處理,記憶功能會保存對話歷史,支持上下文連貫交互
result = agent.run("我想明天上午10點去圖書館,幫我規劃一下從家到圖書館的行程,包括出發時間、交通方式,并告訴我明天的天氣情況。")
print(result)
# 后續對話可基于之前的記憶繼續交互
result2 = agent.run("幫我把出發時間提前半小時,重新規劃一下")
print(result2)

此 Agent 通過ConversationBufferMemory實現記憶功能,能保存對話歷史,在處理復雜任務時可基于上下文進行連貫交互,先使用規劃工具分解任務,再調用相應工具完成各步驟。

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

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

相關文章

Maven - 依賴的生命周期詳解

作者&#xff1a;唐叔在學習 專欄&#xff1a;唐叔的Java實踐 標簽&#xff1a;Maven依賴管理、Java項目構建、依賴傳遞性、Spring Boot依賴、Maven最佳實踐、項目構建工具、依賴沖突解決、POM文件詳解 文章目錄一、開篇二、Maven依賴生命周期2.1 依賴聲明階段&#xff1a;POM文…

從零打造大語言模型--處理文本數據

從零打造大語言模型 第 1 章&#xff1a;處理文本數據 章節導讀 在把文本投喂進 Transformer 之前&#xff0c;需要兩步&#xff1a;① 將字符流切分成離散 Token&#xff1b;② 把 Token 映射成連續向量。 1.1 理解詞嵌入&#xff08;Word Embedding&#xff09; 嵌入向量 一…

【Spring】Bean的生命周期,部分源碼解釋

文章目錄Bean 的生命周期執行流程代碼演示執行結果源碼閱讀AbstractAutowireCapableBeanFactorydoCreateBeaninitializeBeanBean 的生命周期 生命周期指的是一個對象從誕生到銷毀的整個生命過程&#xff0c;我們把這個過程就叫做一個對象的聲明周期 Bean 的聲明周期分為以下 …

[spring-cloud: 服務發現]-源碼解析

DiscoveryClient DiscoveryClient 接口定義了常見的服務發現操作&#xff0c;如獲取服務實例、獲取所有服務ID、驗證客戶端可用性等&#xff0c;通常用于 Eureka 或 Consul 等服務發現框架。 public interface DiscoveryClient extends Ordered {/*** Default order of the dis…

QML 基礎語法與對象模型

QML (Qt Meta-Object Language) 是一種聲明式語言&#xff0c;專為創建流暢的用戶界面和應用程序邏輯而設計。作為 Qt 框架的一部分&#xff0c;QML 提供了簡潔、直觀的語法來描述 UI 組件及其交互方式。本文將深入解析 QML 的基礎語法和對象模型。 一、QML 基礎語法 1. 基本對…

HTTPS的概念和工作過程

一.HTTPS是什么HTTPS也是一個應用層協議&#xff0c;是在HTTP協議的基礎上引入了一個加密層&#xff08;SSL&#xff09;HTTP協議內容都是按照文本的方式明文傳輸的&#xff0c;這就導致傳輸過程中可能出現被篡改的情況最著名的就是十多年前網絡剛發展的時期&#xff0c;出現“…

Unity —— Android 應用構建與發布?

文章目錄1 ?Gradle模板??&#xff1a;了解Gradle模板的作用及使用方法&#xff0c;以增強對構建流程的控制。?2 ?Gradle模板變量??&#xff1a;參考文檔——自定義Gradle模板文件中可用的變量列表。2.1 修改Unity應用的Gradle工程文件2.1.1 通過Gradle模板文件2.1.2 導出…

【iOS】strong和copy工作流程探尋、OC屬性關鍵字復習

文章目錄前言strong和copy的區別為什么要用copy&#xff1f;什么時候用什么修飾&#xff1f;strong&#xff08;ARC自動管理&#xff09;strong修飾變量的底層流程圖底層代碼核心實現小結copy底層流程圖對比與strong的關鍵不同之處內部調用關系&#xff08;偽代碼&#xff09;小…

程序代碼篇---多循環串口程序切換

上位機版&#xff08;Python&#xff09;要實現根據串口接收結果高效切換四個 while 循環函數&#xff0c;我們可以采用狀態機模式&#xff0c;配合非阻塞串口讀取來設計程序結構。這種方式可以實現快速切換&#xff0c;避免不必要的資源消耗。下面是一個高效的實現方案&#x…

rk3568上,實現ota,計算hash,驗證簽名,判斷激活分區,并通過dd命令,寫入對應AB分區

通過自定義升級程序&#xff0c;更直觀的理解ota升級原理。 一、模擬計算hash&#xff0c;驗證簽名&#xff0c;判斷激活分區&#xff0c;并通過dd命令&#xff0c;寫入對應分區 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <u…

數據分析—numpy庫

numpy庫NumPy 庫全面指南NumPy (Numerical Python) 是 Python 科學計算的基礎庫&#xff0c;提供了高性能的多維數組對象和工具。以下是 NumPy 的核心功能和使用方法。一、安裝與基礎1. 安裝 NumPypip install numpy2. 導入 NumPyimport numpy as np # 標準導入方式二、數組創建…

Vue3 setup、ref和reactive函數

一、setup函數1.理解&#xff1a;Vue3.0中一個新的配置項&#xff0c;值為一個函數。2.setup是所有Composition API(組合API)的“表演舞臺”。3.組件中用到的&#xff1a;數據、方法等等&#xff0c;均要配置在setup中。4.setup函數的兩種返回值&#xff1a;(1).若返回一個對象…

python中appium 的NoSuchElementException錯誤 原因以及解決辦法

錯誤收集D:\Program\Util\python.exe "D:/Program/myUtil/PyCharm 2024.3.5/plugins/python-ce/helpers/pycharm/_jb_pytest_runner.py" --target demo.py::TestAppium Testing started at 15:57 ... Launching pytest with arguments demo.py::TestAppium --no-hea…

mybatis-plus從入門到入土(四):持久層接口之BaseMapper和選裝件

大家好&#xff0c;今天繼續更新MybatisPlus從入門到入土系列&#xff0c;上一次的持久層接口還沒講完&#xff0c;只講了IService接口&#xff0c;今天我們繼續來講一下。 BaseMapper BaseMapper中的方法也比較簡單&#xff0c;都是增刪改查的基礎API&#xff0c;不知道大家還…

數組和指針的關系

在 C 語言中&#xff0c;?指針和數組有著非常緊密的聯系&#xff0c;但它們本質上是 ?不同的概念。理解它們的關系是掌握 C 語言內存操作的關鍵。下面我會從多個角度幫你梳理 ?指針和數組的直接聯系&#xff0c;并解釋它們的異同點。1. 數組和指針的本質區別?概念本質存儲方…

AI大模型探索之路-實戰篇:智能化IT領域搜索引擎之github網站在線搜索

系列篇章?? No. 文章 1 AI大模型探索之路-實戰篇:智能化IT領域搜索引擎的構建與初步實踐 2 AI大模型探索之路-實戰篇:智能化IT領域搜索引擎之GLM-4大模型技術的實踐探索 3 AI大模型探索之路-實戰篇:智能化IT領域搜索引擎之知乎網站數據獲取(初步實踐) 4 AI大模型探索之路…

從0到1學PHP(十二):PHP 框架入門與項目實戰

目錄一、主流 PHP 框架介紹1.1 Laravel1.2 ThinkPHP1.3 Yii1.4 框架的優勢二、框架基本使用&#xff08;以 Laravel 為例&#xff09;2.1 框架的安裝與配置2.2 路由定義、控制器創建、視圖渲染2.3 數據庫操作&#xff08;ORM 的使用&#xff09;三、小型項目實戰3.1 項目需求分…

MPLS LSP

一、概述上一章我們已經介紹過,LSP是MPLS報文在MPLS網絡中轉發時經過的路徑,可以看作是由報文傳輸方向節點為對應FEC分配的MPLS入標簽組成的,因為每臺設備上為每個FEC分配的入標簽是唯一 的&#xff0c;并與由下游節點為本地節點上該FEC分配的出標簽建立映射關系&#xff0c; 所…

圖像、視頻、音頻多模態大模型中長上下文token壓縮方法綜述

多模態大模型MLLMs 能夠處理高分辨率圖像、長視頻序列和冗長音頻輸入等復雜上下文&#xff0c;但自注意力機制的二次復雜度使得大量輸入 token 帶來了巨大的計算和內存需求。 如下圖&#xff0c;上&#xff1a;圖像、視頻和音頻數據類型可以在其表示維度上進行擴展&#xff0c;…

Spring MVC 九大組件源碼深度剖析(一):MultipartResolver - 文件上傳的幕后指揮官

文章目錄一、為什么從 MultipartResolver 開始&#xff1f;二、核心接口&#xff1a;定義文件上傳的契約三、實現解析&#xff1a;兩種策略的源碼較量1. StandardServletMultipartResolver&#xff08;Servlet 3.0 首選&#xff09;2. CommonsMultipartResolver&#xff08;兼容…