评估者RetrievalGroundedness 判断您的应用程序响应是否由所提供的背景信息(无论是来自 RAG 系统,还是通过工具调用生成)提供事实支持,从而协助发现未被该背景信息支持的幻觉或声明。
此内置 LLM 法官旨在评估需要确保响应以检索到的信息为基础的 RAG 应用程序。
默认情况下,此法官使用 Databricks 托管的 LLM 来执行 GenAI 质量评估。 可以通过在法官定义中使用model参数来更改评判模型。 必须以格式 <provider>:/<model-name>指定模型,其中 <provider> 与 LiteLLM 兼容的模型提供程序。 如果使用 databricks 模型提供程序,则模型名称与服务终结点名称相同。
运行示例的先决条件
安装 MLflow 和所需包
pip install --upgrade "mlflow[databricks]>=3.4.0"请按照设置环境快速入门创建 MLflow 试验。
与 mlflow.evaluate() 一起使用
RetrievalGroundedness评估器可以直接与 MLflow 的评估框架一起使用。
要求:
-
跟踪要求:
- MLflow 跟踪必须至少包含一个将
span_type设置为RETRIEVER的跨度 -
inputs和outputs必须位于跟踪的根跨度上
- MLflow 跟踪必须至少包含一个将
初始化 OpenAI 客户端以连接到由 Databricks 托管的 LLM 或者由 OpenAI 托管的 LLM。
OpenAI 托管的 LLM
使用本地 OpenAI SDK 连接到由 OpenAI 托管的模型。 从 可用的 OpenAI 模型中选择一个模型。
import mlflow import os import openai # Ensure your OPENAI_API_KEY is set in your environment # os.environ["OPENAI_API_KEY"] = "<YOUR_API_KEY>" # Uncomment and set if not globally configured # Enable auto-tracing for OpenAI mlflow.openai.autolog() # Set up MLflow tracking to Databricks mlflow.set_tracking_uri("databricks") mlflow.set_experiment("/Shared/docs-demo") # Create an OpenAI client connected to OpenAI SDKs client = openai.OpenAI() # Select an LLM model_name = "gpt-4o-mini"使用判断:
from mlflow.genai.scorers import RetrievalGroundedness from mlflow.entities import Document from typing import List # Define a retriever function with proper span type @mlflow.trace(span_type="RETRIEVER") def retrieve_docs(query: str) -> List[Document]: # Simulated retrieval based on query if "mlflow" in query.lower(): return [ Document( id="doc_1", page_content="MLflow is an open-source platform for managing the ML lifecycle.", metadata={"source": "mlflow_docs.txt"} ), Document( id="doc_2", page_content="MLflow provides tools for experiment tracking, model packaging, and deployment.", metadata={"source": "mlflow_features.txt"} ) ] else: return [ Document( id="doc_3", page_content="Machine learning involves training models on data.", metadata={"source": "ml_basics.txt"} ) ] # Define your RAG app @mlflow.trace def rag_app(query: str): # Retrieve relevant documents docs = retrieve_docs(query) context = "\n".join([doc.page_content for doc in docs]) # Generate response using LLM messages = [ {"role": "system", "content": f"Answer based on this context: {context}"}, {"role": "user", "content": query} ] response = client.chat.completions.create( # This example uses Databricks hosted Claude. If you provide your own OpenAI credentials, replace with a valid OpenAI model e.g., gpt-4o, etc. model=model_name, messages=messages ) return {"response": response.choices[0].message.content} # Create evaluation dataset eval_dataset = [ { "inputs": {"query": "What is MLflow used for?"} }, { "inputs": {"query": "What are the main features of MLflow?"} } ] # Run evaluation with RetrievalGroundedness scorer eval_results = mlflow.genai.evaluate( data=eval_dataset, predict_fn=rag_app, scorers=[ RetrievalGroundedness( model="databricks:/databricks-gpt-oss-120b", # Optional. Defaults to custom Databricks model. ) ] )
Customization
可以通过提供不同的评价模型来定制评审:
from mlflow.genai.scorers import RetrievalGroundedness
# Use a different judge model
groundedness_judge = RetrievalGroundedness(
model="databricks:/databricks-gpt-5-mini" # Or any LiteLLM-compatible model
)
# Use in evaluation
eval_results = mlflow.genai.evaluate(
data=eval_dataset,
predict_fn=rag_app,
scorers=[groundedness_judge]
)
解释结果
法官返回一个 Feedback 对象,其中包含:
-
value:如果响应已停止,则为“是”;如果响应包含幻觉,则为“否” -
rationale:详细说明用于标识:- 上下文支持哪些语句
- 哪些陈述缺乏支持(幻觉)
- 支持或矛盾声明的上下文中的特定引文
后续步骤
- 评估上下文是否足够 - 检查检索器是否提供足够的信息
- 评估上下文相关性 - 确保检索的文档与查询相关
- 运行全面的 RAG 评估 - 合并多个评委以完成 RAG 评估