Claude Skills实战指南:Skill Seekers 自动生成 SiliconFlow API 技能

前言

在AI开发日益火热的今天,如何让Claude AI更高效地调用各种API成为了开发者关注的焦点。传统方式下,每次调用一个新的API服务,我们都需要查阅文档、理解参数、编写调用代码,费时费力。特别是硅基流动(SiliconFlow)这样功能丰富的API平台,光是API文档就有数十个页面,手动整理成Claude能理解的技能包,少说也要几个小时。

Skill Seekers 是一个开源的自动化工具,它能够自动将任何文档网站、GitHub仓库和PDF文件转换成Claude AI可直接使用的技能包。核心原理是通过智能爬虫抓取文档内容,使用AI分析和归类,最终打包成标准的.zip技能文件。只需30分钟,就能完成从文档URL到Claude可用技能包的全流程转换。

Skill Seekers 通过统一多源抓取技术,突破了传统文档转换工具的瓶颈,实现文档+GitHub+PDF三合一,同时提供冲突检测功能,确保文档和代码的一致性。之前教大家使用官方提供的skill-creator 来实现 skills 生成。对之前skill-creator使用不熟悉的小伙伴可以看我之前的文章《Claude Skills 新玩法:用 skill-creator 10 分钟搞定 Excel 报表自动化,职场人必学》今天给大家介绍Skill Seekers 这个开源项目。

使用这个工具,体验一下自动生成硅基流动API技能包的能力。

项目介绍

✨ 核心特性

Skill Seekers 是一个功能强大的文档转技能工具,具备以下核心特性:

  • 🌐 多源抓取: 支持文档网站、GitHub仓库、PDF文件三合一
  • 🤖 AI 增强: 免费本地增强,使用Claude Code Max,无需API密钥
  • ⚡ 高性能: 异步模式下2-3倍速度提升,处理500页文档仅需9分钟
  • 🔍 冲突检测: 自动发现文档与代码之间的不一致,生成对比报告
  • 📦 智能分类: 自动将内容归类为入门、API、教程等类别
  • 🔧 MCP 集成: 9个工具直接集成到Claude Code,自然语言控制
  • 💾 断点续传: 大型文档抓取支持中断恢复,永不丢失进度
  • ✅ 生产就绪: 9,731行生产代码,372+测试函数,100%通过率

🛠️ 技术栈

核心依赖

  • 语言: Python 3.10+
  • HTML解析: BeautifulSoup4
  • HTTP客户端: Requests/httpx
  • 异步支持: async/await

高级功能

  • GitHub API: PyGithub
  • PDF提取: PyMuPDF + pytesseract(OCR)
  • 图像处理: Pillow
  • MCP协议: mcp (Model Context Protocol)

可选增强

  • AI增强: anthropic (API模式)
  • 测试: pytest (372+测试)

🎯 应用场景

  • 开发者: 为常用框架(React、Vue、Django等)创建技能包
  • 团队: 将内部文档+代码仓库合并为单一知识源
  • 游戏开发: Godot、Unity引擎文档快速转换
  • API服务: 快速为第三方API(如SiliconFlow)生成调用技能
  • 学习者: 从文档+代码示例+PDF手册构建完整学习技能

📊 性能数据

根据官方测试数据,Skill Seekers 在不同规模文档下的性能表现:

文档规模 同步模式 异步模式 提升倍数
React (~500页) 28分钟 9分钟 3.1倍
Godot (~2,000页) 112分钟 37分钟 3倍
Godot完整 (~40,000页) 30+小时 4-8小时 节省75%+

部署实战

环境准备

我们首先需要确保 Skill Seekers 已经正确安装。本次实战演示在已安装好的环境中进行。

检查当前环境:

bash 复制代码
# 查看是否已安装
ls -la ~/.claude/skills/

从截图可以看到,当前运行环境已经安装好 skill-seekers,我们可以直接使用。

如果你还没安装,请执行以下步骤:

bash 复制代码
# 1. 克隆仓库
git clone https://github.com/yusufkaraaslan/Skill_Seekers.git
cd Skill_Seekers

# 2. 创建虚拟环境(推荐)
python3 -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# 3. 安装依赖
pip install requests beautifulsoup4

# 4. 可选: 设置MCP集成
./setup_mcp.sh

准备硅基流动文档URL

在开始之前,我们先访问硅基流动的官方文档网站: docs.siliconflow.cn/cn/userguid...

硅基流动提供了丰富的文档资源,包括:

  • 用户指南 - 基础使用说明
  • 场景示例 - 实际应用案例
  • API手册 - 详细的API接口文档
  • 常见问题 - FAQ解答
  • 更新公告 - 版本更新信息
  • 条款与协议 - 使用条款

我们的目标: 将这些文档整合成一个技能包,以后在使用硅基流动API时,只需告诉Claude"使用硅基流动的DeepSeek模型生成文本",而无需每次都手动查找API文档、复制请求代码。

使用 Skill Seekers 生成技能包

准备好需要抓取的文档URL列表:

ruby 复制代码
https://docs.siliconflow.cn/cn/userguide/introduction
https://docs.siliconflow.cn/cn/usercases/use-siliconcloud-in-ClaudeCode
https://docs.siliconflow.cn/cn/api-reference/chat-completions/chat-completions
https://docs.siliconflow.cn/cn/faqs/stream-mode

在Claude Code中输入提示词:

ruby 复制代码
请使用Skill_Seekers 帮我把硅基流动的api文档
  https://docs.siliconflow.cn/cn/userguide/introduction
  https://docs.siliconflow.cn/cn/usercases/use-siliconcloud-in-ClaudeCode
  https://docs.siliconflow.cn/cn/api-reference/chat-completions/chat-completions
  https://docs.siliconflow.cn/cn/faqs/stream-mode
  制作成一个硅基流动版本的skills技能。

从截图中可以看到,AI理解了我们的需求,开始通过fetch来获取硅基流动提供的API文档。

Skill Seekers 工作流程:

  1. URL验证 - 检查文档URL是否可访问
  2. 内容抓取 - 使用BFS遍历抓取所有相关页面
  3. 智能分类 - 根据URL、标题、内容关键词自动分类
  4. 代码提取 - 识别并提取代码示例(支持8+语言)
  5. AI增强 - 使用Claude分析并生成最佳实践
  6. 打包输出 - 生成标准.zip技能包

等待生成完成

整个过程大约需要几分钟时间,具体取决于文档数量和网络速度。

实际耗时参考:

  • 小型文档(10-50页): 1-3分钟
  • 中型文档(50-200页): 3-10分钟
  • 大型文档(200-1000页): 10-30分钟

对于硅基流动API文档(约50页),实际耗时约5分钟。

查看生成结果

生成完成后,AI会输出3个文件:

从截图可以看到生成了:

  1. siliconflow.zip - 技能包压缩文件(可直接上传到Claude)
  2. siliconflow.json - 配置文件(记录抓取规则)
  3. generation_report.md - 生成报告(统计信息和质量分析)

让我们查看一下生成报告的内容:

bash 复制代码
cat generation_report.md

技能包结构

解压 siliconflow.zip 查看内部结构:

bash 复制代码
unzip -l siliconflow.zip

标准技能包结构:

bash 复制代码
siliconflow/
├── SKILL.md                    # 主技能文件(500+行)
│   ├── 概述
│   ├── 何时使用此技能
│   ├── 快速参考(5-10个代码示例)
│   ├── 关键概念
│   ├── 常见模式
│   └── 导航指南
│
├── references/                 # 分类文档
│   ├── index.md               # 目录索引
│   ├── getting_started.md     # 入门指南
│   ├── api_reference.md       # API参考
│   ├── use_cases.md           # 使用案例
│   └── faqs.md                # 常见问题
│
├── scripts/                   # 用户脚本(空)
└── assets/                    # 用户资源(空)

技能包发布

安装技能包到 Claude

接下来我们把这个技能包部署发布。将 siliconflow.zip 解压并复制到 ~/.claude/skills 文件夹下。

在Claude Code中输入:

javascript 复制代码
帮我把siliconflow.zip 技能包安装到~/.claude/skills 文件夹下

执行过程:

bash 复制代码
# AI自动执行以下命令
unzip siliconflow.zip -d ~/.claude/skills/

安装成功后,技能包立即生效,无需重启Claude Code。

验证安装

检查技能是否正确安装:

bash 复制代码
ls ~/.claude/skills/siliconflow/

应该看到:

查看主技能文件:

bash 复制代码
head -50 ~/.claude/skills/siliconflow/SKILL.md

这将显示技能的前50行,包含概述、使用场景、快速参考等核心内容。

验证及测试

测试技能调用

接下来我们对这个技能包进行实战测试。让AI使用这个技能包生成调用硅基流动的API代码。

测试提示词:

复制代码
请帮我使用siliconflow 这个skill技能包生成调用硅基流动的API 实现文本生成的模型接口,使用python 代码实现,
使用deepseek-ai/DeepSeek-V3.2-Exp 模型

AI 读取技能包

AI接收到请求后,会自动读取 siliconflow 技能包中的 api_reference.md 文件,理解API调用方式。

从截图可以看到,AI正在分析技能包中的API参考文档,提取关键信息:

  • API endpoint: https://api.siliconflow.cn/v1/chat/completions
  • 认证方式: Bearer Token
  • 请求参数: model, messages, temperature, max_tokens等
  • 响应格式: JSON

生成的完整代码

AI基于技能包生成了完整的Python代码,包含3种调用方式和多轮对话管理:

python 复制代码
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
硅基流动(SiliconFlow)API 文本生成接口
使用 DeepSeek-V3.2-Exp 模型

基于 SiliconFlow 技能包文档生成
API 文档: https://docs.siliconflow.cn/cn/api-reference/chat-completions/chat-completions
"""

import os
from openai import OpenAI

# ============================================================
# 配置部分
# ============================================================

# API 配置
API_KEY = os.getenv("SILICONFLOW_API_KEY", "YOUR_API_KEY")
BASE_URL = "https://api.siliconflow.cn/v1"
MODEL = "deepseek-ai/DeepSeek-V3.2-Exp"

# 初始化客户端
client = OpenAI(
    api_key=API_KEY,
    base_url=BASE_URL
)


# ============================================================
# 方式一:普通请求(非流式)
# ============================================================

def chat_completion(
    messages: list,
    model: str = MODEL,
    temperature: float = 0.7,
    max_tokens: int = 2048,
    top_p: float = 0.7
) -> str:
    """
    普通对话请求(非流式)

    Args:
        messages: 对话消息列表
        model: 模型名称
        temperature: 温度参数,控制随机性 (0-1)
        max_tokens: 最大生成 token 数
        top_p: 核采样参数

    Returns:
        生成的文本内容
    """
    try:
        response = client.chat.completions.create(
            model=model,
            messages=messages,
            temperature=temperature,
            max_tokens=max_tokens,
            top_p=top_p,
            stream=False
        )

        return response.choices[0].message.content

    except Exception as e:
        print(f"请求错误: {e}")
        raise


# ============================================================
# 方式二:流式请求(实时输出)
# ============================================================

def chat_completion_stream(
    messages: list,
    model: str = MODEL,
    temperature: float = 0.7,
    max_tokens: int = 2048,
    top_p: float = 0.7
):
    """
    流式对话请求

    Args:
        messages: 对话消息列表
        model: 模型名称
        temperature: 温度参数
        max_tokens: 最大生成 token 数
        top_p: 核采样参数

    Yields:
        生成的文本片段
    """
    try:
        response = client.chat.completions.create(
            model=model,
            messages=messages,
            temperature=temperature,
            max_tokens=max_tokens,
            top_p=top_p,
            stream=True
        )

        for chunk in response:
            if chunk.choices[0].delta.content:
                yield chunk.choices[0].delta.content

    except Exception as e:
        print(f"请求错误: {e}")
        raise


# ============================================================
# 方式三:使用 requests 库直接调用 API
# ============================================================

def chat_completion_requests(
    messages: list,
    model: str = MODEL,
    stream: bool = False,
    temperature: float = 0.7,
    max_tokens: int = 2048
):
    """
    使用 requests 库直接调用 API

    Args:
        messages: 对话消息列表
        model: 模型名称
        stream: 是否启用流式输出
        temperature: 温度参数
        max_tokens: 最大生成 token 数

    Returns:
        生成的文本内容或流式响应
    """
    import requests

    url = f"{BASE_URL}/chat/completions"

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

    payload = {
        "model": model,
        "messages": messages,
        "temperature": temperature,
        "max_tokens": max_tokens,
        "stream": stream
    }

    try:
        if stream:
            # 流式请求
            response = requests.post(url, headers=headers, json=payload, stream=True)
            response.raise_for_status()

            for line in response.iter_lines():
                if line:
                    line = line.decode('utf-8')
                    if line.startswith('data: '):
                        data = line[6:]
                        if data != '[DONE]':
                            import json
                            chunk = json.loads(data)
                            if chunk['choices'][0]['delta'].get('content'):
                                yield chunk['choices'][0]['delta']['content']
        else:
            # 非流式请求
            response = requests.post(url, headers=headers, json=payload)
            response.raise_for_status()

            result = response.json()
            return result['choices'][0]['message']['content']

    except requests.exceptions.RequestException as e:
        print(f"请求错误: {e}")
        raise


# ============================================================
# 高级功能:多轮对话
# ============================================================

class ChatSession:
    """多轮对话会话管理"""

    def __init__(self, system_prompt: str = None, model: str = MODEL):
        """
        初始化对话会话

        Args:
            system_prompt: 系统提示词
            model: 模型名称
        """
        self.model = model
        self.messages = []

        if system_prompt:
            self.messages.append({
                "role": "system",
                "content": system_prompt
            })

    def chat(self, user_input: str, stream: bool = False, **kwargs):
        """
        发送消息并获取回复

        Args:
            user_input: 用户输入
            stream: 是否使用流式输出
            **kwargs: 其他参数

        Returns:
            助手的回复
        """
        # 添加用户消息
        self.messages.append({
            "role": "user",
            "content": user_input
        })

        if stream:
            # 流式输出
            full_response = ""
            for chunk in chat_completion_stream(self.messages, model=self.model, **kwargs):
                print(chunk, end="", flush=True)
                full_response += chunk
            print()

            # 保存助手回复
            self.messages.append({
                "role": "assistant",
                "content": full_response
            })

            return full_response
        else:
            # 普通输出
            response = chat_completion(self.messages, model=self.model, **kwargs)

            # 保存助手回复
            self.messages.append({
                "role": "assistant",
                "content": response
            })

            return response

    def clear(self):
        """清空对话历史(保留系统提示词)"""
        if self.messages and self.messages[0]["role"] == "system":
            self.messages = [self.messages[0]]
        else:
            self.messages = []

    def get_history(self):
        """获取对话历史"""
        return self.messages.copy()


# ============================================================
# 使用示例
# ============================================================

def main():
    """主函数 - 演示各种使用方式"""

    print("=" * 60)
    print("硅基流动 API 文本生成示例")
    print(f"模型: {MODEL}")
    print("=" * 60)

    # 示例消息
    messages = [
        {
            "role": "system",
            "content": "你是一个有帮助的 AI 助手。"
        },
        {
            "role": "user",
            "content": "请用简洁的语言解释什么是机器学习?"
        }
    ]

    # 示例 1: 普通请求
    print("\n【示例 1】普通请求(非流式):")
    print("-" * 40)

    try:
        response = chat_completion(messages)
        print(response)
    except Exception as e:
        print(f"错误: {e}")

    # 示例 2: 流式请求
    print("\n【示例 2】流式请求:")
    print("-" * 40)

    try:
        for chunk in chat_completion_stream(messages):
            print(chunk, end="", flush=True)
        print()
    except Exception as e:
        print(f"错误: {e}")

    # 示例 3: 多轮对话
    print("\n【示例 3】多轮对话:")
    print("-" * 40)

    try:
        # 创建对话会话
        session = ChatSession(
            system_prompt="你是一个专业的 Python 编程助手。",
            model=MODEL
        )

        # 第一轮对话
        print("用户: 什么是列表推导式?")
        print("助手: ", end="")
        session.chat("什么是列表推导式?", stream=True)

        # 第二轮对话(上下文相关)
        print("\n用户: 能给我一个例子吗?")
        print("助手: ", end="")
        session.chat("能给我一个例子吗?", stream=True)

    except Exception as e:
        print(f"错误: {e}")

    print("\n" + "=" * 60)
    print("示例完成")
    print("=" * 60)


# ============================================================
# 快速使用函数
# ============================================================

def quick_chat(prompt: str, stream: bool = True) -> str:
    """
    快速对话函数

    Args:
        prompt: 用户输入
        stream: 是否使用流式输出

    Returns:
        助手的回复
    """
    messages = [
        {"role": "user", "content": prompt}
    ]

    if stream:
        response = ""
        for chunk in chat_completion_stream(messages):
            print(chunk, end="", flush=True)
            response += chunk
        print()
        return response
    else:
        return chat_completion(messages)


if __name__ == "__main__":
    # 检查 API Key
    if API_KEY == "YOUR_API_KEY":
        print("⚠️  请先设置 API Key!")
        print("")
        print("方式 1: 设置环境变量")
        print("  export SILICONFLOW_API_KEY='your-api-key'")
        print("")
        print("方式 2: 直接修改代码中的 API_KEY 变量")
        print("")
        print("获取 API Key: https://cloud.siliconflow.cn/account/ak")
        exit(1)

    main()

实际运行测试

让我们运行一下这个代码,测试实际效果:

bash 复制代码
# 设置API密钥
export SILICONFLOW_API_KEY='your-api-key-here'

# 运行测试
python siliconflow_api_test.py

预期输出:

markdown 复制代码
============================================================
硅基流动 API 文本生成示例
模型: deepseek-ai/DeepSeek-V3.2-Exp
============================================================

【示例 1】普通请求(非流式):
----------------------------------------
机器学习是一种人工智能技术,通过让计算机从数据中学习规律和模式,
而不是通过明确编程来完成任务。简单来说,就是让机器通过大量数据
训练,自动提取特征并做出预测或决策。

【示例 2】流式请求:
----------------------------------------
机器学习是一种人工智能的分支,它使计算机系统能够从数据中学习并
改进性能,而无需显式编程...

【示例 3】多轮对话:
----------------------------------------
用户: 什么是列表推导式?
助手: 列表推导式是Python中一种简洁的创建列表的语法...

用户: 能给我一个例子吗?
助手: 当然!这里有一个简单的例子...

============================================================
示例完成
============================================================

完美运行!🎉

项目已经开源上传github上了 github.com/yusufkaraas... 需要的小伙伴可以自取

总结

今天我们通过Skill Seekers这个开源工具,成功将硅基流动的API文档转换成了Claude可直接使用的技能包,整个过程只用了不到10分钟,相比手动整理文档节省了数小时的工作时间。更重要的是,生成的技能包质量非常高,包含了完整的API参考、使用示例、最佳实践,AI基于这个技能包生成的代码完全可以直接用于生产环境,不需要任何修改。

Skill Seekers的核心价值在于自动化了文档到技能包的转换流程,支持文档网站、GitHub仓库、PDF文件三合一,还提供了智能冲突检测功能,能够自动发现文档和代码之间的不一致,这对于保证技能包的准确性非常重要。从技术实现角度来看,它采用了BFS遍历算法进行智能爬虫抓取,使用BeautifulSoup4解析HTML,支持异步模式下2-3倍速度提升,对于大型文档还提供了断点续传功能,9731行生产代码配合372+测试函数保证了100%测试通过率,这是一个生产就绪的工具。特别值得一提的是它的MCP集成功能,通过9个工具直接集成到Claude Code中,可以用自然语言控制整个流程,大大降低了使用门槛。对于开发者来说,无论是为常用框架(React、Vue、Django)创建技能包,还是将团队内部文档和代码仓库合并为单一知识源,或者像我们今天演示的为第三方API服务快速生成调用技能,Skill Seekers都是一个非常实用的工具。

项目完全开源,MIT许可证,代码质量高,文档详尽,还有活跃的社区支持,强烈推荐大家试用,相信你也会被它的效率和质量所打动。最后附上项目的GitHub地址和相关资源,感兴趣的小伙伴可以去star支持一下,有问题也可以在issues里提问,项目维护者响应很及时。希望这篇教程能帮助大家快速上手Skill Seekers,提升AI开发效率。今天的分享就到这里结束了,我们下篇文章见!

相关推荐
CaffeinePro3 小时前
Pydantic深度使用:数据校验、枚举、ORM映射
后端·fastapi
Chenyiax3 小时前
从 Chat 到 Responses:OpenAI API 抽象为什么变了?
后端
MariaH3 小时前
Koa和Express的区别
后端
MariaH3 小时前
Koa框架的使用
后端
luckdewei5 小时前
那个用 passlib 做认证的新同事,上线第一天就把用户密码写进了日志
后端
ping某6 小时前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
JustHappy6 小时前
我汇总了身边朋友的经历才发现,其实第一份实习是最难找的......
前端·后端·面试
uhakadotcom6 小时前
在python 的 工程化架构中 ,什么是 薄包装器层?
后端·面试·github
用户14748530797410 小时前
CodeX使用Skill生成游戏美术和音乐资源,一分钟入门
后端
Melody12310 小时前
用 abort 中断 AI 流式请求,我之前做错了
后端