AWS 開源 Strands Agents SDK,簡化 AI 代理開發流程

? ?最近,亞馬遜網絡服務(AWS)宣布推出 Strands Agents(https://github.com/strands-agents/sdk-python),這一開源軟件開發工具包(SDK)采用模型驅動的方法,助力開發者僅用數行代碼即可構建并運行人工智能(AI)代理。Strands Agents 能夠涵蓋從簡單到復雜的各類代理使用場景,無論是本地開發還是生產環境部署都能勝任。目前,AWS 的多個團隊已在生產環境中借助 Strands 構建 AI 代理,包括亞馬遜 Q 開發者助手、AWS Glue 數據集成服務以及 VPC 可達性分析器等。如今,AWS 激動地將 Strands Agents 推向大眾,助力開發者打造專屬的 AI 代理。

相較于要求開發者為代理定義復雜工作流的框架,Strands Agents 通過擁抱尖端模型的規劃、聯想思考、調用工具和反思能力,極大地簡化了代理開發流程。借助 Strands,開發者只需在代碼中定義一個提示詞和一組工具即可構建代理,隨后在本地進行測試并將其部署到云端。正如 DNA 的雙螺旋結構一般,Strands 將代理的兩大核心組件——模型與工具——緊密相連。Strands 借助模型的強大推理能力來規劃代理的下一步行動并執行相應工具。對于更為復雜的代理使用場景,開發者可以在 Strands 中自定義代理的行為。例如,可以指定工具的選擇方式、自定義上下文管理方式、選擇會話狀態和內存的存儲位置,以及構建多代理應用程序。Strands 可在任何環境中運行,支持具備推理和工具使用能力的各類模型,包括亞馬遜 Bedrock、Anthropic、Ollama、Meta 以及其他通過 LiteLLM 提供服務的供應商的模型。

Strands Agents 是一個開放的社區,眾多公司紛紛加入并貢獻自己的力量,包括埃森哲(Accenture)、Anthropic、Langfuse、mem0.ai、Meta、普華永道(PwC)、Ragas.io 和 Tavily。例如,Anthropic 已在 Strands 中貢獻了通過 Anthropic API 使用模型的支持,而 Meta 則通過 Llama API 為 Llama 模型提供了支持。

AWS 構建代理的歷程

AWS 的一名開發者主要負責亞馬遜 Q 開發者助手的工作,這是一個由生成式 AI 驅動的軟件開發助手。他和團隊在 2023 年初開始構建 AI 代理,這大約是在原始 ReAct(推理與行動)科學論文發表之時。該論文表明大型語言模型(LLMs)能夠推理、規劃并在其環境中采取行動。例如,LLMs 可以推理出需要調用應用編程接口(API)來完成任務,然后生成該 API 調用所需的輸入。他們隨后意識到大型語言模型可以作為代理來完成多種類型的任務,包括復雜的軟件開發和運維故障排除。

當時,大型語言模型通常并未被訓練成代理的行為模式,它們大多主要被訓練用于自然語言對話。要想成功地利用大型語言模型進行推理和行動,需要復雜的提示詞指令來指導如何使用工具、模型響應的解析器以及編排邏輯。僅僅是讓大型語言模型可靠地生成語法正確的 JSON 格式響應在當時都是一項挑戰!為了 prototype(原型設計)和部署代理,他和團隊依賴各種復雜的代理框架庫,這些庫處理了代理所需的基本架構和編排,以便與早期模型配合可靠地完成任務。即便有了這些框架,讓一個代理做好生產環境的準備仍需數月的調試和優化。

從那以后,他們在大型語言模型的能力上見證了戲劇性的提升,這些模型如今已具備強大的推理和使用工具完成任務的能力。他們意識到不再需要如此復雜的編排來構建代理,因為模型現在已具備原生的工具使用和推理能力。實際上,他們之前用于構建代理的某些代理框架庫開始阻礙他們充分利用新一代 LLMs 的能力。盡管 LLMs 的性能有了顯著提升,但這些改進并不意味著他們能利用現有框架更快地構建和迭代代理。讓一個代理做好生產環境的準備仍然需要數月時間。

于是,他們開始構建 Strands Agents,旨在為 Q 開發者團隊去除這種復雜性。他們發現,依賴最新模型的能力來驅動代理,與使用復雜編排邏輯構建代理相比,大幅縮短了上市時間并提升了最終用戶體驗。過去,Q 開發者團隊從原型設計到生產環境部署一個新代理需要數月時間,如今借助 Strands,他們能夠在數天至數周內推出新的代理。

Strands Agents 的核心概念

對代理最簡單的定義是模型、工具和提示詞的組合。代理利用這三大組件自主完成任務,例如回答問題、生成代碼、規劃假期或優化財務組合等。在模型驅動的方法中,代理利用模型動態指導自身步驟并使用工具以完成指定任務。
?

Image



通過 Strands Agents SDK 定義代理時,需在代碼中定義以下三大組件:

  1. 1.?模型?:Strands 提供靈活的模型支持。可以使用亞馬遜 Bedrock 中支持工具使用和流處理的任何模型、通過 Anthropic API 使用 Anthropic 的 Claude 模型家族的模型、通過 Llama API 使用 Llama 模型家族的模型、用于本地開發的 Ollama,以及通過 LiteLLM 使用的眾多其他模型供應商,例如 OpenAI。此外,還可以在 Strands 中自定義模型供應商。

  2. 2.?工具?:可以從數千個已發布的模型上下文協議(MCP)服務器中選擇工具供代理使用。Strands 還提供了 20 多個預構建示例工具,包括用于操作文件、發起 API 請求和與 AWS API 交互的工具等。只需使用 Strands 的?@tool?裝飾器,即可輕松地將任何 Python 函數用作工具。

  3. 3.?提示詞?:提供一個自然語言提示詞,為代理定義任務,例如回答最終用戶的問題。還可以提供一個系統提示詞,為代理提供通用指令和期望行為。

代理會與模型和工具進行交互,直至完成提示詞所提供的任務,這一過程通過代理循環實現,它是 Strands 能力的核心所在。Strands 的代理循環充分利用了大型語言模型的強大功能以及它們在推理、規劃和工具選擇方面的原生能力。在每次循環中,Strands 會帶著提示詞、代理上下文以及代理工具的描述調用大型語言模型。大型語言模型可以選擇用自然語言回應代理的最終用戶、規劃一系列步驟、反思代理之前的步驟和 / 或選擇使用一個或多個工具。當大型語言模型選擇工具時,Strands 負責執行該工具并將結果反饋給大型語言模型。當大型語言模型完成任務后,Strands 返回代理的最終結果。
?

Image



在 Strands 的模型驅動方法中,工具是定制代理行為的關鍵。例如,工具可以從知識庫中檢索相關文檔、調用 API、運行 Python 邏輯,或僅僅返回包含額外模型指令的靜態字符串。工具還有助于在模型驅動的方法中實現復雜使用場景,比如以下 Strands Agents 示例預構建工具:

  • ??檢索工具(Retrieve tool)?:該工具利用亞馬遜 Bedrock 知識庫實現語義搜索。除了檢索文檔外,檢索工具還可以通過語義搜索檢索其他工具,從而幫助模型進行規劃和推理。例如,AWS 的一個內部代理有超過 6000 個工具可供選擇!如今的模型尚無法準確地從如此眾多的工具中進行選擇。與其向模型描述所有 6000 個工具,代理可利用語義搜索找到與當前任務最相關的工具,并僅向模型描述這些工具。可以通過將眾多工具描述存儲在知識庫中,并讓模型使用檢索工具來檢索當前任務相關的工具子集,從而實現這一模式。

  • ??思考工具(Thinking tool)?:該工具通過多個周期促使模型進行深入的分析思考,使復雜的思考處理和自我反思成為代理的一部分。在模型驅動方法中,將思考建模為工具,使模型能夠推理任務是否需要深入分析以及何時需要。

  • ??多代理工具(Multi-agent tools)?:如工作流、圖和群集工具等。對于復雜任務,Strands 可以在多種多代理協作模式下協調多個代理。通過將子代理和多代理協作建模為工具,模型驅動方法使模型能夠推理任務是否需要定義好的工作流、圖或子代理群集。Strands 對多代理應用的 Agent2Agent(A2A)協議支持即將推出。

入門 Strands Agents

讓我們通過一個示例來了解如何使用 Strands Agents SDK 構建代理。長期以來,命名一直被認為是計算機科學中最困難的問題之一,為開源項目命名也不例外!為了幫助我們為 Strands Agents 項目構思潛在名稱,開發人員使用 Strands 構建了一個命名人工智能助手。在本示例中,你將使用 Strands 構建一個命名代理,使用亞馬遜 Bedrock 中的默認模型、MCP 服務器和預構建的 Strands 工具。

創建一個名為?agent.py?的文件,代碼如下:

from strands import Agent
from strands.tools.mcp import MCPClient
from strands_tools import http_request
from mcp import stdio_client, StdioServerParameters# Define a naming-focused system prompt
NAMING_SYSTEM_PROMPT = """
You are an assistant that helps to name open source projects.When providing open source project name suggestions, always provide
one or more available domain names and one or more available GitHub
organization names that could be used for the project.Before providing your suggestions, use your tools to validate
that the domain names are not already registered and that the GitHub
organization names are not already used.
"""# Load an MCP server that can determine if a domain name is available
domain_name_tools = MCPClient(lambda: stdio_client(StdioServerParameters(command="uvx", args=["fastdomaincheck-mcp-server"])
))# Use a pre-built Strands Agents tool that can make requests to GitHub
# to determine if a GitHub organization name is available
github_tools = [http_request]with domain_name_tools:# Define the naming agent with tools and a system prompttools = domain_name_tools.list_tools_sync() + github_toolsnaming_agent = Agent(system_prompt=NAMING_SYSTEM_PROMPT,tools=tools)# Run the naming agent with the end user's promptnaming_agent("I need to name an open source project for building AI agents.")

你需要一個 GitHub 個人訪問令牌來運行代理。設置環境變量?GITHUB_TOKEN,其值為你的 GitHub 令牌。還需要在 us-west-2 地區獲得 Anthropic Claude 3.7 Sonnet 的 Bedrock 模型訪問權限,并在當地配置好 AWS 憑證。

然后運行你的代理:

pip install strands-agents strands-agents-tools
python -u agent.py

你應該會看到類似于以下片段的代理輸出:

Based on my checks, here are some name suggestions for your?
open source AI agent building project:## Project Name Suggestions:1. **Strands Agents**?
- Available domain: strandsagents.com?
- Available GitHub organization: strands-agents?

如今,你可以輕松地在喜愛的人工智能輔助開發工具中使用 Strands Agents SDK 開始構建新的代理。為了幫助你快速上手,我們發布了一個 Strands MCP 服務器,可用于任何支持 MCP 的開發工具,例如 Q Developer CLI 或 Cline。對于 Q Developer CLI,可以使用以下示例將 Strands MCP 服務器添加到 CLI 的 MCP 配置中。你可以在 GitHub (https://github.com/strands-agents/mcp-server/)上查看更多的配置示例。

{"mcpServers": {"strands": {"command": "uvx","args": ["strands-agents-mcp-server"]}}
}

在生產環境中部署 Strands Agents

在生產環境中運行代理是 Strands 設計的核心原則之一。Strands Agents 項目包含一個部署工具包,其中有一系列參考實現,可幫助你將代理投入生產。Strands 足夠靈活,能夠支持生產環境中的多種架構。你可以使用 Strands 構建對話代理,以及由事件觸發、按計劃運行或持續運行的代理。你可以將使用 Strands Agents SDK 構建的代理部署為單體架構,即將代理循環和工具執行都運行在同一個環境中,或者將其部署為一組微服務。下面將介紹在 AWS 內部使用 Strands Agents 的四種代理架構。

下圖展示了一種代理架構,Strands 完全在用戶的本地環境中通過客戶端應用程序運行。GitHub 上的示例命令行工具遵循這種架構,用于構建基于命令行的人工智能助手。

Image

下一圖展示了一種將代理及其工具部署在生產環境中的 API 后端的架構。他們在 GitHub 上提供了參考實現,展示如何將使用 Strands Agents SDK 構建的代理部署在 AWS 的 API 后端,使用的服務包括 AWS Lambda、AWS Fargate 或亞馬遜彈性計算云(Amazon EC2)。

Image

你可以通過將 Strands 代理循環和工具執行在不同環境中運行來分離關注點。下圖展示了一種代理架構,其中代理通過 API 調用其工具,而工具則在與代理環境相隔離的后端環境中運行。例如,你可以將代理工具運行在 Lambda 函數中,而將代理本身運行在 Fargate 容器中。

Image

你還可以使用 Strands 實現一種控制權回歸模式,由客戶端負責運行工具。該圖展示了一種代理架構,使用 Strands Agents SDK 構建的代理可以使用混合工具,這些工具一部分托管在后端環境中,另一部分通過調用代理的客戶端應用程序在本地運行。

Image

無論采用何種架構,對代理的可觀測性至關重要,這有助于了解代理在生產環境中的表現。Strands 提供了用于收集生產代理軌跡和指標的工具。Strands 使用 OpenTelemetry(OTEL)將遙測數據發送到任何兼容 OTEL 的后端,用于可視化、故障排除和評估。Strands 對分布式追蹤的支持使你能夠追蹤架構中不同組件的請求,從而全面了解代理會話的情況。

總結

Strands Agents SDK 提供了一個既結構化又靈活的框架,用于構建 AI 代理。它強調模型、工具以及提示詞之間的清晰分離。其基于模型驅動的循環機制,以及與現存大型語言模型(LLM)生態系統的集成,使其成為開發者在實現自主代理時的技術合理之選。開發者可以借此在減少樣板代碼的同時,獲得強大的定制化能力。

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

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

相關文章

利用 AI 打造的開發者工具集合

如圖. 我利用 AI 開發了這個網站花了半個小時. 目前就上了 四個 我想到的工具。 大家可以自行體驗下:https://xiaojinzi123.github.io 本文并不是宣傳什么產品. 只是感概 Ai 真的改變我的工作方式啊. 雖然現在 AI 對于一些已有的項目進行更改代碼. 由于不了解業務,…

[自然語言處理]計算語言的熵

一、要求利用給定的中英文語料,分別計算英語字母、英語單詞、漢字、漢語詞的熵,并和已公開結果比較,思考漢語的熵對漢語編碼和處理的影響。二、實驗內容2.1 統計英文語料的熵1.代碼(1)計算英文字母的熵import math #計算每個英文字母的熵 def…

如何處理“協議異常”錯誤

在Java中,“協議異常”通常是指在網絡通信或者處理特定協議相關操作時出現的異常。以下是一些處理“協議異常”錯誤的方法:一、理解協議異常的類型和原因HTTP協議異常原因:在進行HTTP通信時,可能會因為請求格式錯誤、響應狀態碼異…

Spark 4.0的VariantType 類型以及內部存儲

背景 本文基于Spark 4.0 總結 Spark中的 VariantType 類型,用盡量少的字節來存儲Json的格式化數據 分析 這里主要介紹 Variant 的存儲,我們從VariantBuilder.buildJson方法(把對應的json數據存儲為VariantType類型)開始: public static Variant parseJson(JsonParser …

跨越十年的C++演進:C++20新特性全解析

跨越十年的C演進系列,分為5篇,本文為第四篇,后續會持續更新C23~ 前3篇如下: 跨越十年的C演進:C11新特性全解析 跨越十年的C演進:C14新特性全解析 跨越十年的C演進:C17新特性全解析 C20標準…

LeetCode--40.組合總和II

前言:如果你做出來了39題,但是遇到40題就不會做了,那我建議你去再好好縷清39題的思路,再來看這道題,會有種豁然開朗的感覺解題思路:這道題其實與39題基本一致,所以本次題解是借著39題為基礎來講…

Docker Desktop 安裝到D盤(包括鏡像下載等)+ 漢化

目錄 一、 開啟電腦虛擬化 1. 搜索并打開控制面板 2. 點擊程序 3. 點擊啟用或關閉 Windows 功能 4. 打開相關功能 5. 沒有Hyper-V的情況: 二、配置環境 1. 更新 WSL 到最新版 2. 設置 WSL 2為默認版本 3. 安裝 Ubuntu 三. WSL 遷移到D盤 1. 停止運行wsl…

基于 OpenCV 的圖像 ROI 切割實現

一、引言 在計算機視覺領域,我們經常需要處理各種各樣的圖像數據。有時候,我們只對圖像中的某一部分區域感興趣,例如在一張人物照片中,我們可能只關注人物的臉部。在這種情況下,將我們感興趣的區域從整個圖像中切割出…

Linux操作系統01

一、操作系統簡史 二、Linux誕生與分支 三、Linux內核與發行版 內核版本號:cat /proc/version 、 u name -a 操作系統內核漏洞 【超詳細】CentOS編譯安裝升級新內核_centos源碼編譯安裝新版本內核 ntfs-CSDN博客 四、虛擬機 五、Docker容器技術 典型靶場集成環境…

Chrome 下載文件時總是提示“已阻止不安全的下載”的解決方案

解決 Chrome 谷歌瀏覽器下載文件時提示“已阻止不安全的下載”的問題。 ? 前言 最近更新 Chrome 后,下載文件時總是提示“已攔截未經驗證的下載內容”、“已阻止不安全的下載”: ? 身為一個互聯網沖浪高手,這些提醒非常沒有必要&#x…

RocketMQ延遲消息是如何實現的?

RocketMQ的延遲消息實現機制非常巧妙,其核心是通過多級時間輪 定時任務 消息重投遞來實現的。以下是詳細實現原理: ? 一、延遲消息的核心設計 預設延遲級別(非任意時間) RocketMQ不支持任意時間延遲,而是預設了18個…

D3 面試題100道之(21-40)

這里是D3的面試題,我們從第 21~40題 開始逐條解答。一共100道,陸續發布中。 ?? 面試題(第 21~40 題) 21. D3 中的數據綁定機制是怎樣的? D3 的數據綁定機制通過 selection.data() 方法實現。它將數據數組與 DOM 元素進行一一對應,形成三種狀態: Update Selection:已…

PyTorch nn.Parameter理解及初始化方法總結

一、理解 nn.Parameter 本質是什么? nn.Parameter 是 torch.Tensor 的一個子類。這意味著它繼承了 Tensor 的所有屬性和方法(如 .data, .grad, .requires_grad, .shape, .dtype, .device, .backward() 等)。它本身不是一個函數或模塊&#xf…

【Linux】環境基礎和開發工具

Linux 軟件包管理器 yum 什么是軟件包 在Linux下安裝軟件, 一個通常的辦法是下載程序的源代碼, 并進行編譯, 得到可執行程序. 但是這樣太麻煩了, 于是有些人把一些常用的軟件提前編譯好, 做成軟件包(可以理解成windows上的安裝程序)放在一個服務器上, 通過包管理器可以很方便…

多模態進化論:GPT-5V圖文推理能力在工業質檢中的顛覆性應用

前言 前些天發現了一個巨牛的人工智能免費學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到網站 🚀《多模態進化論:GPT-5V圖文推理能力在工業質檢中的顛覆性應用》 副標題:2025年實測報告顯…

Linux實現一主二從模式

主從復制: 復制概念中分為兩類數據庫,一類是主數據庫(master),一類是從數據(slave),主 數據庫可以進行讀寫操作,并把寫的操作同步給從數據庫,一般從數據庫是只…

大勢智慧亮相第十八屆中國智慧城市大會

6月26日-28日,第十八屆中國智慧城市大會在武漢盛大舉行。本次大會以“數智賦能城市創新協同共治發展藍圖”為主題,匯聚了李德仁、劉經南等八位院士及全國智慧城市領域的專家學者、行業精英,共同探討行業發展新方向。作為實景三維技術領域領軍…

Xbox One 控制器轉換為 macOS HID 設備的工作原理分析

Xbox One 控制器轉換為 macOS HID 設備的工作原理分析 源代碼在 https://github.com/guilhermearaujo/xboxonecontrollerenabler.git 這個工程的核心功能是將 Xbox One 控制器(macOS 原生不支持的設備)轉換為 macOS 可識別的 HID 設備。這里通過分析代…

Notepad++ 復制宏、編輯宏的方法

Notepad具有宏的功能,能夠記錄當下所有操作,后續只需要一鍵就可以重復執行,大大減少工作量。 比如我需要把很多文件里面的字符完成替換,那我只需要把替換的過程錄制成宏,后續打開文件就可以一鍵替換了。 但是Notepad的…

Oracle:報錯jdbc:oracle:thin:@IP地址:端口:實例名, errorCode 28001, state 99999

報錯原因是oracle密碼過期,根本解決辦法是讓密碼不再過期,永久有效。具體操作記錄一下。 cmd命令行輸入: sqlplus / as sysdba修改Oracle密碼期限為無限: SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;SQL&…