iT邦幫忙

2025 iThome 鐵人賽

DAY 6
0
生成式 AI

Multi-Agent 實戰:開發多代理智慧小幫手系列 第 6

【Day 06】 用 FastAPI 模擬一個 問候 Agent

  • 分享至 

  • xImage
  •  

這一篇,我們將結合 FastAPI 的基礎,來製作第一個屬於自己的簡單小 Agent。這個 Agent 雖然簡單,但它將具備「感知」、「決策」和「行動」的核心特徵,讓我們能親身體驗 Agent 的運作方式。

回顧 Agent 的核心特徵

在開始實作之前,讓我們來快速回顧 Agent 的三個核心特徵:

  1. 感知環境 (Perception):Agent 能夠獲取外部資訊。
  2. 決策與行動 (Decision & Action):Agent 根據感知到的資訊做出判斷並執行操作。
  3. 目標導向 (Goal-Oriented):Agent 的所有行為都為了達成特定目標。

我們的第一個小 Agent 將會是一個「簡單的問候 Agent」。它的目標是根據接收到的名字,回傳一個客製化的問候語。

我們的第一個小 Agent:問候 Agent

這個問候 Agent 的運作邏輯如下:

  • 目標:根據輸入的名字,回傳一個友善的問候語。
  • 感知:透過 API 接收使用者提供的「名字」。
  • 決策:判斷名字是否為空值,並決定回傳哪種問候語。
  • 行動:回傳包含名字的問候訊息。

我們將使用 FastAPI 來實現這個 Agent 的 API 介面。

實作:問候 Agent 的 FastAPI 程式碼

在你的專案資料夾中,建立一個名為 HelloAgent.py 的檔案,並輸入以下程式碼:

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel

app = FastAPI(
    title="問候 Agent API",
    description="一個簡單的 AI Agent,用於生成客製化問候語。",
    version="1.0.0",
)

class GreetingRequest(BaseModel):
    name: str

@app.post("/greet")
async def greet_user(request: GreetingRequest):
    """
    呼叫問候 Agent,根據提供的名字回傳客製化問候語。
    """
    try:
        # 1. 感知環境:接收到請求中的名字
        user_name = request.name

        # 2. 決策與行動:根據名字生成問候語
        greeting_message = generate_greeting(user_name)

        # 3. 目標導向:回傳問候語以完成「問候」的目標
        return {"greeting": greeting_message}
    except Exception as e:
        raise HTTPException(status_code=500, detail=f"發生錯誤:{e}")
    
# 定義問候 Agent 的核心邏輯函式
def generate_greeting(name: str) -> str:
    """
    根據輸入的名字生成一個問候語。
    """
    if not name:
        # 如果名字為空,則回傳通用問候
        return "Hello there! What's your name?"
    else:
        # 如果有名字,則回傳客製化問候
        return f"Hello, {name}! Nice to meet you."

程式碼解析:Agent 特徵的體現

讓我們看看這段程式碼如何體現 AI Agent 的核心特徵:

  • 感知環境 (Perception)

    • @app.post("/greet") 定義了一個 API 端點,它會接收外部傳來的 HTTP 請求。
    • request: GreetingRequest 表示 Agent 期望接收一個包含 name 欄位的資料物件。當有請求進來時,FastAPI 會自動解析請求主體,將 name 值提取出來,這就是 Agent 的「感知」過程。
  • 決策與行動 (Decision & Action)

    • generate_greeting(user_name) 的函式是 Agent 的「決策」核心。它會判斷 user_name 是否為空。
    • 接著根據判斷的結果,它會「行動」:生成不同的問候語 ("Hello there! What's your name?""Hello, {name}! Nice to meet you.")。
    • 最後 return {"greeting": greeting_message} 則是 Agent 將其「行動」結果回傳給呼叫者。
  • 目標導向 (Goal-Oriented)

    • 整個 greet_user 函式的設計,都是為了達成「根據輸入的名字,回傳一個友善的問候語」這個明確的目標。無論輸入是什麼,Agent 都會努力回傳一個問候語。

運行你的問候 Agent

在終端機中,切換到你的專案資料夾,然後執行以下指令:

uvicorn HelloAgent:app --host 127.0.0.1 --port 5678 --reload

當看到伺服器啟動訊息後,問候 Agent 就已經開始運行了
image

測試你的問候 Agent

接著來測試 Agent,打開網頁瀏覽器,訪問:

  • http://localhost:5678/docs

你會看到自動生成的 API 文件。
image

測試 POST 請求 (標準 Agent 模擬互動方式)

  1. 找到 /greet 這個 POST。
  2. 點擊「Try it out」
  3. 在 Request body 中,你會看到一個範例 JSON:
    {
      "name": "string"
    }
    
    image
  4. "string" 改成你的名字 (例如 "Bob"):
    {
      "name": "Bob"
    }
    
    image
  5. 點擊「Execute」後會看到回傳 {"greeting": "Hello, Bob! Nice to meet you."}
    image
  • name 留空並點擊「Execute」後則會是顯示 Hello there! What's your name?
    image
    • 這裡要注意是
          {
            "name": ""
          }
      
      不是
          {
            "name": " "
          }
      
      • "" (空字串) 才算空值," " (一個空白)還是會被視為有內容

這樣我們就成功的模擬並運行了第一個模擬的 Agent 了。雖然它只是一個簡單的問候 Agent,但它完整地展示了 Agent 的核心運作流程:感知、決策、行動,並透過 API 實現了與外部世界的互動。
這個基礎非常重要,因為未來我們所有的複雜 Agent,都可能建立在類似的邏輯上。


上一篇
【Day 05】第一支 FastAPI 的小程式
下一篇
【Day 07】 用 FastAPI 模擬一個 天氣 Agent
系列文
Multi-Agent 實戰:開發多代理智慧小幫手12
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言