【Hermes Agent进阶】开发自定义技能

【Hermes Agent进阶】开发自定义技能

前言

声明:本文仅介绍一款开源的开发工具和效率工具,旨在帮助开发者提高工作效率。文章内容仅供学习和研究使用,请勿将此工具用于任何商业营销、群发推广或违反平台规定的用途。

在之前的文章中,我们介绍了Hermes Agent的技能系统和如何使用内置技能。今天我们来深入学习如何开发自己的技能

开发自定义技能不仅能满足你的特定需求,还可以分享给社区,让更多人受益。好的技能能大幅提高Hermes Agent的效率和能力。

什么是技能?

技能(Skill)是Hermes Agent保存的可复用知识和工作流程。它是一个结构化的文档,包含:

  1. 元数据:名称、描述、标签、版本、作者
  2. 触发条件:什么情况下应该加载这个技能
  3. 具体步骤:详细的操作指南
  4. 注意事项:常见陷阱和解决方案
  5. 验证方法:如何确认任务完成
  6. 相关资源:文档、链接、工具

技能存储在~/.hermes/skills/目录下,每个技能是一个独立的文件夹,包含SKILL.md文件和可能的辅助文件。

技能文件结构

基本结构

复制代码
skill-name/
├── SKILL.md              # 技能主文件(必需)
├── references/           # 参考文档(可选)
│   └── api-docs.md
├── templates/            # 模板文件(可选)
│   └── config.yaml
├── scripts/              # 脚本文件(可选)
│   └── setup.sh
└── assets/               # 资源文件(可选)
    └── logo.png

SKILL.md 格式

SKILL.md文件包含两部分:

  1. YAML Frontmatter:元数据
  2. Markdown内容:技能说明和步骤

示例:

yaml 复制代码
---
name: fastapi-project-starter
description: 快速创建FastAPI项目的模板和最佳实践
version: 1.0.0
author: Your Name
license: MIT
category: software-development
tags:
  - fastapi
  - web-development
  - python
  - best-practices
dependencies:
  - python 3.9+
  - pip
prerequisites:
  - 基本的Python知识
  - 了解FastAPI基础
estimated_time: 30 minutes
difficulty: intermediate
metadata:
  hermes:
    tags: [fastapi, web, python]
    homepage: https://github.com/yourusername/skill
    related_skills: [test-driven-development, docker]
---

# FastAPI Project Starter

## 何时加载此技能

当你需要:
- 创建新的FastAPI项目
- 重构现有FastAPI应用
- 添加新功能到FastAPI项目
- 学习FastAPI最佳实践

## 项目结构

fastapi-project/

├── app/

│ ├── init .py

│ ├── main.py

│ ├── config.py

│ ├── models/

│ ├── schemas/

│ ├── api/

│ └── utils/

├── tests/

├── Dockerfile

├── requirements.txt

├── .env.example

└── README.md

复制代码
## 快速开始

### 1. 创建项目结构

使用以下命令创建标准的项目结构:

```bash
# 创建目录
mkdir -p app/{models,schemas,api,utils} tests

# 创建__init__.py文件
touch app/__init__.py app/models/__init__.py app/schemas/__init__.py app/api/__init__.py app/utils/__init__.py tests/__init__.py

2. 安装依赖

bash 复制代码
pip install fastapi uvicorn sqlalchemy alembic pydantic python-jose[cryptography] passlib[bcrypt] python-multipart

3. 配置环境

创建.env文件:

env 复制代码
DATABASE_URL=postgresql://user:password@localhost/dbname
SECRET_KEY=your-secret-key
ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=30

核心功能实现

数据库配置

app/db/base.py:

python 复制代码
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

Base = declarative_base()

app/db/session.py:

python 复制代码
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from app.config import settings

engine = create_engine(settings.DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()

配置管理

app/config.py:

python 复制代码
from pydantic import BaseSettings
from typing import Optional

class Settings(BaseSettings):
    DATABASE_URL: str
    SECRET_KEY: str
    ALGORITHM: str = "HS256"
    ACCESS_TOKEN_EXPIRE_MINUTES: int = 30

    class Config:
        env_file = ".env"

settings = Settings()

API路由示例

app/api/users.py:

python 复制代码
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from app.db.session import get_db
from app.schemas.user import UserCreate, UserResponse

router = APIRouter(prefix="/users", tags=["users"])

@router.post("/", response_model=UserResponse)
def create_user(user: UserCreate, db: Session = Depends(get_db)):
    # 实现用户创建逻辑
    pass

主应用入口

app/main.py:

python 复制代码
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from app.api import users, auth

app = FastAPI(
    title="My FastAPI App",
    description="A FastAPI application with best practices",
    version="1.0.0"
)

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

app.include_router(users.router)
app.include_router(auth.router)

@app.get("/")
async def root():
    return {"message": "Welcome to the API"}

测试

配置pytest

tests/conftest.py:

python 复制代码
import pytest
from fastapi.testclient import TestClient
from app.main import app

@pytest.fixture
def client():
    return TestClient(app)

@pytest.fixture
def db():
    # 创建测试数据库
    pass

编写测试

tests/test_users.py:

python 复制代码
def test_create_user(client):
    response = client.post(
        "/users/",
        json={
            "email": "test@example.com",
            "username": "testuser",
            "password": "testpass123"
        }
    )
    assert response.status_code == 200
    data = response.json()
    assert data["email"] == "test@example.com"

运行测试:

bash 复制代码
pytest tests/ -v

Docker容器化

Dockerfile

dockerfile 复制代码
FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]

docker-compose.yml

yaml 复制代码
version: '3.8'

services:
  postgres:
    image: postgres:15
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: dbname
    ports:
      - "5432:5432"

  app:
    build: .
    ports:
      - "8000:8000"
    depends_on:
      - postgres
    environment:
      - DATABASE_URL=postgresql://user:password@postgres/dbname

常见问题和解决方案

问题1:数据库连接失败

原因:数据库服务未启动或配置错误

解决方案

  1. 检查PostgreSQL服务是否运行
  2. 验证.env文件中的连接字符串
  3. 使用docker-compose up -d启动数据库

问题2:CORS错误

原因:前端和后端域名不同

解决方案

  1. app/main.py中添加CORS中间件
  2. 配置正确的allow_origins

问题3:测试失败

原因:测试数据库未配置或数据冲突

解决方案

  1. 使用测试数据库(与生产数据库分离)
  2. 在每次测试前清理数据
  3. 使用pytest fixtures管理测试数据

验证清单

完成项目后,检查以下内容:

  • 所有依赖已安装
  • 数据库连接正常
  • API端点响应正确
  • 测试全部通过
  • Docker容器可以成功构建和运行
  • API文档(/docs)可以访问
  • 环境变量正确配置
  • 日志正常输出
  • 错误处理完善
  • CORS配置正确

相关资源

扩展建议

  • 添加认证和授权(JWT)
  • 实现文件上传
  • 添加WebSocket支持
  • 集成Celery异步任务
  • 添加监控和日志(Prometheus + Grafana)
  • 实现API版本控制

更新日志

v1.0.0 (2024-01-01)

  • 初始版本
  • 基础项目结构
  • 核心功能实现
  • Docker配置
  • 测试框架

贡献指南

如果你想改进这个技能:

  1. Fork这个技能
  2. 创建你的特性分支
  3. 提交你的修改
  4. 推送到分支
  5. 创建Pull Request

许可证

MIT License

复制代码
## 开发一个好技能的要素

### 1. 明确的使用场景

技能应该解决一个明确的问题或需求:

**好的技能:**
- "快速创建FastAPI项目"
- "配置PostgreSQL数据库"
- "设置Git工作流"

**不好的技能:**
- "做所有事情"(太宽泛)
- "编程帮助"(太模糊)

### 2. 具体的步骤

每个步骤都应该具体、可执行:

**好的描述:**
```bash
# 安装依赖
pip install fastapi uvicorn

# 创建项目结构
mkdir -p app/{models,schemas,api}
touch app/__init__.py

不好的描述:

复制代码
安装必要的包
创建文件夹

3. 完整的上下文

提供足够的背景信息:

  • 为什么这样做
  • 这样做的好处
  • 替代方案
  • 适用场景

4. 错误处理

包含常见问题和解决方案:

  • 可能的错误
  • 错误原因
  • 解决方案
  • 预防措施

5. 验证方法

提供检查清单或测试方法:

  • 如何验证安装成功
  • 如何测试功能
  • 常见问题检查

6. 版本控制

记录变更历史:

  • 版本号
  • 变更日期
  • 变更内容

实战:开发一个Python项目初始化技能

让我们从头开发一个实用的技能:python-project-starter

步骤1:规划技能

目标:快速创建符合Python最佳实践的项目结构

功能

  • 创建标准目录结构
  • 生成必要的配置文件
  • 设置虚拟环境
  • 初始化Git仓库
  • 配置常用工具(pytest, black, mypy等)

步骤2:创建技能目录

bash 复制代码
mkdir -p ~/.hermes/skills/python-project-starter/{references,templates,scripts}
cd ~/.hermes/skills/python-project-starter

步骤3:编写SKILL.md

yaml 复制代码
---
name: python-project-starter
description: 快速创建符合Python最佳实践的项目结构,包含测试、代码格式化、类型检查等工具
version: 1.0.0
author: Your Name
license: MIT
category: software-development
tags:
  - python
  - project-setup
  - best-practices
  - development
estimated_time: 15 minutes
difficulty: beginner
metadata:
  hermes:
    tags: [python, setup, best-practices]
---

# Python Project Starter

## 何时加载此技能

当你需要:
- 创建新的Python项目
- 设置Python开发环境
- 应用Python最佳实践
- 配置代码质量工具

## 项目结构

project-name/

├── src/

│ └── project_name/

│ ├── init .py

│ └── main.py

├── tests/

│ ├── init .py

│ └── test_main.py

├── docs/

├── scripts/

├── .gitignore

├── README.md

├── pyproject.toml

├── requirements.txt

├── requirements-dev.txt

├── setup.py

└── .github/

└── workflows/

└── ci.yml

复制代码
## 快速开始

### 1. 创建项目

```bash
# 创建项目目录
mkdir my-project
cd my-project

# 创建虚拟环境
python -m venv .venv
source .venv/bin/activate  # Linux/Mac
# 或 .venv\Scripts\activate  # Windows

2. 创建目录结构

bash 复制代码
mkdir -p src/my_project tests docs scripts .github/workflows

# 创建__init__.py文件
touch src/__init__.py src/my_project/__init__.py tests/__init__.py

3. 生成配置文件

创建pyproject.toml:

toml 复制代码
[build-system]
requires = ["setuptools>=45", "wheel"]
build-backend = "setuptools.build_meta"

[project]
name = "my-project"
version = "0.1.0"
description = "My awesome Python project"
authors = [{name = "Your Name", email = "you@example.com"}]
requires-python = ">=3.9"
dependencies = []

[project.optional-dependencies]
dev = [
    "pytest>=7.0.0",
    "black>=22.0.0",
    "mypy>=0.950",
    "isort>=5.10.0",
    "flake8>=4.0.0",
    "coverage>=6.0",
]

[tool.black]
line-length = 100
target-version = ['py39']

[tool.isort]
profile = "black"
line_length = 100

[tool.mypy]
python_version = "3.9"
warn_return_any = true
warn_unused_configs = true
disallow_untyped_defs = true

创建.gitignore:

复制代码
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg

# Virtual environments
.venv/
venv/
ENV/
env/

# Testing
.pytest_cache/
.coverage
htmlcov/

# IDEs
.vscode/
.idea/
*.swp
*.swo
*~

# OS
.DS_Store
Thumbs.db

4. 安装开发依赖

bash 复制代码
pip install -e ".[dev]"

5. 初始化Git

bash 复制代码
git init
git add .
git commit -m "Initial commit: project setup"

代码质量工具

Black - 代码格式化

bash 复制代码
# 格式化代码
black .

# 检查格式
black --check .

isort - import排序

bash 复制代码
# 排序imports
isort .

# 检查imports
isort --check-only .

mypy - 类型检查

bash 复制代码
# 类型检查
mypy src/

flake8 - 代码检查

bash 复制代码
# 代码检查
flake8 src/

pytest - 测试

bash 复制代码
# 运行测试
pytest

# 运行测试并显示覆盖率
pytest --cov=src --cov-report=html

CI/CD配置

创建.github/workflows/ci.yml:

yaml 复制代码
name: CI

on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main, develop ]

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: [3.9, 3.10, 3.11]

    steps:
    - uses: actions/checkout@v3

    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v4
      with:
        python-version: ${{ matrix.python-version }}

    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -e ".[dev]"

    - name: Lint with flake8
      run: |
        flake8 src/ --count --select=E9,F63,F7,F82 --show-source --statistics
        flake8 src/ --count --exit-zero --max-complexity=10 --max-line-length=100 --statistics

    - name: Check formatting with black
      run: black --check .

    - name: Check imports with isort
      run: isort --check-only .

    - name: Type check with mypy
      run: mypy src/

    - name: Test with pytest
      run: |
        pytest --cov=src --cov-report=xml

    - name: Upload coverage
      uses: codecov/codecov-action@v3

常见问题

Q: 如何选择项目结构?

A: 推荐使用src/布局,因为它:

  • 避免导入测试代码
  • 更容易打包
  • 符合Python社区标准

Q: 需要所有工具吗?

A: 不需要。根据项目需求选择:

  • 必需:pytest(测试)
  • 强烈推荐:black(格式化)、mypy(类型检查)
  • 可选:isort(import排序)、flake8(代码检查)

Q: 如何添加新的依赖?

A: 添加到pyproject.tomldependencies部分:

toml 复制代码
[project]
dependencies = [
    "requests>=2.28.0",
    "numpy>=1.23.0",
]

然后更新虚拟环境:

bash 复制代码
pip install -e .

验证清单

项目创建完成后,检查:

  • 虚拟环境已创建并激活
  • 目录结构正确
  • 所有配置文件已创建
  • 开发依赖已安装
  • Git仓库已初始化
  • 可以运行测试
  • 代码格式化工具正常工作
  • 类型检查正常工作
  • CI/CD配置正确

扩展建议

  • 添加Docker支持
  • 配置pre-commit hooks
  • 集成文档生成(Sphinx)
  • 添加性能测试
  • 配置日志系统
  • 添加监控和追踪

相关资源

  • Python官方文档:https://docs.python.org/

  • pytest文档:https://docs.pytest.org/

  • Black文档:https://black.readthedocs.io/

  • mypy文档:https://mypy.readthedocs.io/

  • GitHub Actions文档:https://docs.github.com/en/actions

    步骤4:创建辅助文件

    创建scripts/init_project.sh:

    bash 复制代码
    #!/bin/bash
    set -e
    
    PROJECT_NAME=${1:-"my-project"}
    
    # 创建项目目录
    mkdir -p "$PROJECT_NAME"
    cd "$PROJECT_NAME"
    
    # 创建虚拟环境
    python -m venv .venv
    echo "Virtual environment created"
    
    # 创建目录结构
    mkdir -p src/"$PROJECT_NAME" tests docs scripts .github/workflows
    touch src/__init__.py src/"$PROJECT_NAME"/__init__.py tests/__init__.py
    echo "Directory structure created"
    
    # 复制配置文件(这里需要实现)
    # ...
    
    echo "Project '$PROJECT_NAME' initialized successfully!"
    echo "Don't forget to activate the virtual environment:"
    echo "  source .venv/bin/activate"

步骤5:测试技能

在Hermes Agent中加载技能:

复制代码
/skill python-project-starter

然后尝试创建项目:

复制代码
你: 使用python-project-starter技能创建一个新项目,叫做awesome-app

技能测试和调试

1. 本地测试

在加载技能后,尝试各种场景:

复制代码
你: 测试python-project-starter技能的功能

Hermes Agent会按照技能中的步骤执行。

2. 边缘情况

测试各种边界情况:

复制代码
你: 在不同的目录下创建项目

你: 项目名称包含特殊字符

3. 错误处理

验证常见错误的处理:

复制代码
你: 不提供项目名称会怎样?

你: 项目目录已存在会怎样?

4. 性能测试

测试技能的执行效率:

复制代码
你: 创建项目需要多长时间?

发布技能到社区

1. 准备发布

确保技能:

  • 完整的文档
  • 经过充分测试
  • 有清晰的许可证
  • 包含贡献指南
  • 版本号正确

2. 发布到Hermes技能市场

bash 复制代码
hermes skills publish ~/.hermes/skills/python-project-starter

3. 发布到GitHub

bash 复制代码
cd ~/.hermes/skills/python-project-starter
git init
git add .
git commit -m "Initial release: v1.0.0"
git tag v1.0.0
git remote add origin https://github.com/yourusername/python-project-starter-skill.git
git push origin main --tags

4. 在社区分享

  • 在Hermes社区发帖
  • 在CSDN写教程
  • 在GitHub分享
  • 在技术社区交流

技能版本管理

语义化版本

使用Semantic Versioning(语义化版本):

  • MAJOR.MINOR.PATCH
  • MAJOR:不兼容的API变更
  • MINOR:向后兼容的新功能
  • PATCH:向后兼容的bug修复

版本更新示例

v1.0.0 → v1.1.0

  • 添加新功能
  • 保持向后兼容

v1.1.0 → v2.0.0

  • 重大变更
  • 破坏性改动

v1.1.0 → v1.1.1

  • 修复bug
  • 无功能变更

更新技能时

  1. 更新版本号
  2. 添加变更日志
  3. 测试新版本
  4. 发布新版本

技能维护

定期更新

  • 修复发现的bug
  • 添加新功能
  • 更新依赖
  • 改进文档

收集反馈

  • 关注用户反馈
  • 记录常见问题
  • 改进用户体验

社区贡献

  • 审查PR
  • 回答问题
  • 指导新贡献者

高级技巧

1. 技能链

一个技能可以引用另一个技能:

yaml 复制代码
related_skills: [test-driven-development, docker]

2. 条件执行

根据条件执行不同步骤:

复制代码
如果使用Python 3.11+,使用新的特性
否则,使用兼容的方法

3. 模板变量

在技能中使用变量:

bash 复制代码
PROJECT_NAME={{project_name}}
VENV_NAME={{project_name}}-env

4. 交互式确认

重要操作前请求确认:

复制代码
是否继续创建项目?[y/N]

总结

开发自定义技能是Hermes Agent生态的重要组成部分:

技能的价值:

  • ✅ 积累专业知识
  • ✅ 提高工作效率
  • ✅ 分享最佳实践
  • ✅ 促进社区发展

好的技能特征:

  • ✅ 明确的使用场景
  • ✅ 具体的执行步骤
  • ✅ 完整的上下文
  • ✅ 错误处理和解决方案
  • ✅ 验证方法
  • ✅ 良好的文档

开发流程:

  1. 规划技能目标和功能
  2. 创建技能目录和文件
  3. 编写详细的SKILL.md
  4. 创建辅助文件和脚本
  5. 充分测试各种场景
  6. 发布到社区
  7. 持续维护和改进

通过开发自定义技能,你不仅能提高自己的效率,还能帮助更多人,共同推动Hermes Agent生态的发展!

如果你有好的技能想法,不妨动手开发,分享到社区。有问题欢迎评论区讨论!


相关链接:

相关推荐
刘~浪地球2 小时前
数据库性能优化实战
数据库·性能优化
2401_865439632 小时前
CSS怎么在flex布局中实现项目均分间距_设置justify-content space-evenly
jvm·数据库·python
m0_493934532 小时前
CSS如何实现输入框禁用样式_使用-disabled伪类设定
jvm·数据库·python
科技牛牛2 小时前
IP定位误差导致封号_深度解析
网络·网络协议·tcp/ip
Olivia051405142 小时前
Voohu:音频变压器在平衡传输与地环路隔离中的设计要点
网络·机器人·信息与通信
俺不要写代码2 小时前
线程启动、结束,创建线程多法、join,detach,线程的移动语义
服务器·开发语言·网络·c++
m0_716430072 小时前
如何用 classList.toggle 实现侧边栏菜单的点击展开与收起
jvm·数据库·python
爪洼传承人2 小时前
AI工具MCP的配置,慢sql优化
android·数据库·sql
老鱼说AI2 小时前
CSAPP深入理解计算机系统第三章:汇编语言基础
网络