使用MCP(Anthropic)执行代码——Web抓取案例研究
这个回购是对Anthropic文章中想法的最小复制 “使用MCP执行代码”本文强调了直接工具调用的两个低效之处:
- 工具定义使上下文膨胀(提前加载所有内容)。
- 中间工具结果流经模型,并在每次转弯时回放。
建议的修复方法是让模型编写一次代码并在模型外运行,将中间数据排除在上下文窗口之外。我们将该模式应用于一个简单的抓取任务,以显示令牌/时间/成本的影响。
任务(两种方法相同)
取消科幻小说类别https://books.toscrape.com并返回JSON title, price, product_url (限制20)。
模型看到了什么
- 基线(直接工具): 查看聊天历史记录中的每个工具输出(包括DOM导出的响应)。稳健,但上下文和令牌每次都会增长。
- 代码执行: 只看到系统提示+任务。确实如此 不 参见DOM/工具输出;中间数据不在模型中。高效,但选择器/导航发现是启发式的,除非您添加一个小的侦察步骤(此处不包括)。
结果(books.toscrape科幻)
- 基线:64397个代币;37.0s; $0.2157;3圈;16本书。
- 代码执行:1468个令牌;13.9s(8.4s代码生成,7.2s执行); $0.0109;1通电话;16本书。
- 节省:约98%的代币,约95%的成本,约2.7倍的速度。相同的数据集。
设置
- 需要Node 20+和Python 3.11。
- 复制
.env.example到.env并设置OPENROUTER_API_KEY. - 对于本地(非Docker)运行:
npm install
pip3 install --no-cache-dir -r requirements.txt运行(Docker/Podman)
基线(直接工具):
podman run --rm \
-v $(pwd):/app \
--env-file .env \
-e HTTP_PROXY= -e HTTPS_PROXY= \
-w /app \
localhost/mcp-experiment python3 experiments/baseline.py代码执行(LLM生成TS,通过MCP执行):
podman run --rm \
-v $(pwd):/app \
--env-file .env \
-e HTTP_PROXY= -e HTTPS_PROXY= \
-w /app \
localhost/mcp-experiment python3 experiments/code_exec.py文件
experiments/baseline.py:直接MCP工具调用(ReAct)。experiments/code_exec.py:代码执行模式(TS生成一次,通过Playwright MCP运行)。Dockerfile,package.json,requirements.txt:环境设置。.env.example:API密钥占位符。
