Q2 给出了"8 best practice + 3 必做 + 5 nice-to-have"。Q3 进入下一步:不同项目类型 · 不同的应用组合。5 种典型项目 × 必做 3 件 × 落地优先级。
| 项目类型 | Eval Suite | Tracing | Log/Debug | CI | Monitoring | 何时应用 |
|---|---|---|---|---|---|---|
| ① 单轮问答 | 必做 | — | — | — | — | Day 1 |
| ② RAG 文档问答 | 必做 | — | — | — | — | Day 1 |
| ③ 多步 agent | 必做 | 必做 | 必做 | — | — | Day 1 |
| ④ Production Agent | 必做 | 必做 | 必做 | 必做 | — | Week 2+ |
| ⑤ ToB / 合规 Agent | 必做 | 必做 | 必做 | 必做 | 必做 | Month 1+ |
核心洞察:Eval Suite 永远是 Day 1 — 即使是最简单的项目。其他根据可靠性要求递进。
场景:替代 ChatGPT 完成某领域问答(投资分析 / 代码 review / 文档总结)。
import json from langchain import ChatOpenAI llm = ChatOpenAI(model="gpt-5") # Eval cases eval_cases = [ {"input": "什么是市盈率?", "expected_keywords": ["P/E", "股价", "每股收益"]}, {"input": "ROE 怎么算?", "expected_keywords": ["净利润", "股东权益"]}, ] def run_eval(case): response = llm.invoke(case["input"]).content return all(kw in response for kw case["expected_keywords"]) pass_rate = sum(run_eval(c) for c eval_cases) / len(eval_cases) print(f"Pass rate: {pass_rate:.0%}") # 保存 baseline with open(".eval-baseline.json", "w") as f: json.dump({"pass_rate": pass_rate, "version": "v0-baseline"}, f)
场景:企业内部文档 / 法律法规 / 学术论文问答。
from ragas import evaluate from ragas.metrics import ( faithfulness, answer_relevancy, context_relevancy, context_precision, ) # 准备 eval dataset dataset = [ { "question": "什么是 context engineering?", "answer": rag_response.answer, "contexts": rag_response.contexts, "ground_truth": "...", }, # ... 20 个 cases ] # 跑 RAGAS 评测 results = evaluate( dataset, metrics=[faithfulness, answer_relevancy, context_relevancy, context_precision], ) print(f"Faithfulness: {results['faithfulness']:.2f}") print(f"Answer relevance: {results['answer_relevancy']:.2f}") print(f"Context relevance: {results['context_relevancy']:.2f}") print(f"Context precision: {results['context_precision']:.2f}")
场景:需要 LLM 调用多个工具完成复杂任务。
from langsmith import traceable, Client # 1. 所有函数都 @traceable @traceable(run_type="tool") def search(query: str) -> str: return search_api(query) @traceable(run_type="llm") def llm_call(prompt: str) -> str: return llm.invoke(prompt).content @traceable(run_type="chain") def agent_step(state): # 1. think thought = llm_call(state["prompt"]) # 2. act result = search(thought) # 3. observe return {"thought": thought, "result": result} # 2. 跑 eval suite (LangSmith client) client = Client() results = client.evaluate_run( runnable=agent_step, dataset_name="agent-v1", evaluators=["correctness", "embedding_distance"], ) print(f"Agent pass rate: {results.aggregate_metrics['correctness']:.0%}")
场景:多步 agent + 真实用户 + 可靠性要求 > 95%。
完整 harness — Eval + Tracing + Log + CI regression + Monitoring。详细对比见 Q4。
场景:金融 / 医疗 / 法律场景,需要合规 + 审计 + 红队测试。
全套 5 件 harness + 额外的:
Q3 给出了"5 项目类型 × 必做映射"。Q4 进入 效果到底多大 — Inset Magnifier · 4 角色 · 复合效应 vs 单点效应 · 量化数据。