ARTICLE DETAIL

资讯详情

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

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

Haystack 集成 Ragas:用 RagasEvaluator 构建 LLM 驱动的 RAG 质量评估 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/haystack本篇技术指南聚焦 Haystack 生态中的RagasEvaluator评估组件它以 Ragas 评估框架的现代指标 APIragas.metrics.collections为度量核心通过 LLM 对检索增强生成RAG管线的输出进行自动化质量打分。读完本文你将掌握ragas-haystack的安装与配置、RagasEvaluator的初始化与运行参数、多指标并行评估、异步并发控制以及序列化反序列化与安全校验规则能够在自己的 Haystack 管线中落地一套可复现的 RAG 评估方案。一、RagasEvaluator 是什么RagasEvaluator是 Haystack 官方集成中的评估组件位于haystack_integrations.components.evaluators.ragas模块随ragas-haystack包发布。它的核心职责是使用 Ragas 框架提供的 LLM 指标对 Haystack 管线尤其是 RAG 管线的输入输出进行自动评估。Ragas 是一个专门面向 RAG 场景的评估框架提供诸如 Faithfulness忠实度、AnswerRelevancy答案相关性、ContextPrecision上下文精确度、ContextRecall上下文召回率、AnswerCorrectness答案正确性等基于 LLM 的评估指标。RagasEvaluator将这些指标以组件的形式接入 Haystack 的Pipeline从而把评估本身也变成一个可编排、可复用、可序列化的管线环节。从 Haystack 的评估体系看参见 docs-website/docs/optimization/evaluation/model-based-evaluation.mdx基于模型的评估通常使用一个黄金模型golden model作为裁判把每个指标实现为一段精心构造的提示词让 LLM 按评分标准打分。RagasEvaluator与DeepEvalEvaluator是 Haystack 目前内置的两个第三方评估框架集成二者的能力对比如下特性RagasEvaluatorDeepEvalEvaluator评估模型Ragas 支持的任意提供商OpenAI、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可定制评估提示词✅支持基于 rubric 的指标如DomainSpecificRubrics❌分数解释❌✅二、安装与前置条件RagasEvaluator由独立集成包发布安装命令为pip install ragas-haystack使用前提与注意事项由于指标评估依赖 LLM 与向量嵌入需要先安装相应的模型客户端示例中为openai包并提供OPENAI_API_KEY环境变量Ragas 指标在构造时就需要绑定 LLM部分指标还需要嵌入模型因此需要引入ragas的llm_factory与embedding_factory工具函数该组件在run同步与run_async异步两种模式下均可工作异步模式支持并发评估。三、初始化参数与支持的指标3.1 构造函数签名__init__( ragas_metrics: list[SimpleBaseMetric], concurrency_limit: int 4 ) - None参数类型默认值说明ragas_metricslist[SimpleBaseMetric]必填来自ragas.metrics.collections的现代 Ragas 指标列表每个指标必须在构造时完成完整配置包含其 LLM必要时含 embeddingsconcurrency_limitint4允许同时运行的指标评估任务的最大数量仅在run_async方法中生效3.2 指标配置要求组件只支持 Ragas 的现代指标 APIragas.metrics.collections。传入的每个指标都必须是SimpleBaseMetric的实例且满足两个硬性要求构造时完成配置指标的 LLM以及如AnswerRelevancy所需的 embeddings必须在实例化时传入RagasEvaluator不会在运行时替你补配模型直接使用可用的指标类例如Faithfulness、AnswerRelevancy、ContextPrecision、ContextRecall、AnswerCorrectness、SemanticSimilarity等完整指标清单以 Ragas 框架的官方文档为准。指标的不同直接决定了run时所需的输入字段。例如Faithfulness需要documents与responseAnswerRelevancy需要query与responseContextPrecision需要query、documents与reference——因此组件文档将run的输入描述为取决于所选指标的预期输入集合。四、run 与 run_async评估的输入输出契约4.1 方法签名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]]run_async拥有完全相同的参数与返回类型仅以异步方式执行评估。4.2 参数详解参数类型语义querystr \| None用户输入的原始查询responselist[ChatMessage] \| str \| None模型或 Agent 生成的回答典型来自 LLM 或 Agent 的ChatMessage列表也可直接传字符串documentslist[Document \| str] \| None为该查询检索到的 HaystackDocument列表或纯字符串列表reference_contextslist[str] \| None本应被检索到的参考上下文列表用于评估检索质量multi_responseslist[str] \| None为同一查询生成的多个候选回答referencestr \| None该查询的标准参考答案rubricsdict[str, str] \| None评估量规键为分值值为对应的评分标准描述4.3 返回值结构方法返回dict[str, dict[str, MetricResult]]即一个以键result为入口的字典result的值将指标名映射到其MetricResult。典型取值方式output[result] # {metric_name: MetricResult, ...}其中MetricResult是 Ragas 框架定义的结果类型携带该指标的得分与明细如 Faithfulness 的逐句得分。4.4 并发控制concurrency_limit默认4限定异步评估时并发执行的指标评估任务上限。它只作用于run_async同步run会顺序执行指标评估。在管线场景中若希望以异步方式加速多指标评估可将该值按指标数量与下游 API 限流情况适当调大。五、实战三种典型用法5.1 独立运行单指标快速评估最轻量的用法是脱离管线直接调用组件来自 version-2.20/integrations-api/ragas.md 的官方示例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]注意Faithfulness指标使用AsyncOpenAI客户端实例化 LLMllm_factory负责把模型名与客户端包装成 Ragas 所需的 LLM 对象。5.2 答案相关性评估管线评估AnswerRelevancy需要同时提供 LLM与嵌入模型该指标依赖语义相似度计算示例见 ragasevaluator.mdx运行前需设置OPENAI_API_KEYfrom 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) results pipeline.run( { evaluator: { query: Where is the Pyramid of Giza?, response: The Pyramid of Giza is located in Egypt., }, }, )5.3 多指标同时评估ragas_metrics接收列表因此可以在一次评估中同时计算多个指标。例如同时评估ContextPrecision与Faithfulnessfrom 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) results 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, }, }, )此例说明多指标模式下需要提供所有指标输入字段的并集ContextPrecision需要query、documents、referenceFaithfulness需要documents、response合并后即为上例传入的字段组合。六、把评估接入 RAG 管线根据 model-based-evaluation.mdx 的指引Haystack 中基于模型的评估有两条路径独立评估管线推荐先运行 RAG 管线并把结果落盘再单独构建评估管线手动喂入输入。这种评估与生成分离的做法允许你在不重跑 RAG 管线的前提下反复尝试不同的评估指标内联追加评估把RagasEvaluator挂在 RAG 管线末端在单次pipeline.run()调用里同时完成生成与评估。RagasEvaluator在管线中的典型位置是单独使用或置于评估管线中在被评估的管线生成输入之后其输出变量固定为result指标名到MetricResult的映射。Haystack 核心库同样提供了内置的FaithfulnessEvaluator、ContextRelevanceEvaluator、SASEvaluator等轻量 LLM/交叉编码器评估组件见 docs-website/docs/pipeline-components/evaluators.mdx当指标需求超出内置范围时即可切换到RagasEvaluator获得更丰富的指标集。七、序列化与反序列化to_dict / from_dict组件实现了 Haystack 标准的序列化协议7.1 to_dictto_dict() - dict[str, Any]返回包含序列化数据的字典供Pipeline.dump等机制持久化使用。7.2 from_dictfrom_dict(data: dict[str, Any]) - RagasEvaluator从字典重建组件其中指标会依据存储的类路径及其 LLM/嵌入配置自动重建。反序列化有两条关键约束仅支持openai提供商自动反序列化重建指标时会从OPENAI_API_KEY环境变量读取 API Key反序列化白名单当haystack-ai 3.0时指标类所在的模块必须位于反序列化白名单上。Ragas 自带的指标会被自动信任自定义指标类则需要显式信任例如Pipeline.load(..., allowed_modules[mypackage.*])若指标类不在白名单中from_dict会抛出DeserializationError。这一机制与 Haystack 核心的 serialization_security.py 中反序列化仅允许白名单模块的安全策略保持一致用于防止恶意 YAML/JSON 触发任意代码执行。八、使用建议与限制模型成本每个指标都是一次或多次LLM 调用多指标评估会线性放大 token 消耗建议先在少量样本上验证提示词与指标效果再大规模运行异步优化需要批量评估时优先使用run_async并通过concurrency_limit平衡吞吐与上游 API 限流本地模型可行性Ragas 通过llm_factory抽象模型提供商支持 OpenAI、Anthropic、Google、Groq、Mistral 等多家供应商只要指标配置了可用的本地 LLM 端点同样可以用本地模型完成评估与 Haystack 内置评估组件使用OllamaChatGenerator的做法思路一致自定义指标注意升级到haystack-ai 3.0后务必为自定义指标模块配置allowed_modules否则加载序列化管线会失败。延伸阅读组件 API 参考version-2.20/integrations-api/ragas.md 与 integrations-api/ragas.md组件使用指南docs/pipeline-components/evaluators/ragasevaluator.mdx模型评估总览docs/optimization/evaluation/model-based-evaluation.mdx内置评估组件清单docs/pipeline-components/evaluators.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),仅供参考
返回列表