之前探討了AI Agentic Application的Design Pattern,在開始接觸Agentic這類新型態的應用服務設計後,就會開始想嘗試寫一寫自己的Application。今天簡單分享一個我用大約2–3小時Code出來的一個雛形,仿效GPT Agent。
To read the English version, click the “ENGLISH” button at the top-right menu.
可以閱讀兩分鐘AI產生的語音,快速了解綱要與結論介紹。(但資源限制可能影響頁面Render效能)
這篇文章是關於:
你是不是也覺得 AI Agent 這個概念超酷的?一個AI Agent,不單單只是一個聊天的視窗。
他不只像是可以思考,還能幫你執行一些工作,最後給你一些彙整與結果。
從最基本的概念開始,做一個AI Agentic Application來探討實際上他實作的方法與要點。
這裡我們以GPT Agent為對象也去實作一個自己的AI Agent,從這個簡單實例當中清楚感受到AI Agent很常見的幾大要素:Reasoning (推理)、Planning (規劃)、Tool Use (工具使用)。
也延伸思考可以繼續細化這個服務的幾個面向:Memory (記憶)、Reflection (反思 / 自我修正)、Perception (感知)。
這很有趣,如果你仔細觀察,會發現我們從一開始接觸 GPT 的時候,它就已經是個 Agent 了。它不只會回答你的問題,還會根據你的需求,去執行一系列的推理、規劃和使用工具的動作。
希望這個簡單的介紹能讓你對 AI Agent 有更深的認識,歡迎隨時一起交流,繼續探索這個有趣的世界!
1. 實驗製作一個 AI 代理 – 類GPT Agent
這次實驗製作的案例是「提供一個Agent」可以自動化應對處理User想要的操作(Intent to Action),類似GPT Agent的服務場景。
實際Demo展示的是關於一個使用者的發問
「很想去那很美麗美麗的海島喔 會在日本嗎?」
運作結果如下(中間約有幾秒畫面停留是技術問題的等待,可以略過):
短時間做出的Demo,大約只花了2-3小時去安排一些技術串聯,還有很多細節還可以精進,使用的Tool也不多。但透過這個Demo效果已經可以看出類似GPT Agent的運行效果。
- 將使用者意圖推理 (LLM,Intent Reasoning)
- 將推理結果分拆成Action (LLM,Planning,Intent to Action)
- 分拆成Action的過程或結果,必須進行對應的Tool配置參考(Match Tool Definition)
- 根據Actions一步步執行,如果有Tool則調度Tool (Execution Loop)
- 搜集每一個Action的結果(Screenshot與Text Extraction)
- 最後融合成一份報告(LLM,Summary Generation)
經過LLM的Reasoning與Planning拆解,變成結構化的Action,並且Fit所給出的Tool Definition。
根據上面的Actions,逐步執行Tool,並且進行必要的搜集。(我給的要求是截圖以及搜集最後的Html Content)
透過Tool得到的最後結果(截圖以及搜集最後的Html Content)
再次LLM進行,根據之前搜集的Result產出摘要與中英文版本。形成最後Report。
2. 此次 AI 代理的設計要點
這類的Agentic重點在於:
- Reasoning & Planner:一個AI Model Play的 Core-Component,在這裡他扮演的是Reasoning & Planner(我這邊使用Gemini),根據Prompt的設計他會分析使用者意圖計畫成對應實務操作(Intent to Action)。
- Tool Use:另一個重點則是配置對應適合的Tool,可以滿足這些「意圖展換成操作(Intent to Action)」,我在這裡配置一個Browser操作Tool。
- Tool Use Match:這中間還要有一個很好的適配,將Action規範或Match成Tool Use的文字,使得最後展現可以良好的調度操作而完成一系列模擬使用者操作的自動化。
3. 此次 AI 代理的雛形代碼
主要的Reasoning、Planning、Execution調度
Reasoning、Planning的部分,簡單的用Prompt來要求。
也包含Tool match的參考資訊與要求
最後把Execution執行完畢by iteration
4. 近一步思考AI Agent核心要點
可以從以前這一篇 ReAct: Synergizing Reasoning and Acting in Language Models by Shunyu Yao, Jeffrey Zhao, Dian Yu, Nan Du, Izhak Shafran, Karthik Narasimhan, Yuan Cao 回憶起。
ReAct: Synergizing Reasoning and Acting in Language Models
https://arxiv.org/abs/2210.03629
簡單的實驗與比較四種不同模式,怎麼應對、拆解使用者的Intent。
展示了ReAct的優點。
探討多種方式的成效評估,在最基本的單一Standard(Normal Prompt)、ReAct or CoT效果有限下,做了混合實驗CoT-SC+ReAct or ReAct+CoT-SC,可以透過更多的步數Iteration取得更好的結果準確率。
也提及到最終是要混合內外部知識來提升結果,畢竟大模型本身訓練的資料是限制於過去某一個時刻。
而在CoT方面,雖然CoT-SC已經提升了CoT,但是很容易出現幻覺是個傳統問題,畢竟他只是內部不停循環,而ReAct的Action可以混合內外部,包含引進外部最新知識是一大優點。
這兩個的混合成為更有效的方法。
這一篇給了很多啟發,回想現在所謂的Agent,或說有了AI的後Software時代,到底本質上因為哪些核心而有了差異?顯而易見Agent時代最核心的在於因為AI(大部分是LLM),在軟體內可以扮演更多的角色,而擺脫了以往軟體只能扮演Rule-base的角色。我們不再基於大量的Rule-base,改而基於LLM、基於機率,讓關鍵元件產生了多元性。
以下幾點關鍵角色是很核心也很常見的,他可以形成基本的Agent應用:
- Reasoning (推理):Agent 可以透過推理來理解用戶意圖、分析環境狀態、評估不同行動的潛在結果、診斷問題,以及判斷何時需要或如何使用工具。
- Planning (規劃):根據推理的結果進一步產生行動的藍圖。基於推理,Agent 能夠將一個高層次的目標分解成一系列連貫、有序且可執行的子步驟。並且考量了實際的Tool Use,進行文字上的串連。
- Tool Use (工具使用):重要的Ability拓展,因為有了不同的工具,也才能讓LLM不再只是文字上的形式,可以調度不同的工具,結合不同的成果,讓整個應用更有價值。
更近一步,我們可以強化以下幾個方向,來反覆推升我們應用的品質與深度:
- Memory (記憶):單純的推理、規劃和工具使用僅局限於單次的操作,可記憶的LLM很重要的特性,而且對於記憶的管理,以及如何有效壓縮、提取關鍵記憶,都是可以進一步深化的。
- Reflection (反思 / 自我修正):規劃可能出錯,工具使用可能失敗。Agent 需要有能力評估自己的行動和結果。把原本的Flow加上Reflection這一層讓他可以反覆思考以及檢查結果,提出更好的思考與行動。整體上優化最終的輸出。
- Perception (感知):Tool Use 有時雖然也是是獲取資訊的手段,但更廣義的感知(尤其是在多模態 Agent 中)是不可或缺的。包含最近很流行說的Context Engineering,整體背景環境的感知與察覺,可以更優化最終的輸出。
5. 尋找更多的AI Agent應用
關於Agentic應用,也可以參考一些有名的github分享,關於各種LLM應用,但裡面會涉及各種API Key要先準備好,以及對應環境。
Shubhamsaboo / awesome-llm-apps
GitHub – Shubhamsaboo/awesome-llm-apps: Collection of awesome LLM apps with AI Agents and RAG using OpenAI, Anthropic, Gemini and opensource models.
Collection of awesome LLM apps with AI Agents and RAG using OpenAI, Anthropic, Gemini and opensource models. – Shubhamsaboo/awesome-llm-apps
6. 下一步如何持續演進?
這很有意思,基本上可以這樣實現大部分的自動化代理,最後就是每個情境、每個細節的打磨,我想這也是這類應用的決勝點。比如:
- Reasoning:如何精準到位,闡釋各種使用者意圖,進行正確的推理。
- Planner:如何將推理解析成正確又合理的Action。
- Tool Use:Tool不只豐富,還能讓Planner挑選到最適合的Tool。
- 流程的細化:例如Planner之前再加一個Router played by LLM做Intention分類,或是整個流程疊加Reflection / Evaluator-Optimizer可以進行思考、優化疊加的Iteration。
- 延伸:更多的工具整合與提供(例如整合Google Workaspce、生產工具)
以上,簡單用2-3個小時做這個實驗,寫下這篇簡易的分享。
在這裡我還沒有使用任何Framework or SDK,後續可以加快速度參考LangChain、LangGraph、Google Agent SDK、GPT Agent SDK…他們在每個面向都有成熟的元件可以立即使用。
事實上所有的大模型提供的ChatBot也已經是一種Agent Design。
Post Views: 77