在我們瞭解瞭如何在 Semantic Kernel 中整合語意和原生函式,以及如何建立語義 GPT 介面之後,接下來讓我們實作一個完整的電影推薦服務代理。這個過程將展示如何將理論應用於實踐,構建一個真正有用的 AI 應用。
設計服務代理架構
在設計服務代理時,我採取的架構包含以下幾個部分,這種分層架構使系統更加模組化,便於維護和擴充套件:
- API 連線層:負責與 TMDB API 進行底層通訊。
- 語義服務層 (Plugin):將 API 功能轉換為 Semantic Kernel 可理解的語義函式。
- 對話管理層 (Kernel):處理使用者輸入,並呼叫適當的語義函式。
- 回應生成層 (LLM):根據 API 回傳的資料生成自然語言回應。
擴充套件 TMDB 服務功能
為了建立一個功能完整的電影推薦系統,我們需要擴充套件之前建立的 TMDbService
類別,增加更多功能。例如,一個根據標題搜尋電影的函式:
# 在 TMDbService 類別中新增方法
from semantic_kernel.functions import kernel_function
import requests
class TMDbService:
# ... (省略 __init__ 和其他函式)
@kernel_function(
description="Searches for movies by title",
name="search_movies",
)
def search_movies(self, movie_title: str) -> str:
"""根據電影標題搜尋電影"""
print("執行動畫搜尋...")
base_url = "https://api.themoviedb.org/3"
endpoint = f"{base_url}/search/movie?api_key={self.api_key}&query={movie_title}&language=en-US&page=1"
response = requests.get(endpoint)
if response.status_code == 200:
movies = response.json()['results']
if not movies:
return "找不到符合標題的電影。"
result = "找到了以下電影:\n\n"
for movie in movies[:5]: # 限制結果數量以保持簡潔
title = movie.get('title', 'N/A')
year = movie.get('release_date', 'N/A')[:4]
rating = movie.get('vote_average', 'N/A')
result += f"- {title} ({year}) - 評分: {rating}/10\n"
return result
return "搜尋電影時發生錯誤。"
這個函式允許使用者透過電影標題搜尋電影。它向 TMDB API 傳送搜尋請求,然後將結果格式化為易於閱讀的文字。
整合到聊天介面
要將這個服務整合到聊天介面,我們需要建立一個聊天函式,它可以理解使用者意圖並呼叫適當的 TMDB 服務函式。
import semantic_kernel as sk
# 建立並設定 kernel
kernel = sk.Kernel()
# 假設 TMDbService 已被實例化並註冊為外掛
# kernel.import_plugin_from_object(TMDbService(), "Movies")
# 建立聊天提示範本
chat_prompt = """
你是一個樂於助人的電影助理。你可以推薦電影、搜尋電影,並提供電影相關資訊。
使用者: {{$input}}
請使用以下函式來幫助使用者:
- Movies.search_movies: 根據標題搜尋電影
- Movies.get_top_movies_by_genre: 根據類型取得熱門電影
- Movies.get_movie_details: 取得特定電影的詳細資訊
"""
# 在實際應用中,我們會使用 Planner 或 Function Calling 來自動選擇和呼叫函式
async def chat_with_movies(user_input: str):
# 這裡簡化流程,實際應使用 SK 的規劃器
# ...
pass
電影推薦代理互動流程圖
此時序圖展示了使用者請求電影推薦時,系統內部的完整互動流程。
這個流程展示了從使用者輸入到最終回應的完整鏈路。Semantic Kernel 在其中扮演了核心協調者的角色,它解析使用者意圖,選擇合適的工具(外掛),並將最終結果以自然語言的形式呈現。
結論
這種設計模式展示瞭如何將 API 呼叫封裝在語義函式中,使其能夠透過自然語言被呼叫。透過這種方式,我們可以將任何 API 服務轉換為 GPT 介面,使其能夠與聊天機器人或代理無縫整合。
在實際應用中,這種架構的實用性遠超過簡單的電影推薦。它可以應用於:
- 企業級 AI 客服:整合訂單查詢、產品資訊等內部 API。
- 資料分析助手:將複雜的數據分析流程封裝成簡單的自然語言指令。
- 智慧家庭控制:將各種家電的 API 統一到一個語義層,實現用語音控制一切。
Semantic Kernel 提供了一個統一且強大的框架,使這些整合變得標準化和可重用,極大地拓展了 LLM 的能力邊界。