API для ИИ-агентов

Обновлено

Агент может вызывать API faceswap.ing так же, как ваш код. Здесь собраны файлы, по которым он этому учится, и сказано, куда положить каждый.

Agent Skill для Claude

faceswap-api является Agent Skill, то есть одним файлом SKILL.md. Он объясняет Claude, что делает API, как передавать ключ, как читать ответ на запуск, что означает каждый код ошибки и что с ним делать. Ещё он велит Claude сначала сказать, что именно будет запущено, и дождаться согласия, потому что запуск тратит swapz.

В навыке только инструкции, кода в нём нет. Claude делает вызовы своими инструментами и только с тем ключом, который вы ему дали.

Навык написан на английском. Это инструкции для модели, и Claude выполняет их, даже когда вы пишете ему по-русски.

Вставьте в терминал. Команда сохранит SKILL.md в ~/.claude/skills, где его найдёт Claude Code.
faceswap-api.zipSKILL.md

Claude Code

Claude Code загружает личные навыки из ~/.claude/skills, а навыки репозитория из его папки .claude/skills. Положите SKILL.md в папку faceswap-api в любом из этих мест, задайте FACESWAP_API_KEY и попросите Claude сделать замену или написать код интеграции. Навык загрузится, когда запрос ему подходит.

Установка для Claude Code

bash
mkdir -p ~/.claude/skills/faceswap-api
curl -fsSL https://faceswap.ing/docs/api/skill.md -o ~/.claude/skills/faceswap-api/SKILL.md

# The skill reads the key from the environment. Set it where Claude Code runs.
export FACESWAP_API_KEY="fsper_..."

Приложения Claude

В приложениях Claude скачайте zip и загрузите его в настройках, в разделе Skills. Приложения подключают навык так же.

Там навык полезнее всего для того, чтобы писать и проверять код интеграции. Чтобы Claude вызывал API сам, среде выполнения кода нужен сетевой доступ к faceswap.ing, а ключ нужно передать в песочницу, не вводя его в чат.

Любой агент: Markdown и OpenAPI

По адресу https://faceswap.ing/ru/docs/api.md лежат быстрый старт и полное руководство на русском, одним файлом Markdown. То же на английском лежит по адресу https://faceswap.ing/docs/api.md. Вставьте адрес в любого агента или чат или добавьте его как документацию в редакторе. https://faceswap.ing/llms.txt ссылается на оба файла вместе с остальным сайтом.

https://faceswap.ing/api/v1/openapi.json описывает в формате OpenAPI 3.1 каждый маршрут и поле. У каждой операции есть operationId: listFaces, listTasks, getTask, launchSwap, listUpscales, getUpscale или launchUpscale. Инструменты, которые превращают документ OpenAPI в инструменты агента, используют его как имя инструмента.

Cursor и другие агенты для кода

В Cursor добавьте файл Markdown как документацию в Cursor Settings, раздел Indexing and Docs, и упоминайте его через @Docs. Или сохраните SKILL.md как правило проекта в .cursor/rules.

Агенты, которые читают файл AGENTS.md, например Codex и агент GitHub Copilot для кода, следуют строке со ссылкой на файл Markdown: Документация API faceswap.ing: https://faceswap.ing/ru/docs/api.md.

OpenAI

Собственный GPT может подключить API как action. Укажите https://faceswap.ing/api/v1/openapi.json как схему, а в аутентификации выберите API key и custom header x-api-key.

В OpenAI Agents SDK оберните в function tools те вызовы, которые нужны агенту. Для большинства задач хватает двух.

Два инструмента для OpenAI Agents SDK

python
import os

import requests
from agents import Agent, Runner, function_tool

API = "https://faceswap.ing/api/v1"
HEADERS = {"x-api-key": os.environ["FACESWAP_API_KEY"]}


@function_tool
def launch_swap(face_image_url: str, target_urls: list[str]) -> dict:
    """Swap the face in face_image_url onto each target URL. Spends swapz."""
    response = requests.post(
        f"{API}/faceswap/tasks",
        headers=HEADERS,
        json={"faceImageUrl": face_image_url, "targetFiles": [{"url": url} for url in target_urls]},
        timeout=120,
    )
    return response.json()


@function_tool
def get_task(task_id: str) -> dict:
    """Read one task: its status, and each finished file's outputUrl."""
    response = requests.get(f"{API}/faceswap/tasks/{task_id}", headers=HEADERS, timeout=30)
    return response.json()


agent = Agent(
    name="Face swap",
    instructions="Launch face swaps with faceswap.ing and report each outputUrl. Ask before launching.",
    tools=[launch_swap, get_task],
)

result = Runner.run_sync(agent, "Swap https://example.com/face.jpg onto https://example.com/photo.jpg")
print(result.final_output)

LangChain

OpenAPI toolkit из LangChain собирает агента прямо по документу. Если обернуть вызовы в функции @tool, как в примере для OpenAI, вы точнее задаёте, что агенту можно делать.

OpenAPI-агент LangChain по документу

python
import os

import requests
from langchain_community.agent_toolkits.openapi import planner
from langchain_community.agent_toolkits.openapi.spec import reduce_openapi_spec
from langchain_community.utilities.requests import RequestsWrapper

spec = reduce_openapi_spec(requests.get("https://faceswap.ing/api/v1/openapi.json", timeout=30).json())
http = RequestsWrapper(headers={"x-api-key": os.environ["FACESWAP_API_KEY"]})

# llm is your chat model. allow_dangerous_requests lets the agent send any
# request the document describes, launches included: use a key on a team
# that holds only what the agent may spend.
agent = planner.create_openapi_agent(spec, http, llm, allow_dangerous_requests=True)
agent.invoke("List my saved faces")

Как ограничить траты агента

Дайте агенту отдельный ключ на команде, где лежит ровно столько, сколько вы готовы позволить ему потратить. Ключ тратит только из кошелька своей команды, и её баланс служит пределом.

Если отозвать ключ в настройках, в разделе «Разработчикам», агент сразу остановится. Лимиты запросов на ключ действуют и для агентов.