为什么 Agent 更需要分层测试

最终答案错误,不一定是模型的问题。可能是简历知识缺失、BM25 没有召回、模型没有调用工具,或者流式接口丢失了 token。因此我把测试拆成知识层、检索层、Agent 层与 HTTP 层。

先测试 Retriever

def test_ai_project_retrieval():
    context = retrieve_resume_context("做过哪些 AI 项目")
    assert "Linter+AI" in context
    assert "resume/project-linter-ai" in context

def test_private_fields_are_absent():
    context = retrieve_resume_context("联系方式")
    assert "电话" not in context
    assert "邮箱" not in context

再测试接口契约

from fastapi.testclient import TestClient
from main import app

client = TestClient(app)

def test_health():
    response = client.get("/health")
    assert response.status_code == 200
    assert response.json()["agent"] == "python-langchain-rag"

建立最小评估集

我会准备一组带预期来源的问题,例如“就读什么专业”“安卓实习做了什么”“Linter+AI 使用哪些技术”。评估时同时检查是否召回正确来源、回答是否包含关键事实,以及是否出现知识库之外的数字。

下一步可以接入 LangSmith tracing,观察每次工具调用和 token 消耗,但本地断言仍然是最容易复现的基础。