這一篇,我們將結合 FastAPI 的基礎,來製作第一個屬於自己的簡單小 Agent。這個 Agent 雖然簡單,但它將具備「感知」、「決策」和「行動」的核心特徵,讓我們能親身體驗 Agent 的運作方式。
在開始實作之前,讓我們來快速回顧 Agent 的三個核心特徵:
我們的第一個小 Agent 將會是一個「簡單的問候 Agent」。它的目標是根據接收到的名字,回傳一個客製化的問候語。
這個問候 Agent 的運作邏輯如下:
我們將使用 FastAPI 來實現這個 Agent 的 API 介面。
在你的專案資料夾中,建立一個名為 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."
讓我們看看這段程式碼如何體現 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 都會努力回傳一個問候語。在終端機中,切換到你的專案資料夾,然後執行以下指令:
uvicorn HelloAgent:app --host 127.0.0.1 --port 5678 --reload
當看到伺服器啟動訊息後,問候 Agent 就已經開始運行了
接著來測試 Agent,打開網頁瀏覽器,訪問:
http://localhost:5678/docs
你會看到自動生成的 API 文件。
/greet
這個 POST。{
"name": "string"
}
"string"
改成你的名字 (例如 "Bob"
):
{
"name": "Bob"
}
{"greeting": "Hello, Bob! Nice to meet you."}
name
留空並點擊「Execute」後則會是顯示 Hello there! What's your name?
{
"name": ""
}
不是
{
"name": " "
}
""
(空字串) 才算空值," "
(一個空白)還是會被視為有內容這樣我們就成功的模擬並運行了第一個模擬的 Agent 了。雖然它只是一個簡單的問候 Agent,但它完整地展示了 Agent 的核心運作流程:感知、決策、行動,並透過 API 實現了與外部世界的互動。
這個基礎非常重要,因為未來我們所有的複雜 Agent,都可能建立在類似的邏輯上。