资讯动态

Haystack × Ragas 集成指南:用 RagasEvaluator 构建 LLM 驱动的 RAG 质量评估

发布时间:2026/9/14 10:59:34 来源:尧图企业网站定制
Haystack × Ragas 集成指南用 RagasEvaluator 构建 LLM 驱动的 RAG 质量评估【免费下载链接】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/haystackRagas 是一个基于 LLM 的 RAG 评估框架提供 Faithfulness、AnswerRelevancy、ContextPrecision 等一系列开箱即用的生成式评估指标。Haystack 通过ragas-haystack集成包将 Ragas 封装为标准的 Pipeline 组件RagasEvaluator使你能够直接在 Haystack 的评估 Pipeline 中复用 Ragas 的全部现代指标 API。读完本文你将掌握该组件的安装配置、全部构造参数与运行参数、同步/异步两种评估调用方式、多指标并行评估的 Pipeline 实战写法以及组件序列化时的安全反序列化规则。为什么需要 RagasEvaluator把 Ragas 指标搬进 Haystack PipelineHaystack 将基于模型评估Model-Based Evaluation分为两类一类是内置的 LLM 评估器如 FaithfulnessEvaluator、ContextRelevanceEvaluator另一类是与第三方评估框架的集成。目前 Haystack 官方集成了 DeepEval 与 Ragas 两大框架其中 Ragas 的接入组件就是RagasEvaluator见 Evaluators 总览。RagasEvaluator的定位很明确它不关心你的 RAG Pipeline 内部如何取检索、如何做生成而是接收 RAG Pipeline 产出的输入query、documents、response 等用 Ragas 指标对检索质量 生成质量做一次整体打分。在 Haystack 中你既可以把评估 Pipeline 与 RAG Pipeline 分离先存下 RAG 结果、再反复换指标评估不必每次重跑 RAG也可以把评估器挂在 RAG Pipeline 末尾一次pipeline.run()跑完——这两种编排方式在 model-based-evaluation.mdx 中有详细说明而RagasEvaluator同时适用于这两种形态。安装与前置准备RagasEvaluator不是 Haystack 核心库的一部分需要单独安装集成包pip install ragas-haystack该集成包同时依赖ragas框架本身。使用前还需注意两点环境前提OpenAI API KeyRagas 指标在构造时需要配置 LLM以及部分指标需要的 embedding 模型。若使用 OpenAI 作为后端需先设置OPENAI_API_KEY环境变量反序列化场景下也会在加载时读取该变量。Python 异步客户端Ragas 的llm_factory接受 OpenAI 的AsyncOpenAI客户端示例代码中统一通过from openai import AsyncOpenAI创建。核心概念现代 Ragas 指标 API 与 SimpleBaseMetricRagasEvaluator只支持 Ragas 的现代指标 APIragas.metrics.collections。这意味着每个指标必须是SimpleBaseMetric的实例例如Faithfulness、AnswerRelevancy、ContextPrecision、ContextRecall、AnswerCorrectness、SemanticSimilarity等每个指标必须在构造时完成完整配置——尤其是为它绑定 LLMllm_factory创建需要 embedding 的指标如AnswerRelevancy还要绑定 embedding 模型embedding_factory创建。指标的 LLM/embedding 配置不依赖 Haystack 组件而是直接走 Ragas 自身的工厂函数from openai import AsyncOpenAI from ragas.llms import llm_factory from ragas.embeddings import embedding_factory client AsyncOpenAI() llm llm_factory(gpt-4o-mini, clientclient) embeddings embedding_factory(openai, modeltext-embedding-3-small, clientclient)RagasEvaluator 构造参数根据 RagasEvaluator API 参考 与 使用指南构造签名如下__init__(ragas_metrics: list[SimpleBaseMetric], concurrency_limit: int 4) - None参数类型必填说明ragas_metricslist[SimpleBaseMetric]是来自ragas.metrics.collections的现代 Ragas 指标列表每个指标必须在构造时完成完整配置含其 LLM必要时含 embeddingsconcurrency_limitint否默认4允许同时运行的指标评估任务的最大并发数仅在run_async异步方法中生效在 Pipeline 中的典型位置是单独运行或评估 Pipeline 的末尾即先由独立的 RAG Pipeline 生成评估输入再接评估器打分组件定位说明见 ragasevaluator.mdx。run 与 run_async输入参数与返回结构RagasEvaluator提供同步run与异步run_async两个入口两者签名完全一致run( query: str | None None, response: list[ChatMessage] | str | None None, documents: list[Document | str] | None None, reference_contexts: list[str] | None None, multi_responses: list[str] | None None, reference: str | None None, rubrics: dict[str, str] | None None, ) - dict[str, dict[str, MetricResult]]各输入参数的含义与适用指标参数类型说明querystr \| None用户的输入查询评估 RAG 管线时即原始问题responselist[ChatMessage] \| str \| None语言模型或 Agent 生成的回答。可以是字符串也可以是 Haystack 的ChatMessage列表直接承接生成组件的输出documentslist[Document \| str] \| None针对该查询检索到的文档列表接受 HaystackDocument对象或纯字符串reference_contextslist[str] \| None本应被检索到的参考上下文列表评估检索覆盖度时使用multi_responseslist[str] \| None针对该查询生成的多个候选回答referencestr \| None查询的参考答案ground truth用于需要参考答案的指标rubricsdict[str, str] \| None评估评分细则键为分值、值为对应的评分标准描述用于基于 rubric 的指标如DomainSpecificRubrics需要特别说明的是并非所有指标都需要全部参数。具体传入哪些输入取决于你选择了哪些指标——不同指标对输入的要求不同这正是Mandatory run variables随指标变化的原因。例如AnswerRelevancy需要query与response而ContextPrecision/Faithfulness组合需要query、documents、response与reference。返回值结构返回值是一个字典其键固定为result值为指标名 →MetricResult的映射{result: {Faithfulness: MetricResult, ContextPrecision: MetricResult, ...}}同步与异步的选择run同步执行所有指标评估run_async异步执行多个指标的评估任务最多以concurrency_limit默认 4并发运行适合单次评估包含多个指标、希望缩短总耗时的场景。实战四个可直接运行的评估示例以下示例均来自 ragasevaluator.mdx 及 API 参考OPENAI_API_KEY必须已设置。示例 1直接调用评估 Faithfulness忠实度from openai import AsyncOpenAI from ragas.llms import llm_factory from ragas.metrics.collections import Faithfulness from haystack_integrations.components.evaluators.ragas import RagasEvaluator client AsyncOpenAI() llm llm_factory(gpt-4o-mini, clientclient) evaluator RagasEvaluator( ragas_metrics[Faithfulness(llmllm)], ) output evaluator.run( queryWhich is the most popular global sport?, documents[ Football is undoubtedly the worlds most popular sport with major events like the FIFA World Cup and sports personalities like Ronaldo and Messi, drawing a followership of more than 4 billion people. ], referenceFootball is the most popular sport with around 4 billion followers worldwide, ) output[result]这是最简单的用法不搭建 Pipeline直接实例化RagasEvaluator并调用run适合快速验证指标配置或做单点评估。示例 2Pipeline 化评估 AnswerRelevancy回答相关性AnswerRelevancy需要 LLM embeddings 双配置指标构造时通过embedding_factory绑定 embedding 模型from haystack import Pipeline from haystack_integrations.components.evaluators.ragas import RagasEvaluator from openai import AsyncOpenAI from ragas.llms import llm_factory from ragas.embeddings import embedding_factory from ragas.metrics.collections import AnswerRelevancy client AsyncOpenAI() llm llm_factory(gpt-4o-mini, clientclient) embeddings embedding_factory(openai, modeltext-embedding-3-small, clientclient) pipeline Pipeline() evaluator RagasEvaluator( ragas_metrics[AnswerRelevancy(llmllm, embeddingsembeddings)], ) pipeline.add_component(evaluator, evaluator)该指标期望query与response两个输入运行时通过 Pipeline 输入字典传入results pipeline.run( { evaluator: { query: Where is the Pyramid of Giza?, response: The Pyramid of Giza is located in Egypt., }, }, )示例 3多指标并行评估 ContextPrecision Faithfulness多个指标在同一个ragas_metrics列表中一次性传入Ragas 会分别计算各指标得分from haystack import Pipeline from haystack_integrations.components.evaluators.ragas import RagasEvaluator from openai import AsyncOpenAI from ragas.llms import llm_factory from ragas.metrics.collections import ContextPrecision, Faithfulness client AsyncOpenAI() llm llm_factory(gpt-4o-mini, clientclient) pipeline Pipeline() evaluator RagasEvaluator( ragas_metrics[ContextPrecision(llmllm), Faithfulness(llmllm)], ) pipeline.add_component(evaluator, evaluator)运行时需提供两个指标所需的全部输入取并集query、documents、response、referenceresults pipeline.run( { evaluator: { query: Which is the most popular global sport?, documents: [ The popularity of sports can be measured in various ways, including TV viewership, social media presence, number of participants, and economic impact. Football is undoubtedly the worlds most popular sport with major events like the FIFA World Cup and sports personalities like Ronaldo and Messi, drawing a followership of more than 4 billion people. ], response: Football is the most popular sport with around 4 billion followers worldwide, reference: Football is the most popular sport, }, }, )示例 4端到端接入 RAG Pipeline实际生产中最常见的形态是把RagasEvaluator挂到 RAG Pipeline 末端让生成器输出的reply作为response、检索器输出的documents作为documents与原始query一起送入评估器在一次运行中完成检索 → 生成 → 评估的闭环。此时组件间通过 Pipeline 连接自动传递数据评估输入参数即为各上游组件的对应输出槽位。序列化与反序列化to_dict / from_dict 与安全 allowlistRagasEvaluator实现了 Haystack 的标准序列化协议支持将组件含已配置的指标写入 YAML 字典并重新加载。to_dictto_dict() - dict[str, Any]将组件序列化为字典指标以类路径 LLM/embedding 配置的形式被存储。from_dict 与反序列化安全机制from_dict(data: dict[str, Any]) - RagasEvaluator反序列化时指标根据存储的类路径重建LLM/embedding 配置一并恢复。需要注意仅支持 OpenAI provider 的自动反序列化API key 在加载时从OPENAI_API_KEY环境变量读取从haystack-ai 3.0开始指标类所在的模块必须位于反序列化allowlist白名单上Ragas 官方自带的指标会被自动信任而自定义指标类需要显式放行例如Pipeline.load(..., allowed_modules[mypackage.*])若指标类不在 allowlist 上from_dict会抛出DeserializationError。这一机制在 Haystack 核心库的 haystack/core/serialization_security.py 中有完整的源码实现可印证DEFAULT_ALLOWED_MODULES默认信任haystack、haystack_integrations、haystack_experimental、builtins、typing、collections等模块而自定义包需通过三种途径之一扩展 allowlist——单次调用参数Pipeline.load(..., allowed_modules[...])、进程级 APIallow_deserialization_module(...)、或环境变量HAYSTACK_DESERIALIZATION_ALLOWLIST对完全可信的管线还可以用unsafeTrue整体绕过。把自定义 Ragas 指标所在的包名如mypackage.*加入上述任一途径即可安全地反序列化自研指标。RagasEvaluator 与 DeepEvalEvaluator 选型对比如果同时在评估两个框架可以参考 model-based-evaluation.mdx 中的对比表做出选择特性RagasEvaluatorDeepEvalEvaluator评估模型Ragas 支持的任何 providerOpenAI、Anthropic、Google、Groq、Mistral 等通过ragas.llms.llm_factory在每个指标上配置OpenAI 全系 GPT 模型支持指标ragas.metrics.collections中的任意指标如Faithfulness、AnswerRelevancy、ContextPrecision、ContextRecall、AnswerCorrectness、SemanticSimilarityANSWER_RELEVANCY、FAITHFULNESS、CONTEXTUAL_PRECISION、CONTEXTUAL_RECALL、CONTEXTUAL_RELEVANCE响应评估 prompt 可定制✅基于 rubric 的指标如DomainSpecificRubrics支持❌分数解释❌✅监控看板❌❌核心差异一目了然Ragas 的优势在于评估模型的 provider 覆盖面广、指标来自ragas.metrics.collections可自由组合并支持 rubric 自定义评分细则DeepEval 的优势在于对每个分数提供解释性输出。如果你的评估需求强依赖特定 LLM provider 或需要自定义评分标准Ragas 路线更灵活如果需要开箱即用的分数解释则 DeepEval 更省事。最佳实践与注意事项指标务必在构造时配齐 LLM/embeddingsRagasEvaluator不会替你补配置遗漏embeddings如AnswerRelevancy会在运行时报错。按指标需求裁剪输入传入多余参数不影响结果但缺失某指标必需的参数会导致评估失败。多指标共用时传入所有指标所需输入的并集见示例 3。评估 Pipeline 与 RAG Pipeline 分离Haystack 官方推荐先单独跑 RAG Pipeline 并保存结果再在评估 Pipeline 中反复切换不同指标避免为尝试新指标而重复执行昂贵的 RAG 流程见 model-based-evaluation.mdx。多指标评估优先用run_asyncconcurrency_limit默认 4只在异步路径生效指标数量较多时可显著缩短评估耗时。自定义指标注意反序列化安全反序列化自有指标类时务必通过allowed_modules、allow_deserialization_module或HAYSTACK_DESERIALIZATION_ALLOWLIST显式放行其所在包否则会触发DeserializationError。环境变量前置基于 OpenAI 的示例均依赖OPENAI_API_KEY在脚本或 Notebook 中先完成配置再运行评估反序列化场景下该变量同样在加载时被读取。至此你已经可以基于RagasEvaluator为 Haystack RAG 管线搭建一套完整的 LLM 驱动评估体系从单指标快速验证、到多指标并行 Pipeline 化评估、再到可序列化的持久化评估配置全部在 Haystack 的 Pipeline 生态内完成。【免费下载链接】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),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价