免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

Haystack RagasEvaluator 集成详解:用 Ragas 指标为 RAG 管线构建 LLM 评估组件

Haystack RagasEvaluator 集成详解:用 Ragas 指标为 RAG 管线构建 LLM 评估组件 Haystack RagasEvaluator 集成详解用 Ragas 指标为 RAG 管线构建 LLM 评估组件【免费下载链接】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.19 版本的 Ragas 集成 API 参考文档系统讲解RagasEvaluator评估组件它如何用现代 Ragas 指标 API 在构建期完成 LLM 配置如何通过run/run_async对查询、检索文档与模型回答进行多维度评分以及to_dict/from_dict序列化机制如何与 Haystack 3.0 的反序列化模块白名单协同工作。读完本文你可以独立完成 RAG 管线的 Faithfulness、AnswerRelevancy、ContextPrecision 等指标的评估并将评估器安全地存入管线、跨环境加载。RagasEvaluator 组件定位RagasEvaluator是一个使用 Ragaspip install ragas-haystack在管线中的典型位置是独立运行或作为评估管线的一环放在被测管线之外先由 RAG 管线生成query、response、documents等输入再把它们交给RagasEvaluator打分。模型评估指南指出Haystack 提供两种模型评估方式独立评估管线官方推荐将被测管线与评估管线解耦可以保存 RAG 管线的运行结果之后随时更换评估指标而无需重跑 RAG 管线追加到 RAG 管线末尾一次pipeline.run()同时完成推理与评估。RagasEvaluator支持现代 Ragas 指标 APIragas.metrics.collections每个指标必须是SimpleBaseMetric实例并且其 LLM 必须在构建指标对象时就配置好而不是在评估器上统一设置。可选指标包括Faithfulness、AnswerRelevancy、ContextPrecision、ContextRecall、AnswerCorrectness、SemanticSimilarity等完整列表以 Ragas 官方文档为准。构造参数init__init__( ragas_metrics: list[SimpleBaseMetric], concurrency_limit: int 4 ) - None构造一个新的 Ragas 评估器共两个参数参数类型说明ragas_metricslist[SimpleBaseMetric]来自ragas.metrics.collections的现代 Ragas 指标列表。每个指标必须在构造时完成全部配置包括其 LLMconcurrency_limitint默认4允许并发执行的最大指标评估数。仅run_async方法使用该参数同步run不受影响从源码结构看concurrency_limit只作用于异步路径意味着同步run下各指标是顺序求值的如果你用run_async批量评估多条样本调大该值可以在评估器内部提高指标级并发度。快速上手Faithfulness 评估示例参考文档给出的最小可运行示例需要配置 OpenAI 凭据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]几个关键点llm_factory(gpt-4o-mini, clientclient)传入AsyncOpenAI客户端说明 Ragas 指标内部走异步 LLM 调用评估器因此可以统一提供同步run与异步run_async两种入口指标对象如Faithfulness(llmllm)在传入RagasEvaluator之前就必须完成配置——这是现代指标 API与旧 API 的核心区别输出是字典取output[result]得到指标名 →MetricResult的映射。run 与 run_async输入参数与返回结构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用户输入的问题responselist[ChatMessage] \| str \| None语言模型或 Agent 的回答可以是字符串也可以是ChatMessage列表如直接来自某个 Generator/Agent 的输出documentslist[Document \| str] \| None为query检索到的文档列表兼容 HaystackDocument对象与纯字符串reference_contextslist[str] \| None理论上应该被检索到的参考上下文用于 ContextRecall 类指标multi_responseslist[str] \| None为同一查询生成的多个回答referencestr \| None查询的参考答案gold answerrubricsdict[str, str] \| None自定义评分准则字典键为分数档位值为该档位对应的评判标准供 rubric 类指标如DomainSpecificRubrics使用返回值为dict[str, dict[str, MetricResult]]外层字典固定以result为键内层字典把每个指标的名称映射到其MetricResult。所有参数都可为None——具体哪些输入是必需的取决于你传入的指标例如Faithfulness需要query、response、documents而AnswerRelevancy只需要query与response。当传入多个指标时run要求提供所有指标所需输入的并集。多指标同时评估组件指南给出了在同一管线中评估多个指标的完整示例这里整理为独立运行形态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, ContextPrecision, Faithfulness 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), # 需要 embeddings ContextPrecision(llmllm), Faithfulness(llmllm), ], ) pipeline.add_component(evaluator, evaluator) results pipeline.run( { evaluator: { query: Which is the most popular global sport?, documents: [ The popularity of sports can be measured in various ways... 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, }, }, )注意两点AnswerRelevancy除了llm还需要embeddings示例中用embedding_factory(openai, modeltext-embedding-3-small, clientclient)构造印证了每个指标的 LLM/embedding 都要在构建时配置这一约定评估管线内以evaluator为组件名传参与独立调用evaluator.run(...)语义一致便于把评估器嵌入更大编排。序列化to_dict / from_dict 与反序列化安全白名单to_dict把组件序列化为字典to_dict() - dict[str, Any]from_dict从字典恢复组件from_dict(data: dict[str, Any]) - RagasEvaluator其文档化的行为细节值得展开指标按存储的类路径重建。反序列化时指标类由其序列化数据中的类路径定位再依据存储的 LLM/embedding 配置重新实例化自动反序列化目前只支持openaiprovider且 API key 在加载时从环境变量OPENAI_API_KEY读取——也就是说保存管线的环境与加载管线的环境都要能取到该变量受haystack-ai3.0 反序列化白名单约束指标类所在模块必须位于反序列化 allowlist 中。ragas 自带的指标模块自动受信任而你自己包里的自定义指标类需要显式声明信任例如Pipeline.load(..., allowed_modules[mypackage.*])若指标类不在 allowlist 上from_dict抛出DeserializationError。这一点与主仓库的序列化安全机制直接对应。haystack/core/serialization_security.py 中的默认白名单为DEFAULT_ALLOWED_MODULES: tuple[str, ...] ( haystack, haystack_integrations, haystack_experimental, builtins, typing, collections, )haystack_integrations整体在默认 allowlist 内这解释了ragas 指标自动受信任的由来——RagasEvaluator及其指标经由haystack_integrations命名空间解析。该模块同时提供三种扩展白名单的方式见 模块文档字符串按调用传参Pipeline.load(..., allowed_modules[mypkg.*])进程级编程 APIallow_deserialization_module环境变量HAYSTACK_DESERIALIZATION_ALLOWLISTmypkg.*,otherpkg.*。因此当你用自定义 rubric 指标包装出位于自己包中的SimpleBaseMetric时加载包含它的管线必须先用上述方式之一把该包加进白名单否则会得到DeserializationError——这是文档from_dict条目中 Raises 一节描述行为的底层原因。在评估体系中的位置Haystack 2.19 时期的评估体系同时提供内置 LLM 评估器与框架集成两条路线内置评估器如FaithfulnessEvaluator、ContextRelevanceEvaluator、SASEvaluator语义答案相似度基于 transformer 而非 LLM 裁判各自独立封装在 haystack/components/evaluators 下框架集成则通过RagasEvaluator与DeepEvalEvaluator暴露第三方评估生态。据 模型评估指南的对比表RagasEvaluator的差异化能力在于评估模型不限于 OpenAI任何 Ragas 支持的 provider通过ragas.llms.llm_factory在指标上配置指标覆盖ragas.metrics.collections全集并且支持基于 rubric 的可定制评估提示如DomainSpecificRubrics这一点在run的rubrics参数上得到了 API 层面的印证。适用前提与限制版本适用本文参数与行为描述以 version-2.19 的 Ragas API 参考 为准配套文档为当前版 RagasEvaluator 指南依赖前提需安装ragas-haystack及其依赖的 Ragas 框架使用 OpenAI 指标时需设置OPENAI_API_KEY异步场景下示例统一使用AsyncOpenAI客户端自动反序列化限制from_dict的免配置重建目前仅覆盖openaiprovider其他 provider 的指标在跨环境加载时需要自行确认重建路径并发参数作用域concurrency_limit仅对run_async生效同步调用下为顺序执行安全约束加载含自定义指标的序列化管线前按 序列化安全模块 的机制配置模块白名单不要依赖绕过白名单的不安全加载模式。小结RagasEvaluator是 Haystack 与 Ragas 评估框架之间的桥接组件以list[SimpleBaseMetric]为唯一强制构造参数把指标级 LLM 配置前移到构建期run/run_async以统一的七元输入query、response、documents、reference_contexts、multi_responses、reference、rubrics承接任意指标组合所需的字段并集序列化侧则与 Haystack 3.0 的反序列化 allowlist 深度整合保证评估管线可以安全落盘与跨环境恢复。结合独立评估管线的使用方式它让跑一次 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/haystack创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表