评估与可观测:怎么知道它真的好用
开放题用「AI 当裁判」打分,再给智能体装上"黑匣子"
a4.2 里,你用"答案有没有出现某个关键词"来判对错——对"1 公里=1000 米"这种有标准答案的题够用。
但现实里很多是开放题:"这段文案写得好不好?""这个回答全不全面?"——关键词根本判不了。
这一节,我们升级评估:① 让另一个 AI 当裁判给开放题打分;② 给智能体装上"黑匣子"(可观测),出了问题能回放每一步。这是从"做得出"到"做得可靠"的关键一跳。
评估的闭环
要量的还是那几样,但开放题多了"质量分":成功率 / 答案质量 / 成本(token)/ 延迟 / 稳定性。
🔧 上手:让 AI 当裁判(LLM-as-judge)
开放题没法用关键词判,就再叫一个模型按评分标准打分。下面 复制即可运行:
# pip install "openai>=1.0"
import json, re
from openai import OpenAI
client = OpenAI(api_key="你的KEY", base_url="https://api.deepseek.com")
def chat(prompt: str) -> str:
return client.chat.completions.create(
model="deepseek-chat", messages=[{"role": "user", "content": prompt}]
).choices[0].message.content
def judge(question: str, answer: str) -> dict:
rubric = (
"你是严格的评委。按 1-5 给下面的回答打分(5=准确且完整,3=基本对但有缺,1=错误或答非所问)。"
"只输出一行 JSON:{\"score\": 整数, \"reason\": \"简短理由\"}"
)
out = chat(f"{rubric}\n\n问题:{question}\n回答:{answer}")
m = re.search(r"\{.*\}", out, re.S) # 模型常裹一层 ```json,把花括号抠出来更稳
return json.loads(m.group()) if m else {"score": 0, "reason": "解析失败:" + out[:50]}
q = "用一句话解释什么是 RAG"
a = chat(q)
print("🤖 回答:", a)
print("⚖️ 评委:", judge(q, a)) # → {'score': 5, 'reason': '准确点出检索增强生成'}
跑一遍:第一个模型回答,第二个模型按标准打分 + 给理由。把它套进 a4.2 的测试循环,你就能给一整批开放题自动算平均分了——开放任务也能用数据迭代。
给智能体装"黑匣子"(可观测)
智能体多步、还调工具,一出错你得能回放:它第几步想错了?哪个工具返回了脏数据?花了多少 token?
- 最朴素:在 ReAct 循环里
print每一步的"想/做/看 + 耗时 + token"(你前面手写的代码已经在打印了)。 - 专业工具:LangSmith / Langfuse 这类"可观测平台",自动记录每一步调用、耗时、成本,出问题点开就能看整条轨迹。
一句话:没有可观测,线上出问题你只能抓瞎;有了它,每一步都有据可查。
LLM 当裁判很方便,但它也有偏见:容易偏爱长答案、偏爱自己风格、对模糊标准打分飘。
几个保险:① 给清晰的评分标准(像上面的 rubric),别只说"打个分";② 关键场景多次/多模型当裁判取众数;③ 人工抽检一部分,校准裁判靠不靠谱。AI 裁判是省力工具,不是免检金牌。
我的智能体做这件事:『___』(我来描述)。请帮我设计一份给『AI 裁判』用的评分标准(rubric):1-5 分各代表什么、要看哪几个维度(如准确性/完整性/是否跑题),并给出可直接用在代码里的评委提示词。
现在你能科学评估了:开放题用 AI 裁判打分、出问题靠可观测回放——这是把智能体做"可靠"的底气,也是很多人忽略、却最拉开差距的一环。
接下来我们往"连接"更深处走。你已经认识了 MCP(a3.1),下一节深入它的架构,再认识一个新角色——A2A(智能体之间怎么对话)。当智能体越来越多,它们之间怎么标准化地协作?这就是答案。
