Spring AI 智能體代理模式(Agent Agentic Patterns)

AgentAgenticPatterns 簡介

在最近的一篇研究報告《構建高效代理》 中,Anthropic分享了關于構建高效大語言模型(LLM)代理的寶貴見解。這項研究特別有趣的地方在于,它強調簡單性和可組合性,而非復雜的框架。讓我們來探索如何利用Spring AI將這些原則轉化為實際的實現。

什么是智能體

”智能體” 有多種定義方式。一些用戶將智能體定義為完全自主的系統,這類系統能夠長時間獨立運行,使用各種工具完成復雜任務。還有一些人用這個術語描述遵循預定義工作流程、指令性更強的實施方案。在Anthropic的定義當中,將所有這些變體都歸類為智能系統,但在架構上對工作流程和智能體做出了重要區分:

  • 工作流:指通過預定義代碼路徑來協調大語言模型和工具的系統。
  • 智能體:則是大語言模型能夠動態指導自身流程和工具使用,對完成任務的方式保持控制權的系統。

關鍵的一點是,雖然完全自主的代理可能很有吸引力,但對于定義明確的任務,工作流通常能提供更好的可預測性和一致性。這與企業對可靠性和可維護性至關重要的要求完美契合。接下來,我們將詳細探討這兩類智能系統。

代理系統

在使用大語言模型構建應用程序時,我們建議盡可能尋找最簡單的解決方案,僅在必要時增加復雜性。這可能意味著根本無需構建智能系統。智能系統通常會用延遲和成本來換取更好的任務性能,應該考慮這種權衡在何種情況下是合理的。

當確實需要增加復雜性時,對于定義明確的任務,工作流程能提供可預測性和一致性。

而當大規模需要靈活性和基于模型的決策時,智能體則是更好的選擇。然而,對于許多應用程序而言,通過檢索和上下文示例優化單個大語言模型調用通常就已足夠。

讓我們通過五個基本模式來看看Spring AI是如何實現這些概念的,每個模式都適用于特定的用例:

鏈式工作流

這個模式就像工廠流水線——把復雜任務拆成一個個小工序,前一道工序的結果自動傳給下一道。技術實現上用了”責任鏈”設計模式,支持隨時增加新的處理環節。

在這里插入圖片描述

使用場景

這個實現展示了幾個關鍵原則:

  • 需要分步驟完成的復雜任務(比如先查天氣再規劃行程最后生成攻略)
  • 寧愿多花點時間也要保證準確率(像重要文件的多級審批)
  • 后一步依賴前一步的結果(就像做菜必須按洗菜→切菜→炒菜的順序)

以下是Spring AI實現的一個實際示例:

public class ChainWorkflow {private final ChatClient chatClient;private final String[] systemPrompts;// 通過一系列提示處理輸入,其中每一步的輸出成為鏈中下一個步驟的輸入。public String chain(String userInput) {String response = userInput;for (String prompt : systemPrompts) {// 將系統提示與上一個響應結合String input = String.format("{%s}\n {%s}", prompt, response);// 通過大語言模型處理并捕獲輸出response = chatClient.prompt(input).call().content();}return response;}
}

并行化工作流

這個模式就像開了多個窗口同時干活——讓多個大模型同時處理任務,最后把結果匯總起來。主要有兩種方式:

  • 分片處理:把大任務拆成小任務,分給不同的大模型同時處理(類似分工作業)
  • 投票機制:讓多個大模型同時處理同一個任務,最后投票選出最佳結果(像開會討論)

在這里插入圖片描述

使用場景

并行化工作流模式展示了對多個大語言模型操作的高效并發處理。這種模式對于需要并行執行大語言模型調用并自動聚合輸出的場景特別有用。

  • 要處理一堆相似但互不干擾的任務(比如同時分析多個用戶群體的數據)
  • 需要多個任務獨立運行(像工廠里的流水線作業)
  • 任務能快速拆解且可以并行執行(比如同時生成多個產品描述)

以下是Spring AI實現的一個實際示例,比如要分析市場變化對四類利益群體的影響,我們可以讓四個大模型同時開工::

List<String> parallelResponse = new ParallelizationWorkflow(chatClient).parallel("Analyze how market changes will impact this stakeholder group.",List.of("Customers: ...","Employees: ...","Investors: ...","Suppliers: ..."),4);

路由工作流

路由模式實現了智能任務分配,能夠針對不同類型的輸入進行專門處理,這種模式專為復雜任務設計,不同類型的輸入由專門的流程處理會更好。 這個模式就像智能分診臺——能自動識別問題類型,轉給最專業的處理流程。技術實現上相當于給大模型裝了個智能路由器,不同的問題自動走專用通道。
在這里插入圖片描述

使用場景

它使用大語言模型分析輸入內容,并將其路由到最合適的專門提示或處理程序。

  • 要處理五花八門的問題類型(比如客服系統同時接咨詢、投訴、技術問題)
  • 不同問題需要不同專家處理(像醫院分內科/外科/急診)
  • 需要精準分類輸入內容(像快遞自動分揀系統)

以下是使用路由工作流的基本示例:

@Autowired private ChatClient chatClient;// 創建工作流
RoutingWorkflow workflow = new RoutingWorkflow(chatClient);// 為不同類型的輸入定義專門的提示
Map<String, String> routes = Map.of("billing", "You are a billing specialist. Help resolve billing issues...","technical", "You are a technical support engineer. Help solve technical problems...","general", "You are a customer service representative. Help with general inquiries..."
);// 處理輸入
String input = "My account was charged twice last week";
String response = workflow.route(input, routes);

協調者-執行者

這個模式就像電影拍攝現場——導演(協調者)負責分鏡頭,各工種(執行者)專注自己的專業領域。技術實現上采用”中央指揮部+特種部隊”的架構,既保持靈活又確保可控。
在這里插入圖片描述

使用場景

當你的任務像建造摩天大樓需要多方協作時:

  • 任務復雜到無法提前拆解(像應對突發事件的應急小組)
  • 需要不同專業視角(像建筑設計需要結構/水電/裝修多方配合)
  • 解決方案需要動態調整(像軍事行動中的實時戰術變化)

實現使用Spring AI的ChatClient進行大語言模型交互,包括:

public class OrchestratorWorkersWorkflow {public WorkerResponse process(String taskDescription) {// 1. 協調器分析任務并確定子任務OrchestratorResponse orchestratorResponse = //...// 2. 工作器并行處理子任務List<String> workerResponses = //...// 3. 結果合并為最終響應return new WorkerResponse(/*...*/);}
}ChatClient chatClient = //... 初始化聊天客戶端
OrchestratorWorkersWorkflow workflow = new OrchestratorWorkersWorkflow(chatClient);// 處理任務
WorkerResponse response = workflow.process("Generate both technical and user-friendly documentation for a REST API endpoint"
);// 訪問結果
System.out.println("Analysis: " + response.analysis());
System.out.println("Worker Outputs: " + response.workerResponses());

評估者-優化者

這個模式就像作家與編輯的協作——寫手(生成者)負責創作初稿,編輯(評估者)逐字推敲提出修改意見。技術實現上采用”創作-反饋”循環機制,直到作品達到出版標準。

  • 生成者大語言模型:生成初始響應并根據反饋進行改進。
  • 評估者大語言模型:分析響應并提供詳細的改進反饋。

在這里插入圖片描述

使用場景

評估者 - 優化者模式適用于需要多輪迭代以提高質量的任務。

  • 有明確的品質標準(像學術論文需要同行評審)
  • 迭代改進能顯著提升價值(像廣告文案的AB測試)
  • 追求完美輸出(像電影劇本的多次修訂)

實現使用Spring AI的ChatClient進行大語言模型交互,包括:

public class EvaluatorOptimizerWorkflow {public RefinedResponse loop(String task) {// 1. 生成初始解決方案Generation generation = generate(task, context);// 2. 評估解決方案EvaluationResponse evaluation = evaluate(generation.response(), task);// 3. 如果通過,返回解決方案// 4. 如果需要改進,結合反饋并生成新的解決方案// 5. 重復直到滿意return new RefinedResponse(finalSolution, chainOfThought);}
}ChatClient chatClient = //... 初始化聊天客戶端
EvaluatorOptimizerWorkflow workflow = new EvaluatorOptimizerWorkflow(chatClient);// 處理任務
RefinedResponse response = workflow.loop("Create a Java class implementing a thread-safe counter"
);// 訪問結果
System.out.println("Final Solution: " + response.solution());
System.out.println("Evolution: " + response.chainOfThought());

結論

Anthropic的研究見解與Spring AI的實際實現相結合,為構建有效的基于大語言模型的系統提供了強大的框架。通過遵循這些模式和原則,開發人員可以創建健壯、可維護且高效的AI應用程序,在避免不必要復雜性的同時提供真正的價值。

關鍵是要記住,有時最簡單的解決方案就是最有效的。從基本模式開始,徹底了解你的運用場景,只有在復雜性能顯著提高系統性能或功能時才進行設計。

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

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

相關文章

基于 Vue3 與 exceljs 實現自定義導出 Excel 模板

在開發中&#xff0c;我們需要常常為用戶提供更多的數據錄入方式&#xff0c;Excel 模板導出與導入是一個常見的功能點。本文將介紹如何使用 Vue3、exceljs 和 file-saver 實現一個自定義導出 Excel 模板&#xff0c;并在特定列添加下拉框選擇的數據驗證功能。 技術選型 excelj…

git 命令之-git cherry-pick

今天得到一個通知&#xff0c;這個業務版本里面部分已經開發但還沒測試的內容要新開一個分支提交&#xff0c;但是我已經有幾個提交上去了&#xff0c;難道只能一個一個文件復制到新的分支嗎&#xff1f;我不&#xff0c;我找到了這個git命令&#xff0c;可以解決我的困惑&…

浙大版《Python 程序設計》題目集6-3,6-4,6-5,6-6列表或元組的數字元素求和及其變式(遞歸解法)

目錄 6-3 輸入格式: 輸出格式: 輸入樣例: 輸出樣例: 6-4 輸入格式: 輸出格式: 輸入樣例: 輸出樣例: 6-5 輸入格式: 輸出格式: 輸入樣例: 輸出樣例: 6-6 輸入格式: 輸出格式: 輸入樣例: 輸出樣例: 6-3 第6章-3 列表或元組的數字元素求和 分數 20 全屏瀏覽 切換布局 作者 陳春暉 …

【b站計算機拓荒者】【2025】微信小程序開發教程 - chapter2 小程序核心

1 尺寸單位和樣式 1.1 創建小程序項目-純凈環境 // 該刪的刪掉。 1.2 尺寸單位 # 小程序內 手機屏幕大小可能不一樣&#xff0c;使用px像素就會出現樣式問題 --> 小程序統一了整個寬度&#xff0c;即750rpx&#xff0c;屏幕一半則是375rpx -->因此不管什么手機都可以…

攻防世界逆向刷題筆記(新手模式9-1?)

bad_python 看樣子是pyc文件損壞了。利用工具打開&#xff0c;發現是MAGIC壞了。搜下也沒有頭緒。 攻防世界-難度1- bad_python - _rainyday - 博客園 python Magic Number對照表以及pyc修復方法 - iPlayForSG - 博客園 看WP才知道36已經提示了pyc版本了。參考第二個文章&am…

mysql ACID 原理

序言&#xff1a;ACID 是一組數據庫設計原則&#xff0c;他是業務數據和關鍵業務程序的可靠性保障。 1、atomicity&#xff08;原子性&#xff09; 依賴如下能力 autocommit commit rollback2、一致性 2.1 double write buffer 1、定義&#xff1a;double write buffer 是…

WebStorm 高效快捷方式全解析

作為前端開發的黃金搭檔&#xff0c;WebStorm 憑借強大的功能和高度可定制的快捷鍵體系&#xff0c;成為眾多開發者提升編碼效率的利器。本文基于 IntelliJ IDEA 的快捷鍵體系&#xff08;WebStorm 作為 JetBrains 家族成員&#xff0c;快捷鍵邏輯高度一致&#xff09;&#xf…

基于 STM32 的農村污水處理控制系統設計與實現

摘要 針對農村污水處理自動化程度低、運維成本高的問題,本文設計了一種基于 STM32 單片機的污水處理控制系統。系統通過多傳感器實時監測水質參數,結合 PID 控制算法實現污水處理全流程自動化,并集成遠程監控功能,滿足農村地區低成本、易維護的需求。 一、硬件系統設計 …

自動生成md文件以及config.mjs文件-vitepress

效果&#xff1a; config.mjs文件 import {defineConfig} from vitepress import hljs from highlight.js/lib/core import javascript from highlight.js/lib/languages/javascript import xml from highlight.js/lib/languages/xml import {ref} from "./cache/deps/vue…

Tailwind css實戰,基于Kooboo構建AI對話框頁面(二)

基于上篇內容&#xff0c;添加交互邏輯&#xff0c;實現一個偽聊天功能的對話框效果&#xff1a; Tailwind css實戰&#xff0c;基于Kooboo構建AI對話框頁面&#xff08;一&#xff09;-CSDN博客 在前期文章中&#xff0c;我們完成了 AI 對話框的靜態頁面搭建。本文將聚焦交互…

Conda:環境移植及更新1--使用conda-pack

更多內容&#xff1a;XiaoJ的知識星球 目錄 一、使用conda-pack1.安裝 conda-pack2.移植整個 Anaconda 環境3.移植單個虛擬環境4.驗證是否生效 在相同Linux設備上移植Miniconda3&#xff08;Anaconda3同理&#xff09;常用方法有。 使用conda-pack&#xff1a;使用conda-pack工…

樹莓派超全系列教程文檔--(50)如何查找樹莓派的IP地址

如何查找樹莓派的IP地址 找到您的Raspberry Pi的IP地址桌面命令行引導輸出網絡管理器使用mDNS解析 raspberrypi.local檢查路由器的設備列表使用 nmap 查找設備使用智能手機應用程序查找設備 文章來源&#xff1a; http://raspberry.dns8844.cn/documentation 原文網址 找到您…

如何優化 MySQL 存儲過程的性能?

文章目錄 1. 優化 SQL 語句避免全表掃描減少子查詢&#xff0c;改用 JOIN避免 SELECT 2. 合理使用索引3. 優化存儲過程結構減少循環和臨時變量避免重復計算 4. 使用臨時表和緩存5. 優化事務處理6. 分析和監控性能7. 優化數據庫配置8. 避免用戶自定義函數&#xff08;UDF&#…

尚硅谷redis7 47-48 redis事務之理論簡介

47 redis事務之理論簡介 什么是事務 可以一次執行多個命令,本質是一組命令的集合。一個事務中的所有命令都會序列化,按順序地串行化執行而不會被其它命令插入 能干什么&#xff1f; 一個隊列中&#xff0c;一次性、順序性、排他性的執行一系列操作 redis事務vs數據庫事務 …

Nginx 在四大核心場景中的應用實踐與優化

一、Nginx 核心應用場景深度解析 1. HTTP 服務器&#xff1a;靜態資源的高性能承載者 Nginx 作為 HTTP 服務器時&#xff0c;憑借輕量級架構和高效的事件驅動模型&#xff0c;成為靜態資源服務的首選方案。 核心能力與場景 靜態文件高效處理&#xff1a;直接響應 HTML、CSS…

亞當·斯密思想精髓的數學建模與形式化表征

亞當斯密思想精髓的數學建模與形式化表征 摘要&#xff1a;本文運用數學建模方法對亞當斯密的經濟與倫理思想進行形式化表征。通過分工的規模經濟模型和市場均衡條件展現《國富論》中"看不見的手"原理&#xff1b;采用擴展效用函數與合作博弈均衡解釋《道德情操論》…

FastDFS集群部署與性能優化實戰

目錄 一、介紹 二、FastDFS原理 三、FastDFS部署 1.資源清單 2.修改主機名 3.安裝libfastcommon&#xff08;tracker01、tracker02、storage1、storage2&#xff09; 4.安裝編譯FastDFS&#xff08;tracker01、tracker02、storage1、storage2&#xff09; 5.配置tracker…

學習心得(14--16)

模板&#xff1a; 前端的頁面單獨存在模板當中 jinja2 &#xff1a;模板語法 保持前端頁面不變的情況下&#xff0c;返回內容給前端做法&#xff1a; 寫一個data&#xff0c;并在return中的render_template中&#xff0c;寫上datadata 使用時&#xff0c;要將templa…

stm與51單片機哪個更適合新手學

一句話總結 51單片機&#xff1a;像學騎自行車&#xff0c;簡單便宜&#xff0c;但只能在小路上騎。 STM32&#xff1a;像學開汽車&#xff0c;復雜但功能強&#xff0c;能上高速公路&#xff0c;還能拉貨載人&#xff08;做復雜項目&#xff09;。 1. 為啥有人說“先學51單片…

Web安全測試-文件上傳繞過-DVWA

Web安全測試-文件上傳繞過-DVWA 很多網站都有上傳資源(圖片或者文件)的功能&#xff0c;資源上傳后一般會存儲在服務器的一個文件夾里面&#xff0c;如果攻擊者繞過了上傳時候的文件類型驗證&#xff0c;傳了木馬或者其他可執行的代碼上去&#xff0c;那服務器就危險了。 我用…