使用Agno實(shí)現(xiàn)AI代理設(shè)計的五個層級,由易到難
AI代理設(shè)計指南
本指南將代理設(shè)計分解為五個實(shí)際難度級別,每個級別均提供可運(yùn)行的代碼示例。
無論開發(fā)者是初學(xué)者還是處理現(xiàn)實(shí)世界的復(fù)雜任務(wù),本指南都能幫助避免常見陷阱,構(gòu)建真正有效的代理。
這些級別包括:
?級別1:帶工具和指令的代理?級別2:帶知識和記憶的代理?級別3:帶長期記憶和推理的代理?級別4:多代理團(tuán)隊?級別5:代理系統(tǒng)
以下逐一介紹各級別。
圖片
級別1:帶工具和指令的代理
此級別為基礎(chǔ)設(shè)置,涉及一個遵循指令并在循環(huán)中調(diào)用工具的大語言模型(LLM)。當(dāng)提到“代理是LLM加上工具使用”時,通常指這一級別,反映了基礎(chǔ)但功能有限的實(shí)現(xiàn)。
圖片
指令明確代理的任務(wù),工具賦予其行動能力,例如獲取數(shù)據(jù)、調(diào)用API或觸發(fā)工作流程。盡管簡單,此設(shè)置已足以自動化某些任務(wù)。
from agno.agent importAgent
from agno.models.openai importOpenAIChat
from agno.tools.duckduckgo importDuckDuckGoTools
agno_assist =Agent(
name="Agno AGI",
model=OpenAIChat(id="gpt-4.1"),
descriptinotallow=dedent("""\
Agno AGI是一個利用Agno框架構(gòu)建代理的自主AI代理。其目標(biāo)是通過提供解釋、可運(yùn)行的代碼示例以及可選的視覺和音頻解釋,幫助開發(fā)者理解和使用Agno的關(guān)鍵概念。"""),
instructinotallow="搜索網(wǎng)絡(luò)以獲取關(guān)于Agno的信息。",
tools=[DuckDuckGoTools()],
add_datetime_to_instructinotallow=True,
markdown=True,
)
agno_assist.print_response("Agno是什么?", stream=True)
級別2:帶知識和記憶的代理
許多任務(wù)需要模型不具備的外部信息。由于上下文容量有限,代理需在運(yùn)行時獲取知識,這通過代理式RAG或動態(tài)少樣本提示實(shí)現(xiàn)。
圖片
搜索采用混合模式(全文+語義),并需重新排序。混合搜索結(jié)合重新排序是代理式檢索的最佳即插即用方案。
存儲功能為代理提供記憶。LLM默認(rèn)無狀態(tài),存儲過去的行動、消息和觀察結(jié)果使代理具備狀態(tài),能夠參考?xì)v史信息并優(yōu)化決策。
... imports
# 可參考 https://docs.agno.com/llms-full.txt 獲取完整文檔
knowledge_base =UrlKnowledge(
urls=["https://docs.agno.com/introduction.md"],
vector_db=LanceDb(
uri="tmp/lancedb",
table_name="agno_docs",
search_type=SearchType.hybrid,
embedder=OpenAIEmbedder(id="text-embedding-3-small"),
reranker=CohereReranker(model="rerank-multilingual-v3.0"),
),
)
storage =SqliteStorage(table_name="agent_sessions", db_file="tmp/agent.db")
agno_assist =Agent(
name="Agno AGI",
model=OpenAIChat(id="gpt-4.1"),
descriptinotallow=...,
instructinotallow=...,
tools=[PythonTools(),DuckDuckGoTools()],
add_datetime_to_instructinotallow=True,
# 當(dāng)提供“knowledge”時,默認(rèn)啟用代理式RAG
knowledge=knowledge_base,
# 將代理會話存儲在sqlite數(shù)據(jù)庫中
storage=storage,
# 將聊天歷史添加到消息中
add_history_to_messages=True,
# 歷史運(yùn)行次數(shù)
num_history_runs=3,
markdown=True,
)
if __name__ =="__main__":
# 加載知識庫,首次運(yùn)行后可注釋
# agno_assist.knowledge.load(recreate=True)
agno_assist.print_response("Agno是什么?", stream=True)
級別3:帶長期記憶和推理的代理
長期記憶使代理能夠跨會話回憶細(xì)節(jié),例如用戶偏好、過去行為或失敗嘗試,并隨時間適應(yīng),從而實(shí)現(xiàn)個性化和連續(xù)性。自我學(xué)習(xí)——基于過去經(jīng)驗優(yōu)化行為——是此級別的重要潛力。
圖片
推理能力進(jìn)一步提升代理表現(xiàn),幫助分解問題、優(yōu)化決策并更可靠地執(zhí)行多步驟指令。推理不僅關(guān)乎理解,還能提高每一步的成功率,是嚴(yán)肅代理開發(fā)者必須掌握的核心技能。
... imports
knowledge_base =...
memory =Memory(
# 使用任意模型創(chuàng)建記憶
model=OpenAIChat(id="gpt-4.1"),
db=SqliteMemoryDb(table_name="user_memories", db_file="tmp/agent.db"),
delete_memories=True,
clear_memories=True,
)
storage =...
agno_assist =Agent(
name="Agno AGI",
model=Claude(id="claude-3-7-sonnet-latest"),
# 用于記憶的用戶ID
user_id="ava",
descriptinotallow=...,
instructinotallow=...,
# 賦予代理推理能力
tools=[PythonTools(),DuckDuckGoTools(),
ReasoningTools(add_instructinotallow=True)],
...
# 將記憶存儲在sqlite數(shù)據(jù)庫中
memory=memory,
# 讓代理管理其記憶
enable_agentic_memory=True,
)
if __name__ =="__main__":
# 首次運(yùn)行后可注釋,代理會記住
agno_assist.print_response("總是以‘hi ava’開始你的消息", stream=True)
agno_assist.print_response("Agno是什么?", stream=True)
級別4:多代理
代理在專注于單一領(lǐng)域并配備精簡工具集(理想少于10個)時表現(xiàn)最佳。為應(yīng)對復(fù)雜或廣泛任務(wù),可將多個代理組成團(tuán)隊,每個代理處理問題的一部分,共同覆蓋更廣領(lǐng)域。
圖片
然而,若團(tuán)隊領(lǐng)導(dǎo)者缺乏強(qiáng)大推理能力,處理細(xì)微問題時易失敗。當(dāng)前,自主多代理系統(tǒng)的可靠性不足,成功率低于50%,尚無法滿足實(shí)際需求。
某些架構(gòu)可簡化協(xié)調(diào)。例如,Agno支持協(xié)調(diào)、路由和協(xié)作三種執(zhí)行模式,并提供內(nèi)置的記憶和上下文管理。謹(jǐn)慎設(shè)計仍不可或缺,但這些功能使多代理工作更具可行性。
... imports
web_agent =Agent(
name="Web Search Agent",
role="處理網(wǎng)頁搜索請求",
model=OpenAIChat(id="gpt-4o-mini"),
tools=[DuckDuckGoTools()],
instructinotallow="始終包含來源",
)
finance_agent =Agent(
name="Finance Agent",
role="處理金融數(shù)據(jù)請求",
model=OpenAIChat(id="gpt-4o-mini"),
tools=[YFinanceTools()],
instructinotallow=[
"你是一個金融數(shù)據(jù)專家。提供簡潔準(zhǔn)確的數(shù)據(jù)。",
"使用表格展示股票價格、基本面(市盈率、總市值)",
],
)
team_leader =Team(
name="Reasoning Finance Team Leader",
mode="coordinate",
model=Claude(id="claude-3-7-sonnet-latest"),
members=[web_agent, finance_agent],
tools=[ReasoningTools(add_instructinotallow=True)],
instructinotallow=[
"使用表格展示數(shù)據(jù)",
"僅輸出最終答案,不包含其他文本。",
],
show_members_respnotallow=True,
enable_agentic_cnotallow=True,
add_datetime_to_instructinotallow=True,
success_criteria="團(tuán)隊已成功完成任務(wù)。",
)
if __name__ =="__main__":
team_leader.print_response(
"""\
分析近期美國關(guān)稅對以下關(guān)鍵行業(yè)市場表現(xiàn)的影響:
-鋼鐵和鋁業(yè):(X, NUE, AA)
-技術(shù)硬件:(AAPL, DELL, HPQ)
對每個行業(yè):
1.比較關(guān)稅實(shí)施前后的股票表現(xiàn)
2.識別供應(yīng)鏈中斷和成本影響百分比
3.分析公司的戰(zhàn)略應(yīng)對(回岸生產(chǎn)、價格調(diào)整、供應(yīng)商多元化)""",
stream=True,
stream_intermediate_steps=True,
show_full_reasnotallow=True,
)
級別5:代理系統(tǒng)
代理系統(tǒng)標(biāo)志著代理從工具轉(zhuǎn)變?yōu)榛A(chǔ)設(shè)施。此級別涉及完整API,接受用戶請求,啟動異步工作流程,并流式返回生成的結(jié)果。
圖片
理論上流程清晰,實(shí)際操作極具挑戰(zhàn)。需在請求時持久化狀態(tài),啟動后臺作業(yè),跟蹤進(jìn)度,并流式輸出結(jié)果。WebSocket可提供支持,但擴(kuò)展和維護(hù)難度較大,后端復(fù)雜性常被低估。
這一級別是將代理轉(zhuǎn)化為實(shí)際產(chǎn)品的關(guān)鍵,不僅是構(gòu)建功能,而是打造完整系統(tǒng)。
從失敗到成功:代理設(shè)計的關(guān)鍵經(jīng)驗教訓(xùn)
構(gòu)建AI代理的核心在于夯實(shí)基礎(chǔ),而非追逐潮流或堆砌功能。從基本工具使用到完全異步的代理系統(tǒng),每一級別需建立在穩(wěn)固的架構(gòu)之上,方能增強(qiáng)能力。
失敗往往源于忽視基礎(chǔ)原則:清晰的模塊邊界、扎實(shí)的推理、有效的記憶管理,以及適時引入人工干預(yù)。
通過從簡單開始,逐步有針對性地增加復(fù)雜性,僅在解決實(shí)際問題時引入新功能,開發(fā)者能夠構(gòu)建出不僅有趣且真正可靠的代理系統(tǒng)。