Doramagic 项目包 · 项目说明书
ragas 项目
为你的 LLM 应用评估提速 🚀
Ragas 项目概述与快速入门
Ragas 是一个面向大语言模型(LLM)应用的评估与优化工具集,旨在为 RAG 系统、智能体(agent)、提示词工程以及复杂工作流提供客观、可量化的评估能力,并支持自动化的测试数据生成。根据 README.md 中的描述,Ragas 的目标是用"数据驱动"取代"主观、人工"的评估流程,从而帮助开发者在迭代过程中建立可重复、可比较的反馈闭环 资料来源:[README.md...
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
一、项目定位与核心能力
Ragas 是一个面向大语言模型(LLM)应用的评估与优化工具集,旨在为 RAG 系统、智能体(agent)、提示词工程以及复杂工作流提供客观、可量化的评估能力,并支持自动化的测试数据生成。根据 README.md 中的描述,Ragas 的目标是用"数据驱动"取代"主观、人工"的评估流程,从而帮助开发者在迭代过程中建立可重复、可比较的反馈闭环 资料来源:README.md:1-15。
项目主要提供以下能力:
- 客观评估指标:同时支持基于 LLM 的语义评估和传统非 LLM 指标(例如字符串相似度、上下文相关性等),便于在不同场景下选择合适的度量方式 资料来源:README.md:9-15。
- 测试数据自动生成:在没有现成评测集时,可基于知识图谱(KnowledgeGraph)和转换流水线自动生成与生产场景对齐的测试样本 资料来源:src/ragas/testset/synthesizers/generate.py:48-92。
- 框架与可观测性集成:内置 LangChain、LlamaIndex、LangSmith、Langfuse、MLflow、Helicone、Opik、Haystack 等适配器,覆盖开发、实验追踪和生产观测全链路 资料来源:src/ragas/integrations/__init__.py:1-25。
- 多平台与协议支持:包括 Amazon Bedrock、R2R、Swarm 多智能体评估以及 AG-UI 事件协议 资料来源:src/ragas/integrations/__init__.py:11-19。
二、安装与快速入门
2.1 安装方式
Ragas 可通过 PyPI 一键安装,亦可从源码安装以获取最新特性 资料来源:README.md:27-33:
# PyPI 安装
pip install ragas
# 从源码安装
pip install git+https://github.com/vibrantlabsai/ragas
当需要运行官方示例项目时,需要额外安装 examples 子包。推荐使用 uv pip 进行可编辑安装,便于本地调试 资料来源:examples/README.md:11-19:
cd /path/to/ragas
uv pip install -e . -e ./examples
2.2 快速启动模板
README.md 提供的 ragas quickstart 命令可直接生成可运行的评估项目骨架,目前支持 rag_eval(RAG 系统评估),未来将开放 agent_evals、benchmark_llm、prompt_evals、workflow_eval 等模板 资料来源:README.md:37-54。
2.3 第一个评估示例
下例展示了使用 DiscreteMetric 自定义评估维度的最小流程,依赖 OPENAI_API_KEY 环境变量,并通过 llm_factory 构造 LLM 客户端 资料来源:README.md:58-87:
import asyncio
from openai import AsyncOpenAI
from ragas.metrics import DiscreteMetric
from ragas.llms import llm_factory
client = AsyncOpenAI()
llm = llm_factory("gpt-4o", client=client)
metric = DiscreteMetric(
name="summary_accuracy",
allowed_values=["accurate", "inaccurate"],
prompt="Evaluate if the summary is accurate and captures key information.\n"
"Response: {response}\nAnswer with only 'accurate' or 'inaccurate'."
)
async def main():
score = await metric.ascore(llm=llm, response="The summary of the text is...")
print(f"Score: {score.value}\nReason: {score.reason}")
asyncio.run(main())
三、核心架构与模块划分
Ragas 的代码组织遵循"核心抽象 + 可插拔适配器"的分层结构。下图展示了主要模块及其依赖关系。
flowchart TB
A[用户入口<br/>ragas.metrics / ragas.testset] --> B[LLM 适配层<br/>ragas.llms]
A --> C[嵌入适配层<br/>ragas.embeddings]
A --> D[测试集合成<br/>ragas.testset]
B --> E[结构化输出适配<br/>Instructor / LiteLLM]
B --> F[框架包装<br/>LangChain / LlamaIndex / Haystack]
D --> G[知识图谱<br/>KnowledgeGraph]
D --> H[图转换<br/>BaseGraphTransformation]
A --> I[集成<br/>LangSmith / Langfuse / Opik / Bedrock]
A --> J[成本与回调<br/>CostCallbackHandler / TokenUsage]关键模块说明:
- LLM 适配层:通过
BaseRagasLLM抽象统一同步/异步调用接口,StructuredOutputAdapter抽象类定义结构化输出适配器接口,便于 Instructor、LiteLLM 等后端实现 资料来源:src/ragas/llms/adapters/base.py:1-29。 - Haystack 包装器:
HaystackLLMWrapper将 Haystack 的OpenAIGenerator/AzureOpenAIGenerator等组件封装为 Ragas 可用的 LLM 资料来源:src/ragas/llms/haystack_wrapper.py:21-44。 - 测试集生成:核心入口
generate()会构建KnowledgeGraph、应用转换流水线、再分发给不同的合成器(single hop、multi hop 等) 资料来源:src/ragas/testset/synthesizers/generate.py:48-92。 - 图转换基类:
BaseGraphTransformation要求所有转换实现transform(kg),并保证转换的幂等性,避免重复生成相同结果 资料来源:src/ragas/testset/transforms/base.py:48-66。 - 默认转换集合:
default_transforms会根据文档长度分布动态决定是否启用 HeadlinesExtractor、SummaryExtractor 等步骤 资料来源:src/ragas/testset/transforms/default.py。 - 知识图谱持久化:
KnowledgeGraph.save()以 UTF-8 JSON 写入节点与关系,可跨平台无损加载 资料来源:src/ragas/testset/graph.py。 - Prompt 持久化格式:
Prompt与DynamicFewShotPrompt使用format_version标记的 JSON(含.json.gz可选压缩)进行序列化,区别在于是否携带嵌入模型与相似度配置 资料来源:src/ragas/prompt/prompt-formats.md:1-15。
四、社区关注点与已知注意事项
根据近期的社区讨论,新用户在上手 Ragas 时常关注以下主题和坑点:
- Token 与成本追踪:
CostCallbackHandler与TokenUsage是社区高频需求,但get_token_usage_for_bedrock在langchain-aws的ChatBedrock/ChatBedrockConverse上读取了错误的response_metadatakey,导致始终返回 0 资料来源:README.md 中的反馈引用 issue #2779。 - 多语言测试集生成:非英语语料(如乌兹别克语)下,
HeadlinesExtractor等转换可能因缺少数headlines属性而报错,需先核对default_transforms中的语言相关步骤 issue #1775。 - 模型兼容性:
AspectCritic等指标在切换到o3系列推理模型时容易出现解析错误,需要使用支持结构化输出的适配器 issue #2067。 - 测试集生成模块演进:v0.4 版本正在征求社区对
testset模块未来形态的意见 issue #2231;最新 v0.4.3 还引入了DSPyOptimizer(基于 MIPROv2)以及 DSPy 缓存能力 资料来源:v0.4.3 Release Notes。 - 可选依赖优化:
diskcache当前以强依赖方式安装,但实际仅在显式调用时才使用,社区建议将其改为可选依赖 issue #2622。 - 安全与流程注入:项目已修复
.github/workflows/claude-docs-check.yml在pull_request_target下的潜在提示词注入风险 issue #2692。
See Also
- 评估指标与 LLM 工厂:
src/ragas/llms/、src/ragas/metrics/ - 测试集合成与知识图谱:
src/ragas/testset/、src/ragas/testset/graph.py - 集成与可观测性:
src/ragas/integrations/__init__.py、src/ragas/integrations/langchain.py、src/ragas/integrations/langsmith.py - Prompt 持久化规范:
src/ragas/prompt/prompt-formats.md - 官方示例集合:
examples/README.md
来源:https://github.com/vibrantlabsai/ragas / 项目说明书
评估指标系统(Metrics)
Ragas 的评估指标系统(Metrics)是该框架的核心能力之一,用于对大语言模型(LLM)应用进行客观、可量化的评估。指标系统支持基于 LLM 的语义判断(如忠实度、答案相关性)以及传统的非 LLM 数值评估(如上下文召回率),从而覆盖 RAG、Agentic workflow 等多类应用场景。
继续阅读本节完整说明和来源证据。
一、系统定位与核心目标
Ragas 的评估指标系统(Metrics)是该框架的核心能力之一,用于对大语言模型(LLM)应用进行客观、可量化的评估。指标系统支持基于 LLM 的语义判断(如忠实度、答案相关性)以及传统的非 LLM 数值评估(如上下文召回率),从而覆盖 RAG、Agentic workflow 等多类应用场景。
根据 README.md 的描述,Ragas 通过 DiscreteMetric 等预构建指标类,提供面向 RAG 系统的离散评分能力。例如,开发者可以创建一个二元离散指标来判断摘要是否"准确"或"不准确",并通过 ascore() 方法异步调用 LLM 完成评分。资料来源:README.md:20-50
指标系统同时强调"客观评估"与"反馈闭环"——既能为 RAG 流水线生成细粒度诊断结果,也能配合生产数据形成持续优化循环。资料来源:README.md:18-22
二、提示词(Prompt)架构
所有指标的核心均为基于 Pydantic 的结构化提示词。ragas.prompt.metrics 子包导出了一组面向具体指标语义任务的 Prompt 模板。资料来源:src/ragas/prompt/metrics/__init__.py:1-14
answer_relevancy_prompt—— 用于答案相关性评估correctness_classifier_prompt—— 用于答案正确性分类nli_statement_prompt/statement_generator_prompt—— 共用子任务(自然语言推理、语句生成)BasePrompt—— 抽象基类,约束instruction、input_model、output_model三要素
每个具体指标的提示词都继承自 PydanticPrompt[InputModel, OutputModel],强制规定输入输出的 Pydantic Schema,确保 LLM 返回的 JSON 可以被自动校验与解析。资料来源:src/ragas/prompt/metrics/base_prompt.py:7-15
下表列出了当前 metrics 子模块导出的关键提示词及其用途:
| 提示词名称 | 适用指标 | 数据流角色 |
|---|---|---|
answer_relevancy_prompt | AnswerRelevance | 生成评估问题与参考答案的候选 |
correctness_classifier_prompt | AnswerCorrectness | 对答案与参考答案的语义一致性做分类 |
nli_statement_prompt | Faithfulness(共用) | 对生成的语句做 NLI 蕴含判断 |
statement_generator_prompt | Faithfulness(共用) | 将长答案拆分为原子语句 |
BasePrompt | 所有指标 | 定义指令、示例、响应模型的统一基类 |
例如,noise_sensitivity 指标的提示词使用 {safe_context} 与 {safe_statements} 占位符,并通过 JSON verdict 字段表达逐条语句的相关性判断。资料来源:src/ragas/prompt/metrics/noise_sensitivity.py:1-40
三、序列化与适配机制
指标提示词支持 .json 与 .json.gz 两种持久化格式,format_version 字段锁定为 "1.0",便于跨版本兼容。response_model_info 字段记录了响应模型的类名、模块路径与 schema,以确保加载时能够反序列化。资料来源:src/ragas/prompt/prompt-formats.md:7-50
在底层,指标与 LLM 的桥接由 StructuredOutputAdapter 抽象基类承担,其 create_llm 方法负责为不同后端(Instructor、LiteLLM 等)注入结构化输出能力。资料来源:src/ragas/llms/adapters/base.py:6-25
整个评估流程的运行时回放与链路追踪则由集成层负责,Ragas 已对接 Langfuse、MLflow、LangSmith、Opik 等可观测性平台。资料来源:src/ragas/integrations/__init__.py:1-18
四、典型工作流与社区反馈
指标的典型工作流可概括为:构造指标实例 → 注入 llm(通过 llm_factory) → 调用 ascore() 或批量评估 → 收集 value 与 reason。PydanticPrompt 内部封装了 to_string 与 generate 链路,并使用 PydanticOutputParser 将 LLM 输出反序列化为 Pydantic 对象。资料来源:src/ragas/prompt/pydantic_prompt.py:1-50
社区中也存在若干与指标系统直接相关的痛点:
- Evaluator 模型兼容性:Issue #2067 报告
AspectCritic在切换到o3推理模型时出现运行时错误,提示结构化输出适配器在新型推理模型上仍需调整。资料来源:community context (issue #2067) - Threshold 边界一致性:Issue #2777 指出
NonLLMContextRecall与NonLLMContextPrecisionWithReference在分数转二值相关性时使用了不一致的>与>=边界。 - 弃用类名错误:Issue #2748 显示
LLMContextPrecisionWithoutReference的弃用提示指向了不存在的类,可能导致ImportError。 - 结果汇总与阈值闸门:Issue #2760 提议为
EvaluationResult增加summary()与check_thresholds()公共方法,以便在 CI 中使用指标阈值做回归闸门。
为减少类似问题,建议在使用自定义指标时显式声明 input_model / output_model,并优先通过 llm_factory 注入 LLM 而非直接依赖 LangChain 包装器(后者已被标记为弃用)。资料来源:src/ragas/prompt/pydantic_prompt.py:30-45
See Also
- 测试集生成系统(Testset Generation) —— 依赖
metrics体系进行合成数据的质量评估 - LLM 工厂与适配器(LLM Factory & Adapters) —— 指标系统与 LLM 后端解耦的关键
- 提示词持久化(Prompt Serialization) —— 指标模板的
.json/.json.gz存储细节
来源:https://github.com/vibrantlabsai/ragas / 项目说明书
测试集生成、数据模式与后端存储
ragas 的测试集生成(Testset Generation)模块提供了一套端到端的流水线,用于在没有现成标注数据的情况下,根据用户文档语料自动合成可用于 RAG / LLM 应用评估的数据集。该模块在仓库 README 中被列为四大核心能力之一("Test Data Generation: Automatically create comprehensive test ...
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
1. 概述
ragas 的测试集生成(Testset Generation)模块提供了一套端到端的流水线,用于在没有现成标注数据的情况下,根据用户文档语料自动合成可用于 RAG / LLM 应用评估的数据集。该模块在仓库 README 中被列为四大核心能力之一("Test Data Generation: Automatically create comprehensive test datasets covering a wide range of scenarios")。资料来源:README.md:1-20。
其内部核心数据结构是 KnowledgeGraph(知识图谱),围绕"节点-关系-变换器-合成器"的层次展开,整体可以拆分为三个相互衔接的子系统:
- 数据模式层:
KnowledgeGraph/Node/Relationship的内存表示与 JSON 持久化。 - 变换流水线层:
BaseGraphTransformation抽象类及其具体子类(提取器、过滤器、关系构建器)。 - 合成器层:
generate()/ 单跳(single_hop)提示词驱动的问题-答案对生成。
下图为整体数据流:
flowchart LR
Docs[LangChain Documents] --> Chunker[Chunker / Default Transforms]
Chunker --> KG[KnowledgeGraph]
KG --> Extractors[LLM Extractors<br/>Headlines / Keyphrases / NER / Topic]
Extractors --> Filters[CustomNodeFilter<br/>QuestionPotential]
Filters --> RelBuilder[RelationshipBuilder<br/>Similarity]
RelBuilder --> Synth[Synthesizers<br/>SingleHop / MultiHop]
Synth --> Testset[Testset]
KG -.save/load.-> JSON[(JSON file)]2. 数据模式:KnowledgeGraph
KnowledgeGraph 是测试集生成模块中所有节点和关系的容器,定义了统一的内存模型以及与磁盘之间的序列化约定。资料来源:src/ragas/testset/graph.py:1-50。
关键设计要点:
- 节点类型:通过
NodeType枚举区分DOCUMENT、CHUNK等不同粒度;每个Node持有任意键值对形式的properties(例如page_content、summary、document_metadata)。资料来源:src/ragas/testset/synthesizers/generate.py:30-50。 - 关系类型:
Relationship用于在节点之间建立语义联系(典型用法是基于嵌入相似度)。 - 持久化:
save(path)将nodes与relationships通过model_dump()转储为 JSON,使用 UTF-8 编码写入;对应的load(path)类方法从同一 JSON 结构中重建图谱。资料来源:src/ragas/testset/graph.py:60-110。
这种"图谱优先"的数据模式让 transforms 既能增量修改节点属性(如抽取摘要),又能构建新关系,最后由合成器基于子图采样生成问答对。
3. 变换流水线:Extractors、Filters 与默认编排
3.1 抽象基类
所有变换都继承自 BaseGraphTransformation,并通过 generate_execution_plan(kg) 返回一组协程,由 Executor 并行执行。资料来源:src/ragas/testset/transforms/base.py:1-80。这一设计让变换可以独立测试、按需组合。
NodeSplitter 负责把父节点拆分为子节点;RelationshipBuilder 负责建立新关系;二者的执行计划都通过 apply_split / 类似包装函数映射到异步协程序列。
3.2 LLM 驱动的 Extractors
LLMBasedExtractor 家族包含多种针对 page_content 的抽取器,全部基于 PydanticPrompt 与 Pydantic 输出模型:
| 抽取器 | property_name | 用途 |
|---|---|---|
HeadlinesExtractor | headlines | 抽取 L2/L3 级别标题以切分章节 |
KeyphrasesExtractor | keyphrases | 抽取若干关键短语 |
TitleExtractorPrompt | title | 抽取文档标题 |
NERPrompt | entities | 抽取命名实体 |
TopicDescriptionExtractor | topic_description | 抽取主题描述 |
资料来源:src/ragas/testset/transforms/extractors/llm_based.py:1-200。每个抽取器都在 prompt 中给出 few-shot 示例,以保证输出稳定且结构符合 Pydantic schema。
3.3 节点过滤
CustomNodeFilter 是一个基于 LLM 评分的过滤器,它根据 QuestionPotentialPrompt 对节点打分(1–5),默认 min_score=2,低于阈值则被剔除,从而避免低信息密度片段进入合成阶段。资料来源:src/ragas/testset/transforms/filters.py:1-80。
3.4 默认编排策略
default_transforms() 会先对文档做长度分桶统计;若长度超过 500 tokens 的文档占比 ≥ 25%,则启用 HeadlinesExtractor 等更重的变换;否则退化为更轻量的链路。资料来源:src/ragas/testset/transforms/default.py:1-80。这一自适应策略可以在长文档与小文档场景之间自动切换,节省 token 成本。
4. 合成器与单跳问题生成
generate() 是 TestsetGenerator 的主入口,负责把文档切片、套用 transforms,再驱动合成器产生最终 Testset。其签名支持自定义 testset_size、query_distribution、num_personas、callbacks、token_usage_parser 等。资料来源:src/ragas/testset/synthesizers/generate.py:60-180。
单跳(single-hop)合成器的 prompt 以 QueryCondition(persona、term、query_style、query_length、context)为输入,以 GeneratedQueryAnswer 为结构化输出,并要求答案内容只能来自提供的上下文。资料来源:src/ragas/testset/synthesizers/single_hop/prompts.py:1-60。
5. 提示词与后端存储
5.1 Pydantic 提示词序列化
PydanticPrompt 是所有 LLM 提示词的基类,支持 JSON(含 .json.gz)持久化,便于跨环境复用。基础格式由 format_version、type、instruction、examples、response_model_info 组成;动态 few-shot 形态(DynamicFewShotPrompt)额外保存嵌入模型与相似度阈值。资料来源:src/ragas/prompt/prompt-formats.md:1-80。
5.2 实验与数据集命名
后端工具模块提供 MemorableNames 类,用于为每次实验 / 数据集生成"Docker 风格"的形容词+名词组合标识(admiring_heisenbug 等),避免在保存测试集时发生命名冲突。资料来源:src/ragas/backends/utils.py:1-60。
5.3 LLM 适配器
为支持多种推理后端,Ragas 在 ragas.llms.adapters.base 中定义了 StructuredOutputAdapter 抽象类,约定所有适配器必须实现 create_llm(client, model, provider, **kwargs),从而把 Instructor / LiteLLM 等后端的差异收敛在统一的工厂方法中。资料来源:src/ragas/llms/adapters/base.py:1-40。
6. 常见问题与边界情况
- 缺少
headlines属性的报错:当文档过短、未触发HeadlinesExtractor而下游又引用headlines时会抛出'headlines' property not found in this node。这正是 issue #1775 报告的根因,需保证文档达到default_transforms()触发抽取的最小长度。资料来源:src/ragas/testset/transforms/default.py:1-80。 - 非英文文本生成异常:非英文语境下抽取器仍按英文 prompt 工作,可能产生空抽取;建议在合成前显式传入自定义
transforms_llm与多语言 prompt。 StringIO缺少classifications字段:issue #1688 反映出旧版 prompt schema 兼容问题,建议升级到与最新PydanticPromptschema 对齐的版本。资料来源:src/ragas/prompt/pydantic_prompt.py:1-60。
7. See Also
- 评估指标与数据模式:
src/ragas/dataset_schema - LLM 适配与成本追踪:
src/ragas/llms - LangChain 集成与 LangSmith 评估:
src/ragas/integrations/langchain.py
资料来源:src/ragas/testset/transforms/extractors/llm_based.py:1-200。每个抽取器都在 prompt 中给出 few-shot 示例,以保证输出稳定且结构符合 Pydantic schema。
LLM 集成、适配器、提示词优化与成本追踪
Ragas 在 LLM 集成层面采取「适配器 + 工厂」的模式,使任何兼容 OpenAI 接口、或支持 Instructor/LiteLLM 后端的客户端都能被无缝接入评估与测试集生成流程。根据 README.md 的 Quickstart 示例,标准用法是先构造原生客户端(如 openai.AsyncOpenAI),再调用 ragas.llms.llmfactory("g...
继续阅读本节完整说明和来源证据。
概述与设计目标
Ragas 在 LLM 集成层面采取「适配器 + 工厂」的模式,使任何兼容 OpenAI 接口、或支持 Instructor/LiteLLM 后端的客户端都能被无缝接入评估与测试集生成流程。根据 README.md 的 Quickstart 示例,标准用法是先构造原生客户端(如 openai.AsyncOpenAI),再调用 ragas.llms.llm_factory("gpt-4o", client=client) 获得一个 Ragas 兼容的 LLM 对象。llm_factory 在 src/ragas/llms/__init__.py 中暴露,并负责根据传入的客户端类型选择合适的适配器(Adapter)。
该设计的核心目标有三:
- 供应商中立:同一份指标代码(如
DiscreteMetric.ascore)可以跑在 OpenAI、Anthropic、Mistral、本地 vLLM 等多种后端之上,无需修改业务代码。 - 结构化输出可控:通过 Pydantic 模型驱动 Instructor 后端,保证 LLM 返回符合 JSON Schema 的结果。
- 可观测性闭环:内置
CostCallbackHandler与TokenUsageParser,为 CI/CD 中的成本闸门(cost gate)提供数据来源(参见社区讨论 #540 关于 token 用量追踪的需求)。
适配器体系架构
src/ragas/llms/adapters/base.py 定义了所有适配器的抽象基类 BaseAdapter,其职责是接收原始 LLM 客户端并生成符合 BaseRagasLLM 契约的对象;src/ragas/llms/base.py 中的 BaseRagasLLM 与 InstructorBaseRagasLLM 则负责提供统一的 generate、agenerate、generate_text 接口。两条最常用的实现路径是 Instructor 与 LiteLLM:
| 适配器 | 后端实现 | 典型场景 | 关键源文件 |
|---|---|---|---|
| Instructor | instructor 库 + Pydantic 解析 | 需要强结构化输出(指标评分、生成样本) | adapters/instructor.py |
| LiteLLM | litellm 路由层 | 跨多供应商、需要 OpenAI 兼容代理 | adapters/litellm.py, litellm_llm.py |
| LangChain Wrapper | 历史兼容层 | 已有 LangChain 应用 | src/ragas/integrations/langchain.py |
flowchart LR
A[User Code / Metric] --> B[llm_factory]
B --> C{Adapter Selection}
C -->|OpenAI client| D[Instructor Adapter]
C -->|litellm-style| E[LiteLLM Adapter]
C -->|LangChain| F[LangchainLLMWrapper]
D --> G[BaseRagasLLM / InstructorBaseRagasLLM]
E --> G
F --> G
G --> H[Structured Generation + CostCallbackHandler]
H --> I[TokenUsage / EvaluationResult]适配器选择的逻辑在 llm_factory 中通过类型嗅探实现;当传入 mistralai.Mistral 等未被识别的客户端类型时,会抛出 ValueError(参见社区 issue #2774)。在该 issue 被修复前,最稳妥的做法是使用 LiteLLM 适配器作为统一接入点。
提示词工程与优化
Ragas 的提示词抽象统一在 BasePrompt / PydanticPrompt 之下(见 src/ragas/prompt/pydantic_prompt.py)。每条提示词包含 instruction、examples、response_model_info 三段,并遵循 prompt-formats.md 中规定的 v1.0 序列化格式,便于跨版本兼容与磁盘缓存。多模态扩展由 src/ragas/prompt/multi_modal_prompt.py 提供,文件内显式限制了允许的 URL 协议(仅 http/https)以及最大下载尺寸,作为安全策略的一部分。
在 v0.4.3 版本中,Ragas 引入了 DSPyOptimizer(基于 MIPROv2),见 release notes。该优化器以 DSPy 模块的形式对评估与生成所用的提示词进行自动微调:在小批量验证集上反复采样、评分,再用 MIPROv2 的 Bayesian 优化更新 instruction 字段,最终将优化后的提示词热加载回 BaseRagasLLM。同时版本还加入了 dspy caching,避免重复优化时的开销。用户在迁移时应注意:
- 优化前需准备好带 ground-truth 的小批样本;
- 优化目标与评估指标(如
faithfulness)必须一致,否则会出现"提示词变好、指标却下降"的反直觉现象; - v0.4 仍在收尾阶段,社区正在征集 Testset Generation 的反馈(参见 issue #2231),优化策略可能随之调整。
成本追踪、Token 使用与常见故障
CostCallbackHandler 借助 TokenUsageParser 解析不同供应商的响应元数据,输出统一的 TokenUsage 对象。然而,社区已记录多个供应商解析的 Bug,例如 issue #2779 指出 get_token_usage_for_bedrock 读取了错误的 response_metadata 键,导致 ChatBedrock/ChatBedrockConverse 始终返回 0。临时绕过方案:自行实现 TokenUsageParser,读取 usage.inputTokens / usage.outputTokens 并包装为回调。其它被频繁报告的问题包括:
- 自定义评估模型兼容性:
AspectCritic在切换到o3时出现运行时报错(#2067),需要确认目标模型是否支持tool_choice与 JSON 模式。 - 依赖体积:
diskcache被报告为可内联导入却仍被默认安装(#2622),建议在精简镜像中通过pip install ragas --no-deps后按需补齐。 - 指标阈值不一致:
NonLLMContextRecall与NonLLMContextPrecisionWithReference在阈值判定上使用>与>=不统一(#2777),CI 场景下应固定到一侧。 - 测试集生成错误:非英文文档触发
'headlines' property not found in this node(#1775),根因通常是default_transforms中HeadlinesExtractor未能在小段落上产出标题,可通过自定义transforms列表或增大min_num_tokens阈值规避。
See Also
来源:https://github.com/vibrantlabsai/ragas / 项目说明书
失败模式与踩坑日记
保留 Doramagic 在发现、验证和编译中沉淀的项目专属风险,不把社区讨论只当作装饰信息。
可能增加新用户试用和生产接入成本。
可能影响升级、迁移或版本选择。
可能阻塞安装或首次运行。
可能增加新用户试用和生产接入成本。
Pitfall Log / 踩坑日志
项目:vibrantlabsai/ragas
摘要:发现 22 个潜在踩坑项,其中 14 个为 high/blocking;最高优先级:安装坑 - 来源证据:Add EvaluationResult summary and threshold checks。
1. 安装坑 · 来源证据:Add EvaluationResult summary and threshold checks
- 严重度:high
- 证据强度:source_linked
- 发现:GitHub 社区证据显示该项目存在一个安装相关的待验证问题:Add EvaluationResult summary and threshold checks
- 对用户的影响:可能增加新用户试用和生产接入成本。
- 证据:community_evidence:github | https://github.com/vibrantlabsai/ragas/issues/2760 | 来源讨论提到 python 相关条件,需在安装/试用前复核。
2. 安装坑 · 来源证据:Incorrect class name in deprecation warning for LLMContextPrecisionWithoutReference
- 严重度:high
- 证据强度:source_linked
- 发现:GitHub 社区证据显示该项目存在一个安装相关的待验证问题:Incorrect class name in deprecation warning for LLMContextPrecisionWithoutReference
- 对用户的影响:可能影响升级、迁移或版本选择。
- 证据:community_evidence:github | https://github.com/vibrantlabsai/ragas/issues/2748 | 来源讨论提到 python 相关条件,需在安装/试用前复核。
3. 安装坑 · 来源证据:No module named 'langchain_community.chat_models.vertexai'
- 严重度:high
- 证据强度:source_linked
- 发现:GitHub 社区证据显示该项目存在一个安装相关的待验证问题:No module named 'langchain_community.chat_models.vertexai'
- 对用户的影响:可能阻塞安装或首次运行。
- 证据:community_evidence:github | https://github.com/vibrantlabsai/ragas/issues/2741 | 来源讨论提到 python 相关条件,需在安装/试用前复核。
4. 安装坑 · 来源证据:ragas 0.4.3: ChatVertexAI import broken — uses removed langchain_community path
- 严重度:high
- 证据强度:source_linked
- 发现:GitHub 社区证据显示该项目存在一个安装相关的待验证问题:ragas 0.4.3: ChatVertexAI import broken — uses removed langchain_community path
- 对用户的影响:可能增加新用户试用和生产接入成本。
- 证据:community_evidence:github | https://github.com/vibrantlabsai/ragas/issues/2745 | 来源讨论提到 python 相关条件,需在安装/试用前复核。
5. 配置坑 · 来源证据:answer_correctness is not working as expected
- 严重度:high
- 证据强度:source_linked
- 发现:GitHub 社区证据显示该项目存在一个配置相关的待验证问题:answer_correctness is not working as expected
- 对用户的影响:可能影响升级、迁移或版本选择。
- 证据:community_evidence:github | https://github.com/vibrantlabsai/ragas/issues/2585 | 来源讨论提到 python 相关条件,需在安装/试用前复核。
6. 配置坑 · 来源证据:faithfulness_score: nan
- 严重度:high
- 证据强度:source_linked
- 发现:GitHub 社区证据显示该项目存在一个配置相关的待验证问题:faithfulness_score: nan
- 对用户的影响:可能增加新用户试用和生产接入成本。
- 证据:community_evidence:github | https://github.com/vibrantlabsai/ragas/issues/1309 | 来源讨论提到 python 相关条件,需在安装/试用前复核。
7. 配置坑 · 来源证据:llm_factory raises ValueError when using mistralai client
- 严重度:high
- 证据强度:source_linked
- 发现:GitHub 社区证据显示该项目存在一个配置相关的待验证问题:llm_factory raises ValueError when using mistralai client
- 对用户的影响:可能阻塞安装或首次运行。
- 证据:community_evidence:github | https://github.com/vibrantlabsai/ragas/issues/2774 | 来源讨论提到 python 相关条件,需在安装/试用前复核。
8. 安全/权限坑 · 来源证据:AspectCritic not working with openai o3
- 严重度:high
- 证据强度:source_linked
- 发现:GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题:AspectCritic not working with openai o3
- 对用户的影响:可能影响授权、密钥配置或安全边界。
- 证据:community_evidence:github | https://github.com/vibrantlabsai/ragas/issues/2067 | 来源讨论提到 python 相关条件,需在安装/试用前复核。
9. 安全/权限坑 · 来源证据:Feature request: Add AgentThreatBench memory poison task as a RAG security evaluation
- 严重度:high
- 证据强度:source_linked
- 发现:GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题:Feature request: Add AgentThreatBench memory poison task as a RAG security evaluation
- 对用户的影响:可能影响授权、密钥配置或安全边界。
- 证据:community_evidence:github | https://github.com/vibrantlabsai/ragas/issues/2732 | 来源类型 github_issue 暴露的待验证使用条件。
10. 安全/权限坑 · 来源证据:Make python-diskcache dependency optional
- 严重度:high
- 证据强度:source_linked
- 发现:GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题:Make python-diskcache dependency optional
- 对用户的影响:可能增加新用户试用和生产接入成本。
- 证据:community_evidence:github | https://github.com/vibrantlabsai/ragas/issues/2622 | 来源讨论提到 python 相关条件,需在安装/试用前复核。
11. 安全/权限坑 · 来源证据:No persona found with name : Documentation example doesn't work with minimal changes
- 严重度:high
- 证据强度:source_linked
- 发现:GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题:No persona found with name : Documentation example doesn't work with minimal changes
- 对用户的影响:可能影响授权、密钥配置或安全边界。
- 证据:community_evidence:github | https://github.com/vibrantlabsai/ragas/issues/2047 | 来源讨论提到 python 相关条件,需在安装/试用前复核。
12. 安全/权限坑 · 来源证据:Proposal: Contribute English/Uzbek Multilingual RAG Evaluation Dataset to RAGAS
- 严重度:high
- 证据强度:source_linked
- 发现:GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题:Proposal: Contribute English/Uzbek Multilingual RAG Evaluation Dataset to RAGAS
- 对用户的影响:可能影响授权、密钥配置或安全边界。
- 证据:community_evidence:github | https://github.com/vibrantlabsai/ragas/issues/2649 | 来源类型 github_issue 暴露的待验证使用条件。
13. 安全/权限坑 · 来源证据:[Security] Agentic Workflow Injection in Claude Docs Check
- 严重度:high
- 证据强度:source_linked
- 发现:GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题:[Security] Agentic Workflow Injection in Claude Docs Check
- 对用户的影响:可能影响授权、密钥配置或安全边界。
- 证据:community_evidence:github | https://github.com/vibrantlabsai/ragas/issues/2692 | 来源讨论提到 python 相关条件,需在安装/试用前复核。
14. 安全/权限坑 · 来源证据:get_token_usage_for_bedrock always returns 0 (reads wrong response_metadata keys for langchain-aws ChatBedrock/ChatBedr…
- 严重度:high
- 证据强度:source_linked
- 发现:GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题:get_token_usage_for_bedrock always returns 0 (reads wrong response_metadata keys for langchain-aws ChatBedrock/ChatBedrockConverse)
- 对用户的影响:可能影响升级、迁移或版本选择。
- 证据:community_evidence:github | https://github.com/vibrantlabsai/ragas/issues/2779 | 来源讨论提到 python 相关条件,需在安装/试用前复核。
15. 配置坑 · 来源证据:EmbeddingUsageEvent telemetry NaNs a metric when embeddings expose a non-string .model (e.g. fastembed)
- 严重度:medium
- 证据强度:source_linked
- 发现:GitHub 社区证据显示该项目存在一个配置相关的待验证问题:EmbeddingUsageEvent telemetry NaNs a metric when embeddings expose a non-string .model (e.g. fastembed)
- 对用户的影响:可能增加新用户试用和生产接入成本。
- 证据:community_evidence:github | https://github.com/vibrantlabsai/ragas/issues/2783 | 来源讨论提到 python 相关条件,需在安装/试用前复核。
16. 能力坑 · 能力判断依赖假设
- 严重度:medium
- 证据强度:source_linked
- 发现:README/documentation is current enough for a first validation pass.
- 对用户的影响:假设不成立时,用户拿不到承诺的能力。
- 证据:capability.assumptions | https://github.com/vibrantlabsai/ragas | README/documentation is current enough for a first validation pass.
17. 维护坑 · 维护活跃度未知
- 严重度:medium
- 证据强度:source_linked
- 发现:未记录 last_activity_observed。
- 对用户的影响:新项目、停更项目和活跃项目会被混在一起,推荐信任度下降。
- 证据:evidence.maintainer_signals | https://github.com/vibrantlabsai/ragas | last_activity_observed missing
- 严重度:medium
- 证据强度:source_linked
- 发现:no_demo
- 证据:downstream_validation.risk_items | https://github.com/vibrantlabsai/ragas | no_demo; severity=medium
19. 安全/权限坑 · 存在评分风险
- 严重度:medium
- 证据强度:source_linked
- 发现:no_demo
- 对用户的影响:风险会影响是否适合普通用户安装。
- 证据:risks.scoring_risks | https://github.com/vibrantlabsai/ragas | no_demo; severity=medium
20. 安全/权限坑 · 来源证据:TypeError: unsupported operand type(s) for += on dict when using LangchainLLMWrapper with evaluate() in 0.4.3
- 严重度:medium
- 证据强度:source_linked
- 发现:GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题:TypeError: unsupported operand type(s) for += on dict when using LangchainLLMWrapper with evaluate() in 0.4.3
- 对用户的影响:可能影响授权、密钥配置或安全边界。
- 证据:community_evidence:github | https://github.com/vibrantlabsai/ragas/issues/2790 | 来源讨论提到 python 相关条件,需在安装/试用前复核。
21. 维护坑 · issue/PR 响应质量未知
- 严重度:low
- 证据强度:source_linked
- 发现:issue_or_pr_quality=unknown。
- 对用户的影响:用户无法判断遇到问题后是否有人维护。
- 证据:evidence.maintainer_signals | https://github.com/vibrantlabsai/ragas | issue_or_pr_quality=unknown
22. 维护坑 · 发布节奏不明确
- 严重度:low
- 证据强度:source_linked
- 发现:release_recency=unknown。
- 对用户的影响:安装命令和文档可能落后于代码,用户踩坑概率升高。
- 证据:evidence.maintainer_signals | https://github.com/vibrantlabsai/ragas | release_recency=unknown
来源:Doramagic 发现、验证与编译记录