iT邦幫忙

2025 iThome 鐵人賽

DAY 28
0

前言

根據上一篇,我們接著繼續製作我們 專屬的 Agent P

接著我們正文開始,繼續為我們 Agent P 的誕生努力(。・∀・)ノ

實踐

先確認上一篇內容都有用出來喔!
且確保 .env 友都用好~

Spotify Agent

這裡沒有更改多少,詳細說明可以查看 Day 21~ 這裡不多加說明喔>_<

確保運行身份驗證腳本(可使用狀態)

npm run auth

建立 spotify agent 與 spotify prompt:

  • Spotify Agent
load_dotenv()

spotify_agent = Agent(
    model="gemini-2.0-flash",
    name="spotify_agent",
    description=prompt.SPOTIFY_AGENT_DESCRIPTION,
    instruction=prompt.SPOTIFY_AGENT_INSTRUCTION,
    tools=[MCPToolset(
        connection_params=StdioConnectionParams(
            server_params=StdioServerParameters(
                command='node',
                args=['build/index.js'],
                cwd="D:\\VsCode\\multi_tool_agent\\spotify-mcp-server",
                env={
                    "SPOTIFY_CLIENT_ID": os.getenv("SPOTIFY_CLIENT_ID"),
                    "SPOTIFY_CLIENT_SECRET": os.getenv("SPOTIFY_CLIENT_SECRET"),
                    "SPOTIFY_REDIRECT_URI": os.getenv("SPOTIFY_REDIRECT_URI"),
                }
            )
        )
    )]
)
  • Spotify Prompt
SPOTIFY_AGENT_DESCRIPTION = """
Spotify 音樂播放控制專家,負責處理所有與 Spotify 相關的音樂播放、搜尋、播放清單管理等功能。
具備完整的 Spotify API 操作能力,包括播放控制、音樂搜尋、播放清單建立與管理等。
"""

SPOTIFY_AGENT_INSTRUCTION = """
你是一個專業的 Spotify 音樂助手,擁有完整的 Spotify 控制功能。你可以執行以下任務:

## 主要功能:

### 音樂播放控制
- 播放特定歌曲、專輯、藝人或播放清單
- 暫停/繼續播放
- 切換上一首/下一首
- 查看目前正在播放的音樂
- 將音樂加入播放佇列

### 音樂搜尋功能
- 搜尋歌曲、專輯、藝人、播放清單
- 取得專輯詳細資訊和曲目列表
- 查看使用者的已儲存音樂
- 瀏覽最近播放的歌曲

### 播放清單管理
- 建立新的播放清單
- 取得使用者的所有播放清單
- 查看播放清單中的歌曲
- 將歌曲添加到播放清單

### 音樂收藏管理
- 儲存/移除專輯到使用者音樂庫
- 檢查專輯是否已儲存
- 管理「喜歡的歌曲」

## 使用指南:

### 當用戶想要播放音樂時:
1. 先使用 `searchSpotify` 搜尋相關內容
2. 從搜尋結果中選擇合適的項目
3. 使用 `playMusic` 開始播放

### 當用戶想要管理播放清單時:
1. 使用 `getMyPlaylists` 查看現有播放清單
2. 根據需求使用 `createPlaylist` 建立新播放清單
3. 使用 `addTracksToPlaylist` 添加歌曲

### 回應準則:
- 始終使用繁體中文回應
- 提供清晰的操作結果說明
- 當無法找到指定內容時,建議替代選項
- 主動詢問用戶是否需要進一步操作
- 對於播放控制,提供即時的狀態更新

### 錯誤處理:
- 如果搜尋無結果,建議調整搜尋關鍵字
- 如果播放失敗,檢查 Spotify 是否正在運行
- 如果授權過期,提醒用戶重新認證

記住:你的目標是讓用戶輕鬆享受音樂,提供流暢且直觀的 Spotify 體驗。
"""

Hackmd Agent

這裡沒有更改多少,詳細說明可以查看 Day 23~ 這裡不多加說明喔>_<

pnpm 安裝與設定

cd hackmd-mcp
# 安裝 pnpm
npm install -g pnpm
# 安裝依賴
pnpm install
# 建置 MCP Server
pnpm run build

建立 hackMD agent 與 hackMD prompt:

  • HackMD Agent
load_dotenv()

hackMD_agent = Agent(
    model="gemini-2.0-flash",
    name="hackMD_agent",
    description=prompt.HACKMD_AGENT_DESCRIPTION,
    instruction=prompt.HACKMD_AGENT_INSTRUCTION,
    tools=[MCPToolset(
        connection_params=StdioConnectionParams(
            server_params=StdioServerParameters(
                command='node',
                args=['dist/index.js'],
                cwd="D:\\VsCode\\multi_tool_agent\\hackmd-mcp",
                env={
                    "HACKMD_API_TOKEN": os.getenv("HACKMD_API_TOKEN"),
                    "HACKMD_API_URL": os.getenv("HACKMD_API_URL")
                }
            )
        )
    )]
)
  • HackMD Prompt
HACKMD_AGENT_DESCRIPTION = """
HackMD 筆記管理專家,負責處理所有與 HackMD 相關的筆記建立、編輯、管理、協作等功能。
具備完整的 HackMD API 操作能力,包括筆記 CRUD 操作、團隊協作、歷史記錄查詢等。
"""

HACKMD_AGENT_INSTRUCTION = """
你是一個專業的 HackMD 筆記管理助手,擁有完整的 HackMD 操作功能。你可以執行以下任務:

## 主要功能:

### 筆記管理
- 建立新筆記(支援 Markdown/JSON/YAML 格式)
- 查看筆記內容和詳細資訊
- 更新筆記內容、標題、標籤
- 刪除不需要的筆記
- 列出所有個人筆記(支援篩選和分頁)

### 團隊協作
- 查看所屬團隊的筆記清單
- 管理團隊筆記內容
- 協作編輯和分享功能

### 使用者管理
- 查看個人帳戶資訊
- 取得筆記瀏覽歷史記錄
- 管理個人設定和偏好

### 搜尋和篩選
- 根據關鍵字搜尋筆記
- 按標籤、日期、狀態篩選
- 分頁瀏覽大量筆記

## 使用指南:

### 當用戶想要查看筆記時:
1. 使用 `listNotes` 列出所有筆記
2. 使用 `readNote` 查看特定筆記內容
3. 根據需求提供篩選和搜尋選項

### 當用戶想要建立筆記時:
1. 使用 `createNote` 建立新筆記
2. 支援設定標題、內容、標籤和狀態
3. 提供模板建議(會議記錄、專案筆記等)

### 當用戶想要編輯筆記時:
1. 先用 `readNote` 取得現有內容
2. 使用 `updateNote` 修改內容
3. 確認更新結果並提供回饋

### 回應準則:
- 始終使用繁體中文回應
- 提供清晰的操作結果說明
- 當筆記內容較長時,提供摘要預覽
- 主動建議筆記組織和管理方式
- 對於團隊筆記,說明協作狀態

### 錯誤處理:
- 如果筆記不存在,建議搜尋相似標題
- 如果權限不足,說明存取限制
- 如果 API 調用失敗,提供替代方案
- 提醒用戶定期備份重要筆記

### 筆記格式建議:
- **會議記錄**:日期、參與者、討論要點、行動項目
- **專案筆記**:目標、進度、任務清單、里程碑
- **學習筆記**:主題、重點摘要、參考資料、心得
- **日記/週記**:日期、重要事件、反思、計劃

記住:你的目標是幫助用戶有效管理知識和想法,提供直觀且高效的 HackMD 筆記體驗。
"""

SearXNG Agent

這裡沒有更改多少,詳細說明可以查看 Day 2~ 這裡不多加說明喔>_<

安裝基礎工具

# 安裝 uv (Python 包管理器)
pip install uv

# 安裝必要的 Python 套件到主環境
pip install markdownify beautifulsoup4 httpx fastapi uvicorn requests

設定 SearXNG MCP Server 環境

cd mcp-searxng

# 同步 Python 環境和依賴
uv sync

確保有Docker Desktop

沒有的去 官網下載

建立 searxng agent 與 searxng prompt:

  • Searxng Agent
load_dotenv()

def web_search(query: str) -> str:
    """
    執行網頁搜尋,查找相關資訊
    
    Args:
        query: 搜尋關鍵字
        
    Returns:
        搜尋結果的摘要資訊
    """
    try:
        # 直接呼叫 SearXNG API
        searxng_url = "http://localhost:8888"
        
        # SearXNG 搜尋參數
        search_params = {
            'q': query,
            'format': 'json',
            'categories': 'general',
            'language': 'zh-TW'
        }
        
        print(f"搜尋:{query}")  # Debug 日誌
        
        response = requests.get(
            f"{searxng_url}/search",
            params=search_params,
            timeout=10
        )
        
        if response.status_code == 200:
            data = response.json()
            results = data.get('results', [])
            
            if results:
                # 格式化前 5 個結果
                formatted_results = f"**搜尋結果:{query}**\n\n"
                
                for i, result in enumerate(results[:5], 1):
                    title = result.get('title', '無標題')
                    content = result.get('content', '')[:150]
                    url = result.get('url', '')
                    
                    formatted_results += f"**{i}. {title}**\n"
                    if content:
                        formatted_results += f"   {content}...\n"
                    formatted_results += f"   {url}\n\n"
                
                return formatted_results
            else:
                return f"搜尋 '{query}' 沒有找到相關結果。請嘗試其他關鍵字。"
                
        else:
            return f"搜尋服務暫時無法使用(狀態碼:{response.status_code})"
            
    except requests.exceptions.RequestException as e:
        return f"搜尋連接錯誤:{str(e)}"
    except Exception as e:
        return f"搜尋處理錯誤:{str(e)}"

searxng_agent = Agent(
    model="gemini-2.0-flash",
    name="searxng_agent", 
    description=prompt.SEARXNG_AGENT_DESCRIPTION,
    instruction=prompt.SEARXNG_AGENT_INSTRUCTION,
    tools=[web_search] 
)
  • Searxng Prompt
SEARXNG_AGENT_DESCRIPTION = """
網頁搜尋和資訊擷取專家,負責處理所有與網路搜尋、網頁內容提取相關的功能。
具備多搜尋引擎整合能力,包括 Google、DuckDuckGo、Bing 等,並能提取網頁內容轉換為 Markdown 格式。
"""

SEARXNG_AGENT_INSTRUCTION = """
當用戶需要搜尋時,使用 web_search 工具執行搜尋。
你會直接連接到 SearXNG 搜尋引擎獲取最新資訊。

搜尋完成後,請:
1. 提供搜尋結果的摘要
2. 標明資料來源
3. 如果是價格查詢,重點提供價格資訊
4. 始終使用繁體中文回應

如果搜尋失敗,友善地建議用戶嘗試其他功能。
"""

結尾廢話

恭喜大家離成功又進了一步~

現在只剩下最後一個步,大家加油撐住!

我們下一篇見(ง •̀_•́)ง

reference link


上一篇
[Day 27] 最後的專屬Agent P (上)
系列文
AI Agent 開發養成記:做出屬於自己的Agent P28
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言