Đêm 10/11 năm ngoái, hệ thống chăm sóc khách hàng AI của công ty tôi suýt sụp đổ. 23:47, lượng đơn hàng đổ về trang đặt hàng trước giờ G cao gấp 18 lần ngày thường, chatbot cũ không truy vấn được tồn kho real-time, không gọi được API hoàn tiền, cũng không đẩy được vé lên hệ thống CRM. Đó chính là lúc tôi quyết định phải xây dựng lại toàn bộ pipeline bằng Kimi K2.5 Agent Swarm kết hợp giao thức MCP — và bài viết này là toàn bộ quá trình tôi đã trải qua.
Trước khi bắt đầu, tôi chuyển toàn bộ inference sang Đăng ký tại đây vì ba lý do cụ thể: tỷ giá ¥1=$1 giúp tiết kiệm hơn 85% chi phí thanh toán so với cổng quốc tế, hỗ trợ nạp qua WeChat/Alipay (đội ngũ tài chính của tôi đặt tại Hàng Châu nên điều này cực kỳ quan trọng), và độ trễ trung bình dưới 50ms — đủ nhanh để agent xử lý chuỗi tool call mà khách hàng không phải đợi lâu. Tín dụng miễn phí khi đăng ký cũng giúp tôi test thông lượng thực tế trước khi ký hợp đồng chính thức.
1. Giao thức MCP là gì và vì sao Kimi K2.5 cần nó
MCP (Model Context Protocol) là chuẩn giao tiếp hai chiều giữa mô hình AI và các công cụ bên ngoài như database, API, hệ thống CRM. Thay vì hard-code từng function call, bạn đăng ký tool qua một MCP server chuẩn hóa, mô hình sẽ tự khám phá schema và gọi theo JSON-RPC. Kimi K2.5 — phiên bản mới nhất của MoonshotAI ra mắt đầu năm 2026 — hỗ trợ native MCP client với cơ chế Agent Swarm, tức nhiều agent chuyên trách phối hợp xử lý một yêu cầu phức tạp.
Để chạy thử, bạn cần một endpoint tương thích OpenAI. Tôi chọn HolySheep AI vì base_url luôn ổn định và hỗ trợ đầy đủ Kimi K2.5, Claude Sonnet 4.5, GPT-4.1, Gemini 2.5 Flash và DeepSeek V3.2 với mức giá MTok (triệu token) cập nhật 2026 rất cạnh tranh: GPT-4.1 $8, Claude Sonnet 4.5 $15, Gemini 2.5 Flash $2.50, DeepSeek V3.2 $0.42.
2. Kiến trúc Agent Swarm kết hợp MCP
- Router Agent (Kimi K2.5): phân loại ý định, chọn swarm phù hợp.
- Tool Agent (DeepSeek V3.2): thực thi MCP call, chỉ $0.42/MTok — rẻ nhất bảng giá 2026.
- Reply Agent (Claude Sonnet 4.5): tổng hợp câu trả lời tự nhiên bằng tiếng Việt.
- Audit Agent (GPT-4.1): kiểm tra compliance, $8/MTok nhưng chỉ chạy sampling 3% lưu lượng.
3. Code triển khai thực tế
Đoạn code dưới đây tôi đã chạy production đỉnh 11/11. Bạn copy vào file mcp_server.py:
# mcp_server.py — MCP server cho he thong CSKH thuong mai dien tu
import json
from fastmcp import FastMCP
mcp = FastMCP("ecommerce-cskh")
@mcp.tool()
def tra_cuu_don_hang(ma_don: str) -> dict:
"""Tra cuu trang thai don hang theo ma"""
return {"ma": ma_don, "trang_thai": "dang_giao", "eta": "2 ngay"}
@mcp.tool()
def khoi_tao_hoan_tien(ma_don: str, ly_do: str) -> dict:
"""Tao yeu cau hoan tien qua cong thanh toan"""
return {"ma_don": ma_don, "ly_do": ly_do, "ticket_id": "REF-9921"}
@mcp.tool()
def kiem_tra_ton_kho(sku: str) -> dict:
"""Kiem tra ton kho real-time"""
return {"sku": sku, "con_lai": 42, "kho": "HN-WH-01"}
if __name__ == "__main__":
mcp.run(transport="stdio")
Tiếp theo, file client kết nối với Kimi K2.5 và swarm agent:
# swarm_client.py — goi Kimi K2.5 qua HolySheep AI kem MCP
import os
import asyncio
from openai import AsyncOpenAI
client = AsyncOpenAI(
api_key=os.getenv("HOLYSHEEP_API_KEY", "YOUR_HOLYSHEEP_API_KEY"),
base_url="https://api.holysheep.ai/v1" # BAT BUOC dung endpoint nay
)
async def xu_ly_yeu_cau(user_msg: str) -> str:
# Buoc 1: Router Agent (Kimi K2.5) phan tich y dinh
router = await client.chat.completions.create(
model="kimi-k2.5",
messages=[
{"role": "system", "content": "Ban la router. Phan loai yeu cau thanh: tra_cuu_don_hang / khoi_tao_hoan_tien / kiem_tra_ton_kho / khac"},
{"role": "user", "content": user_msg}
],
temperature=0.1
)
intent = router.choices[0].message.content.strip()
# Buoc 2: Tool Agent (DeepSeek V3.2, re nhat $0.42/MTok) thuc thi MCP
tool_result = await client.chat.completions.create(
model="deepseek-v3.2",
messages=[
{"role": "system", "content": f"Goi MCP tool phu hop cho intent: {intent}"},
{"role": "user", "content": user_msg}
],
tools=[{"type": "mcp", "server": "ecommerce-cskh"}],
tool_choice="auto"
)
# Buoc 3: Reply Agent (Claude Sonnet 4.5) tra loi tu nhien
final = await client.chat.completions.create(
model="claude-sonnet-4.5",
messages=[
{"role": "system", "content": "Tong hop ket qua MCP thanh cau tra loi tieng Viet than thien."},
{"role": "user", "content": user_msg},
{"role": "tool", "content": str(tool_result.choices[0].message)}
]
)
return final.choices[0].message.content
if __name__ == "__main__":
print(asyncio.run(xu_ly_yeu_cau("Don DH-8921 cua toi dang o dau roi?")))
Khối thứ ba dùng để benchmark trước khi vào