趋近智
虽然准确率、精确率和召回率等标准机器学习指标提供了一个基准,但它们在评估使用大型语言模型(LLM)构建的应用的多方面表现时往往不足。LLM 的输出具有连贯性、相关性、有用性、安全性以及对特定格式或语气的遵守等特性,这些特性难以通过简单的量化衡量方式来捕捉。有效评估生产环境中的 LangChain 应用,需要定义根据其特定功能和预期行为量身定制的自定义指标。
超出简单的正确性检查,您能够衡量对应用成功真正有意义的方面。例如,您的 RAG 系统是否检索到相关上下文并忠实地基于其给出答案?您的客服代理是否保持了有用且安全的语气?您的摘要工具是否准确把握了核心内容而没有歪曲?回答这些问题需要定制的评估策略。
传统指标通常依赖于精确匹配或预定义的分类。然而,LLM 的输出通常是生成式的:
因此,开发自定义评估指标成为构建可靠 LLM 应用的重要一步。
自定义指标可以根据它们评估输出的方式进行大致分类:
程序化与基于规则的指标: 这些指标涉及编写代码来检查具体的客观标准。
json、xml.etree.ElementTree)。语义相似度指标: 这些指标使用嵌入来衡量生成输出与参考答案或输入查询/上下文之间的语义接近程度。
基于模型的评估(LLM 作为评判者): 这种技术使用另一个 LLM(通常是像 GPT-4 这样能力强的模型)根据提示中定义的具体标准来评估输出。
# LLM 作为评判者提示结构的简化示例
EVALUATION_PROMPT = """
您是一位公正的评估者。请根据提供的“上下文”和“查询”,评估提交的“回复”的质量。
查询:{query}
上下文:{context}
回复:{response}
请根据以下标准,以 1 到 5 的等级(1=差,5=优秀)评估回复:
1. 忠实性:回复是否准确反映了上下文中的信息,而没有添加未经证实的说法?
2. 相关性:回复是否与查询直接相关?
请以 JSON 格式提供您的分数:{"忠实性": score, "相关性": score}
"""
人工参与(HITL): 直接从人类收集反馈仍然是衡量主观品质的黄金标准。
LangChain 提供了抽象功能,通常与 LangSmith 集成,以简化自定义评估器的实现。通常,您会定义一个评估函数或类,它接收运行信息(输入、输出等)并返回一个 EvaluationResult。
from langsmith.evaluation import EvaluationResult, run_evaluator
# 示例:程序化指标,检查输出是否包含特定的警告短语
@run_evaluator
def must_contain_warning(run, example) -> EvaluationResult:
"""检查输出是否包含 'Warning:'。"""
# 安全获取输出,如果缺失则默认为空字符串
output = run.outputs.get("output") if run.outputs else ""
if isinstance(output, str) and "Warning:" in output:
score = 1 # 包含警告
else:
score = 0 # 不包含警告
return EvaluationResult(key="contains_warning", score=score)
# 示例:简化的语义相似度检查
# 假设 `get_embedding` 和 `cosine_similarity` 在其他地方定义
@run_evaluator
def check_semantic_similarity(run, example) -> EvaluationResult:
"""比较输出嵌入与参考答案嵌入。"""
output = run.outputs.get("output") if run.outputs else ""
reference = example.outputs.get("reference_answer") if example.outputs else ""
if not output or not reference:
return EvaluationResult(key="semantic_similarity", score=0, comment="Missing output or reference")
output_embedding = get_embedding(output)
reference_embedding = get_embedding(reference)
similarity = cosine_similarity(output_embedding, reference_embedding) # 返回 -1 到 1 之间的值
# 如果需要,将分数归一化到 0-1 以保持一致性
normalized_score = (similarity + 1) / 2
return EvaluationResult(key="semantic_similarity", score=normalized_score)
这些评估器函数可以应用于 LangSmith 中的数据集,或用于自定义评估脚本。
不同的评估方法评估生成输出,产生分数和定性反馈。
通过深思熟虑地定义自定义指标,您能更好地了解您的 LangChain 应用的表现,从而实现有针对性的改进,并确保其满足生产环境的特定要求。这些指标为本章后续讨论的自动化评估流程和监控策略奠定了基础。
简洁的语法。内置调试功能。从第一天起就可投入生产。
为 ApX 背后的 AI 系统而构建
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造