FDE(Forward Deployed Engineer)与普通 AI 开发者最容易被混淆的地方,在于两者都能写出一个“看起来能用”的 Agent。分水岭发生在客户现场的真实数据接进来之后:Demo 工程师交付的是“模型能对话、流程能跑通”,FDE 交付的是权限在代码层被强制执行、错误可被评测集捕获、系统在客户现场能持续收敛的闭环。Atlassian 在其 FDE Playbook 中把这条原则表述得更直接:治理必须作为架构的一部分,而不是事后补丁;从第一天起就把权限、安全和可审计性内建进去,随着信任建立再逐步提升自动化程度。本文沿“工具权限 → 评测飞轮 → 引用核验”三条工程线,给出 FDE 现场最常用的代码骨架。
FDE 在企业现场遇到的第一类事故,几乎都和“模型调用了不该调用的工具”有关。退款、改配置、发通知——这些操作一旦被 Agent 自由触发,后果远超出“答错一句话”。正确的做法是把每一个工具的能力边界编码为结构化声明,mutating 和 requires_approval 在 dispatch 函数里被强制检查,而不是在系统提示词里写一句“请谨慎操作”。
from pydantic import BaseModel
class ToolSpec(BaseModel):
name: str
mutating: bool # 是否改变客户系统状态
requires_approval: bool
TOOLS = {
"query_order": ToolSpec(name="query_order", mutating=False, requires_approval=False),
"refund": ToolSpec(name="refund", mutating=True, requires_approval=True),
"update_address": ToolSpec(name="update_address", mutating=True, requires_approval=True),
}
def dispatch(tool: str, args: dict, approved: bool = False):
spec = TOOLS[tool]
if spec.requires_approval and not approved:
raise PermissionError(f"{tool} 需要人工审批,Prompt 约束不算数")
return EXECUTORS[tool](**args)FDE 在企业现场的一项关键交付物,就是这份 ToolSpec 注册表——它让客户的安全团队可以逐条审查每个工具的副作用和审批要求,而不是去阅读一段不可验证的 Prompt。
通用 benchmark 衡量的是模型在公开数据上的能力,FDE 需要衡量的是系统在这个客户的业务口径下是否收敛。客户业务专家每一次手工修正,都是外部拿不到的标注数据,必须被捕获、入库、成为回归闸门的一部分。
import json, hashlib
from datetime import datetime, timezone
class EvalFlywheel:
def __init__(self, path: str):
self.path = path
def capture(self, query: str, model_out: dict, human_fix: dict):
case = {
"id": hashlib.md5(query.encode()).hexdigest()[:12],
"query": query, "model": model_out, "gold": human_fix,
"ts": datetime.now(timezone.utc).isoformat(),
}
with open(self.path, "a") as f:
f.write(json.dumps(case, ensure_ascii=False) + "\n")
def gate(self, pipeline, threshold: float = 0.9, min_cases: int = 50) -> bool:
cases = [json.loads(l) for l in open(self.path)]
if len(cases) < min_cases:
return False # 样本不足不放行
acc = sum(pipeline(c["query"]) == c["gold"] for c in cases) / len(cases)
return acc >= thresholdmin_cases 的设定不是形式主义:现场前两周的修正样本往往集中在少数几个高频场景上,过早用一个小而偏的集合做门槛,会让系统在一个“看起来准确率很高”的假象里上线。FDE 离场时留下的评估集,应该覆盖客户的主要业务分支,而不是训练集的一个镜像。
企业 RAG 系统最常见的失败模式不是“召回了错误文档”,而是模型摘了原文的句子,却用它推出了原文并不支持的结论。FDE 在交付 RAG 时,二阶的完成标准不是“接了检索”,而是每一句生成结论都能被回溯到一段真正支持它的原文片段。
def verifiable_answer(query, retrieve, model):
docs = retrieve(query, top_k=5)
raw = model(query, context=docs) # 要求输出结论 + 引用片段
for claim in raw["claims"]:
cited = [d for d in docs if d["id"] in claim["source_ids"]]
if not cited or not supports(claim["text"], cited):
return {"status": "citation_failed",
"reply": "依据核验未通过,请补充材料或转人工。"}
return {"status": "ok", "reply": raw["answer"],
"sources": [d["id"] for d in docs]}supports 可以是 NLI 模型、带严格提示的第二个 LLM,或针对结构化字段的规则匹配。关键在于未通过核验时返回的是一个显式状态,而不是把一段“看起来合理”的答案直接交给客户业务人员。
FDE 的工程决策如果只做对了权限和评测,仍然可能停在“交付了一套能用的系统”这一层。Atlassian 的现场数据提供了一个更硬的判据:FDE 为一家科技公司部署的 AI 工单处理系统,将平均解决时间从 18 天压缩到 10 分钟,节省超过 2000 万美元;为一家半导体企业构建的分诊 Agent 支撑了 4 万名员工的生产级 AI 铺开。这些结果之所以成立,不是因为模型特别强,而是因为工具权限、评测闭环和引用核验在客户环境的真实约束下同时生效。
FDE 离场时真正应该留下的,是一条客户自己的人能够持续运行、持续修正的 AI 生产线——而不是一组只有原厂工程师才敢改的 Prompt。代码层面的标志是清晰的:工具注册表可被安全团队审计,评测集可被业务专家追加,核验失败可被运营人员看见并处置。做到这三点,FDE 交付的才是一个系统,而不是一个需要发明星工程师来维护的 Demo。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。