AWS 開源 Strands Agents SDK:用幾行代碼喚醒 AI 智能體
大家好,我是肆〇柒。AWS 開源了一套 Agent 框架 —— Strands Agents SDK。它不僅簡化了開發(fā)流程,還極大地提升了開發(fā)效率,并且從可持續(xù)運(yùn)維的角度思考了工程落地。接下來,我們一起來了解一下這個(gè) SDK,看看它是如何讓智能體開發(fā)變得如此簡單。
AI 智能體,這些能夠在特定環(huán)境中感知、推理并自主行動(dòng)的軟件實(shí)體,已成為推動(dòng)眾多行業(yè)變革的關(guān)鍵力量。從自動(dòng)化客服系統(tǒng)到復(fù)雜的供應(yīng)鏈管理優(yōu)化,AI 智能體的應(yīng)用場景正不斷拓展。然而,傳統(tǒng)的智能體開發(fā)往往伴隨著復(fù)雜的工作流定義、繁瑣的模型配置以及昂貴的試錯(cuò)成本,這讓許多開發(fā)者和企業(yè)望而卻步。
AWS 開源 Strands Agents SDK
現(xiàn)在,AWS 正式開源了 Strands Agents SDK。它采用模型驅(qū)動(dòng)架構(gòu),將智能體的核心要素——模型、工具和提示抽象化,極大降低了開發(fā)門檻。開發(fā)者無需深入理解大型語言模型(LLM)的底層機(jī)制,也無需編寫復(fù)雜的編排邏輯,只需幾行簡潔的代碼,即可構(gòu)建出功能強(qiáng)大的 AI 智能體,實(shí)現(xiàn)從簡單查詢回答到復(fù)雜工作流程編排的多樣化任務(wù)。
Strands Agents SDK 核心架構(gòu):智能體的三核引擎
Strands Agents SDK 的核心架構(gòu)圍繞智能體的三要素展開,這三者相互協(xié)作,驅(qū)動(dòng)智能體完成各項(xiàng)任務(wù)。
(一)模型(Model):智能體的 “大腦”
Strands 為智能體提供了極其豐富的模型支持,堪稱智能體的 “最強(qiáng)大腦庫”。它原生集成了 Amazon Bedrock 平臺(tái)的眾多模型,如 Claude 和 Titan,這些模型在自然語言處理和推理任務(wù)中表現(xiàn)出色。同時(shí),Strands 也兼容 Anthropic、Meta Llama 等熱門模型,通過 LiteLLM 等 API,開發(fā)者還能輕松接入其他提供商的模型資源,構(gòu)建多元化的模型生態(tài)。
更值得一提的是,Strands 考慮到了本地開發(fā)和特殊定制場景,支持 Ollama 等本地模型開發(fā)平臺(tái),并允許開發(fā)者定義自定義模型提供商。這意味著,無論你是想利用云端的強(qiáng)大算力,還是在本地環(huán)境中確保數(shù)據(jù)隱私和模型專屬性,Strands 都能滿足需求。開發(fā)者只需簡單地在代碼中指定模型來源和參數(shù),即可讓智能體調(diào)用相應(yīng)的模型,開始它的智能任務(wù)之旅。
(二)工具(Tools):智能體的 “功能擴(kuò)展包”
工具是智能體與外部世界交互、完成實(shí)際操作的關(guān)鍵橋梁。Strands 提供了 20 + 預(yù)建工具,涵蓋了從文件創(chuàng)建、讀取、更新到 API 調(diào)用,以及與 AWS 服務(wù)深度集成的各類功能。這些工具就像是智能體的 “百寶箱”,讓智能體能夠輕松處理文件操作、調(diào)用外部服務(wù),甚至操控 AWS 云資源。
而真正讓開發(fā)者興奮的是 Strands 的自定義工具能力。通過簡單的 @tool
裝飾器,開發(fā)者可以將任何 Python 函數(shù)轉(zhuǎn)化為智能體可用的工具。只需在函數(shù)前添加這一裝飾器,并定義好工具的輸入輸出參數(shù),智能體便能在后續(xù)任務(wù)中調(diào)用該函數(shù),實(shí)現(xiàn)特定的業(yè)務(wù)邏輯。例如,你可以編寫一個(gè)查詢天氣的函數(shù),將其注冊為工具,智能體在需要通知用戶時(shí),就能自動(dòng)調(diào)用這個(gè)工具查詢具體區(qū)域的天氣情況。
from strands import Agent, tool
@tool
defget_user_location() -> str:
"""Get the user's location
"""
# Implement user location lookup logic here
return"Seattle, USA"
@tool
defweather(location: str) -> str:
"""Get weather information for a location
Args:
location: City or location name
"""
# Implement weather lookup logic here
returnf"Weather for {location}: Sunny, 72°F"
agent = Agent(tools=[get_user_location, weather])
# Use the agent with the custom tools
agent("What is the weather like in my location?")
此外,Strands 對 Model Context Protocol(MCP)服務(wù)器的支持,將智能體的工具使用能力推向了新高度。成千上萬的 MCP 服務(wù)器提供了海量的工具資源,智能體可以根據(jù)任務(wù)需求動(dòng)態(tài)調(diào)用這些服務(wù)器上的工具,實(shí)現(xiàn)功能的無限擴(kuò)展。這就好比智能體能夠隨時(shí)訪問一個(gè)龐大的工具超市,按需選取最合適的工具來完成任務(wù)。
(三)提示(Prompt):智能體的 “任務(wù)指揮官”
提示是智能體行動(dòng)的起點(diǎn)和方向指引。開發(fā)者可以通過編寫自然語言提示,明確告訴智能體需要完成的任務(wù),例如回答用戶問題、生成代碼、規(guī)劃旅行等。這些用戶自定義提示就像是給智能體下達(dá)的具體命令,讓智能體明白當(dāng)前任務(wù)的核心目標(biāo)。
from strands import Agent
agent = Agent(
system_prompt=(
"You are a financial advisor specialized in retirement planning. "
"Use tools to gather information and provide personalized advice. "
"Always explain your reasoning and cite sources when possible."
)
)
系統(tǒng)級提示則更側(cè)重于塑造智能體的整體行為風(fēng)格和原則。你可以通過系統(tǒng)提示規(guī)定智能體在回答問題時(shí)保持簡潔明了,或者在處理數(shù)據(jù)時(shí)注重隱私保護(hù)。它為智能體提供了一套通用的行為準(zhǔn)則,確保智能體在各種任務(wù)中都能符合預(yù)期的行為規(guī)范。
開發(fā)者編寫的提示就像是智能體的 “任務(wù)說明書”,清晰的提示能夠引導(dǎo)智能體更準(zhǔn)確地理解任務(wù)并調(diào)用合適的工具和模型來完成它。通過設(shè)計(jì)提示詞,開發(fā)者可以激發(fā)智能體的最大潛力,實(shí)現(xiàn)復(fù)雜多樣的應(yīng)用場景。
Agentic 循環(huán)機(jī)制:智能體的思考與行動(dòng)
Strands 的 Agentic 循環(huán)機(jī)制是智能體工作的核心引擎,讓智能體具備了類似人類的思考和行動(dòng)能力。
在每次循環(huán)中,智能體會(huì)先將當(dāng)前的任務(wù)上下文和可用工具描述提供給大型語言模型(LLM)。LLM 會(huì)根據(jù)這些信息進(jìn)行推理和判斷,它可以決定直接生成自然語言回答,為用戶提供了一系列思考后的回答;也可以規(guī)劃出多個(gè)步驟,將復(fù)雜任務(wù)分解為更小的子任務(wù);還可以對之前的操作進(jìn)行反思,根據(jù)反饋調(diào)整后續(xù)行動(dòng)方向;更有甚者,它會(huì)選擇調(diào)用合適的工具來獲取更多信息或完成實(shí)際操作。
Agentic 循環(huán)機(jī)制
當(dāng) LLM 決定調(diào)用工具時(shí),Strands 會(huì)負(fù)責(zé)執(zhí)行該工具,并將工具返回的結(jié)果再次輸入到 LLM 中。這個(gè)過程不斷重復(fù),直到智能體最終完成任務(wù),并生成最終結(jié)果返回給用戶。整個(gè)循環(huán)機(jī)制充分利用了 LLM 的強(qiáng)大推理、規(guī)劃和適應(yīng)能力,讓智能體能夠在復(fù)雜多變的任務(wù)環(huán)境中靈活應(yīng)對。
例如,在一個(gè)問答場景中,智能體收到用戶關(guān)于 “如何配置 AWS Lambda 函數(shù)” 的問題。首先,LLM 會(huì)根據(jù)提示理解這是一個(gè)技術(shù)配置類問題。然后,它可能會(huì)先調(diào)用一個(gè)檢索工具,在知識(shí)庫中查找相關(guān)的 AWS Lambda 配置文檔。在獲取到文檔后,LLM 會(huì)分析內(nèi)容,并進(jìn)一步調(diào)用代碼生成工具,為用戶提供了一個(gè)示例代碼片段。最后,LLM 將這些信息整合成一個(gè)完整的回答,包括配置步驟和代碼示例,返回給用戶。這一過程生動(dòng)體現(xiàn)了 Agentic 循環(huán)如何驅(qū)動(dòng)智能體動(dòng)態(tài)調(diào)用工具,逐步解決問題。
智能體開發(fā)的優(yōu)勢與特色:高效、靈活、強(qiáng)大
(一)簡化開發(fā)流程:從復(fù)雜到簡約的跨越
與傳統(tǒng)需要開發(fā)者手動(dòng)定義復(fù)雜工作流的智能體開發(fā)框架相比,Strands 借助先進(jìn)模型的原生工具使用和推理能力,實(shí)現(xiàn)了開發(fā)流程的簡化。在以往的開發(fā)模式下,開發(fā)者需要花費(fèi)大量時(shí)間設(shè)計(jì)智能體的工作流,包括如何調(diào)用工具、如何處理工具返回的結(jié)果、如何在不同步驟之間進(jìn)行狀態(tài)轉(zhuǎn)換等。這不僅增加了開發(fā)的復(fù)雜度,還延長了開發(fā)周期。
而使用 Strands,開發(fā)者只需定義清晰的提示和工具列表,Strands 就能自動(dòng)利用模型的推理能力,合理地調(diào)用工具并完成任務(wù)。從定義提示和工具,到在本地測試智能體的行為,再到將其部署到云端,整個(gè)過程可以在極短時(shí)間內(nèi)完成。例如,一個(gè)原本需要數(shù)月才能從原型開發(fā)到生產(chǎn)部署的智能體項(xiàng)目,使用 Strands 后,可能只需幾周甚至幾天就能完成。這不僅大大提高了開發(fā)效率,還讓開發(fā)者能夠更快地響應(yīng)市場需求,加速智能體產(chǎn)品的迭代和創(chuàng)新。
(二)高度的可擴(kuò)展性:智能體功能的無限延伸
工具擴(kuò)展的多元化與深度
- 檢索工具(Retrieve Tool) :通過與 Amazon Bedrock 知識(shí)庫的緊密集成,檢索工具能夠?qū)崿F(xiàn)高效的語義搜索。當(dāng)智能體面對海量的信息資源時(shí),它不再是盲目地遍歷所有數(shù)據(jù),而是利用語義理解能力,精準(zhǔn)定位與當(dāng)前任務(wù)最相關(guān)的文檔或知識(shí)片段。例如,在一個(gè)企業(yè)知識(shí)管理系統(tǒng)中,智能體可以通過檢索工具快速找到與用戶問題相關(guān)的技術(shù)文檔、產(chǎn)品手冊或歷史案例。更進(jìn)一步,對于擁有數(shù)千個(gè)工具的復(fù)雜場景,檢索工具還能通過語義相似性分析,從眾多工具中篩選出最適合當(dāng)前任務(wù)的工具,并將其描述提供給模型。這種方式避免了向模型描述所有工具帶來的信息過載問題,讓智能體能夠更高效地利用工具資源。
- 思考工具(Thinking Tool) :這是智能體的 “深度思考引擎”。它促使模型進(jìn)行多步分析推理,使智能體能夠處理更復(fù)雜、更需要深入思考的任務(wù)。例如,在數(shù)據(jù)分析場景中,智能體需要對一組數(shù)據(jù)進(jìn)行清洗、轉(zhuǎn)換、分析并得出結(jié)果。思考工具會(huì)讓模型逐步思考每一步操作的合理性,先判斷數(shù)據(jù)是否需要清洗,再確定清洗的具體規(guī)則;在轉(zhuǎn)換數(shù)據(jù)時(shí),分析不同的轉(zhuǎn)換方法對結(jié)果的影響;在分析階段,深入挖掘數(shù)據(jù)中的潛在模式和趨勢。通過這種方式,智能體能夠提供更準(zhǔn)確、更有深度的分析結(jié)果,而不是停留在表面的簡單處理。
- 多智能體工具(Multi - Agent Tools) :包括工作流、圖和群體工具,它們構(gòu)成了智能體的 “協(xié)同作戰(zhàn)系統(tǒng)”。
對于復(fù)雜的任務(wù),如大型項(xiàng)目的規(guī)劃與執(zhí)行、多階段的業(yè)務(wù)流程處理等,單一智能體可能難以應(yīng)對。
工作流工具可以讓多個(gè)子智能體按照預(yù)定義的順序依次執(zhí)行任務(wù),就像在一條高效的生產(chǎn)線上,每個(gè)子智能體負(fù)責(zé)一個(gè)特定的加工環(huán)節(jié)。
圖(Graph)工具則更靈活,它允許子智能體之間根據(jù)任務(wù)的依賴關(guān)系動(dòng)態(tài)調(diào)整執(zhí)行順序,形成復(fù)雜的任務(wù)處理網(wǎng)絡(luò)。
而群體工具則模擬了群體智慧,讓多個(gè)子智能體并行工作,共同解決復(fù)雜問題,例如在大規(guī)模數(shù)據(jù)標(biāo)注任務(wù)中,多個(gè)子智能體可以同時(shí)處理不同的數(shù)據(jù)子集,最后匯總結(jié)果。
隨著對 Agent2Agent(A2A)協(xié)議的支持即將上線,多智能體之間的協(xié)作將更加緊密和高效,進(jìn)一步拓展智能體的應(yīng)用邊界。并且已構(gòu)建的 Agent 自身,也可以作為工具來提供其他 Agent 進(jìn)行調(diào)用(Agent as Tools)。
模型與工具的靈活組合:智能體的定制化魔方
- 按需選擇模型與工具 :Strands 提供了豐富的模型和工具資源,開發(fā)者可以根據(jù)具體業(yè)務(wù)場景的需求,自由選擇最合適的模型和工具進(jìn)行組合。例如,在處理中英文混合的文本內(nèi)容時(shí),可以選擇在中文處理上表現(xiàn)更佳的模型,搭配專門處理文本翻譯的工具;在需要快速處理圖像數(shù)據(jù)的場景中,選用高效的圖像識(shí)別模型,并結(jié)合圖像標(biāo)注工具。這種靈活的選擇方式讓智能體能夠精準(zhǔn)匹配各種業(yè)務(wù)需求,實(shí)現(xiàn)最優(yōu)的任務(wù)執(zhí)行效果。
- 深度定制智能體行為 :除了選擇模型和工具,開發(fā)者還能夠深入定制智能體的行為邏輯。你可以根據(jù)業(yè)務(wù)規(guī)則重新定義工具選擇的算法,讓智能體在特定情況下優(yōu)先調(diào)用某些工具;調(diào)整上下文管理方式,控制智能體如何存儲(chǔ)和利用歷史對話信息,以更好地維護(hù)對話的連貫性和相關(guān)性;選擇不同的會(huì)話狀態(tài)和內(nèi)存存儲(chǔ)位置,平衡性能和數(shù)據(jù)安全需求。通過這些定制化操作,開發(fā)者可以打造完全符合特定業(yè)務(wù)要求的智能體,使其在實(shí)際應(yīng)用中發(fā)揮最大價(jià)值。
實(shí)際應(yīng)用案例:從理論到實(shí)踐的蛻變
AWS 內(nèi)部團(tuán)隊(duì)的先行實(shí)踐
在 AWS 內(nèi)部,多個(gè)團(tuán)隊(duì)已經(jīng)率先將 Strands Agents 集成到生產(chǎn)工作流程中,并取得了顯著的成效。
Amazon Q Developer 團(tuán)隊(duì)利用 Strands 構(gòu)建了一個(gè)智能編程助手。這個(gè)助手能夠理解開發(fā)者在編程過程中遇到的問題,自動(dòng)調(diào)用代碼示例生成工具、API 文檔檢索工具等,為開發(fā)者提供精準(zhǔn)的代碼解決方案和編程指導(dǎo)。它大大提高了開發(fā)者的編碼效率,減少了查找資料和調(diào)試代碼的時(shí)間。
AWS Glue 團(tuán)隊(duì)則將 Strands 應(yīng)用于數(shù)據(jù)集成任務(wù)。智能體能夠自動(dòng)規(guī)劃數(shù)據(jù)清洗、轉(zhuǎn)換和加載的流程,調(diào)用相應(yīng)的工具處理數(shù)據(jù)質(zhì)量問題,優(yōu)化數(shù)據(jù)轉(zhuǎn)換邏輯,并將數(shù)據(jù)高效地加載到目標(biāo)數(shù)據(jù)倉庫中。這不僅提高了數(shù)據(jù)集成的準(zhǔn)確性和效率,還降低了人工干預(yù)的需求,提升了整個(gè)數(shù)據(jù)處理流程的穩(wěn)定性。
VPC Reachability Analyzer 團(tuán)隊(duì)借助 Strands 開發(fā)了一個(gè)網(wǎng)絡(luò)故障診斷智能體。當(dāng)用戶報(bào)告網(wǎng)絡(luò)連接問題時(shí),智能體可以自動(dòng)調(diào)用網(wǎng)絡(luò)拓?fù)浞治龉ぞ摺⒙酚杀頇z查工具等,快速定位故障點(diǎn),分析問題原因,并提供詳細(xì)的解決方案。這大大縮短了網(wǎng)絡(luò)故障的診斷和修復(fù)時(shí)間,提高了用戶的網(wǎng)絡(luò)服務(wù)質(zhì)量。
智能體構(gòu)建示例:親手打造你的命名助手
讓我們通過一個(gè)具體的示例,感受使用 Strands 構(gòu)建智能體的魅力。假設(shè)我們要構(gòu)建一個(gè)幫助開源項(xiàng)目命名的智能體。
首先,創(chuàng)建一個(gè)名為 agent.py
的 Python 文件。在文件中,我們引入 Strands 的相關(guān)模塊,并定義使用的模型,例如 Amazon Bedrock 中的 Anthropic Claude 3.7 Sonnet 模型。接著,通過 @tool
裝飾器定義一個(gè)簡單的工具,用于生成基于項(xiàng)目主題的關(guān)鍵詞列表,這將為后續(xù)的命名提供靈感。
然后,編寫提示,告訴智能體我們的任務(wù)是為一個(gè)開源項(xiàng)目命名,項(xiàng)目主題是人工智能輔助開發(fā),目標(biāo)受眾是全棧開發(fā)者。同時(shí),我們還可以提供一個(gè)系統(tǒng)提示,要求智能體生成的名稱要簡潔、有吸引力,并且容易記憶。
最后,運(yùn)行智能體。設(shè)置好 GitHub 個(gè)人訪問令牌等必要的環(huán)境變量后,執(zhí)行代碼,智能體便開始工作。它會(huì)根據(jù)提示調(diào)用模型和工具,經(jīng)過一系列的推理和工具調(diào)用循環(huán),最終輸出一系列符合要求的項(xiàng)目名稱建議,如 “AI 開發(fā)精靈”“全棧智伴” 等。
以下是完整的代碼示例:
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 prompt
tools = domain_name_tools.list_tools_sync() + github_tools
naming_agent = Agent(
system_prompt=NAMING_SYSTEM_PROMPT,
tools=tools
)
# Run the naming agent with the end user's prompt
naming_agent("I need to name an open source project for building AI agents.Response in Chinese")
運(yùn)行這段代碼后,你將看到類似以下的輸出:
建議的項(xiàng)目名稱:AI 開發(fā)精靈、全棧智伴、CodeAI 助手
這個(gè)示例直觀地展示了 Strands 的簡潔性和強(qiáng)大功能,開發(fā)者只需編寫少量代碼,即可快速構(gòu)建出實(shí)用的智能體,解決實(shí)際問題。
部署與可觀測性:智能體的穩(wěn)定運(yùn)行與持續(xù)優(yōu)化
(一)多樣化的部署選項(xiàng)
Strands 支持多種部署目標(biāo),滿足不同場景的需求。開發(fā)者可以選擇在本地環(huán)境中部署智能體,這種方式提供了最大的靈活性和數(shù)據(jù)隱私保護(hù)。例如,對于一些涉及企業(yè)核心機(jī)密數(shù)據(jù)的智能體應(yīng)用,本地部署確保了數(shù)據(jù)不會(huì)離開企業(yè)內(nèi)部網(wǎng)絡(luò),開發(fā)者也能夠方便地進(jìn)行調(diào)試和快速迭代。
同時(shí),Strands 也完美適配 AWS 的云服務(wù)環(huán)境,支持在 AWS Lambda、Fargate 和 EC2 等平臺(tái)上部署。在 AWS Lambda 上,智能體能夠根據(jù)請求量自動(dòng)彈性擴(kuò)展資源。當(dāng)面臨高并發(fā)的用戶請求時(shí),Lambda 會(huì)自動(dòng)增加智能體實(shí)例的數(shù)量,快速處理任務(wù),確保服務(wù)的穩(wěn)定性和響應(yīng)速度;而在請求量較低時(shí),又會(huì)自動(dòng)減少資源占用,降低運(yùn)行成本。在 Fargate 容器中運(yùn)行智能體,則提供了良好的隔離性和可管理性,開發(fā)者可以輕松地更新智能體版本,而不必?fù)?dān)心底層基礎(chǔ)設(shè)施的復(fù)雜性。EC2 則為需要長期運(yùn)行、穩(wěn)定計(jì)算資源的智能體應(yīng)用提供了可靠的支撐。
此外,Strands 還支持四種典型的智能體架構(gòu)。一種是智能體完全在本地運(yùn)行,通過客戶端應(yīng)用與用戶交互,所有工具也在本地環(huán)境中執(zhí)行,這種方式適合對數(shù)據(jù)隱私和本地響應(yīng)速度要求極高的場景。
智能體本地運(yùn)行架構(gòu)
上圖展示了智能體完全在本地運(yùn)行的架構(gòu)。這種架構(gòu)適用于需要高度數(shù)據(jù)隱私保護(hù)的場景,例如企業(yè)內(nèi)部的敏感數(shù)據(jù)處理。客戶端應(yīng)用直接與本地運(yùn)行的智能體交互,所有工具也在本地環(huán)境中執(zhí)行,確保數(shù)據(jù)不會(huì)離開本地網(wǎng)絡(luò)。
另一種是將智能體及其工具部署在 API 后端,通過網(wǎng)絡(luò)對外提供服務(wù),前端應(yīng)用可以通過簡單的 HTTP 請求調(diào)用智能體功能,便于構(gòu)建面向用戶的 Web 或移動(dòng)應(yīng)用。
智能體部署在 API 后端架構(gòu)
上圖展示了智能體及其工具部署在 API 后端的架構(gòu)。這種架構(gòu)適用于需要對外提供服務(wù)的場景,前端應(yīng)用通過 HTTP 請求調(diào)用后端的智能體功能,智能體和工具都部署在云環(huán)境中,例如 AWS Lambda 或 Fargate,能夠根據(jù)請求量自動(dòng)擴(kuò)展資源。
第三種架構(gòu)將智能體循環(huán)與工具執(zhí)行環(huán)境分離,智能體在 Fargate 容器中運(yùn)行,而工具在 Lambda 函數(shù)中執(zhí)行,這種分離實(shí)現(xiàn)了更好的安全性和資源優(yōu)化。
智能體與工具分離部署架構(gòu)
上圖展示了智能體與工具分離部署的架構(gòu)。智能體在 Fargate 容器中運(yùn)行,而工具在 Lambda 函數(shù)中執(zhí)行。這種分離實(shí)現(xiàn)了更好的安全性和資源優(yōu)化,智能體和工具可以在不同的環(huán)境中獨(dú)立擴(kuò)展和管理。
最后一種是客戶端負(fù)責(zé)運(yùn)行部分工具的控制返回模式,智能體在服務(wù)器端運(yùn)行,但部分輕量級工具在客戶端執(zhí)行,減少了服務(wù)器端的負(fù)載,同時(shí)降低了網(wǎng)絡(luò)延遲。
智能體使用混合工具運(yùn)行模式架構(gòu)
上圖展示了智能體使用混合工具運(yùn)行模式的架構(gòu)。智能體在服務(wù)器端運(yùn)行,但部分輕量級工具在客戶端執(zhí)行。這種模式減少了服務(wù)器端的負(fù)載,同時(shí)降低了網(wǎng)絡(luò)延遲,適合需要快速響應(yīng)的場景。
(二)全面的可觀測性
在智能體的運(yùn)行過程中,可觀測性至關(guān)重要。Strands 通過集成 OpenTelemetry(OTEL),為開發(fā)者提供了全方位的可觀測能力。
OpenTelemetry 能夠收集智能體的詳細(xì)軌跡數(shù)據(jù)和各類指標(biāo),如智能體的響應(yīng)時(shí)間、工具調(diào)用的頻率和成功率、模型推理的耗時(shí)等。這些數(shù)據(jù)可以被發(fā)送到任何 OTEL 兼容的后端系統(tǒng),進(jìn)行可視化展示、深度分析和故障排查。例如,通過可視化面板,開發(fā)者可以直觀地看到智能體在不同時(shí)間段的性能表現(xiàn),及時(shí)發(fā)現(xiàn)響應(yīng)時(shí)間過長或工具調(diào)用失敗等問題。
分布式跟蹤功能則為智能體在復(fù)雜架構(gòu)中的問題定位提供了強(qiáng)大支持。它能夠追蹤一個(gè)請求在智能體循環(huán)、工具執(zhí)行環(huán)境、模型推理服務(wù)等多個(gè)組件之間的流轉(zhuǎn)路徑,完整地呈現(xiàn)智能體會(huì)話的全貌。當(dāng)智能體在處理某個(gè)任務(wù)時(shí)出現(xiàn)異常,開發(fā)者可以通過分布式跟蹤快速定位問題發(fā)生的具體環(huán)節(jié),是模型返回了不合理的結(jié)果,還是某個(gè)工具執(zhí)行超時(shí),亦或是智能體循環(huán)中的邏輯錯(cuò)誤。借助日志記錄功能,開發(fā)者還能查看智能體在處理任務(wù)時(shí)的詳細(xì)操作步驟和中間結(jié)果,進(jìn)一步輔助問題診斷和性能優(yōu)化。
例如,通過 OpenTelemetry 收集到的數(shù)據(jù)顯示,某個(gè)智能體在處理圖像識(shí)別任務(wù)時(shí),模型推理耗時(shí)較長。開發(fā)者進(jìn)一步分析發(fā)現(xiàn),是當(dāng)前選用的模型對高分辨率圖像的處理效率較低。于是,開發(fā)者可以嘗試更換更高效的模型,或者對圖像進(jìn)行預(yù)處理降低分辨率,從而優(yōu)化智能體的性能。
開源:共同塑造智能體的未來
Strands Agents SDK 的開源不僅為開發(fā)者提供了強(qiáng)大的工具,更催生了一個(gè)充滿活力的開源社區(qū)。眾多知名企業(yè)如 Anthropic、Meta 等紛紛加入,貢獻(xiàn)代碼、分享經(jīng)驗(yàn)并提出改進(jìn)建議。Anthropic 為 Strands 提供了通過其 API 使用模型的支持,加速了智能體對不同模型的兼容性開發(fā);Meta 則貢獻(xiàn)了 Llama 模型的集成方案,豐富了智能體的模型選擇。
開發(fā)者可以通過訪問 Strands 的 GitHub 倉庫,輕松參與社區(qū)建設(shè)。無論是提交新的功能需求、報(bào)告潛在的軟件缺陷,還是直接貢獻(xiàn)代碼優(yōu)化現(xiàn)有功能,每一份參與都能推動(dòng) Strands 的持續(xù)進(jìn)步。社區(qū)的活躍氛圍和豐富資源,為智能體技術(shù)的創(chuàng)新和發(fā)展提供了肥沃的土壤。
隨著社區(qū)的不斷壯大和技術(shù)的持續(xù)演進(jìn),Strands Agents SDK 有望在更多領(lǐng)域展現(xiàn)其價(jià)值。
總結(jié)
Strands Agents SDK 憑借其清晰的模型 - 工具 - 提示分離架構(gòu)、高效的模型驅(qū)動(dòng)循環(huán)以及與現(xiàn)有 LLM 生態(tài)系統(tǒng)的無縫集成,為開發(fā)者呈現(xiàn)了一種低代碼量、高定制化的智能體開發(fā)范式。它不僅解決了傳統(tǒng)智能體開發(fā)中的復(fù)雜性和高門檻問題,還通過強(qiáng)大的可擴(kuò)展性和靈活的部署選項(xiàng),滿足了多樣化的企業(yè)級應(yīng)用需求。
在實(shí)際案例中,AWS 內(nèi)部團(tuán)隊(duì)的成功實(shí)踐為我們提供了寶貴的參照系。命名助手示例的過程可以看到,很小的代碼量就能讓一個(gè)智能體運(yùn)行起來,開發(fā)體驗(yàn)良好,學(xué)習(xí)曲線較低。而部署與可觀測性相關(guān)內(nèi)容,可以讓我們看到智能體應(yīng)用在企業(yè)級環(huán)境中穩(wěn)定運(yùn)行和持續(xù)優(yōu)化的重要性。Strands 提供的多樣化部署方式和完善的可觀測性功能,為智能體的廣泛應(yīng)用和長期發(fā)展奠定了堅(jiān)實(shí)基礎(chǔ)。通過 OpenTelemetry 等工具,開發(fā)者能夠全面掌控智能體的運(yùn)行狀態(tài),及時(shí)發(fā)現(xiàn)并解決問題,確保智能體能夠始終以最佳狀態(tài)服務(wù)于業(yè)務(wù)需求。這一切極具工程落地的思考。
在 AI 技術(shù)快速演進(jìn)的今天,Strands Agents SDK 無疑為智能體開發(fā)注入了新的活力。它讓更多的開發(fā)者能夠投身于智能體應(yīng)用的創(chuàng)新實(shí)踐,加速 AI 技術(shù)在各行業(yè)的落地生根。
除此以外,我們還可以結(jié)合之前的消息,Google Cloud Next 大會(huì)上提出 A2A 智能體協(xié)議,以及微軟的Azure AI Foundry 支持 A2A 協(xié)議,加上我閱讀 AWS 的文檔看到,這套開源的 Agent 框架也將會(huì)支持 A2A 協(xié)議。至此,A2A 協(xié)議已被三大云計(jì)算巨頭支持,思考一下,云計(jì)算的未來會(huì)有什么格局?云計(jì)算的架構(gòu)會(huì)有什么變化?過去以DB 為中心的傳統(tǒng)信息架構(gòu)是否會(huì)向以AI 模型為智能中心,以Memory(DB 輔助或其他存儲(chǔ)體如向量)為輔的Agent云的形態(tài)發(fā)展?
參考資料
- AWS Open-Sources Strands Agents SDK to Simplify AI Agent Development
- Introducing Strands Agents, an Open Source AI Agents SDK
https://aws.amazon.com/cn/blogs/opensource/introducing-strands-agents-an-open-source-ai-agents-sdk/
- 開源倉庫
https://github.com/strands-agents/https://github.com/strands-agents/sdk-python
https://github.com/strands-agents/agent-builder
https://github.com/strands-agents/tools
https://github.com/strands-agents/mcp-server