实用技巧与最佳实践
Tip 1:Use Session Prefix as Intent Rubric
问题:Vibe coding 无规格测试;用户意图未陈述、跨轮演变
解决方案:前 1-2 条用户消息作为 rubric(评分准则)
流程:
# 从用户开头轮次派生准则
opening = " ".join(session.user_messages[:2])
criteria = client.models.generate_content(
model="gemini-3-pro",
contents=f"Produce 3-5 acceptance criteria for: {opening}. Return JSON.",
).parsed["criteria"]
# 每轮 Agent 输出对比派生准则评分
score = client.models.generate_content(
model="gemini-3-pro",
contents=f"Does this output satisfy {criteria}? Score 1-5 with rationale."
f"Output: {agent_response}",
).parsed关键洞察:
This is the only practical way to evaluate dimension 1 (intent satisfaction) at scale.
— 这是大规模评估维度 1(意图满足)的唯一实用方法。
Tip 2:Judge the Rendered Artifact, Not the Code
问题:Vibe coding 用户判断输出而非 diff
解决方案:多模态模型查看渲染页面
捕获问题:
代码级评估错过:
• Layout broken on mobile ✓
• Contrast too low for accessibility ✓
• Button states wrong ✓
组合:
Multimodal judge → 捕获视觉和设计问题 ✓
Playwright assertions → 捕获破坏交互性 ✓
代码示例:
result = client.models.generate_content(
model="gemini-3-pro",
contents=[
"Score this rendered web app against the spec on layout_match, "
"styling, and interactive_correctness (1-5 each). Return JSON.",
user_spec,
types.Part.from_bytes(data=screenshot_bytes, mime_type="image/png"),
],
)Tip 3:Evaluate Session Convergence, Not Turn-Level Accuracy
问题:Vibe-coding session 多轮构建
正确问题:
错误问题:"was turn 4 correct?" ❌
正确问题:"did the user converge on something they wanted?" ✓
成功定义:
- Few turns converge → 成功案例
- Sessions abandoned mid-flow → 最有信息失败(远超过轮级错误)
Cloud Trace 实现:
trace = trace_v2.TraceServiceClient().get_trace(
name=f"projects/{project}/traces/{session_id}"
)
def session_outcome(trace):
return {
"converged": trace.last_turn.user_signal == "satisfied",
"turns_to_converge": trace.user_correction_count,
"abandoned": trace.last_user_action == "close",
"cost_to_converge": trace.total_token_cost_usd,
}Tip 4:Mine User Corrections as Labeled Failure Data
价值:每条”不,不是那样”是标注失败示例
Vibe coding 特点:产生这些标注数据量巨大
方法:聚类 → Agent 系统性缺口可见 → 远快于构建合成失败基准
代码示例:
# 提取用户修正
corrections = [t.user_message for trace in traces for t in trace.turns
if t.is_correction]
# 嵌入
emb = client.models.embed_content(
model="text-embedding-005",
contents=corrections,
)
vectors = [e.values for e in emb.embeddings]
# 聚类
clusters = KMeans(n_clusters=8).fit(vectors)
# clusters.labels_ → 下一迭代优先失败模式列表Observability:Prerequisite(先决条件)
根本规则:要评估 Agent 内部推理,必须能看见它
Glass Box Evaluation 绝对先决条件:
无 observability → Agent 失败表现为不可解释单体事件 ❌
有 observability → 可追踪:
• Agent.reasoning
• Agent.tool_calls
• Agent.skill_invocations
• Agent.retrievals
技术实现:
OpenTelemetry spans:
agent.session span → 捕获整个任务持续时间
agent.think span → 记录行动前内部推理和提示循环
agent.tool span → 日志环境交互的具体参数和延迟
成本追踪:
Aggregating span attributes → 精确测量:
• Token consumption
• Inference latency
• Cost of self-repair loops
Dynamic Tail-Based Sampling:
问题:生产捕获 100% traces → 快速淹没存储预算 ❌
解决方案:Tail-based dynamic sampling
→ Collector 评估完成后完整 trace
→ 丢弃常规成功 ✓
→ 保留错误或过度自修复循环 traces ✓