首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >FDE 前沿部署工程师:交付的不是 Demo,是可运营的系统

FDE 前沿部署工程师:交付的不是 Demo,是可运营的系统

原创
作者头像
资源大佬 jzit-top
发布于 2026-11-02 17:00:36
发布于 2026-11-02 17:00:36
1790
举报

FDE(Forward Deployed Engineer)与普通 AI 开发者最容易被混淆的地方,在于两者都能写出一个“看起来能用”的 Agent。分水岭发生在客户现场的真实数据接进来之后:Demo 工程师交付的是“模型能对话、流程能跑通”,FDE 交付的是权限在代码层被强制执行、错误可被评测集捕获、系统在客户现场能持续收敛的闭环。Atlassian 在其 FDE Playbook 中把这条原则表述得更直接:治理必须作为架构的一部分,而不是事后补丁;从第一天起就把权限、安全和可审计性内建进去,随着信任建立再逐步提升自动化程度。本文沿“工具权限 → 评测飞轮 → 引用核验”三条工程线,给出 FDE 现场最常用的代码骨架。

工具权限:审批必须在代码层,不能靠 Prompt 约束

FDE 在企业现场遇到的第一类事故,几乎都和“模型调用了不该调用的工具”有关。退款、改配置、发通知——这些操作一旦被 Agent 自由触发,后果远超出“答错一句话”。正确的做法是把每一个工具的能力边界编码为结构化声明,mutating 和 requires_approval 在 dispatch 函数里被强制检查,而不是在系统提示词里写一句“请谨慎操作”。

代码语言:javascript
复制
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 需要衡量的是系统在这个客户的业务口径下是否收敛。客户业务专家每一次手工修正,都是外部拿不到的标注数据,必须被捕获、入库、成为回归闸门的一部分。

代码语言:javascript
复制
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 >= threshold

min_cases 的设定不是形式主义:现场前两周的修正样本往往集中在少数几个高频场景上,过早用一个小而偏的集合做门槛,会让系统在一个“看起来准确率很高”的假象里上线。FDE 离场时留下的评估集,应该覆盖客户的主要业务分支,而不是训练集的一个镜像。

引用核验:把“有据可查”从口号变成断言

企业 RAG 系统最常见的失败模式不是“召回了错误文档”,而是模型摘了原文的句子,却用它推出了原文并不支持的结论。FDE 在交付 RAG 时,二阶的完成标准不是“接了检索”,而是每一句生成结论都能被回溯到一段真正支持它的原文片段。

代码语言:javascript
复制
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 删除。

目录
  • 工具权限:审批必须在代码层,不能靠 Prompt 约束
  • 评测飞轮:客户的每一次改判都是最有价值的标注
  • 引用核验:把“有据可查”从口号变成断言
  • 交付的终点不是系统上线,是客户能自己迭代
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档