AI 产品经理与传统产品经理的分界线,不在于是否会写 Prompt,而在于当被问“新版到底比旧版好还是坏”时,能否立刻给出指标对比与置信判断。传统 PM 交付 PRD,AI PM 交付的是“评测集 + 约束定义 + 降级策略”三件套。传统软件的质量是二元的——功能跑通或没跑通;AI 产品的质量是概率性的——多大比例的结果是好的,以及在什么条件下会变坏。这个差异决定了 AI PM 的第一项工程动作,不是设计界面,而是把模糊的“更智能”编译成可评测、可回归、可上线的契约。
“回答要准确、要有帮助”不是需求,是愿望。可验收的需求必须写成三元组,并且由 PM 独立维护,而不是等算法团队给数字。blocking 字段区分硬指标与软指标,让发布决策有优先级;改需求即改代码,走 review,而非散落在文档里各自理解。
# evals/spec.py —— PM 维护的需求规格,算法与测试共用
from dataclasses import dataclass
@dataclass
class Requirement:
name: str; metric: str; threshold: float
cases_path: str; blocking: bool = True
SPECS = [
Requirement("答案事实正确", "factual_acc", 0.92, "evals/gold/facts.jsonl"),
Requirement("引用可追溯", "citation_rate", 0.98, "evals/gold/cite.jsonl"),
Requirement("拒答越界问题", "refusal_acc", 0.95, "evals/gold/refuse.jsonl"),
Requirement("首字延迟", "p95_ttft_ms", 1200, "evals/gold/perf.jsonl", blocking=False),
]这份 SPECS 是 AI PM 最核心的交付物之一。评测集不是附属文档,而是唯一会持续增值的资产:线上每一条高价值 badcase 回流进黄金集,下一次回归就覆盖它。行业实践给出的最小规模是 50–100 条代表性 Case,覆盖高频场景、长尾困难场景和对抗样本。
LLM 产品的可靠性,很大程度上取决于输出是否被 Schema 约束。PM 决定产品“长什么样”,本质是决定 Schema 长什么样。evidence 的 min_length=1 把“可追溯”从愿望变成强制字段;confidence 为后续分档和人工介入提供依据;重试耗尽后返回显式降级结果,而不是放任模型编造——这是 LLM 产品与普通 API 最大的体验差异:失败也要体面。
from pydantic import BaseModel, Field, ValidationError
import json
class Answer(BaseModel):
conclusion: str = Field(max_length=200)
evidence: list[str] = Field(min_length=1, max_length=3)
confidence: float = Field(ge=0, le=1)
def generate(llm, question, retries=2) -> Answer:
for _ in range(retries + 1):
raw = llm.complete(
f"问题:{question}\n按 schema 输出 JSON: {Answer.model_json_schema()}",
temperature=0)
try:
return Answer(**json.loads(raw))
except (json.JSONDecodeError, ValidationError):
continue
return Answer(conclusion="暂时无法可靠回答",
evidence=["系统降级"], confidence=0.0)AI PM 必须同时优化质量、成本、延迟,三者常冲突,职责是定义分档策略,而不是让模型对所有请求一视同仁。路由用规则而非模型,因为规则可解释、可写测试、零边际成本;confidence < 0.6 触发转人工,把“模型不确定”转化为明确的产品动作,这是建立用户信任的关键设计。成本口径也不能只看单价:几乎所有厂商的输出单价是输入单价的 5–6 倍,单次请求的真实账单必须用输入、输出的实际 token 量分别测算,而不是拿一个平均数拍脑袋。
ROUTE = {
"simple": {"model": "small", "max_tokens": 300, "budget_ms": 800},
"complex": {"model": "large", "max_tokens": 2000, "budget_ms": 6000},
}
def route(question: str) -> dict:
if len(question) < 60 and "为什么" not in question:
return ROUTE["simple"]
return ROUTE["complex"]
def handle(llm, question) -> Answer:
cfg = route(question)
ans = generate(llm.bind(cfg["model"], cfg["max_tokens"]), question)
if ans.confidence < 0.6:
ans.followup = "是否需要转人工确认?"
return ansLLM 的版本差异是“软”的:接口没变,行为可能全变。灰度门禁必须直接消费 SPECS,硬指标不达标即阻断,软指标不得显著劣化。没有这道闸门,“新版感觉更好”就永远是一个不可证伪的判断。
def canary_gate(old: dict, new: dict, specs: list) -> bool:
for s in specs:
if not s.blocking:
continue
v = new.get(s.metric)
if v is None:
return False
if s.metric.endswith("_ms"):
if v > s.threshold: return False
else:
if v < s.threshold: return False
if v < old.get(s.metric, 0) - 0.02: return False
return TrueAI 功能上线后最常见的误判,是把 DAU 上涨当成成功。DAU 回答的是“今天有多少人碰到了功能”,回答不了“这些人是否得到了可复用的价值”。新奇效应冲高、重试膨胀、强入口绑架,都会让 DAU 看起来漂亮,而真实留存和任务成功并未改善。更可靠的判据是死亡路径:触达 → 有效启动 → 任务成功 → 采纳/回访 → 业务结果,逐个断点配主指标,而不是一上来换模型。留存的分母和回访事件也必须先定义清楚——“再次完成同类任务”远比“再次登录”更接近核心价值。
AI 产品经理的工程性,体现在每一层决策都可以被代码断言:需求有阈值,输出有 Schema,路由有预算,上线有门禁,留存有路径。做到这些,当老板问“新版到底比旧版好还是坏”时,答案是一个可复现的指标对比,而不是一句“感觉好多了”。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。