对话翻译App
20.8MB · 2026-04-06
最近打开掘金,满屏都是 MCP Skills
什么"10万人都在用的 top10 skills",什么"一句话生成整套 API"……说实话,看得我手痒。
我是个独立开发者,一直想给自己搭一个 AI Agent——不是那种对话机器人,是真正能帮我干活的 Agent:能读文档、能搜网页、能调不同的大模型做不同的事。
上周末终于动手了。踩的坑比想象中多得多,而且最大的坑根本不在 MCP 这层。
我的目标很明确:
看起来很简单对吧?MCP + Skills + 几个 API 就完事了。
哈哈哈哈,太天真了
热榜文章把 MCP Skill 吹得跟写 README 一样简单。实际上……
# 我以为的 Skill
name: doc-reader
description: 读取文档并总结
# 实际的 Skill(省略了一堆配置)
name: doc-reader
description: |
读取指定 URL 的文档内容,支持 HTML/PDF/Markdown。
输出结构化摘要,包含:标题、核心内容、关键数据。
如果文档超过 8000 token,先分块再合并摘要。
tools:
- web_fetch
- file_read
input_schema:
type: object
properties:
url:
type: string
description: 文档 URL
format:
type: string
enum: [summary, full, key_points]
Skill 本身不难写,但调试是真的烦。MCP 的错误信息很不友好,经常就一个 tool_call_failed,连哪里挂了都不告诉你。
我的建议:先在本地把每个 tool 单独跑通,再组装成 Skill。别上来就写一个大的。
Agent 跑起来了,Skill 也串好了。然后我发现了真正的问题——
我需要同时调 3 个不同厂商的大模型 API。
三个厂商,三套 SDK,三种认证方式,三个不同的 rate limit 策略。
# 我最初的代码,看着就头疼
import anthropic
import openai
from openai import OpenAI as DeepSeekClient
# Claude
claude = anthropic.Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))
# GPT
gpt = openai.OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
# DeepSeek(用 OpenAI 兼容格式)
ds = DeepSeekClient(
api_key=os.getenv("DEEPSEEK_API_KEY"),
base_url="https://api.deepseek.com/v1"
)
def ask_model(task_type, prompt):
if task_type == "code":
# Claude 的消息格式和 OpenAI 不一样...
resp = claude.messages.create(
model="claude-opus-4-6-20250929",
messages=[{"role": "user", "content": prompt}],
max_tokens=4096
)
return resp.content[0].text
elif task_type == "summary":
resp = gpt.ch@t.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}]
)
return resp.choices[0].message.content
elif task_type == "chinese":
resp = ds.ch@t.completions.create(
model="deepseek-ch@t",
messages=[{"role": "user", "content": prompt}]
)
return resp.choices[0].message.content
这代码能跑,但问题一堆:
overloaded_error,OpenAI 返回 RateLimitError,DeepSeek 有时候直接超时。每个都得单独 catch我为了搞定网络问题,先后试了:
折腾了两天,Agent 的核心逻辑 1 小时就写完了,80% 的时间都在跟 API 接入较劲。
后来在 V2EX 看到有人提了一嘴 API 聚合平台的思路,大意是一个 endpoint 搞定所有模型。
研究了一圈,发现现在做这个的还不少。我最后选了一个叫 ofox.ai 的,原因很简单:
base_url,代码几乎不用动改完之后的代码:
from openai import OpenAI
# 一个 client 搞定所有模型
client = OpenAI(
api_key=os.getenv("OFOX_KEY"),
base_url="https://api.ofox.ai/v1"
)
def ask_model(task_type, prompt):
model_map = {
"code": "claude-opus-4-6-20250929",
"summary": "gpt-4o-mini",
"chinese": "deepseek-ch@t",
}
resp = client.ch@t.completions.create(
model=model_map[task_type],
messages=[{"role": "user", "content": prompt}],
stream=True # 流式输出也正常
)
result = ""
for chunk in resp:
if chunk.choices[0].delta.content:
result += chunk.choices[0].delta.content
return result
从 30 行变成 15 行,三套 SDK 变成一套,三个 key 变成一个。
延迟实测对比(北京,单位 ms):
| 模型 | 直连官方 | 自建代理 | 聚合平台 |
|---|---|---|---|
| Claude Opus 4.6 | 超时 | ~3200 | ~1800 |
| GPT-4o-mini | 超时 | ~1100 | ~650 |
| DeepSeek V3 | ~400 | ~400 | ~380 |
国产模型差距不大,但海外模型的差距是真的明显。不用自己折腾网络这一点就值了。
MCP Skill + 多模型 Agent 的最终架构很简单:
用户输入
↓
MCP Router(根据意图选择 Skill)
↓
┌─────────────┬──────────────┬─────────────┐
│ doc-reader │ code-gen │ data-query │
│ (GPT-4o-mini)│ (Claude) │ (DeepSeek) │
└─────────────┴──────────────┴─────────────┘
↓ ↓ ↓
统一 API 层(一个 endpoint,一个 key)
跑了一周,稳定性还不错。Agent 能根据任务自动选模型,成本也控制住了——轻量任务走便宜模型,重活才上 Claude/GPT。
掘金热榜把 MCP Skills 吹上天了,但实际搭 Agent 你会发现:
给同样在搞 AI Agent 开发的朋友一个建议:先把 API 层搞定,再去折腾 MCP 和 Skill。地基不稳,上层建筑盖得再花哨也白搭。
如果你也在搞 Agent 或者 MCP 相关的东西,评论区聊聊你踩过什么坑?