本教學課程示範如何將代理程式功能新增到現有的資料驅動型 FastAPI CRUD 應用程式。 它採用兩種不同的方法:LangGraph 與 Foundry Agent Service。
如果你的網頁應用程式已有實用功能,例如購物、飯店預訂或資料管理,透過外掛(LangGraph)或 OpenAPI 端點(Foundry Agent Service)來加入代理功能相對簡單。 本教學課程會從簡單的待辦事項清單應用程式開始。 最後,您將能夠在 App Service 應用程式使用代理程式建立、更新和管理工作。
LangGraph 與 Foundry Agent Service 皆能讓你打造具備 AI 驅動功能的代理型網頁應用程式。 LangGraph 類似於 Microsoft Agent Framework,是一個 SDK。 下表列出幾種考量和取捨方向:
| 考量事項 | LangGraph 或 Microsoft 代理框架 | 鑄造代理服務 |
|---|---|---|
| Performance | 快速 (在本機執行) | 較慢 (受控的遠端服務) |
| 發展 | 完整程式碼,最大控制權 | 低度程式碼,快速整合 |
| Testing | 在程式碼進行手動/單元測試 | 內建環境,可快速測試 |
| Scalability | 應用程式受控 | Azure 受控、自動調整 |
| 安全護欄 | 需要自訂實作 | 內建內容安全與管理 |
| 身份 | 需要自訂實作 | 內建代理識別碼與認證 |
| Enterprise | 自訂整合需求 | 內建 Microsoft 365/Teams 部署及 Microsoft 365 整合工具的呼叫功能。 |
在本教學課程中,您將瞭解如何:
- 將現有應用程式功能轉換為 LangGraph 的外掛程式。
- 將外掛程式新增至 LangGraph 代理程式,並在 Web 應用程式使用。
- 將現有應用程式功能轉換為 Foundry Agent Service 的 OpenAPI 端點。
- 在網頁應用程式中打電話給 Foundry 的代理人。
- 指派受控身分識別連線所需的權限。
先決條件
- 包含作用中訂用帳戶的 Azure 帳戶 - 建立免費帳戶。
- 以 GitHub 帳戶使用 GitHub Codespaces - 深入瞭解 GitHub Codespaces。
以 Codespaces 開啟範例
最簡單的開始方式是使用 GitHub Codespaces,它提供完整的開發環境,並預先安裝所有必要工具。
前往 GitHub 存放庫,網址為 https://github.com/Azure-Samples/app-service-agentic-langgraph-foundry-python。
選取 [程式碼] 按鈕,選取 [Codespaces] 索引標籤,然後選取 [在主頁建立 codespace]。
稍候片刻,讓 Codespace 初始化。 準備就緒後,您會在瀏覽器看到已完整設定的開發環境。
在本機執行應用程式:
python3 -m venv venv source venv/bin/activate pip install -r requirements.txt uvicorn src.app:app --host 0.0.0.0 --port 3000看到 [您在連接埠 3000 執行的應用程式已可用] 時,請選取 [在瀏覽器中開啟] 並新增幾項工作。
代理程式尚未完全設定,因此還無法運作。 您稍後會設定它們。
檢視代理程式的程式碼
這兩種方法都使用相同的實作模式,不過代理程式是在應用程式啟動時初始化,並透過 POST 請求回應使用者訊息。
LangGraphTaskAgent 是在 src/agents/langgraph_task_agent.py 的建構函式初始化。 初始化程式碼會執行下列動作:
- 使用環境變數設定 AzureChatOpenAI 用戶端。
- 建立預建的 ReAct 代理程式,並附有記憶體及一組 CRUD 工具用於任務管理(參見 LangGraph 快速入門)。
- 選擇一個伺服器管理的對話線程作為已驗證的樣本。
self.memory = InMemorySaver()
# App Service authentication protects this sample, which intentionally
# keeps one server-managed conversation thread per worker process.
self.thread_id = "authenticated-conversation"
try:
endpoint = os.getenv("AZURE_OPENAI_ENDPOINT")
deployment_name = os.getenv("AZURE_OPENAI_DEPLOYMENT_NAME")
if not endpoint or not deployment_name:
print("Azure OpenAI configuration missing for LangGraph agent")
return
# Initialize Azure OpenAI client
credential = DefaultAzureCredential()
azure_ad_token_provider = get_bearer_token_provider(
credential, "https://cognitiveservices.azure.com/.default"
)
self.llm = AzureChatOpenAI(
azure_endpoint=endpoint,
azure_deployment=deployment_name,
azure_ad_token_provider=azure_ad_token_provider,
api_version="2024-10-21"
)
# Define tools
tools = [
self._create_task_tool(),
self._get_tasks_tool(),
self._get_task_tool(),
self._update_task_tool(),
self._delete_task_tool()
]
# Create the agent
self.agent = create_react_agent(self.llm, tools, checkpointer=self.memory)
處理使用者訊息時,代理程式會使用由伺服器管理的執行緒 ID 呼叫 ainvoke():
config = {"configurable": {"thread_id": self.thread_id}}
# Process the message
result = await self.agent.ainvoke(
{"messages": [("user", message)]},
config=config
)
瀏覽器請求僅包含訊息。 它無法透過提供會話或對話識別碼來選擇其他執行緒。
部署範例應用程式
範例儲存庫包含一個 Azure 開發者 CLI(AZD)範本,該範本可建立 App Service 應用程式並部署您的範例應用程式。 App Service 系統指派的管理身份會保留給 Azure AI 外撥通話。 獨立的使用者指派的受控識別與同盟識別認證,可讓 App Service 驗證做為產生的 Microsoft Entra 應用程式,而無需用戶端秘密。
在終端機中,請使用 Azure Developer CLI 登入Azure:
azd auth login請遵循指示來完成驗證程式。
使用 AZD 範本部署 Azure App 服務 應用程式:
azd up出現提示時,請提供下列答案:
Question 回答 輸入新的環境名稱: 輸入唯一名稱。 選取要使用的 Azure 訂用帳戶: 選取訂用帳戶。 挑選要使用的資源群組: 選取 [建立新的資源群組]。 選取要建立資源群組的位置: 選取 [瑞典中部]。 輸入新資源群組的名稱: 輸入 Enter。 在 AZD 輸出中,找到您應用程式的 URL,然後在瀏覽器中打開該 URL。 另外,請複製 Foundry OpenAPI 管理身份受眾 的值以備後用。 輸出看起來像這樣:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: <URL> Foundry OpenAPI managed identity audience: api://<generated-client-id>當 Microsoft 提示你時,請用部署租戶中的帳號登入,並確認任務清單是否載入。
在同一個認證過的瀏覽器中,附加
/openapi.json到 App Service 端點。 複製或儲存產生的 OpenAPI 架構以備後用。備註
App Service 驗證會對未認證的瀏覽器要求傳回 HTTP 302 重新導向。 此範例包含瀏覽器介面與 API,因此重定向提供可用的登入體驗。 僅支援 API 的應用程式通常會使用 HTTP 401。
建立並設定 Microsoft Foundry 資源
在 Foundry 入口網站中,建立一個專案。
部署你選擇的模型(參見 Microsoft Foundry 快速入門:建立資源)。
從模型遊樂場頂端複製模型名稱。
在首頁複製 Azure OpenAI 端點以備後用。
指派所需的權限
在 Foundry 入口網站中,請在頂方選單選擇 管理 。
在 專案詳細資料 中,選取您的專案的 父資源,然後選取 在 Azure 入口網站中開啟。
從 Azure 入口網站,你可以為該資源指派基於角色的存取權限。
為 App Service 應用程式的受控識別以及您搭配
az login使用的使用者新增以下角色:目標資源 必要角色 所需 鑄造廠 認知服務 OpenAI 使用者 Microsoft Agent Framework 中的聊天完成服務。 如需操作指示,請參閱使用 Azure 入口網站指派 Azure 角色。
在範例應用程式設定連線變數
開啟 .env。 利用你之前從 Foundry 入口複製的數值,設定以下變數:
Variable Description AZURE_OPENAI_ENDPOINTAzure OpenAI 端點(從 Foundry 入口網站首頁複製)。 AZURE_OPENAI_DEPLOYMENT_NAME部署中的模型名稱 (從新 Foundry 入口網站的模型遊樂場複製)。 備註
為簡化教學課程,您會在 .env 使用這些變數,而不是在 App Service 使用應用程式設定覆寫變數。
備註
為簡化教學課程,您會在 .env 使用這些變數,而不是在 App Service 使用應用程式設定覆寫變數。
.env 裡的值用來設定應用程式對 Foundry 的外站連線。
AZURE_AI_FOUNDRY_ACCOUNT_CLIENT_ID會設定獨立的輸入 Foundry 到 App Service 的 OpenAPI 連線,並存放在 AZD 環境中。使用 Azure CLI 登入 Azure:
az login這可讓範例程式碼的 Azure 身分識別用戶端程式庫接收登入使用者的驗證權杖。 別忘了您之前已為此使用者新增了必要角色。
在本機執行應用程式:
source venv/bin/activate uvicorn src.app:app --host 0.0.0.0 --port 3000看到 [您在連接埠 3000 執行的應用程式已可用] 時,請選取 [在瀏覽器中開啟]。
分別驗證兩個樞軸:
- LangGraph: 選擇 LangGraph Agent,並請代理建立任務。 LangGraph 會呼叫進行中的工作工具。
-
Foundry Agent 服務: 選擇 Foundry Agent,並要求代理程式建立任務。 遠端 Foundry 代理程式會使用受控識別來呼叫已部署且受保護的
/api/tasks端點。
Foundry 代理所建立的任務會出現在已部署的 App Service 實例中,而非本地 SQLite 資料庫。 Foundry OpenAPI 工具始終使用嵌入在 OpenAPI 架構中的伺服器 URL。
返回 GitHub codespace 部署應用程式變更。
azd up再次進入已部署的應用程式,測試兩個聊天代理。 瀏覽器只會傳送訊息文字;它不會傳送任何一個客服的會話 ID 或對話 ID。
常見問題
如何為 Foundry 代理程式新增檢索增強生成(RAG)?
本指南指引適用於本教學中的 Foundry Agent 服務 路徑。 它不會改變另一個分頁中顯示的 LangGraph、語意核心 或 Microsoft Agent Framework 實作。
建立或選擇一個 Foundry IQ 知識庫,然後 將該知識庫連接到 Foundry 代理服務代理程式。 連線以管理型 MCP 知識工具的形式暴露給代理。
App Service 程式碼會繼續透過其現有的 Foundry 用戶端和 agent_reference,以名稱叫用相同的代理程式。 這個網頁應用程式不需要直接的 Azure AI 搜尋服務 整合或自己的 MCP 用戶端。 若使用者介面顯示來源,請處理代理回傳的引用註解。
清理資源
操作完應用程式後,您就可以刪除 App Service 資源,以免產生後續成本:
azd down --purge
AZD postdown 掛鉤也會刪除為 App Service 認證所建立的租戶層級 Microsoft Entra 應用程式。
然後,如果該 Foundry 資源是你另外建立的,請將其刪除。