본문으로 건너뛰기

OpenAPI Ingestion

OpenAPI ingestion은 Swagger 2.0과 OpenAPI 3.x source를 정규화된 ToolSchema로 변환합니다. 각 HTTP operation은 method, path, operation id, summary, parameter, schema, security hint, semantic metadata, IO contract를 가진 searchable tool이 됩니다.

이 페이지는 engine-level ingestion 경로를 설명합니다. DB row, user session, auth profile, cookie, HTTP execution 같은 product concern은 adapter 책임입니다.

언제 사용하나

다음 상황에서 사용합니다.

  • tool catalog가 Swagger UI URL 또는 직접 JSON/YAML spec에서 시작함
  • 하나의 API collection에 수백, 수천 개 operation이 있음
  • operation description에 noise가 많아 deterministic metadata가 필요함
  • planning과 execution을 위해 request/response contract가 필요함
  • 나중에 UI에서 점검하고 검증할 stored artifact가 필요함

live credential을 붙이는 용도로 ingestion을 사용하지 않습니다. Runtime auth는 adapter가 plan을 실행하는 시점에만 해석해야 합니다.

Source Types

SourceSupported ShapeNotes
Direct fileopenapi.json, swagger.yaml재현 가능한 local test에 적합
Direct URLhttps://.../openapi.jsonremote fetch는 URL safety option을 따름
Swagger UI URLhttps://.../swagger-ui/index.htmlengine이 backing spec URL을 발견
Python dictalready-loaded spectest와 product adapter에 유용
Sequencemultiple specscollection artifact builder에서 사용

private/internal URL은 기본적으로 차단됩니다. 신뢰된 infrastructure에서만 allow_private_hosts=True를 전달합니다.

Minimal Flow

artifact를 어떻게 사용할지에 따라 entry point를 고릅니다.

from graph_tool_call import ToolGraph

graph = ToolGraph.from_url("https://petstore3.swagger.io/api/v3/openapi.json")

for tool in graph.retrieve("find pets by status", top_k=5):
print(tool.name, tool.description)

빠른 source smoke test에는 search, 코드 연결에는 ToolGraph.from_url(), product가 graph와 readiness/semantic/edge-quality metadata를 저장해야 할 때는 build-openapi-collection을 사용합니다.

Collection Artifact 만들기

product adapter가 결과를 저장하거나 UI에서 inspect해야 한다면 build_openapi_collection_artifact()를 사용합니다.

from graph_tool_call.graphify import build_openapi_collection_artifact

artifact = build_openapi_collection_artifact(
"openapi.json",
derive_semantic_metadata=True,
promote_contract_signals=True,
context_field_names={"mallNo", "siteNo"},
paging_field_names={"page", "size"},
search_filter_field_names={"keyword", "searchType"},
)

print(artifact["metadata"]["tool_count"])
print(artifact["semantic_summary"])
print(artifact["readiness_report"]["summary"])

Artifact Options

OptionDefaultPurpose
required_onlyFalseingest 중 required schema field만 유지
skip_deprecatedTruedeprecated OpenAPI operation 제외
allow_private_hostsFalseprivate/internal URL fetch 허용
max_response_bytes5_000_000remote spec size 제한
promote_contract_signalsTruerequest/response field를 graph evidence로 승격
max_contract_producers_per_field3field별 producer expansion 상한
derive_semantic_metadataTrueaction/resource/module/result-shape metadata 추론
overwrite_ai_metadataFalse기본적으로 manual metadata 보존
context_field_namesNoneadapter가 전달하는 generic context field name
auth_field_namesNoneadapter가 전달하는 auth field name
paging_field_namesNoneadapter가 전달하는 paging field name
search_filter_field_namesNoneadapter가 전달하는 search/filter field name
metadataNoneartifact에 붙일 product-neutral metadata

product-specific alias는 option으로 전달합니다. engine에 product term을 하드코딩하지 않습니다.

Output Shape

Collection artifact는 일반 graph save shape를 유지하면서 product-facing build fact를 추가합니다.

SectionPurpose
graphserialized graph
toolsnormalized tool schema
metadatabuild version, source, options, collection graph version
semantic_summaryaction/resource/module/result-shape coverage
edge_quality_summarydata-flow, structural, manual, trace, evidence count
readiness_reportdeterministic readiness diagnostics
source_snapshot_manifestsource identity and hash information
ingest_summaryoperation and duplicate handling summary

Stable OpenAPI Metadata

OpenAPI-derived tool에는 아래 metadata가 포함될 수 있습니다.

FieldPurpose
metadata.openapi.methodHTTP method
metadata.openapi.pathoperation path
metadata.openapi.operation_idstable operation identifier
metadata.openapi.parametersquery, path, header, cookie parameter
metadata.openapi.securityOpenAPI security hint
metadata.request_body_schemarequest body schema summary
metadata.response_schemaresponse schema summary
metadata.api_contractengine-level consumes, produces, links
metadata.ai_metadatadeterministic semantic action/resource/module field

Diagnostics

execution을 허용하기 전에 아래 section을 확인합니다.

summary = artifact["readiness_report"]["summary"]
semantic = artifact["semantic_summary"]
edges = artifact["edge_quality_summary"]

print(summary["status"], summary["readiness_score"])
print(semantic["canonical_action_known_rate"])
print(edges["strong_deterministic_evidence_count"])

중요 signal:

  • missing request/response schema
  • 낮은 semantic action/resource coverage
  • weak edge evidence
  • auth required지만 adapter readiness에 표현되지 않음
  • 하나의 module에 너무 많은 unrelated tool이 몰림

Failure Modes

SymptomLikely CauseFix
tool이 생성되지 않음spec URL이 틀렸거나 Swagger UI discovery 실패direct spec URL 사용 또는 trusted private host 허용
response contract 누락OpenAPI response schema가 없거나 unsupported contentspec repair 또는 adapter-side contract repair
unknown action이 많음operation id와 summary가 약함generic alias 또는 curated semantic metadata 추가
producer expansion이 없음response field가 추출되지 않음metadata.api_contract.produces 확인
auth가 일반 data로 보임auth field name이 product-specificadapter에서 auth_field_names 전달

관련 문서