惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Security @ Cisco Blogs
The Last Watchdog
The Last Watchdog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
aimingoo的专栏
aimingoo的专栏
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
PCI Perspectives
PCI Perspectives
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
月光博客
月光博客
V
Visual Studio Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
Tailwind CSS Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
L
LangChain Blog
B
Blog RSS Feed
小众软件
小众软件
N
News | PayPal Newsroom
Attack and Defense Labs
Attack and Defense Labs
Microsoft Azure Blog
Microsoft Azure Blog
V
Vulnerabilities – Threatpost
The Hacker News
The Hacker News
T
Tor Project blog
A
Arctic Wolf
Jina AI
Jina AI
Hacker News: Ask HN
Hacker News: Ask HN
F
Fortinet All Blogs
Cloudbric
Cloudbric
S
Secure Thoughts
L
LINUX DO - 热门话题
博客园 - 司徒正美
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
S
Security Affairs
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
J
Java Code Geeks
P
Privacy International News Feed
AWS News Blog
AWS News Blog
S
Securelist
TaoSecurity Blog
TaoSecurity Blog
AI
AI
O
OpenAI News
C
Cyber Attacks, Cyber Crime and Cyber Security
K
Kaspersky official blog
T
The Blog of Author Tim Ferriss
大猫的无限游戏
大猫的无限游戏
Google DeepMind News
Google DeepMind News
Know Your Adversary
Know Your Adversary
P
Palo Alto Networks Blog
T
Tenable Blog
Last Week in AI
Last Week in AI
WordPress大学
WordPress大学
S
SegmentFault 最新的问题

博客园 - work hard work smart

使用 LangChain + Hugging Face 构建文本向量化服务 SQLAlchemy 使用详解 Python 中使用 Elasticsearch 的完整指南 Qdrant 向量数据库使用指南 OpenEvals 快速入门:LLM 评估指南 DeepEval 快速入门:LLM 应用评估指南 Qwen-Agent 入门指南:快速构建智能体应用 LangSmith 集成实战:从追踪到评估的完整指南 初识 go-zero:一款让你写后端更规范、更高效的 Go 微服务框架 RAG 中为什么需要 Rerank,以及如何使用 Rerank LangChain4j RAG 核心组件与组合方式 如何使用 Elasticsearch 进行全文检索和向量检索 MinerU Docker 部署指南 5 分钟上手:为 Cline 配置一个免费的 MCP 天气服务 Neo4j 图数据库安装与 Spring Boot 集成实战指南 LangFuse 实战指南:用 @observe 三行代码给 LLM 应用加上全链路追踪 Function Call 深度解析:让大模型从"嘴炮"到"实干"的技术革命 Spring AI 提示词模板实战:告别硬编码,实现提示词工程化管理 LangChain4j 实战指南:用 Java 轻松构建 AI 应用 Spring AI 对话短期记忆实战:让大模型拥有"记忆力" Spring AI 提示词工程实战:让大模型更懂你的意图 Spring AI ChatClient 深度解析:优雅构建大模型应用的利器 Spring AI Alibaba DashScopeChatModel 实战 Spring 中 SSE 流式输出的多种实现方式详解 OpenSandbox 实战指南:为 AI Agent 构建安全的代码执行沙箱 在本机启动 LangGraph 开发服务器:完整指南 DeepAgents中Backend的奥秘:让AI Agent拥有文件操作能力 为什么选择 Go 开发 Web 接口?从入门到实践 智能搜索DeepAgent笔记 RAG学习笔记2--系统查询流程 RAG学习笔记1--系统文件导入流程 百炼 WebSearch 快速入门指南 Python 连接 MongoDB 完整指南:从连接配置到增删改查实战 一行命令搞定 MongoDB 开发环境:Docker Compose 部署 + 可视化管理 使用 Attu 可视化管理 Milvus 向量数据库 在 Windows Docker 中快速安装 Milvus 2.5.6 minio使用 Spark 集群搭建 hadoop集群安装 Spring AI Alibaba 入门实战 Windows 安装 OpenClaw 实战指南 MyBatis 核心流程和原理 Idea中安装Claude code插件 Spark 编程 使用Matplotlib 绘制直方图 Flink安装部署 Flume安装 查找导致cpu过高的代码方法 JVisualVM监控远程Java进程 jmap jacoco多模块生成java单元测试报告实践 arthas 使用demo LockSupport Exchanger CyclicBarrier CountDownLatch 手把手教你用python开始第一个机器学习项目
LangSmith 批量评估完全指南
work hard work smart · 2026-06-25 · via 博客园 - work hard work smart

LangSmith 批量评估完全指南

什么是 LangSmith 批量评估?

LangSmith 批量评估是 LangChain 生态系统的核心功能,用于自动化、规模化地测试和评估 LLM 应用的性能

核心概念

将多个测试用例组织成数据集,自动化运行测试,并使用预定义的评估器对结果进行多维度打分。

测试数据集(Dataset)
    ↓
自动化运行(Test Function)
    ↓
多维度评估(Evaluators)
    ↓
结果可视化(Dashboard)

工作流程

  1. 创建测试数据集:定义输入和期望输出
  2. 编写测试函数:调用 Agent/LLM 处理输入
  3. 定义评估器:自定义或使用内置评估标准
  4. 运行批量评估:自动化执行所有测试
  5. 分析结果:在 Web 界面查看评分和对比

为什么使用 LangSmith 批量评估?

解决 LLM 评估的核心痛点

传统方式的问题:

  • ❌ 手动测试效率低,无法规模化
  • ❌ 主观评估标准不一致
  • ❌ 难以追踪历史性能变化
  • ❌ 缺少可视化和对比工具

LangSmith 的优势:

  • ✅ 自动化运行数百个测试用例
  • ✅ 标准化评估流程
  • ✅ 完整的历史记录和版本对比
  • ✅ 可视化 Dashboard
  • ✅ 支持 CI/CD 集成

其它框架对比

框架 批量评估 可视化 自定义评估器 数据集管理 价格
LangSmith ✅ Web UI 付费(有免费额度)
DeepEval ⚠️ 开源免费
Ragas ⚠️ ⚠️ 开源免费
LangFuse ⚠️ ⚠️ ⚠️ 开源+付费

选择建议:

  • 🎯 生产环境 + 团队协作 → LangSmith
  • 🎯 开源优先 → DeepEval / LangFuse
  • 🎯 RAG 专项评估 → Ragas

完整实战示例

场景:智能客服助手评估

假设我们有一个电商客服助手,需要评估其回答质量。

步骤 1:安装和配置

pip install langsmith langchain-openai

配置环境变量:

# Windows PowerShell
$env:LANGSMITH_API_KEY="your-api-key"
$env:LANGCHAIN_TRACING_V2="true"
$env:OPENAI_API_KEY="your-openai-key"

步骤 2:定义应用

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate

# 定义客服助手
llm = ChatOpenAI(model="gpt-3.5-turbo")

prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个电商客服助手,专业、友好地回答用户问题。"),
    ("user", "{question}")
])

chain = prompt | llm

def customer_service_agent(question: str) -> str:
    """客服助手函数"""
    response = chain.invoke({"question": question})
    return response.content

步骤 3:创建测试数据集

from langsmith import Client

client = Client()

# 创建数据集
dataset_name = "customer-service-test"

client.create_dataset(
    dataset_name=dataset_name,
    description="电商客服助手测试数据集"
)

# 定义测试用例
test_cases = [
    {
        "inputs": {"question": "我的订单什么时候能到?"},
        "outputs": {
            "expected_topics": ["物流", "订单"],
            "tone": "professional"
        }
    },
    {
        "inputs": {"question": "这个商品支持退货吗?"},
        "outputs": {
            "expected_topics": ["退货", "售后"],
            "tone": "professional"
        }
    },
    {
        "inputs": {"question": "你们有什么优惠活动?"},
        "outputs": {
            "expected_topics": ["优惠", "活动"],
            "tone": "friendly"
        }
    },
    {
        "inputs": {"question": "商品质量有问题,我要投诉!"},
        "outputs": {
            "expected_topics": ["投诉", "质量"],
            "tone": "empathetic"
        }
    }
]

# 添加测试用例
for case in test_cases:
    client.create_example(
        inputs=case["inputs"],
        outputs=case["outputs"],
        dataset_name=dataset_name
    )

print(f"✓ 测试数据集创建完成: {dataset_name}")

步骤 4:编写测试函数

from langsmith.schemas import Example

def test_function(example: Example) -> dict:
    """测试函数:运行客服助手并返回结果"""
    question = example.inputs["question"]
    
    # 调用客服助手
    response = customer_service_agent(question)
    
    return {
        "response": response,
        "question": question
    }

步骤 5:定义自定义评估器

from langsmith import RunEvaluator
from langsmith.schemas import Run, Example
from typing import Dict, Any

class TopicCoverageEvaluator(RunEvaluator):
    """评估回答是否覆盖期望话题"""
    
    def evaluate_run(self, run: Run, example: Example, **kwargs) -> Dict[str, Any]:
        response = run.outputs.get("response", "").lower()
        expected_topics = example.outputs.get("expected_topics", [])
        
        # 检查话题覆盖
        found_topics = [
            topic for topic in expected_topics 
            if topic in response
        ]
        
        coverage = len(found_topics) / len(expected_topics) if expected_topics else 0
        
        return {
            "key": "topic_coverage",
            "score": coverage,
            "comment": f"覆盖 {len(found_topics)}/{len(expected_topics)} 个话题: {found_topics}"
        }


class ToneEvaluator(RunEvaluator):
    """评估回答语气是否合适"""
    
    def evaluate_run(self, run: Run, example: Example, **kwargs) -> Dict[str, Any]:
        response = run.outputs.get("response", "")
        expected_tone = example.outputs.get("tone", "")
        
        # 简单语气检测(实际应使用更复杂的 NLP 方法)
        tone_indicators = {
            "professional": ["请", "您", "感谢", "抱歉"],
            "friendly": ["亲", "您好", "😊", "欢迎"],
            "empathetic": ["理解", "抱歉", "立即", "帮助"]
        }
        
        indicators = tone_indicators.get(expected_tone, [])
        found = sum(1 for word in indicators if word in response)
        
        score = min(1.0, found / 2) if indicators else 0
        
        return {
            "key": "tone_match",
            "score": score,
            "comment": f"期望语气: {expected_tone}, 找到 {found} 个指标词"
        }

步骤 6:运行批量评估

from langsmith.evaluation import evaluate
from datetime import datetime

# 配置评估器
evaluators = [
    TopicCoverageEvaluator(),
    ToneEvaluator()
]

# 运行评估
experiment_name = f"cs-eval-{datetime.now().strftime('%Y%m%d-%H%M%S')}"

results = evaluate(
    test_function,
    data=dataset_name,
    evaluators=evaluators,
    experiment_prefix=experiment_name,
    max_concurrency=2
)

print(f"✓ 评估完成: {experiment_name}")
print(f"查看结果: https://smith.langchain.com")

步骤 7:查看结果

访问 https://smith.langchain.com

  1. 进入 Experiments 查看评估结果
  2. 点击实验名称查看详细信息
  3. 查看每个测试用例的得分和评估反馈

高级用法

使用内置评估器

from langsmith.evaluation.evaluators import (
    answer_relevance_evaluator,
    hallucination_evaluator
)

results = evaluate(
    test_function,
    data=dataset_name,
    evaluators=[
        answer_relevance_evaluator,
        hallucination_evaluator
    ]
)

并发执行

results = evaluate(
    test_function,
    data=dataset_name,
    evaluators=evaluators,
    max_concurrency=5  # 根据 API 限流调整
)

实验对比

# 运行多个实验
results_v1 = evaluate(test_function_v1, data=dataset_name, evaluators=evaluators)
results_v2 = evaluate(test_function_v2, data=dataset_name, evaluators=evaluators)

# 在 Web 界面中对比两个实验

从文件加载测试数据

import json

# 从 JSON 文件加载
with open("test_cases.json", "r", encoding="utf-8") as f:
    test_cases = json.load(f)

for case in test_cases:
    client.create_example(
        inputs=case["inputs"],
        outputs=case["outputs"],
        dataset_name=dataset_name
    )

优势和局限

✅ 优势

  1. 完整的生态系统

    • 与 LangChain 深度集成
    • 可视化 Dashboard
    • 实验对比和版本管理
  2. 灵活的评估器

    • 支持自定义评估逻辑
    • 可组合多个评估器
    • 提供内置评估器
  3. 企业级功能

    • 团队协作
    • API 和 SDK
    • CI/CD 集成

⚠️ 局限

  1. 付费服务

    • 超出免费额度后需要付费
    • 依赖外部平台
  2. 学习曲线

    • 需要理解 LangSmith 概念
    • 评估器编写需要一定经验
  3. 并发限制

    • API 有速率限制
    • 大规模评估需要控制并发

最佳实践

测试用例设计

# ✅ 好的测试用例
{
    "inputs": {"question": "订单延迟了怎么办?"},
    "outputs": {
        "expected_topics": ["订单", "延迟", "解决方案"],
        "tone": "empathetic",
        "should_contain": ["抱歉", "立即", "联系"]
    }
}

# ❌ 差的测试用例
{
    "inputs": {"question": "你好"},
    "outputs": {"should_contain": ["你好"]}
}

评估器设计

# ✅ 好的评估器(可量化、可复现)
class CoverageEvaluator(RunEvaluator):
    def evaluate_run(self, run, example):
        found = len([kw for kw in expected if kw in response])
        score = found / len(expected)
        return {"key": "coverage", "score": score}

# ❌ 差的评估器(主观判断)
class GoodEvaluator(RunEvaluator):
    def evaluate_run(self, run, example):
        if "感觉不错":
            return {"score": 1.0}

数据集管理

  • 版本化dataset-v1, dataset-v2
  • 分类:冒烟测试、回归测试、边界情况
  • 定期更新:根据用户反馈补充

评估频率

开发阶段:
  - 每次提交前:冒烟测试(5-10 用例)
  - 每天:完整评估(50-100 用例)

生产阶段:
  - 每周:完整评估
  - 每月:大规模回归测试(200+ 用例)

总结

LangSmith 批量评估的价值

维度 价值
效率 节省 80% 测试时间
质量 标准化评估,减少主观偏差
可追溯 完整历史记录,便于对比
可视化 Web Dashboard,一目了然

适用场景

  • ✅ 上线前全面测试
  • ✅ 提示词优化后验证
  • ✅ 更换模型后对比
  • ✅ 重构后回归测试
  • ✅ 持续质量监控

参考资料

开始你的 LangSmith 批量评估之旅!🚀