Agent Skills a Claude API-ban: hogyan használjunk kész skillt Claude Code nélkül
MarkdownHogyan csatlakoztassunk egy kész pptx-készséget a Claude API-hoz: container.skills, a kódvégrehajtási eszköz, a válasz ellenőrzése és a prezentáció letöltése a Files API-n keresztül.
A teljes cikk elolvasása
Legfontosabb tudnivaló
A dokumentumokhoz készült kész Agent Skills közvetlenül a Claude API-n keresztül is használhatók: adja meg a skillt a container.skills mezőben, és engedélyezze a code_execution eszközt. Az első kéréshez a hivatalos példában szereplő, egymással kompatibilis modell- és eszközpárost használja. A létrehozott fájlt külön töltse le a file_id segítségével; a példa ugyanazt az API-kulcsot használja a kéréshez és a letöltéshez.
További útmutatást az Ailoot dokumentációjában talál.
Amire szüksége lesz
Ez az útmutató arra szolgál, hogyan hívja meg közvetlenül egy programból az API-t, nem pedig arra, hogyan telepítsen skillt a Claude Code-ba. Szüksége lesz egy Claude API-kulcsra, hozzáférésre a kiválasztott modellhez és Python 3-ra. Az alábbi kód a Python szabványos könyvtárát és a HTTP-t használja, így nem függ attól, hogy az SDK melyik verzióját telepítette. A kulcs az ANTHROPIC_API_KEY környezeti változón keresztül kerül átadásra; ne írja bele a program szövegébe vagy egy beszélgetésbe.
Az API kész Anthropic skilleket kínál: pptx prezentációkhoz, xlsx táblázatokhoz, docx Word-dokumentumokhoz és pdf PDF-ekhez. Ezeket a type: "anthropic" megadásával lehet csatlakoztatni. Ez az útmutató kész skillt használ, egyéni skill feltöltése nélkül.
Az hivatalos gyorsútmutató, amelyet az anyag összeállításakor nyitottak meg, a claude-opus-5-5 és a code_execution_20260521 párost használja. Az alábbi példa is ezt a párost alkalmazza. A példát ellenőriztük a dokumentáció alapján; nem egy fizetős API-hívásról szóló beszámoló.
Milyen béta fejlécekre van szükség
A példa a gyorsútmutató jelenlegi HTTP-szerződését követi: a fejlécek x-api-key, anthropic-version: 2023-06-01 és content-type: application/json; anthropic-beta fejlécet nem küld. Ne kombináljon különböző dokumentációs generációkból származó modellt, hívási módszert és válaszformátumot.
A Files API dokumentációja azt is kimondja, hogy az API már nem béta. A régi files-api-2025-04-14 fejléc megtartja a régi válaszformátumokat; a fejléc eltávolításával a jelenlegi formátumokra vált. Ezért nem lehet egyszerűen összekombinálni egy régi, client.beta.files-t használó példát egy újjal.
Itt nem egy meglévő szolgáltatást állítunk át a régi béta-szerződésről. Ha már van ilyen szolgáltatása, először ellenőrizze a fejléceket és a válaszformátumokat. Az SDK-metódus nevében szereplő beta önmagában nem elegendő: a Files API dokumentációja külön ismerteti, hogyan viselkednek a különböző SDK-verziók.
Prezentáció létrehozása és a fájl letöltése
A példa feladatot küld egy öt diából álló, megújuló energiáról szóló prezentáció létrehozására, a teljes választ a skill-response.json fájlba menti, majd kinyeri a létrehozott fájlok azonosítóit. Nem a modell válaszából veszi a mentési útvonalat: a fájlokat egy új, skill-output nevű helyi mappába menti. Ha a mappa már létezik, a program leáll, hogy ne írja felül az előző eredményt. A mappa az API-hívás előtt jön létre, ezért sikertelen hívás után is megmarad. Újabb lépés előtt vizsgálja meg és őrizze meg az adott próbálkozást; ne törölje pusztán azért, hogy az ismételt futtatás továbbjusson.
import json
import os
from pathlib import Path
from urllib.error import HTTPError
from urllib.request import Request, urlopen
API = "https://api.anthropic.com/v1"
KEY = os.environ["ANTHROPIC_API_KEY"]
HEADERS = {
"x-api-key": KEY,
"anthropic-version": "2023-06-01",
"content-type": "application/json",
}
def request(path, payload=None, binary=False):
data = None if payload is None else json.dumps(payload).encode("utf-8")
req = Request(API + path, data=data, headers=HEADERS)
try:
with urlopen(req, timeout=600) as result:
body = result.read()
except HTTPError as error:
try:
details = json.loads(error.read().decode("utf-8"))
except (ValueError, UnicodeError):
details = {}
info = details.get("error", {})
request_id = error.headers.get("request-id") or details.get("request_id")
diagnostic = {
"http_status": error.code,
"request_id": request_id,
"error_type": info.get("type"),
"message": str(info.get("message", "No JSON error message")).replace(KEY, "[REDACTED]")[:1000],
}
(out / "skill-error.json").write_text(
json.dumps(diagnostic, ensure_ascii=False, indent=2), encoding="utf-8"
)
raise RuntimeError(
f"Claude API HTTP {error.code}; request_id={request_id}; inspect skill-error.json"
) from None
return body if binary else json.loads(body)
out = Path("skill-output")
out.mkdir(exist_ok=False)
response = request("/messages", {
"model": "claude-opus-5-5",
"max_tokens": 16000,
"container": {
"skills": [{"type": "anthropic", "skill_id": "pptx", "version": "latest"}]
},
"messages": [{
"role": "user",
"content": "Készítsen egy 5 diás prezentációt a megújuló energiáról az általam előnyben részesített nyelven.",
}],
"tools": [{"type": "code_execution_20260521", "name": "code_execution"}],
})
(out / "skill-response.json").write_text(
json.dumps(response, ensure_ascii=False, indent=2), encoding="utf-8"
)
print("stop_reason:", response.get("stop_reason"))
file_ids = []
for block in response["content"]:
if block["type"] == "bash_code_execution_tool_result":
result = block["content"]
if result["type"] == "bash_code_execution_result":
for item in result["content"]:
file_id = item.get("file_id")
if file_id and file_id not in file_ids:
file_ids.append(file_id)
if not file_ids:
raise RuntimeError("No generated file_id; inspect skill-response.json")
for index, file_id in enumerate(file_ids, start=1):
from urllib.parse import quote
file_path = "/files/" + quote(file_id, safe="")
metadata = request(file_path)
if metadata.get("downloadable") is not True:
raise RuntimeError("This file cannot be downloaded through Files API")
target = out / f"result-{index}.pptx"
target.write_bytes(request(file_path + "/content", binary=True))
print("Saved:", target)
A result-1.pptx és az utána következő nevek ehhez a prezentációs feladathoz lettek kiválasztva. A fájlkiterjesztés nem bizonyítja, hogy mi van a fájlban: nyissa meg a letöltött dokumentumot, és ellenőrizze a formátumát, a diák számát és a szöveget. Ne tekintse sikeres eredménynek önmagában a HTTP 200-at vagy egy file_id jelenlétét.
A program kiírja a stop_reason értékét, vagyis hogy miért állt le a válasz, és ellenőrzés céljából elmenti a teljes választ. Nem folytatja a beszélgetést, és nem ismétli meg automatikusan a fizetős kérést. A letöltött fájl megléte nem jelenti azt, hogy a teljes feladat elkészült: mielőtt eldöntené, szükség van-e újabb kérésre, ellenőrizze az elmentett választ és magát a dokumentumot is.
Sikertelen próbálkozásnál vizsgálja meg a skill-error.json fájlt, ha létezik. Ez a HTTP-státuszt, a szolgáltatótól kapott kérésazonosítót és egy korlátozott hosszúságú hibaüzenetet rögzít, amelyből a beállított API-kulcs értéke ki van takarva. Megosztás előtt ellenőrizze, nincs-e benne más személyes adat. A hitelesítési, jogosultsági/modell-, számlázási korlát- és kérésformátum-hibákat vesse össze a hivatalos hibareferenciával; nem minden hiba indokol újabb fizetős generálást.
Ha a skill-response.json már tartalmaz létrehozott file_id értékeket, és csak a letöltés hibázott, őrizze meg a választ, és ugyanazzal az engedélyezett munkaterület-hozzáféréssel vizsgálja a fájlmetaadatok/letöltés lépését. Egy meglévő kimenet letöltéséért ne futtassa újra a generáló blokkot. Ha a kérés eredménye ismeretlen, őrizze meg a kérésazonosítót, és tisztázza az állapotát, mielőtt új generálást küld. Csak ha már eldöntötte, hogy új generálás szükséges, módosítsa a helyi kimeneti sort egy még nem használt útvonalra, például out = Path("skill-output-attempt-2"), és tartsa meg az exist_ok=False értéket. Az új mappa a felülírást akadályozza meg; az ismételt API-díjat nem.
Milyen fájlengedélyekre van szükség
A Files API a fájlokat egy munkaterülethez rendeli, nem az alkalmazása egyes felhasználóihoz vagy egy beszélgetéshez. A dokumentáció szerint az adott munkaterülethez hozzáférő bármely API-kulccsal elérhetők az ott feltöltött fájlok. A példa ugyanazt a kulcsot használja a letöltéshez, mint a létrehozáshoz. Soha ne fogadjon el file_id-t végfelhasználóktól vagy más nem megbízható forrásból. Tárolja ezeket az azonosítókat a szerveren, és saját alkalmazásában tartsa fenn a felhasználók és fájljaik közötti megfeleltetést.
A fájl metaadatait külön ellenőrizze: tartalmaznia kell a downloadable: true értéket. A dokumentáció lehetővé teszi a skillek vagy a kódvégrehajtási eszköz által létrehozott fájlok letöltését; az Ön által feltöltött fájloknál downloadable: false szerepel, és a letöltési kísérlet 400-as hibát ad vissza. A munkaterülethez való hozzáférés és egy adott fájl letöltésének lehetősége két külön követelmény.
Többfelhasználós alkalmazás esetén a Files API dokumentációja ügyfelenként külön munkaterületet javasol a fájlok elkülönítésére. Ez az ajánlás kifejezetten a fájlokra vonatkozik; ne terjessze ki minden entitásra és engedélyre anélkül, hogy ellenőrizné a vonatkozó API-t.
Kész skillek és egyéni skillek
A kész skillek azonosítói: pptx, xlsx, docx és pdf. A skillek listájának referenciájában a custom forrás a munkaterületre korlátozottként, míg az anthropic megosztottként és csak olvashatóként van leírva.
Az első példában szereplő version: "latest" a skill legutóbb közzétett verzióját jelenti. Reprodukálható integrációnál vegye figyelembe, hogy ez a kiválasztás változhat; rögzített verzióra váltáshoz a használt skill egy létező verzióját kell kiválasztania, nem pedig egy példából kitalált azonosítót.
Korlátok és következő lépés
A példa csak egy prezentáció kész skilllel való létrehozását és letöltését mutatja be. Egyéni skillek feltöltését, törlését és harmadik fél szolgáltatásaihoz való hozzáférést itt nem teszteltük. Ezekhez külön ellenőrizni kell a vonatkozó API-t.
Ha a feladata a Claude felületén lévő fájlokat érinti, külön útmutató szól arról, hogyan tölthet fel fájlt Claude-ba. Közvetlen hívásokhoz olvassa el, hogyan számítható ki az API tokenhasználata. Terminálügynökben végzett munkához olvassa el, hogyan válasszon Claude Code skilleket: ezeket más módon kell csatlakoztatni.
Az első ellenőrzéshez elegendő egyetlen kész pptx skill: vizsgálja meg a választ, töltsön le egy olyan fájlt, amelynek letöltése engedélyezett, majd nyissa meg. Az ellenőrzés után adjon hozzá egyéni skilleket, és alakítson ki hozzáférés-elkülönítést az ügyfelek között.
Ha készen áll, ismerkedjen meg az Ailoot szolgáltatással.
További részletek
Kérdések és válaszok: Agent Skills a Claude API-ban: hogyan használjunk kész skillt Claude Code nélkül
Miért nem elég a file_id a prezentáció késznek nyilvánításához?
Az azonosító azt jelzi, hogy egy fájl visszaérkezett, nem azt, hogy használható prezentáció. A metaadataiban ellenőrizd a downloadable: true értéket, munkaterületi hozzáféréssel töltsd le, majd megnyitva ellenőrizd a formátumát, a diák számát és a szöveget.
Bármely, a Claude Files API-ba feltöltött fájlt letölthetem?
Nem. Az útmutató megkülönbözteti a downloadable: true jelzésű generált fájlokat és a downloadable: false jelzésű feltöltött fájlokat. A munkaterületi hozzáférés és egy konkrét fájl letöltési engedélye külön ellenőrzés; ne fogadj el tetszőleges fájlazonosítókat végfelhasználóktól.