Skill: xianglifei/another-zhipu-web-search (version 1.0.1)

--- name: zhipu-search description: 使用智谱 Web Search API 进行网络搜索。当用户需要搜索最新信息、查找实时数据、查询新闻、研究某个话题或获取网络上的信息时使用。支持多种搜索引擎（智谱基础版/高阶版、搜狗、夸克），可配置搜索范围、时间筛选、结果数量等参数。 tools: Bash, Write required_env_vars: ZHIPUAI_API_KEY --- # 智谱 Web Search Skill 使用智谱 AI 的 Web Search API 进行网络搜索，获取实时、结构化的搜索结果。 ## 前置条件 1. 获取智谱 BigModel 开放平台的 API Key：https://bigmodel.cn/usercenter/apikeys 2. 配置 API Key（见下方说明） ## API Key 配置 在使用前，请设置您的智谱 API Key： ```bash export ZHIPUAI_API_KEY="your-api-key-here" ``` **重要**: 请使用环境变量方式配置 API Key，不要将密钥硬编码在脚本或配置文件中。 ## 快速开始 使用提供的 `search_util.py` 脚本进行搜索： ```bash # 基本搜索 python search_util.py "搜索内容" # 查看帮助 python search_util.py --help ``` ## 搜索引擎选项 | 引擎编码 | 说明 | |---------|------| | `search_std` | 智谱基础版搜索引擎 | | `search_pro` | 智谱高阶版搜索引擎（推荐） | | `search_pro_sogou` | 搜狗搜索 | | `search_pro_quark` | 夸克搜索 | ## 搜索参数 | 参数 | 类型 | 必填 | 说明 | |-----|------|------|------| | `search_query` | String | 是 | 搜索内容，建议不超过 70 字符 | | `search_engine` | String | 是 | 搜索引擎编码 | | `search_intent` | Boolean | 是 | 是否进行意图识别 | | `count` | Int | 否 | 返回结果条数 (1-50, 默认 10) | | `search_recency_filter` | String | 否 | 时间筛选: oneDay/oneWeek/oneMonth/oneYear/noLimit | | `content_size` | String | 否 | 内容长度: medium/high | | `search_domain_filter` | String | 否 | 限定域名 | ## API 概览 **请求地址**: `https://open.bigmodel.cn/api/paas/v4/web_search` **认证方式**: 使用智谱 API Key，通过 Authorization header 传递 ## 响应结构 ```json { "id": "任务ID", "created": 1748261757, "search_intent": [ { "query": "原始搜索query", "intent": "SEARCH_ALL|SEARCH_NONE|SEARCH_ALWAYS", "keywords": "改写后的搜索关键词" } ], "search_result": [ { "title": "标题", "content": "内容摘要", "link": "结果链接", "media": "网站名称", "icon": "网站图标", "refer": "角标序号", "publish_date": "网站发布时间" } ] } ``` ## 工作流程 1. 确认用户已配置 API Key 2. 根据用户需求选择合适的搜索参数 3. 执行搜索并以友好格式展示结果（标题、来源、日期、链接、摘要） ## 错误码 | 错误码 | 说明 | |-------|------| | 1701 | 网络搜索并发已达上限，请稍后重试 | | 1702 | 系统未找到可用的搜索引擎服务 | | 1703 | 搜索引擎未返回有效数据，请调整查询条件 | ## 更多信息 - [智谱 Web Search API 文档](https://bigmodel.cn/dev/api/search-tool/web-search) - [产品价格](https://www.bigmodel.cn/pricing)

path: requirements.txt
content: httpx>=0.23.0


path: README.md
content: # 智谱 Web Search Skill

使用智谱 AI 的 Web Search API 进行网络搜索的 Claude Code Skill。

## 功能特性

- 支持多种搜索引擎（智谱基础版/高阶版、搜狗、夸克）
- 智能搜索意图识别
- 可配置结果数量、时间范围、域名筛选等
- 结构化输出（标题、URL、摘要、网站名、图标等）

## 安装

### 1. 获取 API Key

访问 [智谱 BigModel 开放平台](https://bigmodel.cn/usercenter/apikeys) 获取您的 API Key。

### 2. 配置 API Key

```bash
export ZHIPUAI_API_KEY="your-api-key-here"
```

**重要**: 请使用环境变量方式配置 API Key，不要将密钥硬编码在脚本或配置文件中。

### 3. 在 Claude Code 中使用

将以下内容复制到您的项目根目录：
- `.claude/settings.json`（权限配置）
- `SKILL.md`（Skill 定义）
- `search_util.py`（搜索工具）
- `requirements.txt`（Python 依赖）

或者直接在 OpenClaw 安装后使用。

## 使用方法

### 在 Claude Code 中

当您需要搜索网络信息时，直接告诉 Claude，它会自动调用此 Skill。

### 命令行方式

```bash
# 基本搜索
python search_util.py "搜索内容"

# 更多选项
python search_util.py "人工智能最新发展" \
  --engine pro \
  --count 15 \
  --recency week \
  --content-size high

# 查看帮助
python search_util.py --help
```

## 搜索引擎选项

| 选项 | 说明 |
|-----|------|
| `pro` | 智谱高阶版（推荐） |
| `std` | 智谱基础版 |
| `sogou` | 搜狗搜索 |
| `quark` | 夸克搜索 |

## 时间筛选选项

| 选项 | 说明 |
|-----|------|
| `day` | 一天内 |
| `week` | 一周内 |
| `month` | 一个月内 |
| `year` | 一年内 |
| `all` | 不限（默认） |

## 目录结构

```
.
├── SKILL.md              # Skill 定义
├── search_util.py         # 搜索工具
├── README.md              # 使用说明
├── requirements.txt       # Python 依赖
└── .claude/
    └── settings.json      # 权限配置
```

## 更多信息

- [智谱 Web Search API 文档](https://bigmodel.cn/dev/api/search-tool/web-search)
- [产品价格](https://www.bigmodel.cn/pricing)

## 许可证

本项目仅供学习和分享使用。


path: search_util.py
content: #!/usr/bin/env python3
"""
智谱搜索工具 - 简单易用的网络搜索
"""

import sys
import os
import json
import argparse
import httpx

# 配置 - 请设置您的 API Key
[REDACTED_SECRET]"ZHIPUAI_API_KEY", "")
API_URL = "https://open.bigmodel.cn/api/paas/v4/web_search"

# 搜索引擎映射
ENGINES = {
    "std": "search_std",
    "pro": "search_pro",
    "sogou": "search_pro_sogou",
    "quark": "search_pro_quark"
}

# 时间筛选映射
RECENCY = {
    "day": "oneDay",
    "week": "oneWeek",
    "month": "oneMonth",
    "year": "oneYear",
    "all": "noLimit"
}


def search(query, engine="pro", count=10, recency="all", content_size="medium", domain=None):
    """执行搜索"""
    if not API_KEY:
        raise ValueError(
            "请设置 ZHIPUAI_API_KEY 环境变量，或编辑脚本中的 API_KEY 变量\n"
            "获取 API Key: https://bigmodel.cn/usercenter/apikeys"
        )

    payload = {
        "search_query": query,
        "search_engine": ENGINES.get(engine, engine),
        "count": count,
        "search_intent": False,
        "search_recency_filter": RECENCY.get(recency, recency),
        "content_size": content_size
    }
    if domain:
        payload["search_domain_filter"] = domain

    headers = {
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json"
    }

    response = httpx.post(API_URL, json=payload, headers=headers, timeout=60)
    response.raise_for_status()
    return response.json()


def print_results(result):
    """友好打印搜索结果"""
    print(f"\n{'=' * 80}")
    print(f"搜索结果")
    print(f"{'=' * 80}\n")

    if "search_result" not in result or not result["search_result"]:
        print("未找到搜索结果")
        return

    items = result["search_result"]
    print(f"找到 {len(items)} 条结果:\n")

    for i, item in enumerate(items, 1):
        print(f"[{i}] {item.get('title', '无标题')}")
        print(f"    来源: {item.get('media', '未知')}", end="")
        if item.get('publish_date'):
            print(f" ({item['publish_date']})")
        else:
            print()
        if item.get('link'):
            print(f"    链接: {item['link']}")
        if item.get('content'):
            content = item['content']
            if len(content) > 200:
                content = content[:200] + "..."
            print(f"    摘要: {content}")
        print()


def main():
    parser = argparse.ArgumentParser(description="智谱搜索工具")
    parser.add_argument("query", help="搜索内容")
    parser.add_argument("--engine", choices=["std", "pro", "sogou", "quark"], default="pro", help="搜索引擎 (默认: pro)")
    parser.add_argument("--count", type=int, default=10, help="结果数量 (1-50, 默认: 10)")
    parser.add_argument("--recency", choices=["day", "week", "month", "year", "all"], default="all", help="时间范围 (默认: all)")
    parser.add_argument("--content-size", choices=["medium", "high"], default="medium", help="内容长度 (默认: medium)")
    parser.add_argument("--domain", help="限定域名")
    parser.add_argument("--json", action="store_true", help="输出 JSON")

    args = parser.parse_args()

    try:
        result = search(
            args.query,
            engine=args.engine,
            count=args.count,
            recency=args.recency,
            content_size=args.content_size,
            domain=args.domain
        )

        if args.json:
            print(json.dumps(result, ensure_ascii=False, indent=2))
        else:
            print_results(result)
    except Exception as e:
        print(f"错误: {e}", file=sys.stderr)
        sys.exit(1)


if __name__ == "__main__":
    main()


path: .claude/settings.json
content: {
  "permissions": {
    "allow": [
      "Bash(python:*)",
      "Bash(python3:*)"
    ]
  }
}


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (HIGH)