2026/9/11 21:20:56

Haystack 与 Eden AI 集成指南:用统一 API 解锁多厂商 Embedding 与 500+ 大模型

Haystack 与 Eden AI 集成指南:用统一 API 解锁多厂商 Embedding 与 500+ 大模型 Haystack 与 Eden AI 集成指南用统一 API 解锁多厂商 Embedding 与 500 大模型【免费下载链接】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/haystackEden AI 是一个 OpenAI 兼容的统一 API 网关通过单一 API Key 即可路由到 OpenAI、Mistral、Cohere、Google、Anthropic、Jina 等多家提供商的模型并提供欧盟数据驻留EU data residency与内置的供应商故障转移能力。本指南基于 docs-website/reference/integrations-api/edenai.md 参考文档完整讲解 Haystack 中三个 Eden AI 集成组件——EdenAITextEmbedder、EdenAIDocumentEmbedder与EdenAIChatGenerator的安装、配置、独立使用与管线集成方式并结合 Haystack 核心源码剖析其底层继承关系与参数行为。读完本文你将能够用 Eden AI 快速搭建一套从文档向量化到 RAG 问答的完整检索增强生成管线。一、Eden AI 集成概览一个 Key 连接多家模型Haystack 官方集成仓库中维护了edenai-haystack包它把 Eden AI 的 OpenAI 兼容接口包装为三个标准 Haystack 组件全部位于haystack_integrations.components命名空间下组件模块路径基类用途EdenAITextEmbedderhaystack_integrations.components.embedders.edenaiOpenAITextEmbedder将单个字符串如查询编码为向量EdenAIDocumentEmbedderhaystack_integrations.components.embedders.edenaiOpenAIDocumentEmbedder批量计算 Document 列表的嵌入结果写入每个 Document 的embedding字段EdenAIChatGeneratorhaystack_integrations.components.generators.edenaiOpenAIChatGenerator基于对话消息列表生成聊天回复支持流式与函数调用从源码结构看这三个组件并非从零实现而是分别继承 Haystack 核心仓库中的 OpenAITextEmbedder、OpenAIDocumentEmbedder与 OpenAIChatGenerator仅将api_base_url指向 Eden AI 的 OpenAI 兼容端点默认https://api.edenai.run/v3从而保留 OpenAI 系列组件全部的标准配置能力。这正是 Eden AI 集成的设计精髓协议复用、端点替换。三者都以provider/model形式选择模型例如openai/text-embedding-3-small、mistral/mistral-embed、anthropic/claude-sonnet-4-5。安装方式统一为pip install edenai-haystackAPI Key 的推荐做法是设置为EDENAI_API_KEY环境变量组件初始化时默认通过Secret.from_env_var(EDENAI_API_KEY)读取也可在初始化时用Secret.from_token(...)显式传入。二、EdenAITextEmbedder把查询字符串变成向量EdenAITextEmbedder用于将单个字符串典型场景是用户查询转换为捕获其语义的向量其输出可直接连接到 embedding Retriever 完成语义检索。2.1 初始化参数与默认值参考 edenai.md 中的__init__签名完整参数如下参数类型默认值说明modelstropenai/text-embedding-3-smallEden AI 嵌入模型名provider/model格式api_keySecretSecret.from_env_var(EDENAI_API_KEY)Eden AI API Keyapi_base_urlstr \| Nonehttps://api.edenai.run/v3Eden AI API 基础地址prefixstr追加到每个待编码文本开头的字符串suffixstr追加到每个待编码文本结尾的字符串timeoutfloat \| NoneNoneAPI 调用超时未设置时回退到OPENAI_TIMEOUT环境变量再回退到 30 秒max_retriesint \| NoneNone内部错误后的最大重试次数未设置时回退到OPENAI_MAX_RETRIES环境变量再回退到 5http_client_kwargsdict[str, Any] \| NoneNone用于配置自定义httpx.Client/httpx.AsyncClient的关键字参数字典关于timeout与max_retries的回落机制可以从基类源码得到印证haystack/components/embedders/openai_text_embedder.py 中执行了os.environ.get(OPENAI_TIMEOUT, 30.0)与os.environ.get(OPENAI_MAX_RETRIES, 5)的取值逻辑——即两个 Eden AI 组件直接继承了 OpenAI 组件的环境变量约定这也是文档中“默认 30 秒 / 默认 5 次”数值的出处。组件还暴露了SUPPORTED_MODELS类属性参考文档给出的非穷举清单为SUPPORTED_MODELS: list[str] [ openai/text-embedding-3-small, openai/text-embedding-3-large, mistral/mistral-embed, cohere/embed-english-v3.0, google/text-embedding-004, ]需要注意这只是内置的非穷举示例清单Eden AI 实际支持的完整模型列表以其官方模型目录为准model参数并不受该清单限制。2.2 独立使用from haystack.utils import Secret from haystack_integrations.components.embedders.edenai import EdenAITextEmbedder embedder EdenAITextEmbedder( api_keySecret.from_token(your-api-key), modelopenai/text-embedding-3-small, ) result embedder.run(textHow can I use the Eden AI embedding models with Haystack?) print(result[embedding]) # [-0.0015687942504882812, 0.052154541015625, 0.037109375...]run方法接收一个text字符串返回embedding浮点数向量列表与meta元数据字典两个输出。2.3 在查询管线中的典型位置EdenAITextEmbedder最常见的管线位置是查询/RAG 管线中位于 embedding Retriever 之前用于把用户查询编码成与索引阶段相同模型空间的向量完整示例见 edenaitextembedder.mdx。三、EdenAIDocumentEmbedder批量文档向量化EdenAIDocumentEmbedder计算一组 Document 的嵌入并将结果向量写入每个 Document 的embedding字段输出可直接交给DocumentWriter或文档存储。其参数在EdenAITextEmbedder基础上增加了三个批量嵌入专属项参数类型默认值说明batch_sizeint32一次编码的 Document 数量progress_barboolTrue是否显示进度条生产环境建议关闭以保持日志干净meta_fields_to_embedlist[str] \| NoneNone需要与文档文本一起编码的元数据字段列表embedding_separatorstr\n元数据字段拼接到文档文本时使用的分隔符其余参数model、api_key、api_base_url、prefix、suffix、timeout、max_retries、http_client_kwargs与EdenAITextEmbedder完全一致。其中meta_fields_to_embed与embedding_separator的组合让文档元数据如标题、作者参与向量编码从而提升检索时对上下文信息的敏感度。3.1 独立使用from haystack.dataclasses import Document from haystack_integrations.components.embedders.edenai import EdenAIDocumentEmbedder doc Document(contentI love pizza!) document_embedder EdenAIDocumentEmbedder(modelopenai/text-embedding-3-small) result document_embedder.run([doc]) print(result[documents][0].embedding) # [0.017020374536514282, -0.023255806416273117, ...]3.2 在索引管线中的典型位置EdenAIDocumentEmbedder最常见的管线位置是索引管线中位于DocumentWriter之前与转换器Converter衔接构成读取文件 → 向量化 → 写入存储的标准流程。完整示例见 edenaidocumentembedder.mdx其中EdenAIDocumentEmbedder采用文档中推荐的 API Key 配置方式并依赖EDENAI_API_KEY环境变量。四、EdenAIChatGenerator接入 500 大模型的聊天生成器EdenAIChatGenerator继承OpenAIChatGenerator将api_base_url指向 Eden AI 的 OpenAI 兼容端点从而通过一个 Key 访问 OpenAI、Anthropic、Mistral、Google、Cohere 等 500 模型的聊天补全能力。其典型管线位置是在ChatPromptBuilder之后接收ChatMessage列表输出replies列表。4.1 初始化参数与默认值参数类型默认值说明api_keySecretSecret.from_env_var(EDENAI_API_KEY)Eden AI API Keymodelstropenai/gpt-4o-mini模型名provider/model格式如anthropic/claude-sonnet-4-5、mistral/mistral-large-latest、google/gemini-2.5-flashstreaming_callbackStreamingCallbackT \| NoneNone流式响应时对每个增量块调用的回调函数generation_kwargsdict[str, Any] \| NoneNone传给底层生成 API 的可选参数如max_tokens、temperature、top_pEden AI 特有参数如 fallback 模型会原样转发timeoutint \| NoneNone等待 API 响应的最大秒数max_retriesint \| NoneNone请求失败的最大重试次数toolsToolsType \| NoneNone供模型进行函数调用的工具列表或单个Toolsettools_strictboolFalse为True时启用工具调用的严格 Schema 约束http_client_kwargsdict[str, Any] \| NoneNone传给底层 HTTP 客户端的可选关键字参数值得注意的细节是generation_kwargs它不仅接受 OpenAI 风格参数还会把 Eden AI 特有的参数例如备用 fallback 模型原样转发到 Eden AI 端点因此你可以利用 Eden AI 的供应商故障转移能力提升生成环节的可用性。4.2 工具调用Function Callingtools参数接受三种形态Tool对象列表、单个Toolset、或两者混合。Toolset允许把相关工具组织成逻辑分组同时仍可附带独立的Tool适合构建 Agent 风格的多工具工作流。tools_strictTrue时启用严格的 Schema 遵循保证模型输出的工具调用参数符合声明结构。4.3 流式输出该生成器支持流式输出将回调函数传给streaming_callback初始化参数即可让 Token 边生成边返回。Haystack 内置的print_streaming_chunk工具函数可直接用作该回调见 edenaichatgenerator.mdx 中的独立使用示例。4.4 独立使用from haystack_integrations.components.generators.edenai import EdenAIChatGenerator from haystack.dataclasses import ChatMessage messages [ChatMessage.from_user(Whats Natural Language Processing?)] client EdenAIChatGenerator(modelmistral/mistral-large-latest) response client.run(messages) print(response[replies][0].text)五、端到端实战基于 URL 内容的 RAG 问答管线将三个组件组合起来可以构建完整的 RAG 应用。下面是从 edenaichatgenerator.mdx 继承的实战示例抓取网页 → 转文档 → 构造提示 → 用 Eden AI 生成回答。from haystack import Pipeline from haystack.components.builders import ChatPromptBuilder from haystack.components.fetchers import LinkContentFetcher from haystack.components.converters import HTMLToDocument from haystack.dataclasses import ChatMessage from haystack_integrations.components.generators.edenai import EdenAIChatGenerator fetcher LinkContentFetcher() converter HTMLToDocument() prompt_builder ChatPromptBuilder(variables[documents]) llm EdenAIChatGenerator(modelmistral/mistral-large-latest) message_template Answer the following question based on the contents of the article: {{query}}\n Article: {{documents[0].content}} \n messages [ChatMessage.from_user(message_template)] rag_pipeline Pipeline() rag_pipeline.add_component(namefetcher, instancefetcher) rag_pipeline.add_component(nameconverter, instanceconverter) rag_pipeline.add_component(prompt_builder, prompt_builder) rag_pipeline.add_component(llm, llm) rag_pipeline.connect(fetcher.streams, converter.sources) rag_pipeline.connect(converter.documents, prompt_builder.documents) rag_pipeline.connect(prompt_builder.prompt, llm.messages) question What is Eden AI? result rag_pipeline.run( { fetcher: {urls: [https://www.edenai.co/]}, prompt_builder: { template_variables: {query: question}, template: messages, }, }, ) print(result[llm][replies][0].text)如果需要完整的索引 检索闭环可在该生成管线之前叠加一个由EdenAIDocumentEmbedder、DocumentWriter与InMemoryDocumentStore组成的索引管线参考 edenaidocumentembedder.mdx再用EdenAITextEmbedderInMemoryEmbeddingRetriever完成查询编码与向量检索参考 edenaitextembedder.mdx。两个嵌入组件务必使用同一个provider/model模型以保证查询与文档落在同一向量空间中。六、序列化与注意事项三个组件都实现了to_dict()方法将组件序列化为字典参考 edenai.md配合 Haystack 的 YAML 管线定义可以持久化、版本化并复用你的 Eden AI 管线。实践中的几点建议API Key 管理优先使用EDENAI_API_KEY环境变量避免把密钥硬编码进代码如要显式传入请使用 Haystack 的SecretAPISecret.from_token或Secret.from_env_var。超时与重试不显式设置timeout/max_retries时组件会回退读取OPENAI_TIMEOUT默认 30 秒与OPENAI_MAX_RETRIES默认 5这一行为由基类 openai_text_embedder.py 中的环境变量解析逻辑保证。生产环境日志将progress_barFalse可避免批量嵌入时的进度条污染生产日志。数据驻留与合规Eden AI 提供欧盟数据驻留与供应商 fallback适合对数据主权有要求的场景具体模型可用性以 Eden AI 官方模型目录为准SUPPORTED_MODELS仅为参考示例。七、总结edenai-haystack集成通过复用 Haystack 的 OpenAI 组件基类把 Eden AI 的模型聚合能力无缝接入 Haystack 生态EdenAITextEmbedder负责查询向量化EdenAIDocumentEmbedder负责文档批量向量化EdenAIChatGenerator负责基于 500 模型的聊天生成含流式与工具调用。三者共享provider/model模型命名约定与EDENAI_API_KEY密钥体系配合 Haystack 的 Pipeline 机制即可快速搭建多厂商可切换、数据驻留友好的 RAG 与 Agent 应用。相关组件使用指南与 API 参考可继续查阅 edenaitextembedder.mdx、edenaidocumentembedder.mdx、edenaichatgenerator.mdx 及 参考文档。【免费下载链接】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),仅供参考