OpenAPIConnector

OpenAPIConnector

Haystack 생태계와 OpenAPI 서비스 사이의 인터페이스 역할을 하는 컴포넌트예요.

출처: 문서

본문

MCP를 대신 고려해 보세요: 이 OpenAPI 컴포넌트들은 Haystack을 외부 API에 연결하는 레거시 방식이에요. 대부분의 사용 사례에서는 MCPTool을 권장해요. 파이프라인과 에이전트가 외부 툴·서비스를 쓰도록 하는 현대적이고 표준화된 방법이기 때문이죠.

OpenAPIConnector는 OpenAPI(구 Swagger) 스펙에 정의된 REST 엔드포인트를 직접 호출할 수 있게 해 주는 Haystack 생태계의 컴포넌트예요. Haystack 파이프라인과 OpenAPI 표준을 따르는 REST API 사이의 다리 역할을 하면서, 동적 메서드 호출·인증·파라미터 처리를 지원해요.

OpenAPIConnector를 쓰려면 openapi-haystack 패키지가 설치돼 있어야 해요.

pip install openapi-haystack

LLM과 함께 동작하는 OpenAPIServiceConnector와 달리, OpenAPIConnector는 명시적 입력 인자로 REST 엔드포인트를 직접 호출해요.

더 알아보기 (Learn more)

단독으로 쓰기

OpenAPI 스펙과 다른 파라미터를 넘겨 OpenAPIConnector를 단독으로 초기화하고 사용할 수 있어요.

from haystack.utils import Secret
from haystack_integrations.components.connectors.openapi import OpenAPIConnector


connector = OpenAPIConnector(
    openapi_spec="https://bit.ly/serperdev_openapi",
    credentials=Secret.from_env_var("SERPERDEV_API_KEY"),
    service_kwargs={"config_factory": my_custom_config_factory},
)

response = connector.run(
    operation_id="search",
    arguments={"q": "Who was Nikola Tesla?"},
)

출력

OpenAPIConnector는 서비스 응답을 담은 사전을 돌려줘요.

{
    "response": { // here goes REST endpoint response JSON
    }
}

파이프라인에서 쓰기

OpenAPIConnector는 Haystack 파이프라인에 통합해서 OpenAPI 서비스와 상호작용할 수 있어요. 예를 들어 파이프라인에 OpenAPIConnector를 이렇게 연결할 수 있어요.

from haystack import Pipeline
from haystack_integrations.components.connectors.openapi import OpenAPIConnector
from haystack.dataclasses.chat_message import ChatMessage
from haystack.utils import Secret


# Initialize the OpenAPIConnector
connector = OpenAPIConnector(
    openapi_spec="https://bit.ly/serperdev_openapi",
    credentials=Secret.from_env_var("SERPERDEV_API_KEY"),
)

# Create a ChatMessage from the user
user_message = ChatMessage.from_user(text="Who was Nikola Tesla?")

# Define the pipeline
pipeline = Pipeline()
pipeline.add_component("openapi_connector", connector)

# Run the pipeline
response = pipeline.run(
    data={
        "openapi_connector": {
            "operation_id": "search",
            "arguments": {"q": user_message.text},
        },
    },
)

# Extract the answer from the response
answer = response.get("openapi_connector", {}).get("response", {})
print(answer)