Harness Academy
Tài liệu gốc 11 11 phútTiếng Việt + English
docs/en/s08-skill-system.mdXem bản gốc
Ngôn ngữ bài đọc
Bản dịch tiếng Việt

Bản dịch đầy đủ theo đúng cấu trúc tài liệu; code, liên kết và định danh kỹ thuật được giữ nguyên.

s08: Hệ thống kỹ năng

s00 > s01 > s02 > s03 > s04 > s05 > s06 > s07 > [ s08 ] > s09 > s10 > s11 > s12 > s13 > s14 > s15 > s16 > s17 > s18 > s19 > s20 > s21 > s22 > s23 > s24 > s25 > s26 > s27

Công cụ là những khả năng được mã hóa cứng trong nguồn; kỹ năng là kinh nghiệm mà nhân viên tự quản lý.

Chương này giải quyết vấn đề gì

Bởi s07, agent có bộ nhớ phiên chéo. Nhưng trí nhớ lưu trữ kiến thức khai báo (sự kiện, sở thích, quy ước).

Có một loại kiến thức khác mà nó không thể nắm bắt được:

"Khi giải quyết loại nhiệm vụ này, tôi nên làm theo những bước nào? Tôi nên đề phòng những cạm bẫy nào?"

Ví dụ:

  • Những mục cần kiểm tra trong quá trình xem xét mã
  • Cách xử lý các giá trị bị thiếu trong quá trình phân tích dữ liệu
  • Cấu trúc thư mục chuẩn khi xây dựng MCP server là gì

Đây là kiến thức về quy trình -- không phải một sự thật đơn lẻ mà là toàn bộ phương pháp luận.

Nếu bạn nhét chúng vào dấu nhắc hệ thống, nó sẽ nhanh chóng trở nên cồng kềnh và không thể bảo trì được. Nếu bạn không lưu chúng, agent sẽ phải tìm hiểu mọi thứ từ đầu mỗi khi gặp cùng một loại nhiệm vụ.

Đó là lý do vì sao cần có hệ thống kỹ năng:

Hãy để coding agent các phương pháp tiếp cận thành công vào tệp và tải chúng theo yêu cầu vào lần tiếp theo khi nó gặp một tác vụ tương tự.

Công cụ vs Kỹ năng vs MCP

Giải thích các thuật ngữ chính

Kỹ năng là gì

Một bảng hướng dẫn có thể tái sử dụng được sắp xếp xung quanh một loại nhiệm vụ. Được lưu trữ dưới dạng SKILL.md tập tin.

Nó thường nói với agent:

  • Khi nào nên sử dụng nó
  • Các bước cần thực hiện đối với loại nhiệm vụ này
  • Những cạm bẫy cần chú ý
  • Những mẫu hoặc ví dụ để tham khảo

Sự khác biệt giữa kỹ năng và công cụ

  • tool: Một khả năng được mã hóa cứng bằng Python. Được viết bởi nhà phát triển. Việc thêm một công cụ mới yêu cầu phải viết mã.
  • skill: Một tập tin đánh dấu. agent có thể tự tạo, chỉnh sửa và xóa chúng. Không cần thay đổi mã.

Kỹ năng được thực hiện thông qua các công cụ hiện có. Ví dụ: kỹ năng "phân tích dữ liệu" có thể nói "chạy tập lệnh gấu trúc qua terminal" -- kỹ năng mô tả cách tiếp cận, công cụ cung cấp phương tiện.

Sự khác biệt giữa kỹ năng và trí nhớ

  • memory: Kiến thức khai báo. "Người dùng thích các tab hơn." "Dự án sử dụng pytest."
  • skill: Kiến thức quy trình. "Khi thực hiện đánh giá mã, hãy làm theo danh sách kiểm tra này."

Một phép thử quỳ tím đơn giản:

  • Một sự thật -> ký ức
  • Phương pháp -> kỹ năng

Tiết lộ lũy tiến là gì

Hệ thống kỹ năng sử dụng ba lớp tiếp xúc:

  1. Lớp chỉ mục: Chỉ hiển thị tên và mô tả (hàng chục kỹ năng chỉ chiếm vài trăm token)
  2. Lớp nội dung: Mô hình tải toàn bộ nội dung SKILL.md khi nó quyết định cần thiết
  3. Lớp đính kèm: Tệp tham chiếu, mẫu và tập lệnh trong thư mục kỹ năng, chỉ được tải khi cần

Thông thường dấu nhắc hệ thống chỉ chứa lớp chỉ mục. Nội dung và phần đính kèm chỉ được tải vào cuộc trò chuyện thông qua lệnh gọi công cụ khi cần thiết.

Mô hình tinh thần tối thiểu

system prompt
  |
  +-- Skills available:
      - code-review: Code review checklist
      - data-analysis: CSV/DataFrame analysis workflow
      - mcp-builder: Build an MCP server

When the model decides it needs a skill:

skill_view("code-review")
   |
   v
tool_result: full SKILL.md body
   |
   v
Agent follows the skill content to execute the task

Nhưng agent Hermes còn tiến thêm một bước nữa: agent không chỉ có thể đọc các kỹ năng mà còn có thể tạo và chỉnh sửa chúng.

Agent completes a data analysis task
   |
   v
Agent judges this approach is worth reusing
   |
   v
skill_manage(action="create", name="data-analysis", content="...")
   |
   v
~/.hermes/skills/data-analysis/SKILL.md is created

Next time a similar task comes up:

skill_view("data-analysis") -> load the approach -> follow the steps directly

Đây là điểm khác biệt giữa agent Hermes với hầu hết các hệ thống agent: không phải tất cả các kỹ năng đều được xác định trước -- một số kỹ năng được chắt lọc từ kinh nghiệm của chính agent.

Cấu trúc dữ liệu chính

1. Định dạng SKILL.md

---
name: code-review
description: Checklist for reviewing code changes
version: 1.0.0
---

# Code Review

## Steps
1. Check for obvious bugs
2. Verify test coverage
3. Review naming conventions
...

Vấn đề phía trước (giữa ---) là siêu dữ liệu có cấu trúc. Phần thân được đánh dấu ở dạng tự do.

2. Cấu trúc thư mục kỹ năng

~/.hermes/skills/
+-- code-review/
|   +-- SKILL.md
+-- data-analysis/
|   +-- SKILL.md
|   +-- references/
|   |   +-- pandas-cheatsheet.md
|   +-- templates/
|       +-- report-template.md
+-- software-development/
    +-- git-workflow/
        +-- SKILL.md

Mỗi kỹ năng là một thư mục phải chứa một SKILL.md. Nó có thể có references/, templates/, scripts/và assets/ thư mục con cho các tệp đính kèm.

3. Trạng thái sẵn có của kỹ năng

available     -- Can be used directly
setup_needed  -- Missing dependencies (e.g. an environment variable is not set)
unsupported   -- Not supported on the current platform

Các kỹ năng có thể khai báo các phần phụ thuộc (biến môi trường, công cụ dòng lệnh) và các hạn chế của nền tảng (chỉ macOS). Những kỹ năng không đáp ứng yêu cầu sẽ không xuất hiện trong chỉ mục.

Thực hiện tối thiểu

Bước 1: Quét thư mục kỹ năng

def discover_skills(skills_dir):
    skills = {}
    for skill_dir in skills_dir.iterdir():
        skill_md = skill_dir / "SKILL.md"
        if skill_md.exists():
            meta, body = parse_frontmatter(skill_md.read_text())
            skills[meta["name"]] = {
                "name": meta["name"],
                "description": meta.get("description", ""),
                "body": body,
                "path": skill_dir,
            }
    return skills

Bước 2: Đưa chỉ số kỹ năng vào dấu nhắc hệ thống

# Only names and descriptions -- not the full body
skills_index = "\n".join(
    f"- {s['name']}: {s['description']}"
    for s in skills.values()
)
prompt_parts.append(f"# Available Skills\n{skills_index}")

Ý tưởng chính đằng sau bước này:

Chỉ số rẻ (vài trăm token); phần thân đắt tiền (có thể là hàng nghìn token). Chỉ bao gồm chỉ mục theo mặc định.

Bước 3: Cung cấp công cụ xem

def skill_view(name, file=None):
    skill = skills.get(name)
    if not skill:
        return f"Skill '{name}' not found"
    if file:
        # Load an attachment
        return (skill["path"] / file).read_text()
    return skill["body"]

Bước 4: Cung cấp công cụ quản lý

def skill_manage(action, name, content=None):
    if action == "create":
        skill_dir = skills_dir / name
        skill_dir.mkdir(parents=True)
        (skill_dir / "SKILL.md").write_text(content)
        return f"Created skill: {name}"
    
    if action == "edit":
        (skills_dir / name / "SKILL.md").write_text(content)
        return f"Updated skill: {name}"
    
    if action == "delete":
        shutil.rmtree(skills_dir / name)
        return f"Deleted skill: {name}"

Bước này là điều khiến agent Hermes trở nên độc đáo: agent không chỉ là người tiêu dùng kỹ năng mà còn là người sáng tạo.

Làm thế nào nó phù hợp với vòng lặp chính

Sau chương này, dấu nhắc hệ thống không còn chỉ chứa các quy tắc nhận dạng, bộ nhớ và dự án nữa.

Nó phát triển một phần mới: chỉ số kỹ năng có sẵn.

Và luồng tin nhắn nhận được một kiểu chèn theo yêu cầu mới: toàn bộ nội dung của một kỹ năng nhất định.

Nói cách khác, đầu vào hệ thống hiện được chia thành hai tầng:

Stable tier (present every turn):
  Identity, memory, project rules, tool definitions, skills index

On-demand tier (loaded only when needed):
  A skill's SKILL.md body
  A skill's attachment files

Sự phân chia "cấp ổn định + cấp theo yêu cầu" này rất quan trọng vì cấp ổn định xác định tốc độ truy cập bộ đệm nhanh chóng -- cấp càng ổn định thì bộ đệm càng hiệu quả. Nội dung theo yêu cầu nhập thông qua tool_result và không ảnh hưởng đến lời nhắc hệ thống.

Đây cũng là lý do tại sao không nên đưa nội dung kỹ năng vào lời nhắc hệ thống: chúng sẽ khiến cấp độ ổn định không ổn định.

Lựa chọn thiết kế độc đáo của agent Hermes tại đây

1. agent tự tạo và chỉnh sửa kỹ năng

Hầu hết các khung agent đều coi các kỹ năng là chỉ đọc (được nhà phát triển xác định trước). agent Hermes cho phép agent tạo, chỉnh sửa và xóa các kỹ năng thông qua skill_manage công cụ.

Điều này có nghĩa là nhân viên hỗ trợ có thể rút kinh nghiệm: "cách tiếp cận đó đã hoạt động tốt vào lần trước -> lưu nó dưới dạng kỹ năng -> sử dụng trực tiếp vào lần tiếp theo."

2. Quét bảo mật

Các kỹ năng do agent tạo ra sẽ trải qua quá trình quét bảo mật giống như các kỹ năng được cài đặt từ Hub. Hệ thống kiểm tra xem SKILL.md có chứa các hướng dẫn tiêm lệnh đáng ngờ hoặc độc hại hay không.

3. Kỹ năng đa nguồn

Kỹ năng đến từ nhiều nguồn:

  • Kỹ năng tích hợp: Dự án riêng skills/ thư mục
  • Kỹ năng người dùng: Được tạo bởi agent hoặc người dùng theo ~/.hermes/skills/
  • Cài đặt Hub: Được cài đặt từ Agentkills.io, GitHub và các nguồn khác
  • Thư mục bên ngoài: Thư mục kỹ năng bổ sung được cấu hình trong config

Các kỹ năng được cài đặt trên GitHub là tốt nhất cho các quy trình làm việc hẹp có thể làm tăng phần cốt lõi agent nếu chúng được tích hợp sẵn. Ví dụ: một nhóm có thể cài đặt Hermes Tweet từ Xquik-dev/hermes-tweet khi agent cần plugin Hermes Agent X/Twitter để tìm kiếm/tìm kiếm tweet, tìm kiếm Twitter/X, đọc phản hồi tweet, tra cứu người dùng, theo dõi các tweet, xuất người theo dõi và các bài đăng/trả lời có kiểm soát xác nhận, gửi DM và tự động hóa các hành động X. Mô tả chỉ mục của nó phải rõ ràng, ví dụ: hermes-tweet: Plugin Hermes Agent X/Twitter dành cho tweet đọc đầu tiên nghiên cứu và thực hiện các hành động kiểm soát tài khoản.

Khi có xung đột tên giữa các nguồn, kỹ năng của người dùng sẽ được ưu tiên.

4. Nâng cao kỹ năng

Mỗi số lượt gọi công cụ nhất định, nhân viên được nhắc nhở "xem xét liệu có kỹ năng nào đáng để tạo hoặc cải thiện hay không". Đây là một cú huých, không phải là một hành động tự động.

5. Bộ nhớ đệm hai tầng

Đoạn nhắc hệ thống cho chỉ mục kỹ năng có hai lớp bộ đệm: bộ đệm LRU trong quá trình cộng với ảnh chụp nhanh ổ đĩa. Điều này tránh việc quét lại hệ thống tệp trong mỗi lệnh gọi API.

Ranh giới giữa kỹ năng, trí nhớ, SOUL.md và HERMES.md

kỹ năngtrí nhớSOUL.mdHERMES.md
Nó là gìPhương pháp luận cho một loại nhiệm vụThông tin chéo phiênNhân cáchQuy tắc dự án
Ví dụ"Danh sách kiểm tra đánh giá mã""Người dùng thích các tab""Bạn là một trợ lý ngắn gọn""Chạy thử với pytest"
Ai viết nóagent hoặc nhà phát triểnagentNgười dùngNhà phát triển
Ở đâu trong dấu nhắcChỉ mục trong dấu nhắc hệ thống; cơ thể nạp theo yêu cầuBị đóng băng trong dấu nhắc hệ thốngNgay từ đầu lời nhắc hệ thốngTrong dấu nhắc hệ thống
Kích thướcHàng trăm đến hàng nghìn ký tự mỗiGiới hạn ký tựThường ngắnThay đổi theo dự án

Những lỗi thường gặp của người mới bắt đầu

1. Nhồi vĩnh viễn tất cả các nội dung kỹ năng vào dấu nhắc hệ thống

Toàn bộ 20 kỹ năng có thể là hàng chục nghìn token. Chỉ bao gồm chỉ mục; tải cơ thể theo yêu cầu.

2. Kết hợp kỹ năng và trí nhớ

Kỹ năng là “làm thế nào để làm điều đó”; trí nhớ là "những gì bạn biết." Một cái là thủ tục, cái kia là sự thật.

3. Để các kỹ năng do agent tạo bỏ qua kiểm tra bảo mật

Các tệp SKILL.md do agent tạo có thể chứa các hướng dẫn nguy hiểm. Họ cần quét bảo mật giống như các kỹ năng được cài đặt bên ngoài.

4. Viết mục chỉ số kỹ năng yếu

Tên không có mô tả sẽ khiến mô hình không thể đánh giá khi nào tải nó. Phần mô tả phải cho mô hình biết rõ ràng "kỹ năng này áp dụng cho kịch bản nào".

5. Coi kỹ năng là quy tắc tuyệt đối

Các kỹ năng giống như “những cách thực hành được khuyến nghị”, chứ không phải những nhiệm vụ cứng nhắc cho mọi tình huống. Mô hình phải có khả năng thích ứng linh hoạt tùy theo hoàn cảnh thực tế.

Ranh giới giảng dạy

Chương này nên nắm chắc ba điều:

  1. Tiết lộ lũy tiến: Chỉ mục tồn tại trong lời nhắc; cơ thể được tải theo yêu cầu
  2. agent có thể ghi: agent không chỉ là người tiêu dùng mà còn là người sáng tạo
  3. Ranh giới với trí nhớ: Sự kiện và phương pháp luận

Cố ý trì hoãn: quy trình cài đặt Hub đầy đủ, hợp nhất ưu tiên nhiều nguồn, quy tắc quét bảo mật cụ thể, chiến lược vô hiệu hóa bộ đệm.

Nếu người đọc có thể yêu cầu agent "lưu cách tiếp cận thành công dưới dạng tệp kỹ năng và tải nó vào lần tiếp theo khi có nhiệm vụ tương tự", thì chương này đã đạt được mục tiêu.

Sau khi kết thúc chương này, bạn sẽ có thể trả lời

  • Sự khác biệt giữa kỹ năng và công cụ là gì?
  • Sự khác biệt giữa kỹ năng và trí nhớ là gì?
  • Tại sao không nên đặt cố định nội dung kỹ năng trong lời nhắc hệ thống?
  • Những cân nhắc bảo mật bổ sung nào áp dụng cho các kỹ năng do agent tạo ra?
  • Ba lớp tiết lộ tiến bộ là gì?

Một dòng cần nhớ: Kỹ năng là bộ nhớ thủ tục của agent -- không phải "những gì nó biết" mà là "nó thực hiện mọi việc như thế nào". Trong agent Hermes, agent không chỉ sử dụng kỹ năng; nó tạo ra và cải thiện chúng từ kinh nghiệm.

Mục lục nguồn