智能體開發(fā)實(shí)戰(zhàn) | 基于Dify+MCP實(shí)現(xiàn)通過微信發(fā)送天氣信息給好友
前言
AI智能體通過感知環(huán)境、自主決策和執(zhí)行任務(wù),突破傳統(tǒng)大模型僅限于語言交互的局限。例如,當(dāng)用戶指令“訂一張明天去北京的機(jī)票”時(shí),智能體不僅理解語義,還能自動(dòng)調(diào)用航班查詢接口、完成支付并同步至日程系統(tǒng)。這種能力使其在客服、醫(yī)療、智能制造等領(lǐng)域展現(xiàn)出顛覆性潛力。
然而,智能體的開發(fā)長(zhǎng)期受制于接口碎片化與工具兼容性難題。開發(fā)者需為不同數(shù)據(jù)源編寫適配代碼,導(dǎo)致60%的開發(fā)周期浪費(fèi)在系統(tǒng)對(duì)接上。這一痛點(diǎn)催生了MCP協(xié)議的誕生。MCP(Model Context Protocol,模型上下文協(xié)議)由Anthropic于2024年底開源,其核心是通過標(biāo)準(zhǔn)化接口實(shí)現(xiàn)大模型與外部工具的“即插即用”。類比互聯(lián)網(wǎng)的TCP/IP協(xié)議,MCP構(gòu)建了AI交互的通用語言。
本文將介紹如下內(nèi)容:
- 開發(fā)MCP Server實(shí)現(xiàn)微信消息發(fā)送
- 開發(fā)MCP Server實(shí)現(xiàn)獲取天氣
- 基于Dify搭建智能體實(shí)現(xiàn)獲取天氣并通過微信發(fā)送給好友
開發(fā)MCP Server實(shí)現(xiàn)微信消息發(fā)送
以windows開發(fā)環(huán)境為例:
1) 設(shè)置開發(fā)環(huán)境
安裝uv。uv是一個(gè)用Rust編寫的極其快速的Python包和項(xiàng)目管理器。
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
創(chuàng)建python虛擬環(huán)境(假設(shè)項(xiàng)目目錄為wechat)
# Create a new directory for our project
uv init wechat
cd wechat
# Create virtual environment and activate it
uv venv
.venv\Scripts\activate
# Install dependencies
uv add mcp[cli] wxauto
如果在執(zhí)行.venv\Scripts\activate時(shí)報(bào)錯(cuò)“無法加載.venv\Scripts\activate.ps1,因?yàn)樵诖讼到y(tǒng)上禁止運(yùn)行腳本”,需要以管理員權(quán)限在終端執(zhí)行
Set-ExecutionPolicy RemoteSigned
更改執(zhí)行策略后再重新執(zhí)行。
2) Server實(shí)現(xiàn)代碼
wxauto
是一個(gè)基于UIAutomation
的開源Python微信自動(dòng)化庫。你需要在本機(jī)安裝微信PC版本并完成掃碼登錄(注意wxauto只兼容3.9.x的微信PC版本)
通過mcp python SDK結(jié)合wxauto開發(fā)自動(dòng)發(fā)送微信消息的MCP Server是很容易的。
main.py的代碼如下(注意mcp server端口用默認(rèn)的8000):
from mcp.server.fastmcp import FastMCP
from wxauto import WeChat
# Initialize FastMCP server
mcp = FastMCP(port=8000)
wx = WeChat()
@mcp.tool()
async def send_wechat_msg(msg: str, who: str) -> str:
"""send wechat text message"""
wx.ChatWith(who)
wx.SendMsg(msg, who)
return "success"
if __name__ == "__main__":
# Initialize and run the server
mcp.run(transport="sse")
3) 啟動(dòng)Server
uv run main.py
開發(fā)MCP Server實(shí)現(xiàn)獲取天氣
1) 設(shè)置開發(fā)環(huán)境
創(chuàng)建python虛擬環(huán)境(假設(shè)項(xiàng)目目錄為weather)
# Create a new directory for our project
uv init weather
cd weather
# Create virtual environment and activate it
uv venv
.venv\Scripts\activate
# Install dependencies
uv add mcp[cli] httpx
2) Server實(shí)現(xiàn)代碼
main.py的代碼如下(注意mcp server端口調(diào)整為8001):
import httpx
import urllib.parse
from mcp.server.fastmcp import FastMCP
# Initialize FastMCP server
mcp = FastMCP(port=8001)
@mcp.tool()
async def get_weather(location: str) -> str:
"""Get weather for a location."""
url = "http://weather.cma.cn/api/autocomplete?q=" + urllib.parse.quote(location)
async with httpx.AsyncClient() as client:
try:
response = await client.get(url, timeout=10.0)
response.raise_for_status()
data = response.json()
if data["code"] != 0:
return "系統(tǒng)錯(cuò)誤,請(qǐng)稍后重試"
location_code = ""
for item in data["data"]:
str_array = item.split("|")
if (
str_array[1] == location
or str_array[1] + "市" == location
or str_array[2] == location
):
location_code = str_array[0]
break
if location_code == "":
return "沒找到該位置的信息"
url = f"http://weather.cma.cn/api/now/{location_code}"
response = await client.get(url, timeout=10.0)
response.raise_for_status()
return response.json()
except Exception:
return "系統(tǒng)錯(cuò)誤,請(qǐng)稍后重試"
if __name__ == "__main__":
# Initialize and run the server
mcp.run(transport="sse")
3) 啟動(dòng)Server
uv run main.py
基于Dify搭建智能體實(shí)現(xiàn)獲取天氣并通過微信發(fā)送給好友
Dify是一款開源的大語言模型應(yīng)用開發(fā)平臺(tái),旨在降低AI應(yīng)用的開發(fā)門檻,幫助開發(fā)者和企業(yè)快速構(gòu)建、部署及管理生成式AI應(yīng)用。
假設(shè)已經(jīng)通過Docker Desktop for Windows安裝Dify。
1) 安裝MCP插件
點(diǎn)擊右上角“插件”按鈕,進(jìn)入插件頁面,選擇“探索Marketplace”,搜索mcp,選擇插件"MCP SSE / StreamableHTTP"進(jìn)行安裝。
2) 設(shè)置MCP服務(wù)
切換到"插件"tab,選擇已經(jīng)安裝的插件"MCP SSE / StreamableHTTP",點(diǎn)擊“去授權(quán)”
填上MCP服務(wù)配置:
獲取天氣和發(fā)送微信消息是兩個(gè)獨(dú)立的mcp server,配置如下:
{"wechat_server":{"url":"http://host.docker.internal:8000/sse","headers":{},"timeout":50,"sse_read_timeout":50},"weather_searver":{"url":"http://host.docker.internal:8001/sse","headers":{},"timeout":50,"sse_read_timeout":50}}
3) 創(chuàng)建Agent應(yīng)用
- 創(chuàng)建一個(gè)空白應(yīng)用,類型為Agent
- 添加MCP工具到Agent
- 設(shè)置系統(tǒng)提示詞
你是一個(gè)超級(jí)助理,可以通過調(diào)用MCP工具完成各種任務(wù)。為了獲得MCP工具列表,必須先通過mcp_sse_list_tools獲取
- 選擇大模型(例如:qwen-plus),并輸入測(cè)試語句進(jìn)行調(diào)試預(yù)覽
輸入“把廣州的天氣情況通過微信發(fā)送給張三”,Agent會(huì)查詢天氣,并將天氣信息通過微信發(fā)送給張三
總結(jié)
基于Dify搭建的智能體案例,不僅展示了從語義理解到工具調(diào)用的完整決策鏈路,更印證了MCP協(xié)議在降低開發(fā)成本和加速應(yīng)用落地方面的工程意義。