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开发效率。今天的分享就到这里结束了,我们下篇文章见!

相关推荐
b***9102 小时前
【SpringBoot3】Spring Boot 3.0 集成 Mybatis Plus
android·前端·后端·mybatis
leonardee2 小时前
Android和JAVA面试题相关资料
java·后端
w***4242 小时前
Spring Boot 条件注解:@ConditionalOnProperty 完全解析
java·spring boot·后端
q***73552 小时前
删除文件夹,被提示“需要来自 TrustedInstaller 的权限。。。”的解决方案
android·前端·后端
جيون داد ناالام ميづ5 小时前
Spring Boot 核心原理(五):配置管理怎么玩?从基础到多环境再到配置中心
java·spring boot·后端
_小九5 小时前
【开源】耗时数月、我开发了一款功能全面【30W行代码】的AI图床
前端·后端·开源
疯狂的程序猴5 小时前
完整指南:iPhone崩溃日志查看与分析方法及低内存崩溃处理
后端
秧歌star5195 小时前
PageHelper 分页失效原因分析与正确实践
后端
疯狂的程序猴5 小时前
苹果iOS应用签名与上架App Store完整指南包括注意事项
后端