ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Haystack Connectors 深度指南:基于 OpenAPI 规范连接外部服务(OpenAPIServiceConnector 与 OpenAPIConnector 全解析)

Haystack Connectors 深度指南:基于 OpenAPI 规范连接外部服务(OpenAPIServiceConnector 与 OpenAPIConnector 全解析) Haystack Connectors 深度指南基于 OpenAPI 规范连接外部服务OpenAPIServiceConnector 与 OpenAPIConnector 全解析【免费下载链接】haystackOpen-source AI orchestration framework for building context-engineered, production-ready LLM applications. Design modular pipelines and agent workflows with explicit control over retrieval, routing, memory, and generation. Built for scalable agents, RAG, multimodal applications, semantic search, and conversational systems.项目地址: https://gitcode.com/GitHub_Trending/ha/haystack本篇技术指南以 Haystack 2.18 版本官方 API 文档 connectors_api.md 为骨架系统讲解 Haystack 中两个用于对接外部 REST 服务的连接器组件面向 LLM 工具调用Function Calling场景的OpenAPIServiceConnector以及面向开发者直接调用 REST 端点的OpenAPIConnector。读完本文你将掌握二者的初始化参数、run方法输入输出契约、序列化机制并理解它们在 RAG、Agent 工作流中的典型接入方式以及 Haystack 官方对这两类组件的演进与迁移建议。为什么需要 Connectors连接 Haystack 与外部服务在构建生产级 LLM 应用时模型本身并不具备访问外部世界的能力。无论是搜索引擎、数据库、还是第三方 SaaS API都需要通过一组标准化的连接器组件将外部服务的调用能力暴露给 Haystack 管线Pipeline或 Agent。Connectors连接器正是承担这一角色的组件族。本文聚焦的OpenAPIServiceConnector与OpenAPIConnector均以OpenAPI原 Swagger规范为基础OpenAPI 规范是一份用 JSON/YAML 描述的机器可读文档声明了服务的全部端点、请求参数、鉴权方式与响应结构。只要服务方提供了 OpenAPI 规范Haystack 就能动态解读它并完成调用无需为每个服务手写专用集成代码。OpenAPIServiceConnector让 LLM 自主调用 OpenAPI 服务组件定位OpenAPIServiceConnector位于haystack.components.connectors模块其职责是将 Haystack 框架连接到 OpenAPI 服务根据 OpenAPI 规范中定义的操作operation来调用服务。它与 Haystack 的ChatMessage数据类深度集成消息message中的载荷payload用于确定要调用的方法名和要传入的参数。具体而言消息载荷应当是一个OpenAI JSON 格式的函数调用字符串其中包含方法名method name与传给该方法的参数组件解析后据此在 OpenAPI 服务上发起调用服务响应再以ChatMessage的形式返回。前置组件OpenAPIServiceToFunctions在正式使用OpenAPIServiceConnector之前用户通常需要先用OpenAPIServiceToFunctions组件解析服务的端点参数。该组件将 OpenAPI 规范翻译成 LLM 可理解的函数描述functions供具备函数调用能力的生成器使用。因此一个典型的完整链路是OpenAPI 规范 ── OpenAPIServiceToFunctions ── OpenAIChatGeneratorLLM 生成函数调用载荷 │ v OpenAPIServiceConnector执行真实 API 调用 │ v ChatMessage 响应官方使用示例Serper.dev 搜索服务文档给出的示例以 https://serper.dev/ 服务Google 搜索引擎 API为对象展示了OpenAPIServiceConnector的直接调用方式import json import requests from haystack.components.connectors import OpenAPIServiceConnector from haystack.dataclasses import ChatMessage fc_payload [{function: {arguments: {q: Why was Sam Altman ousted from OpenAI?}, name: search}, id: call_PmEBYvZ7mGrQP5PUASA5m9wO, type: function}] serper_token your_serper_dev_token serperdev_openapi_spec json.loads(requests.get(https://bit.ly/serper_dev_spec).text) service_connector OpenAPIServiceConnector() result service_connector.run(messages[ChatMessage.from_assistant(json.dumps(fc_payload))], service_openapi_specserperdev_openapi_spec, service_credentialsserper_token) print(result) {service_response: [ChatMessage(_roleChatRole.ASSISTANT: assistant, _content[TextContent(text {searchParameters: {q: Why was Sam Altman ousted from OpenAI?, type: search, engine: google}, answerBox: {snippet: Concerns over AI safety and OpenAIs role in protecting were at the center of Altmans brief ouster from the company....示例解读fc_payload一个 OpenAI 函数调用格式的列表包含function.name方法名search、function.argumentsJSON 字符串{q: ...}与id、type字段service_openapi_spec通过requests.get拉取的 Serper.dev OpenAPI 规范 JSONservice_credentialsSerper.dev 的 API Token返回结果service_response键对应一个ChatMessage列表消息的content属性承载 JSON 格式的服务响应如搜索参数与answerBox摘要。注意文档特别强调OpenAPIServiceConnector通常不直接单独使用而是作为管线的一部分与OpenAPIServiceToFunctions组件及具备函数调用能力的OpenAIChatGenerator组件配合。上例只是为了演示而直接手工构造了函数调用载荷真实场景中该载荷一般由OpenAIChatGenerator根据OpenAPIServiceToFunctions生成的函数描述自动产出。构造参数OpenAPIServiceConnector.initdef __init__(ssl_verify: Optional[Union[bool, str]] None)参数类型默认值说明ssl_verifyOptional[Union[bool, str]]None决定对请求是否启用 SSL 校验若传入字符串则该字符串将被用作 CA证书颁发机构传True/None执行标准 SSL 校验传False跳过 SSL 校验用于自签名证书等非生产环境传字符串将该字符串作为自定义 CA 证书使用适用于企业内部 CA 场景。run 方法执行服务调用component.output_types(service_responsedict[str, Any]) def run( messages: list[ChatMessage], service_openapi_spec: dict[str, Any], service_credentials: Optional[Union[dict, str]] None ) - dict[str, list[ChatMessage]]入参说明参数类型说明messageslist[ChatMessage]待处理的聊天消息列表最后一条消息必须包含工具调用tool calls组件会解析这条消息service_openapi_specdict[str, Any]服务的 OpenAPI JSON 规范对象所有$ref引用必须已预先解析完毕service_credentialsOptional[Union[dict, str]]与服务进行认证所用的凭据当前仅支持 OpenAPI 安全方案中的http与apiKey两类异常若最后一条消息不是来自 assistant或不包含工具调用将抛出ValueError。返回值一个字典包含键service_response其值为ChatMessage列表。每个ChatMessage对应一条服务响应响应内容为 JSON 格式字符串存放在该消息的content属性中。序列化to_dict 与 from_dictdef to_dict() - dict[str, Any]将组件序列化为字典。从源码结构看OpenAPIServiceConnector的构造参数仅有ssl_verify一项因此序列化结果也只需保留该配置即可无损重建。classmethod def from_dict(cls, data: dict[str, Any]) - OpenAPIServiceConnector从字典反序列化组件实例。data为待反序列化的字典返回反序列化后的组件。这两个方法让连接器可以无缝嵌入 Haystack 的管线序列化/反序列化体系实现管线的 YAML/JSON 持久化与加载。OpenAPIConnector直接按 operationId 调用 REST 端点组件定位OpenAPIConnector位于haystack.components.connectors.openapi模块其定位与前者不同它无需 LLM 参与而是由开发者或管线中的其他组件直接传入operation_id与参数实现对 OpenAPI 规范中定义的 REST 端点的直接调用。文档对其定位的描述是OpenAPIConnector serves as a bridge between Haystack pipelines and any REST API that follows the OpenAPI (formerly Swagger) specification. 它动态解析 API 规范并提供执行 API 操作的统一接口。通常的调用方式是从 Haystack 管线的run方法或管线中其他组件向其传入输入参数。官方使用示例from haystack.utils import Secret from haystack.components.connectors.openapi import OpenAPIConnector connector OpenAPIConnector( openapi_spechttps://bit.ly/serperdev_openapi, credentialsSecret.from_env_var(SERPERDEV_API_KEY), service_kwargs{config_factory: my_custom_config_factory} ) response connector.run( operation_idsearch, arguments{q: Who was Nikola Tesla?} )要点提示文档 Notesoperation_id参数即run的operation_id是必需的service_kwargs参数可选用于向 OpenAPIClient 传递额外选项例如自定义的config_factory。构造参数OpenAPIConnector.initdef __init__(openapi_spec: str, credentials: Optional[Secret] None, service_kwargs: Optional[dict[str, Any]] None)参数类型默认值说明openapi_specstr必填OpenAPI 规范的URL、文件路径或原始字符串credentialsOptional[Secret]None包装在Secret中的 API Key 或服务凭据推荐通过Secret.from_env_var(...)从环境变量安全读取service_kwargsOptional[dict[str, Any]]None透传给OpenAPIClient.from_spec()的额外关键字参数例如自定义config_factory或其他客户端配置三个入参的配合使组件足够灵活openapi_spec支持三种来源URL/文件/字符串credentials借助haystack.utils.Secret避免明文密钥出现在代码与序列化文件中service_kwargs则为底层 OpenAPIClient 的定制化留出扩展口。run 方法按 operationId 执行component.output_types(responsedict[str, Any]) def run(operation_id: str, arguments: Optional[dict[str, Any]] None) - dict[str, Any]参数类型默认值说明operation_idstr必填要调用的 OpenAPI 规范中的operationIdargumentsOptional[dict[str, Any]]None端点的可选参数查询参数、路径参数或请求体参数返回值包含服务响应的字典。注意其输出类型注解为dict[str, Any]键为response。序列化to_dict 与 from_dictdef to_dict() - dict[str, Any] def from_dict(cls, data: dict[str, Any]) - OpenAPIConnector与OpenAPIServiceConnector一致OpenAPIConnector也实现了to_dict/from_dict对偶方法支持在 Haystack 管线序列化体系中持久化与恢复credentials通过Secret机制安全序列化通常只保留环境变量名而非明文值。两大连接器的选型对比维度OpenAPIServiceConnectorOpenAPIConnector模块位置haystack.components.connectorshaystack.components.connectors.openapi适用场景LLM 工具调用Function Calling链路开发者/管线组件直接调用 REST 端点调用方由 LLM 生成的函数调用载荷驱动由operation_id显式驱动关键入参messagesservice_openapi_specservice_credentialsoperation_idarguments鉴权方式OpenAPI 安全方案http/apiKey通过Secret传入凭据是否需要 LLM通常需要配合OpenAPIServiceToFunctions与OpenAIChatGenerator不需要输出service_responseChatMessage列表response字典简言之如果目标是让 Agent/LLM 自主决定调用哪个外部 API选OpenAPIServiceConnector链路如果目标是把某个外部 API 作为管线中的一个确定步骤选OpenAPIConnector。组件演进已废弃并迁移至 openapi-haystack 包需要特别说明的是尽管上述两个组件在 2.18 版本 API 文档connectors_api.md中是完整、可用的组件但 Haystack 官方在其后的演进中已将其标记为废弃deprecated。仓库中的版本发布说明 deprecate-openapi-components-e5f0f7470218fcc4.yaml 明确记录OpenAPIConnector、OpenAPIServiceConnector和OpenAPIServiceToFunctions已废弃并将在 Haystack 3.0 中移除。它们将迁移到openapi-haystack包。如需继续使用这些组件官方给出的迁移路径是pip install openapi-haystack并将导入语句更新为from haystack_integrations.components.connectors.openapi import OpenAPIConnector from haystack_integrations.components.connectors.openapi import OpenAPIServiceConnector from haystack_integrations.components.converters.openapi import OpenAPIServiceToFunctions同一份发布说明还给出了官方推荐的新方向这些组件是连接 Haystack 与外部 API 的遗留方式。对大多数用例建议改用MCPTool——它是让管线和 Agent 访问外部工具与服务的现代化、标准化方式。这一演进脉络在 toolset.py 中亦有印证Toolset 文档描述了如何从外部来源如 MCP 服务器、OpenAPI URL 或本地 OpenAPI 规范动态解析 Tool 实例并建议在序列化外部端点描述符而非 Tool 本身时采取相应策略。可见新一代 Haystack 工具体系MCPTool / Toolset正在吸收并取代旧版 Connectors 的职能。实战接入建议结合上述 API 契约与仓库演进信息给出如下落地建议新项目优先使用 MCPTool / ToolsetHaystack 官方已明确 MCPTool 是现代标准方案新建管线与 Agent 时应优先采用以获得统一的工具管理、序列化与安全模型。维护存量项目时按迁移路径升级仍在 2.18~2.x 版本使用旧连接器的项目可先行安装openapi-haystack并替换导入路径平滑过渡后再评估是否迁移到 MCPTool。调用 OpenAPI 前先解析规范无论选择哪种连接器都要确保 OpenAPI 规范中$ref已解析OpenAPIServiceConnector的run明确要求All the refs should already be resolved否则动态调用会因引用缺失而失败。凭据安全优先使用Secret.from_env_var(...)从环境变量注入密钥避免在代码、日志与序列化文件中泄露同时确认服务支持的鉴权方案http或apiKey与组件能力匹配。至此你已完整掌握 Haystack 中两个 OpenAPI 连接器的 API 契约、典型用法与演进方向可以据此在自己的管线与 Agent 中做出正确的组件选型。【免费下载链接】haystackOpen-source AI orchestration framework for building context-engineered, production-ready LLM applications. Design modular pipelines and agent workflows with explicit control over retrieval, routing, memory, and generation. Built for scalable agents, RAG, multimodal applications, semantic search, and conversational systems.项目地址: https://gitcode.com/GitHub_Trending/ha/haystack创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表