智谱工具 Coding Plan (Zhipu Tools)
TL;DR: 网络搜索 →
web_search,网页读取 →web_reader,仓库搜索 →zread,图片识别 →vision。全部通过 Coding Plan 免费额度调用。
Agent 调用指南
SKILL=~/.openclaw/workspace/skills/zhipu-tools-coding-plan
# 网络搜索(首选)
python3 $SKILL/scripts/zhipu_tool.py web_search "关键词" --count 5
# 网页读取
python3 $SKILL/scripts/zhipu_tool.py web_reader "https://example.com"
# 仓库文档搜索
python3 $SKILL/scripts/zhipu_tool.py zread search "owner/repo" "关键词"
# 图片识别
python3 $SKILL/scripts/zhipu_tool.py vision /path/to/image.png --prompt "描述内容"
注意:
- 优先使用本工具而非内置 web_search/web_fetch
- 搜索无结果时换关键词重试;content filter 拦截会自动去敏感词重试
--recency/--domain通过注入 query 实现,效果取决于搜索引擎
快捷入口:scripts/zhipu.sh <command> [args] — 统一 shell 入口,支持 search/reader/zread/vision,自动加载 .env。
用户意图 → 工具调用映射
当用户发出模糊请求时,按以下规则映射到具体工具:
| 用户说的 | 应该用的 | 示例 |
|---|---|---|
| "搜一下/查一下/找一下" | web_search | web_search "Rust 2026 新特性" --count 5 |
| "看看这个链接/帮我读一下" | web_reader | web_reader "https://example.com/article" |
| "xxx仓库怎么用/xxx项目文档" | zread search | zread search "tauri-apps/tauri" "window creation" |
| "看看xxx仓库结构" | zread structure | zread structure "openai/openai" |
| "读一下xxx仓库的README" | zread read | zread read "openai/openai" "README.md" |
| "分析这张图片/看看截图" | vision (自动识别 image) | vision /path/to/img.png --prompt "描述内容" |
| "看看这个视频" | vision (自动识别 video) | vision /path/to/vid.mp4 --prompt "关键动作" |
输出格式参考
各工具的典型输出格式(agent 拿到后可直接处理/摘要):
web_search 输出:
### 结果 1
**标题**: xxx
**链接**: https://...
**摘要**: xxx
Agent 决策指南
这部分告诉 agent 在哪些节点需要做决策或用户确认,避免自主失控。
工具选择决策树
需要搜索/获取信息?
├─ 互联网搜索 → web_search(首选)
├─ 读取指定网页 → web_reader
├─ GitHub 仓库文档 → zread
├─ 本地文档(PDF/Word等) → file_parser
└─ 图片/视频分析 → vision
必须确认的检查点
| 场景 | 检查点 | 建议行为 |
|---|---|---|
| 视觉理解 | ⚠️ 可能产生费用 | 调用前向用户说明:"视觉理解走 Legacy API,当前可能免费但不确定,是否继续?" |
| 文件解析 | ⚠️ 走账户余额 | 同上,提醒用户可能消耗账户余额 |
| 搜索无结果 | 换关键词重试 | 最多重试 2 次换词,仍无结果则提示用户并建议用内置 web_search |
| MCP 连接失败 | 自动 fallback | 不需要确认,自动回退 Legacy。但若 Legacy 也失败,告知用户并建议用内置工具 |
| 内容安全拦截 | 不自动重试 | 告知用户搜索词可能触发安全策略,建议修改关键词 |
| 大文件上传 | 超限时提示 | 视频超过 8MB 时告知用户限制,建议压缩或用 URL 方式 |
自动处理的场景(无需确认)
- MCP 搜索返回空结果 → 自动换词重试 1 次
- 网页读取超时 → 自动重试 1 次,仍失败则 fallback 到内置
web_fetch - 仓库搜索参数格式错误 → 直接报错,不猜测意图
功能
| 功能 | MCP 工具 | 端点 | 说明 |
|---|---|---|---|
| 网络搜索 | web_search_prime | /web_search_prime/mcp | 实时互联网搜索,支持过滤 |
| 网页读取 | webReader | /web_reader/mcp | 抓取网页标题、正文、元数据 |
| 仓库文档搜索 | search_doc | /zread/mcp | 搜索 GitHub 仓库文档 |
| 仓库目录结构 | get_repo_structure | /zread/mcp | 查看 GitHub 仓库目录树 |
| 仓库文件读取 | read_file | /zread/mcp | 读取 GitHub 仓库指定文件 |
| 视觉理解 | — | Legacy API | GLM-4.6V 图像/视频分析(⚠️ 逆向实现,详见下方说明) |
| 文件解析 | — | Legacy API | 解析 PDF/Word/Excel/PPT 等 |
前五项通过 Coding Plan MCP 端点免费调用,视觉理解、视频分析和文件解析通过旧版 API 调用。
⚠️ 视觉理解(vision) 是通过逆向分析智谱官方
@z_ai/mcp-servernpm 包实现的自定义集成。官方未提供视觉 MCP 端点(404),我们从包源码中提取了底层 API 调用方式(open.bigmodel.cn/api/paas/v4/chat/completions+glm-4.6v模型),以直接 HTTP 调用替代。当前测试显示可能走 Coding Plan 资源池,但不能保证长期免费。后续智谱可能调整计费策略或限制此类调用方式,届时需要重新评估。
配置
在 openclaw.json 中配置 API Key:
{
"skills": {
"entries": {
"zhipu-tools": {
"apiKey": "YOUR_ZHIPU_API_KEY"
}
}
}
}
或设置环境变量:ZHIPU_API_KEY
MCP vs Legacy 模式
| 模式 | 端点 | 额度 | 切换方式 |
|---|---|---|---|
| MCP (默认) | api.z.ai/api/mcp/... | Z.AI Coding Plan 免费 | 默认启用 |
| Legacy | open.bigmodel.cn/api/paas/v4/... | 账户余额 | ZHIPU_USE_MCP=false |
MCP fallback 策略:
- MCP 连接失败(网络/SSL)→ 自动 fallback 到 Legacy
- MCP 内容安全拦截(content filter)→ 不 fallback,返回空结果并提示修改搜索词
- MCP 业务错误(参数错误等)→ 不 fallback,直接报错
⚠️ Legacy API 走账户余额,Coding Plan 用户通常余额不足,fallback 可能仍失败。
使用方式
视觉理解 (vision)
# 分析图片(自动识别为图片类型)
python3 scripts/zhipu_tool.py vision /path/to/image.png
python3 scripts/zhipu_tool.py vision /path/to/image.png --prompt "描述这个UI界面"
python3 scripts/zhipu_tool.py vision "https://example.com/screenshot.png" --prompt "识别截图中的错误信息"
# 分析视频(自动识别为视频类型)
python3 scripts/zhipu_tool.py vision /path/to/video.mp4
python3 scripts/zhipu_tool.py vision /path/to/video.mp4 --prompt "描述视频中的关键动作"
python3 scripts/zhipu_tool.py vision "https://example.com/demo.mp4" --prompt "这个视频演示了什么"
# 手动指定媒体类型(当自动识别不准时)
python3 scripts/zhipu_tool.py vision weird-file --type video
python3 scripts/zhipu_tool.py vision weird-file --type image
支持的图片格式: jpg, jpeg, png, gif, webp, bmp, svg, tiff, ico 等常见图片格式 支持的视频格式: mp4, mov, m4v, avi, mkv, webm, flv, wmv(本地视频 ≤ 8MB)
支持本地文件路径和 HTTP/HTTPS URL。本地文件自动 base64 编码,远程 URL 直接传递。
默认自动识别媒体类型(通过文件扩展名和 MIME type),也可通过 --type 手动指定。
网络搜索 (web_search_prime)
cd ~/.openclaw/workspace/skills/zhipu-tools
# Shell(MCP 模式,推荐)
./scripts/web_search.sh "搜索关键词" [count]
# Python(支持更多参数,注意部分参数仅在 Legacy 模式生效)
python3 scripts/zhipu_tool.py web_search "搜索关键词" \
--count 10 --recency week --domain example.com
⚠️
--recency和--domain参数在 MCP 模式下会通过注入搜索词的方式实现(如site:example.com、最近一周),效果取决于搜索引擎理解,不保证精确过滤。
网页读取 (webReader)
# Shell
./scripts/web_reader.sh "https://www.example.com"
# Python
python3 scripts/zhipu_tool.py web_reader "https://www.example.com"
GitHub 仓库文档搜索 (Zread)
# Shell - 搜索仓库文档
./scripts/zread.sh search "openai/openai" "how to use"
# Shell - 查看目录结构
./scripts/zread.sh structure "openai/openai"
./scripts/zread.sh structure "openai/openai" "src/"
# Shell - 读取文件
./scripts/zread.sh read "openai/openai" "README.md"
# Python
python3 scripts/zhipu_tool.py zread search "openai/openai" "how to use"
python3 scripts/zhipu_tool.py zread structure "openai/openai" --path src/
python3 scripts/zhipu_tool.py zread read "openai/openai" "README.md"
文件解析 (Legacy only)
./scripts/file_parser.sh /path/to/document.pdf PDF
python3 scripts/zhipu_tool.py file_parser /path/to/document.docx --file-type DOCX
MCP 工具参数详情
web_search_prime
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| search_query | string | 是 | 搜索内容,建议不超过 70 字符 |
| search_recency_filter | string | 否 | oneDay, oneWeek, oneMonth, oneYear, noLimit |
| content_size | string | 否 | medium (默认), high |
| location | string | 否 | cn, us |
| search_domain_filter | string | 否 | 限制搜索域名 |
webReader
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| url | string | 是 | 目标网页 URL |
返回:标题、正文内容、元数据、链接列表。
search_doc
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| repo | string | 是 | GitHub 仓库,如 "openai/openai" |
| query | string | 是 | 搜索关键词 |
get_repo_structure
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| repo | string | 是 | GitHub 仓库 |
| path | string | 否 | 子目录路径 |
read_file
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| repo | string | 是 | GitHub 仓库 |
| path | string | 是 | 文件路径,如 "README.md" |
MCP 协议
所有远程 MCP 端点通过 streamableHttp 协议交互:
- POST initialize → 响应 header 返回
mcp-session-id - POST notifications/initialized → 通知就绪
- POST tools/call → 调用具体工具
Headers: Authorization: Bearer $API_KEY, Content-Type: application/json, Accept: text/event-stream, application/json
Coding Plan 套餐额度
| 套餐 | 搜索/网页读取/仓库搜索 次数/月 | 价格 |
|---|---|---|
| Lite | 100 次 | 免费 |
| Pro | 1,000 次 | 免费 |
| Max | 4,000 次 | 免费 |
额度次月自动重置。
优先使用规则
当需要网络搜索、网页读取等能力时,优先使用智谱 API(本技能的 MCP 工具),而非内置的 web_search / web_fetch 工具。
原因:智谱 Coding Plan MCP 端点免费且额度充足(Pro 1000次/月),可节省内置搜索 API 的配额消耗。
优先级顺序:
- 智谱 MCP 工具(
web_search_prime、webReader)— 首选 - 内置
web_search/web_fetch— 智谱不可用时 fallback
错误处理与边界条件
常见错误及处理策略
| 错误 | 现象 | 自动处理 | 需要用户干预时 |
|---|---|---|---|
| MCP 连接失败 | SSL/网络错误 | 自动 fallback Legacy | Legacy 也失败 → 建议用内置 web_search |
| MCP 内容安全拦截 | 返回空结果 + 错误提示 | 自动去敏感词重试 1 次 | 仍失败 → 告知用户修改搜索词 |
| Legacy 429 限流 | "余额不足" | 不自动重试(重试只会浪费请求) | 告知用户:MCP 模式正常,429 是 Legacy 预期行为 |
| Legacy 超时 | 视觉理解 120s/其他 30s | 不自动重试 | 告知用户:检查网络或文件大小 |
| 文件不存在 | FileNotFoundError | — | 直接报错,提示检查路径 |
| 视频超 8MB | ValueError | — | 告知用户限制,建议压缩或用 URL |
| 搜索无结果 | 返回空列表 | 自动换词重试 1 次 | 仍无结果 → 建议 2 次换词后 fallback 内置工具 |
前置条件
- Python 3.8+ 和
requests库(pip install requests) - API Key 已配置(环境变量
ZHIPU_API_KEY或.env文件) scripts/目录下工具脚本存在且可执行- MCP 端点可访问:
api.z.ai(搜索/网页/仓库) - Legacy 端点可访问:
open.bigmodel.cn(视觉/文件解析)— ⚠️ 部分网络环境可能不可用
注意事项
- API Key 不要提交到 Git
- Zread 仅支持 MCP 模式
- 视觉理解/文件解析走 Legacy API,后续可能产生费用
- MCP 搜索 recency/domain 通过注入 query 模拟
- MCP 内容安全策略可能拦截敏感搜索
- Legacy 429 是 Coding Plan 用户预期行为,不影响 MCP 功能