Bỏ qua tới nội dung chính
Quay lại tin tức

Xây dựng các tác nhân AI tăng cường kỹ năng với SkillNet để tìm kiếm, đánh giá, phân tích đồ thị và lập kế hoạch tác vụ

MarkTechPost· Sana Hassan· 31/5/2026general

Trong hướng dẫn này, chúng tôi triển khai một trường hợp sử dụng SkillNet như một khuôn khổ thực tế để khám phá, cài đặt, kiểm tra, đánh giá và sắp xếp các kỹ năng AI có thể tái sử dụng. Chúng tôi bắt đầu bằng cách thiết lập một máy khách SkillNet mạnh mẽ với SDK và hỗ trợ dự phòng REST, sau đó so sánh tìm kiếm từ khóa với tìm kiếm ngữ nghĩa để hiểu cách tìm kiếm kỹ năng cho các yêu cầu tác vụ khác nhau. Từ đó, chúng tôi cài đặt các kỹ năng được tuyển chọn từ GitHub, kiểm tra siêu dữ liệu của chúng, áp dụng cổng chất lượng trên các khía cạnh đánh giá chính và trực quan hóa mối quan hệ giữa các kỹ năng dưới dạng biểu đồ. Cuối cùng, chúng tôi xây dựng một tác nhân được tăng cường kỹ năng.

Trong hướng dẫn này, chúng tôi triển khai một trường hợp sử dụng SkillNet như một khuôn khổ thực tế để khám phá, cài đặt, kiểm tra, đánh giá và tổ chức các kỹ năng AI có thể tái sử dụng. Chúng tôi bắt đầu bằng cách thiết lập một máy khách SkillNet mạnh mẽ với SDK và hỗ trợ dự phòng REST, sau đó so sánh tìm kiếm từ khóa với tìm kiếm ngữ nghĩa để hiểu cách các kỹ năng có thể được tìm thấy cho các yêu cầu tác vụ khác nhau. Từ đó, chúng tôi cài đặt các kỹ năng được tuyển chọn từ GitHub, kiểm tra siêu dữ liệu của chúng, áp dụng cổng chất lượng trên các chiều đánh giá chính và trực quan hóa mối quan hệ giữa các kỹ năng dưới dạng biểu đồ. Cuối cùng, chúng tôi xây dựng một công cụ lập kế hoạch tác nhân được tăng cường kỹ năng, phân chia một mục tiêu phức tạp thành các nhiệm vụ phụ, khám phá các kỹ năng liên quan, lọc chúng và tập hợp một quy trình thực thi. Copy CodeCopiedUse a different Browser import sys, subprocess def _pip(*pkgs): subprocess.run([sys.executable, "-m", "pip", "install", "-q", *pkgs], check=False) print("Installing dependencies (skillnet-ai, networkx, matplotlib, requests)...") _pip("skillnet-ai", "networkx", "matplotlib", "requests") import os, re, json, textwrap, pathlib, traceback import requests API_KEY = os.environ.get("API_KEY", "") BASE_URL = os.environ.get("BASE_URL", "https://api.openai.com/v1") MODEL = os.environ.get("SKILLNET_MODEL", "gpt-4o") GITHUB_TOKEN = os.environ.get("GITHUB_TOKEN", "") GITHUB_MIRROR = os.environ.get("GITHUB_MIRROR", "") if not API_KEY: try: from google.colab import userdata API_KEY = userdata.get("API_KEY") or "" except Exception: pass REST_BASE = "http://api-skillnet.openkg.cn/v1" WORKDIR = pathlib.Path("./skillnet_demo"); WORKDIR.mkdir(exist_ok=True) SKILLS_DIR = WORKDIR / "my_skills"; SKILLS_DIR.mkdir(exist_ok=True) def banner(title): line = "=" * 78 print(f"\n{line}\n {title}\n{line}") Chúng tôi cài đặt các phần phụ thuộc cần thiết và chuẩn bị môi trường cơ bản cho hướng dẫn SkillNet. Chúng tôi cấu hình khóa API, cài đặt mô hình, tùy chọn GitHub và thư mục làm việc để đảm bảo phần còn lại của quy trình làm việc diễn ra suôn sẻ. Chúng tôi cũng định nghĩa một hàm banner có thể tái sử dụng để giữ cho đầu ra của hướng dẫn được tổ chức và dễ đọc. Copy CodeCopiedUse a different Browser banner("1) Khởi tạo máy khách SkillNet (SDK với dự phòng REST)") USE_SDK = False client = None try: from skillnet_ai import SkillNetClient client = SkillNetClient( api_key=API_KEY or None, base_url=BASE_URL, github_token=GITHUB_TOKEN or None, ) USE_SDK = True print("SDK đã tải: skillnet_ai.SkillNetClient") except Exception as e: print(f"SDK không khả dụng ({e!r}); sử dụng dự phòng REST để tìm kiếm/tải xuống.") def _norm(item): if isinstance(item, dict): g = item.get else: g = lambda k, d=None: getattr(item, k, d) return { "skill_name": g("skill_name") or g("name") or "?", "skill_description": g("skill_description") or g("description") or "", "author": g("author") or "", "stars": g("stars") or 0, "skill_url": g("skill_url") or g("url") or "", "category": g("category") or "", } def search(q, mode="keyword", limit=5, min_stars=0, sort_by="stars", threshold=0.8): if USE_SDK: try: kw = dict(q=q, limit=limit, mode=mode) if mode == "keyword": kw.update(min_stars=min_stars, sort_by=sort_by) else: kw.update(threshold=threshold) res = client.search(**kw) return [_norm(x) for x in (res or [])] except Exception as e: print(f" [Tìm kiếm SDK thất bại -> REST] {e!r}") params = {"q": q, "mode": mode, "limit": limit} if mode == "keyword": params.update(min_stars=min_stars, sort_by=sort_by) else: params.update(threshold=threshold) try: r = requests.get(f"{REST_BASE}/search", params=params, timeout=30) r.raise_for_status() return [_norm(x) for x in r.json().get("data", [])] except Exception as e: print(f" [Tìm kiếm REST thất bại] {e!r}") return [] def show_results(results, title=""): if title: print(f"\n-- {title} --") if not results: print(" (không có kết quả / điểm cuối không thể truy cập)") return for i, s in enumerate(results, 1): desc = textwrap.shorten(s["skill_description"], 70, placeholder="...") print(f" {i}. {s['skill_name']:<34} {s['stars']:<5} [{s['category']}]") if desc: print(f" {desc}") banner("2) Tìm kiếm: từ khóa so với ngữ nghĩa (vector)") kw_hits = search("pdf", mode="keyword", limit=5, sort_by="stars") show_results(kw_hits, "từ khóa: 'pdf' (sắp xếp theo số sao)") vec_hits = search("phân tích báo cáo tài chính từ tài liệu", mode="vector", limit=5, threshold=0.80) show_results(vec_hits, "vector: 'phân tích báo cáo tài chính từ tài liệu'") Chúng tôi khởi tạo máy khách SkillNet và cung cấp một phương án dự phòng REST, để hướng dẫn vẫn có thể sử dụng được ngay cả khi SDK không hoạt động. Chúng tôi định nghĩa các hàm trợ giúp để chuẩn hóa kết quả tìm kiếm và thực hiện cả tìm kiếm từ khóa và tìm kiếm ngữ nghĩa. Sau đó, chúng tôi so sánh tìm kiếm từ khóa cho các kỹ năng liên quan đến PDF với tìm kiếm vector để phân tích báo cáo tài chính từ tài liệu. banner("3) Cài đặt kỹ năng (tải xuống từ GitHub vào ./skillnet_demo/my_skills)") CURATED = [ "https://github.com/anthropics/skills/tree/main/skills/skill-creator", "https://github.com/anthropics/skills/tree/main/skills/algorithmic-art", ] for s in (kw_hits + vec_hits): if s["skill_url"] and s["skill_url"] not in CURATED: CURATED.append(s["skill_url"]) CURATED = CURATED[:4] def download(url, target_dir): if USE_SDK: try: kw = {} if GITHUB_MIRROR: kw["mirror"] = GITHUB_MIRROR return client.download(url=url, target_dir=str(target_dir), **kw) except TypeError: return client.download(url=url, target_dir=str(target_dir)) except Exception as e: print(f" download failed for {url}: {e!r}") return None print(" (SDK không khả dụng — bỏ qua tải xuống trực tiếp cho URL này)") return None installed = [] for url in CURATED: print(f" đang tải xuống: {url}") path = download(url, SKILLS_DIR) if path: installed.append(path) print(f" -> {path}") print(f"\nĐã cài đặt {len(installed)} kỹ năng.") Chúng tôi tạo một danh sách các kỹ năng tương thích với SkillNet hữu ích và mở rộng danh sách này bằng cách sử dụng các kết quả tìm kiếm đã thu thập trước đó. Chúng tôi tải xuống các kỹ năng đã chọn từ GitHub vào một thư mục kỹ năng cục bộ khi SDK khả dụng.

Nguồn tin: MarkTechPost — Tác giả: Sana Hassan. Bản dịch tiếng Việt do AI thực hiện, có thể có sai sót.