四、Agent 评估与可观测性:LangSmith 与客服 A/B 测试

Agent 评估与可观测性:LangSmith 与客服 A/B 测试

评估指标LangSmith 轨迹提示词 A/B 对比,把「能跑」的 Agent 推进到「可度量、可复现、可迭代」;实战以电商客服双版 system prompt 为例。

阅读建议 :先读第一节指标表,弄清要量什么;第二节打开 LangSmith 看一次完整 trace;第三、四节按「测试集 → 双 Agent → 评估」顺序对照代码。LANGCHAIN_API_KEY 等凭证用环境变量配置。


目录

  1. 评估指标体系
  2. [可观测性:LangSmith 快速集成](#可观测性:LangSmith 快速集成 "#heading-4")
  3. [提示词版本管理与 A/B 测试](#提示词版本管理与 A/B 测试 "#heading-7")
  4. [实战:客服 Agent A/B 测试平台](#实战:客服 Agent A/B 测试平台 "#heading-10")
  5. 自测清单

1. 评估指标体系

智能体评估不同于传统模型评估,需要从多个维度衡量:

指标类别 具体指标 含义
任务成功率 最终目标达成率 用户问题是否得到正确解答(人工或 LLM-as-Judge)
效率 步骤数、工具调用次数、Token 消耗 是否走了弯路
准确性 工具选择准确率、参数提取准确率 是否调用正确工具、参数是否正确
鲁棒性 异常处理率、重试次数 遇到错误能否恢复
用户满意度 答案相关性、友好度 主观反馈或语义相似度

评估方法

  • 自动化评估(推荐):LLM-as-Judge 对输出打分,或与标准答案做语义/规则比对。
  • 人工评估:小规模测试集人工标注。
  • 混合评估:自动化筛出明显正确/错误,其余人工复核。

2. 可观测性:LangSmith 快速集成

LangSmith 是 LangChain 生态的调试、评估与监控平台,可记录每一步:输入、模型调用、工具调用、输出。

阅读提示 :开启 tracing 后,现有 LangChain / LangGraph 调用会自动上报,无需改业务逻辑。

2.1 开启追踪

python 复制代码
import os

# 运行前在环境中配置 LANGCHAIN_API_KEY
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_PROJECT"] = "customer_service_agent"

# 此后 LangChain / LangGraph 调用会自动写入该项目

在 LangSmith 控制台可查看:每次 LLM 的输入输出、工具参数与结果、耗时与 Token、以及人工或自动 feedback 评分。

2.2 用 LangSmith 跑自动化评估

python 复制代码
from langsmith.evaluation import evaluate
from langsmith.schemas import Run, Example


def check_answer_correctness(run: Run, example: Example):
    actual = run.outputs.get("output", "")
    expected = example.outputs["expected_answer"]
    # 生产环境可改为 LLM 判语义等价
    return {"score": 1 if expected in actual else 0}


test_examples = [
    {"inputs": {"question": "如何退货?"}, "outputs": {"expected_answer": "7天无理由"}},
]

results = evaluate(
    lambda input: agent_executor.invoke({"input": input["question"]}),
    data=test_examples,
    evaluators=[check_answer_correctness],
    experiment_prefix="ab_test_prompt_v1",
)

易混点evaluatedata 可以是内存列表,也可以是 LangSmith 上已创建的数据集;实验名 experiment_prefix 便于在控制台对比多次运行。


3. 提示词版本管理与 A/B 测试

生产环境常需并行试验多套 system prompt 或工具配置,要求可复现、可对比

3.1 Prompt Hub 管理版本

python 复制代码
from langsmith import Client

client = Client()
client.create_prompt(
    "customer_service_v1",
    input_variables=["question"],
    template="你是一个客服... 问题:{question}",
)

prompt = client.pull_prompt("customer_service_v1")
formatted = prompt.format(question="如何退货?")

3.2 A/B 对比骨架

  1. 定义两个 Agent 配置(不同 prompt 或工具集)。
  2. 同一测试集分别跑完。
  3. 在 LangSmith 中对比成功率、成本、单条轨迹。
python 复制代码
import os
import pandas as pd
from langsmith import Client

client = Client()


def run_agent(agent_func, test_questions):
    rows = []
    for q in test_questions:
        output = agent_func(q)
        rows.append({"question": q, "output": output})
    return pd.DataFrame(rows)


# agent_v1 / agent_v2 为两套 invoke 封装
df_v1 = run_agent(agent_v1, test_questions)
df_v2 = run_agent(agent_v2, test_questions)

client.create_experiment("prompt_v1", results=df_v1)
client.create_experiment("prompt_v2", results=df_v2)

在 LangSmith 界面查看两实验的准确率、Token 与失败样例。


4. 实战:客服 Agent A/B 测试平台

4.1 场景与两套提示词

场景:电商客服,回答退换货、物流、优惠券等问题;对比两套 system prompt。

V1(简洁)

text 复制代码
你是客服助手,回答用户问题,如果不知道就说不知道。

V2(带步骤)

text 复制代码
你是客服助手。首先确认用户问题类别(退货/物流/优惠券),然后根据知识库回答。
若知识库无答案,引导用户联系人工。

评估维度

维度 说明
正确率 输出是否包含标注中的关键信息
步数 平均工具调用次数(越少越好)
拒绝率 是否合理转人工或明确「不知道」

4.2 准备测试集

python 复制代码
test_set = [
    {
        "question": "我买的衣服不合适,能退吗?",
        "expected_keywords": ["7天", "无理由", "不影响二次销售"],
    },
    {
        "question": "快递显示签收但我没收到",
        "expected_keywords": ["联系物流", "投诉", "查询"],
    },
]

可按业务扩充到 20~30 条,并写入 LangSmith Dataset。

4.3 构建双版本 Agent

python 复制代码
from langchain.agents import AgentExecutor, create_openai_tools_agent
from langchain_core.prompts import ChatPromptTemplate

# llm、tools 由你方 Week3 检索 + 工具链提供


def create_agent(system_prompt_template: str):
    prompt = ChatPromptTemplate.from_messages([
        ("system", system_prompt_template),
        ("human", "{input}"),
        ("placeholder", "{agent_scratchpad}"),
    ])
    agent = create_openai_tools_agent(llm, tools, prompt)
    return AgentExecutor(agent=agent, tools=tools, verbose=False)


agent_v1 = create_agent(V1_PROMPT)
agent_v2 = create_agent(V2_PROMPT)

4.4 在 LangSmith 中评估

python 复制代码
from langsmith import Client
from langsmith.evaluation import evaluate, LangChainStringEvaluator

client = Client()
dataset = client.create_dataset("客服测试集_v1")
for item in test_set:
    client.create_example(
        inputs={"question": item["question"]},
        outputs={"expected": item["expected_keywords"]},
        dataset_id=dataset.id,
    )


def target(inputs):
    return agent_v2.invoke({"input": inputs["question"]})


evaluators = [
    LangChainStringEvaluator("criteria", config={"criteria": "correctness"}),
]

results = evaluate(
    target,
    data=dataset,
    evaluators=evaluators,
    experiment_prefix="客服AB测试_V2",
    metadata={"prompt_version": "v2"},
)

控制台可对比 V1 / V2 实验的准确率、单条 trace 与 Token。

4.5 本地简易评估(不依赖 LangSmith)

python 复制代码
def evaluate_local(agent_executor, test_set):
    correct = 0
    details = []
    for item in test_set:
        output = agent_executor.invoke({"input": item["question"]})["output"]
        score = all(kw in output for kw in item["expected_keywords"])
        correct += int(score)
        details.append({
            "question": item["question"],
            "output": output,
            "score": bool(score),
        })
    accuracy = correct / len(test_set) if test_set else 0.0
    return accuracy, details


acc_v1, _ = evaluate_local(agent_v1, test_set)
acc_v2, _ = evaluate_local(agent_v2, test_set)
print(f"V1 准确率: {acc_v1:.2%}, V2 准确率: {acc_v2:.2%}")

关键词命中适合快速回归;上线前建议叠加 LLM-as-Judge 或人工抽检。


5. 自测清单

编号 通过标准
T1 配置 LANGCHAIN_TRACING_V2 后,LangSmith 中能看到一次完整 Agent 运行 trace
T2 同一 test_set 上 V1、V2 各跑一遍,本地 evaluate_local 能输出两个准确率
T3 至少一条样例在 LangSmith 中可打开轨迹,核对工具调用顺序是否合理
T4 测试集含「应转人工」类问题,V2 的拒绝/转人工表现符合 prompt 设计
相关推荐
Len037 小时前
AI 团队不是科幻:STATE.yaml 自主项目管理深度报告
aigc
夜雪闻竹9 小时前
Cursor 的 state.vscdb 解析踩坑记
json·aigc·ai编程
我是宝库9 小时前
SCI论文可不可以先用免费系统检测重复率和AI率?
人工智能·aigc·英文论文·sci论文·论文查重·turnitin系统·ithenticate
xiami_world9 小时前
2026年团队AI工具栈架构指南:ChatGPT + Codex + AI白板智能体工程化落地方案
人工智能·ai·信息可视化·aigc·流程图
DogDaoDao10 小时前
【GitHub】SkyReels-V2 无限时长电影级视频生成模型:技术架构与核心原理深度解析
人工智能·大模型·aigc·音视频·ai agent·生成视频·skyreels-v2
向量引擎10 小时前
给 Agent 加一个可靠的知识检索层:从向量引擎到 RAG 工作流的实践笔记
人工智能·gpt·aigc·api·ai编程·key·agi
爱吃的小肥羊1 天前
一个好玩技巧:我让Codex把我的工作流蒸馏成skill
aigc·openai·ai编程
Awu12271 天前
⚡精通 Claude 第 10 课:CLI 完全参考
人工智能·aigc·claude
摄影图1 天前
神经网络创意科技图片素材 满足多场景科技设计创作需求
人工智能·科技·神经网络·aigc·插画