logo
4
14
WeChat Login

Learn Skills - CNB 助手

我的skill学习之旅的示例demo,一个用于与 CNB(Cloud Native Build,云原生构建)平台交互的命令行 AI 助手。

项目地址: https://cnb.cool/znb/learn-skills

特性

  • 🤖 智能辅助:使用自然语言与 CNB 平台交互
  • 🔧 MCP 集成:通过 CNB 官方 MCP 服务器进行平台操作
  • 📚 知识库:通过 RAG 查询 CNB 文档
  • 🗂️ 仓库管理:列出、查看和管理代码仓库
  • 🚀 流水线操作:触发构建并检查流水线状态
  • 🌐 模型无关:支持任何 OpenAI 兼容的 API(DeepSeek、通义千问、智谱 GLM 等)
  • 💬 双模式:支持交互式聊天或单次命令执行

组件

设计理念

这个项目采用了简洁的架构设计:

  1. Go 程序负责 LLM 调用和 CLI - 保持代码简单
  2. 通过 Skill 指导 LLM - 使用自然语言描述如何操作
  3. Function Calling 机制 - LLM 通过 OpenAI function calling 调用工具
  4. Python 脚本调用 CNB MCP - 通过 HTTP API 访问 CNB 平台
  5. 完整的工具循环 - 自动执行工具并将结果返回给 LLM

快速开始

前置要求

  • Go 1.25 或更高版本
  • Python 3.6 或更高版本
  • curl 命令(用于调用 CNB MCP HTTP API)
  • CNB 账户和 API Token
  • OpenAI 兼容的 LLM API 访问权限(OpenAI、DeepSeek、通义千问等)

从源码安装

git clone https://cnb.cool/znb/learn-skills.git cd learn-skills go build -o learn-skills

安装完成后,将二进制文件移动到 PATH 中(可选):

# macOS/Linux sudo mv learn-skills /usr/local/bin/ # 或者添加到用户目录 mv learn-skills ~/.local/bin/

配置

Learn Skills 支持两种配置方式:配置文件和环境变量。

方式 1:配置文件(推荐)

在项目根目录创建 config.yaml

llm: api_key: "sk-..." # LLM API 密钥 base_url: "https://api.openai.com/v1" # API 端点 model: "gpt-4" # 模型名称 cnb: token: "your-cnb-token" # CNB 访问令牌

方式 2:环境变量

export OPENAI_API_KEY="sk-..." export OPENAI_BASE_URL="https://api.openai.com/v1" export OPENAI_MODEL="gpt-4" export CNB_TOKEN="your-cnb-token"

常见 LLM 提供商配置示例

OpenAI
llm: api_key: "sk-..." base_url: "https://api.openai.com/v1" model: "gpt-4"
DeepSeek
llm: api_key: "sk-..." base_url: "https://api.deepseek.com/v1" model: "deepseek-chat"
阿里通义千问
llm: api_key: "sk-..." base_url: "https://dashscope.aliyuncs.com/compatible-mode/v1" model: "qwen-plus"
智谱 AI
llm: api_key: "..." base_url: "https://open.bigmodel.cn/api/paas/v4" model: "glm-4.7"

获取 CNB Token

  1. 访问 CNB 平台
  2. 进入 设置 → 访问令牌
  3. 创建新令牌并赋予所需权限:
    • repo-code:r(读取仓库代码)
    • 根据需要添加其他权限

测试 CNB MCP 脚本

在运行助手之前,你可以先测试 CNB MCP 脚本是否正常工作:

# 设置 CNB Token export CNB_TOKEN="your-cnb-token" # 列出可用工具 python3 skills/cnb-skill/scripts/cnb-mcp.py list-tools # 测试调用(示例) python3 skills/cnb-skill/scripts/cnb-mcp.py call query_knowledge query="CI/CD"

使用方法

交互式模式

启动对话会话:

./learn-skills

示例交互:

Learn Skills> 列出我的仓库 找到 3 个仓库: 1. demo/web-app(main,2 天前更新) 2. demo/backend(master,1 周前更新) 3. demo/mobile(main,3 周前更新) Learn Skills> 如何配置 webhook? 根据 CNB 文档: 要在 CNB 中配置 webhook: 1. 进入项目设置页面 2. 选择"集成与插件" → "Webhook" 3. 点击"添加 Webhook" 4. 输入 webhook URL 并选择触发事件 ... 参考文档:https://docs.cnb.cool/zh/guide/webhook Learn Skills> exit 再见!

单次命令模式

执行单个命令:

./learn-skills "列出我的仓库" ./learn-skills "触发 demo-app 主分支的构建" ./learn-skills "如何设置 CI/CD 流水线?"

特殊命令(交互模式)

  • exitquit - 退出助手
  • clear - 清除对话历史
  • help - 显示帮助信息

示例查询

仓库操作

  • "列出我的所有仓库"
  • "显示 demo-app 仓库中的分支"
  • "获取 backend-service 仓库的详细信息"

流水线管理

  • "触发 demo-app 主分支的构建"
  • "显示构建 #123 的状态"
  • "列出最近的构建记录"

知识库

  • "如何配置 webhook?"
  • "CNB 的 CI/CD 功能有哪些?"
  • "如何设置远程开发工作空间?"

工作流程

用户输入 ↓ CLI 解析(交互式/单次命令) ↓ 加载 CNB Skill → 系统提示词 ↓ LLM API 调用(附带 execute_bash 工具定义) ↓ LLM 决定调用 execute_bash 工具 ↓ Go 程序执行 Bash 命令 (skills/cnb-skill/scripts/cnb-mcp.py) ↓ Python 脚本调用 CNB MCP HTTP API → CNB 平台 ↓ 返回结果给 Go 程序 ↓ Go 程序将结果返回给 LLM ↓ LLM 生成最终响应 ↓ 显示给用户

💡 详细架构说明:想了解完整的架构设计和实现细节,请阅读 SKILL_ARCHITECTURE.md

开发指南

项目结构

learn-skills/ ├── main.go # 入口点 ├── go.mod # Go 模块 ├── config.yaml.example # 配置示例文件 ├── skills/ │ └── cnb-skill/ # CNB Skill 定义 │ ├── SKILL.md # Skill 描述文档 │ └── scripts/ │ └── cnb-mcp.py # MCP 客户端脚本 ├── internal/ │ ├── config/ # 配置管理 │ ├── llm/ # LLM 客户端 │ └── cli/ # CLI 模式 └── docs/ └── plans/ # 设计和实施文档

故障排除

"需要 LLM API key"

设置 OPENAI_API_KEY 环境变量或在 config.yaml 中添加 llm.api_key

"需要 CNB token"

设置 CNB_TOKEN 环境变量或在 config.yaml 中添加 cnb.token

"无法连接到 MCP"

  • 检查你的 CNB token 是否有效
  • 验证到 https://mcp.cnb.cool 的网络连接
  • 确保 token 具有所需的权限

工具调用不工作

  • 验证你的 LLM 模型支持函数调用
  • 检查启动时是否列出了 MCP 工具
  • 查看 skill 文件语法

相关资源

贡献

欢迎贡献!你可以:

  • 报告 Bug 或提出建议
  • 改进文档和示例
  • 添加新的工具集成
  • 优化 Skill 定义

许可证

参见 LICENSE 文件。

后记

想了半天如何写简介,忽然脑海冒出一句:🙇 与其 awesome skills,不如 learn a skill

当今AI领域,各种概念更迭不休,保持学习的精神,抛却表面的焦虑,学习一个具体的知识,就能让自己变得充实且快乐。

About

🙇 与其 awesome skills,不如 learn a skill

216.00 KiB
4 forks14 stars1 branches0 TagREADMEApache-2.0 license
Language
Go79.6%
Python20.4%