《FDE前沿部署工程师实战教程》企业 Agent 项目实战:从需求分析到 PoC 落地

目录

  • [1. 为什么 FDE 要懂企业 Agent 项目](#1. 为什么 FDE 要懂企业 Agent 项目)
  • [2. 需求分析:把一句话需求拆成可验证的目标](#2. 需求分析:把一句话需求拆成可验证的目标)
    • [2.1 从业务问题开始,而不是从模型开始](#2.1 从业务问题开始,而不是从模型开始)
    • [2.2 把目标量化](#2.2 把目标量化)
  • [3. 场景拆解与边界定义](#3. 场景拆解与边界定义)
    • [3.1 确定 Agent 的能力边界](#3.1 确定 Agent 的能力边界)
    • [3.2 拆解处理流程](#3.2 拆解处理流程)
  • [4. 技术选型与架构设计](#4. 技术选型与架构设计)
    • [4.1 选型原则](#4.1 选型原则)
    • [4.2 架构分层](#4.2 架构分层)
  • [5. 核心实现:从数据准备到 Agent 编排](#5. 核心实现:从数据准备到 Agent 编排)
    • [5.1 准备数据:文档切分很关键](#5.1 准备数据:文档切分很关键)
    • [5.2 构建向量索引](#5.2 构建向量索引)
    • [5.3 编写检索问答链路](#5.3 编写检索问答链路)
  • [6. 效果评估:用数据说话](#6. 效果评估:用数据说话)
    • [6.1 准备测试集](#6.1 准备测试集)
    • [6.2 计算基础指标](#6.2 计算基础指标)
    • [6.3 常见问题与调优方向](#6.3 常见问题与调优方向)
  • [7. PoC 交付与落地建议](#7. PoC 交付与落地建议)
    • [7.1 PoC 交付物清单](#7.1 PoC 交付物清单)
    • [7.2 和客户沟通的注意事项](#7.2 和客户沟通的注意事项)
    • [7.3 从 PoC 走向生产](#7.3 从 PoC 走向生产)
  • [8. 总结与学习资源](#8. 总结与学习资源)

1. 为什么 FDE 要懂企业 Agent 项目

前沿部署工程师(Forward Deployed Engineer,FDE)的工作不是"交完代码就走",而是要在客户现场把真实业务问题跑通。近两年,企业级 Agent(智能体)项目越来越多,客户的需求往往从一句话开始:

"我想让大模型自动处理工单。"

"能不能让 AI 帮我整理合同风险点?"

"能不能做一个能查内部知识库的问答机器人?"

这些需求听起来简单,但真正落地时会遇到数据分散、权限复杂、接口不规范、准确率不达标、部署环境受限等一系列问题。FDE 的价值就在于:在有限时间内,把一个模糊的业务诉求,验证成可以给客户演示、可以量化评估的 PoC(Proof of Concept,概念验证)

本教程将以一个常见的"企业知识库问答 Agent"为例,完整走一遍从需求分析到 PoC 落地的流程。你不需要有很深的算法背景,但需要理解 Agent 的组成、工具调用、评估方式和部署边界。


2. 需求分析:把一句话需求拆成可验证的目标

2.1 从业务问题开始,而不是从模型开始

很多 PoC 失败的原因,是工程师上来就选模型、搭框架,却没有定义清楚"做成什么样算成功"。建议先回答三个问题:

  1. 用户是谁? 是客服、销售、运维还是管理层?
  2. 用户当前怎么解决这个问题? 花多少时间、依赖多少人?
  3. Agent 解决后,能帮企业节省什么? 时间、人力成本还是差错率?

以"内部知识库问答"为例,第一版需求可能是:

  • 内部员工询问制度、流程、产品资料;
  • 目前需要翻 Wiki、问同事、搜邮件;
  • 期望 Agent 能直接回答,并给出原文出处。

2.2 把目标量化

模糊的目标无法验证,建议在 PoC 阶段定义 2~3 个可量化指标:

目标 衡量方式 达标参考值
回答准确率 针对 30 条测试问题的正确率 ≥ 80%
可追溯性 答案是否带来源引用 100% 带引用
响应速度 端到端耗时 ≤ 10 秒

FDE 经验:PoC 阶段不要追求完美,重点是证明"这条路能走通"。指标定高了,反而会让客户把 PoC 当生产系统要求。


3. 场景拆解与边界定义

3.1 确定 Agent 的能力边界

一个企业 Agent 通常不是"万能助手",而是围绕 1~2 个核心任务设计。我们的知识库 Agent 可以定义为:

  • 能做:基于内部文档回答事实性问题、总结制度条款、定位原文;
  • 暂不做:生成未经验证的结论、处理敏感数据、代替人工审批。

边界清晰后,后续的提示词、工具和数据准备都会更聚焦。

3.2 拆解处理流程

一个典型的知识库问答 Agent 由以下环节组成:
#mermaid-svg-AtX7QGuyM5QCdVuH{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-AtX7QGuyM5QCdVuH .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-AtX7QGuyM5QCdVuH .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-AtX7QGuyM5QCdVuH .error-icon{fill:#552222;}#mermaid-svg-AtX7QGuyM5QCdVuH .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-AtX7QGuyM5QCdVuH .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-AtX7QGuyM5QCdVuH .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-AtX7QGuyM5QCdVuH .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-AtX7QGuyM5QCdVuH .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-AtX7QGuyM5QCdVuH .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-AtX7QGuyM5QCdVuH .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-AtX7QGuyM5QCdVuH .marker{fill:#333333;stroke:#333333;}#mermaid-svg-AtX7QGuyM5QCdVuH .marker.cross{stroke:#333333;}#mermaid-svg-AtX7QGuyM5QCdVuH svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-AtX7QGuyM5QCdVuH p{margin:0;}#mermaid-svg-AtX7QGuyM5QCdVuH .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-AtX7QGuyM5QCdVuH .cluster-label text{fill:#333;}#mermaid-svg-AtX7QGuyM5QCdVuH .cluster-label span{color:#333;}#mermaid-svg-AtX7QGuyM5QCdVuH .cluster-label span p{background-color:transparent;}#mermaid-svg-AtX7QGuyM5QCdVuH .label text,#mermaid-svg-AtX7QGuyM5QCdVuH span{fill:#333;color:#333;}#mermaid-svg-AtX7QGuyM5QCdVuH .node rect,#mermaid-svg-AtX7QGuyM5QCdVuH .node circle,#mermaid-svg-AtX7QGuyM5QCdVuH .node ellipse,#mermaid-svg-AtX7QGuyM5QCdVuH .node polygon,#mermaid-svg-AtX7QGuyM5QCdVuH .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-AtX7QGuyM5QCdVuH .rough-node .label text,#mermaid-svg-AtX7QGuyM5QCdVuH .node .label text,#mermaid-svg-AtX7QGuyM5QCdVuH .image-shape .label,#mermaid-svg-AtX7QGuyM5QCdVuH .icon-shape .label{text-anchor:middle;}#mermaid-svg-AtX7QGuyM5QCdVuH .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-AtX7QGuyM5QCdVuH .rough-node .label,#mermaid-svg-AtX7QGuyM5QCdVuH .node .label,#mermaid-svg-AtX7QGuyM5QCdVuH .image-shape .label,#mermaid-svg-AtX7QGuyM5QCdVuH .icon-shape .label{text-align:center;}#mermaid-svg-AtX7QGuyM5QCdVuH .node.clickable{cursor:pointer;}#mermaid-svg-AtX7QGuyM5QCdVuH .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-AtX7QGuyM5QCdVuH .arrowheadPath{fill:#333333;}#mermaid-svg-AtX7QGuyM5QCdVuH .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-AtX7QGuyM5QCdVuH .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-AtX7QGuyM5QCdVuH .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-AtX7QGuyM5QCdVuH .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-AtX7QGuyM5QCdVuH .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-AtX7QGuyM5QCdVuH .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-AtX7QGuyM5QCdVuH .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-AtX7QGuyM5QCdVuH .cluster text{fill:#333;}#mermaid-svg-AtX7QGuyM5QCdVuH .cluster span{color:#333;}#mermaid-svg-AtX7QGuyM5QCdVuH div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-AtX7QGuyM5QCdVuH .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-AtX7QGuyM5QCdVuH rect.text{fill:none;stroke-width:0;}#mermaid-svg-AtX7QGuyM5QCdVuH .icon-shape,#mermaid-svg-AtX7QGuyM5QCdVuH .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-AtX7QGuyM5QCdVuH .icon-shape p,#mermaid-svg-AtX7QGuyM5QCdVuH .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-AtX7QGuyM5QCdVuH .icon-shape .label rect,#mermaid-svg-AtX7QGuyM5QCdVuH .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-AtX7QGuyM5QCdVuH .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-AtX7QGuyM5QCdVuH .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-AtX7QGuyM5QCdVuH :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 是

用户提问
问题理解与改写
检索知识库片段
是否召回到相关内容
基于片段生成答案
给出澄清或拒答
附上来源引用
返回最终回答

这里的关键不是"模型多强",而是检索质量决定上限,生成质量决定下限。如果相关知识根本没被找到,模型再强也无法给出正确答案。


4. 技术选型与架构设计

4.1 选型原则

PoC 阶段建议遵循:

  • 优先云服务:减少本地部署和运维成本;
  • 优先成熟框架:如 LangChain、LlamaIndex,避免重复造轮子;
  • 组件可替换:检索库、向量库、模型接口尽量解耦。

示例技术栈:

  • 大模型:OpenAI 兼容接口或企业内部模型网关;
  • 向量库:FAISS / Chroma / 企业已有向量服务;
  • 框架:LangChain;
  • 数据侧:内部 Wiki 导出的 Markdown / PDF / 网页。

4.2 架构分层

#mermaid-svg-QN1QjdQX5elop2fU{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-QN1QjdQX5elop2fU .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-QN1QjdQX5elop2fU .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-QN1QjdQX5elop2fU .error-icon{fill:#552222;}#mermaid-svg-QN1QjdQX5elop2fU .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-QN1QjdQX5elop2fU .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-QN1QjdQX5elop2fU .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-QN1QjdQX5elop2fU .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-QN1QjdQX5elop2fU .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-QN1QjdQX5elop2fU .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-QN1QjdQX5elop2fU .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-QN1QjdQX5elop2fU .marker{fill:#333333;stroke:#333333;}#mermaid-svg-QN1QjdQX5elop2fU .marker.cross{stroke:#333333;}#mermaid-svg-QN1QjdQX5elop2fU svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-QN1QjdQX5elop2fU p{margin:0;}#mermaid-svg-QN1QjdQX5elop2fU .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-QN1QjdQX5elop2fU .cluster-label text{fill:#333;}#mermaid-svg-QN1QjdQX5elop2fU .cluster-label span{color:#333;}#mermaid-svg-QN1QjdQX5elop2fU .cluster-label span p{background-color:transparent;}#mermaid-svg-QN1QjdQX5elop2fU .label text,#mermaid-svg-QN1QjdQX5elop2fU span{fill:#333;color:#333;}#mermaid-svg-QN1QjdQX5elop2fU .node rect,#mermaid-svg-QN1QjdQX5elop2fU .node circle,#mermaid-svg-QN1QjdQX5elop2fU .node ellipse,#mermaid-svg-QN1QjdQX5elop2fU .node polygon,#mermaid-svg-QN1QjdQX5elop2fU .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-QN1QjdQX5elop2fU .rough-node .label text,#mermaid-svg-QN1QjdQX5elop2fU .node .label text,#mermaid-svg-QN1QjdQX5elop2fU .image-shape .label,#mermaid-svg-QN1QjdQX5elop2fU .icon-shape .label{text-anchor:middle;}#mermaid-svg-QN1QjdQX5elop2fU .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-QN1QjdQX5elop2fU .rough-node .label,#mermaid-svg-QN1QjdQX5elop2fU .node .label,#mermaid-svg-QN1QjdQX5elop2fU .image-shape .label,#mermaid-svg-QN1QjdQX5elop2fU .icon-shape .label{text-align:center;}#mermaid-svg-QN1QjdQX5elop2fU .node.clickable{cursor:pointer;}#mermaid-svg-QN1QjdQX5elop2fU .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-QN1QjdQX5elop2fU .arrowheadPath{fill:#333333;}#mermaid-svg-QN1QjdQX5elop2fU .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-QN1QjdQX5elop2fU .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-QN1QjdQX5elop2fU .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-QN1QjdQX5elop2fU .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-QN1QjdQX5elop2fU .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-QN1QjdQX5elop2fU .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-QN1QjdQX5elop2fU .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-QN1QjdQX5elop2fU .cluster text{fill:#333;}#mermaid-svg-QN1QjdQX5elop2fU .cluster span{color:#333;}#mermaid-svg-QN1QjdQX5elop2fU div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-QN1QjdQX5elop2fU .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-QN1QjdQX5elop2fU rect.text{fill:none;stroke-width:0;}#mermaid-svg-QN1QjdQX5elop2fU .icon-shape,#mermaid-svg-QN1QjdQX5elop2fU .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-QN1QjdQX5elop2fU .icon-shape p,#mermaid-svg-QN1QjdQX5elop2fU .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-QN1QjdQX5elop2fU .icon-shape .label rect,#mermaid-svg-QN1QjdQX5elop2fU .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-QN1QjdQX5elop2fU .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-QN1QjdQX5elop2fU .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-QN1QjdQX5elop2fU :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 数据接入层

文档解析与清洗
离线索引层

切分与向量化
检索层

向量召回与重排
生成层

LLM 回答
应用层

API 与前端展示

这种分层的好处是:PoC 阶段可以快速替换某一层,例如先上传 50 个文档验证效果,再决定数据接入方案。


5. 核心实现:从数据准备到 Agent 编排

5.1 准备数据:文档切分很关键

企业内部文档往往篇幅长、格式杂。直接整篇塞给大模型不现实,必须切分。下面是一个可运行的切分示例:

python 复制代码
from langchain_text_splitters import RecursiveCharacterTextSplitter

def load_and_split(file_path: str, chunk_size: int = 500, overlap: int = 50):
    """读取 Markdown 文件并按字符切分"""
    with open(file_path, "r", encoding="utf-8") as f:
        text = f.read()

    splitter = RecursiveCharacterTextSplitter(
        chunk_size=chunk_size,
        chunk_overlap=overlap,
        separators=["\n## ", "\n### ", "\n", "。", " "],
    )
    chunks = splitter.split_text(text)
    return chunks

chunks = load_and_split("data/员工手册.md")
print(f"共切分出 {len(chunks)} 个片段")
for i, chunk in enumerate(chunks[:3]):
    print(f"--- 片段 {i + 1} ---")
    print(chunk[:120])

FDE 经验 :切分大小需要根据文档类型调整。制度类文档建议保留标题层级,overlap 不要太小,否则会切断上下文。

5.2 构建向量索引

将切分后的片段向量化并存入本地向量库:

python 复制代码
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import Chroma

def build_vector_store(chunks, persist_dir: str = "./chroma_db"):
    embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
    vector_store = Chroma.from_texts(
        texts=chunks,
        embedding=embeddings,
        persist_directory=persist_dir,
    )
    return vector_store

vector_store = build_vector_store(chunks)
print("向量索引构建完成")

生产环境中,向量库会换成企业已有的向量服务,但 PoC 阶段用 Chroma 足够验证效果。

5.3 编写检索问答链路

下面实现一个"检索 + 生成"的基础链路,并强制要求模型给出引用:

python 复制代码
from langchain_openai import ChatOpenAI
from langchain.chains import RetrievalQA
from langchain.prompts import PromptTemplate

PROMPT_TEMPLATE = """你是一名企业知识库助手。请严格根据以下资料回答问题。
如果资料中没有相关信息,请直接回答"根据当前资料无法确认"。

资料内容:
{context}

用户问题:{question}

回答要求:
1. 使用简洁、专业的语言;
2. 必须列出答案对应的资料编号;
3. 不要编造资料中没有的内容。

回答:
"""

prompt = PromptTemplate(
    template=PROMPT_TEMPLATE,
    input_variables=["context", "question"],
)

llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)

qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",
    retriever=vector_store.as_retriever(search_kwargs={"k": 4}),
    chain_type_kwargs={"prompt": prompt},
    return_source_documents=True,
)

result = qa_chain.invoke({"query": "员工的年假可以休多少天?"})
print("答案:", result["result"])
print("来源:", [doc.metadata.get("source", "未知") for doc in result["source_documents"]])

这段代码可以直接跑通最小 PoC。接下来要做的,是围绕真实业务问题不断调优。


6. 效果评估:用数据说话

6.1 准备测试集

PoC 必须给客户看评估结果。建议准备 30~50 条来自真实用户的测试问题,并为每条问题标注参考答案和预期来源。

python 复制代码
test_cases = [
    {
        "question": "员工试用期是多久?",
        "expected": "试用期不超过三个月",
    },
    {
        "question": "年假可以跨年使用吗?",
        "expected": "可以顺延至次年三月底",
    },
    {
        "question": "差旅报销需要哪些材料?",
        "expected": "发票、审批单、行程单",
    },
]

6.2 计算基础指标

PoC 阶段可以先用"关键词覆盖率"做快速自动评估:

python 复制代码
def keyword_hit(predicted: str, expected: str) -> bool:
    """判断预测结果是否覆盖参考答案关键词"""
    keywords = [word for word in expected.replace(",", " ").split() if len(word) > 1]
    hits = sum(1 for word in keywords if word in predicted)
    return hits / max(len(keywords), 1) >= 0.5

hits = 0
for case in test_cases:
    predicted = "试用期不超过三个月,具体以劳动合同为准"
    if keyword_hit(predicted, case["expected"]):
        hits += 1

print(f"关键词覆盖率:{hits}/{len(test_cases)} = {hits / len(test_cases):.0%}")

更严谨的评估可以引入 LLM-as-Judge(用大模型打分),或让业务专家人工抽检。PoC 汇报时,要有测试集、评估方法和得分,不能只给演示视频。

6.3 常见问题与调优方向

问题 可能原因 调优方向
答不对 没召回到相关片段 调整切分粒度、增加关键词混合检索
答不全 片段被截断 增加 overlap、改用父子片段
瞎编 提示词没约束 强化"资料中没有就拒答"
引用错 片段编号混乱 在元数据中标注文档名和章节

7. PoC 交付与落地建议

7.1 PoC 交付物清单

一次合格的企业 Agent PoC,应该交付以下内容:

  • 可演示的 Web 界面或 API 接口;
  • 30~50 条测试集的评估报告;
  • 架构图和实现说明;
  • 已知限制与风险清单;
  • 后续生产化的建议路线。

7.2 和客户沟通的注意事项

  • 不要过度承诺:明确告知 PoC 使用的是公开模型或测试数据,生产环境需要替换;
  • 强调数据安全:询问客户对数据出境、私有化部署的合规要求;
  • 展示边界:主动演示 Agent 会"拒答"的情况,这反而能建立信任;
  • 留下优化入口:说明后续如何接入更多文档、更多工具、人工反馈闭环。

7.3 从 PoC 走向生产

PoC 验证通过后,可以按以下路径演进:
#mermaid-svg-zUGqLQ4Wa6bFMkiR{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-zUGqLQ4Wa6bFMkiR .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-zUGqLQ4Wa6bFMkiR .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-zUGqLQ4Wa6bFMkiR .error-icon{fill:#552222;}#mermaid-svg-zUGqLQ4Wa6bFMkiR .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-zUGqLQ4Wa6bFMkiR .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-zUGqLQ4Wa6bFMkiR .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-zUGqLQ4Wa6bFMkiR .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-zUGqLQ4Wa6bFMkiR .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-zUGqLQ4Wa6bFMkiR .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-zUGqLQ4Wa6bFMkiR .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-zUGqLQ4Wa6bFMkiR .marker{fill:#333333;stroke:#333333;}#mermaid-svg-zUGqLQ4Wa6bFMkiR .marker.cross{stroke:#333333;}#mermaid-svg-zUGqLQ4Wa6bFMkiR svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-zUGqLQ4Wa6bFMkiR p{margin:0;}#mermaid-svg-zUGqLQ4Wa6bFMkiR .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-zUGqLQ4Wa6bFMkiR .cluster-label text{fill:#333;}#mermaid-svg-zUGqLQ4Wa6bFMkiR .cluster-label span{color:#333;}#mermaid-svg-zUGqLQ4Wa6bFMkiR .cluster-label span p{background-color:transparent;}#mermaid-svg-zUGqLQ4Wa6bFMkiR .label text,#mermaid-svg-zUGqLQ4Wa6bFMkiR span{fill:#333;color:#333;}#mermaid-svg-zUGqLQ4Wa6bFMkiR .node rect,#mermaid-svg-zUGqLQ4Wa6bFMkiR .node circle,#mermaid-svg-zUGqLQ4Wa6bFMkiR .node ellipse,#mermaid-svg-zUGqLQ4Wa6bFMkiR .node polygon,#mermaid-svg-zUGqLQ4Wa6bFMkiR .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-zUGqLQ4Wa6bFMkiR .rough-node .label text,#mermaid-svg-zUGqLQ4Wa6bFMkiR .node .label text,#mermaid-svg-zUGqLQ4Wa6bFMkiR .image-shape .label,#mermaid-svg-zUGqLQ4Wa6bFMkiR .icon-shape .label{text-anchor:middle;}#mermaid-svg-zUGqLQ4Wa6bFMkiR .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-zUGqLQ4Wa6bFMkiR .rough-node .label,#mermaid-svg-zUGqLQ4Wa6bFMkiR .node .label,#mermaid-svg-zUGqLQ4Wa6bFMkiR .image-shape .label,#mermaid-svg-zUGqLQ4Wa6bFMkiR .icon-shape .label{text-align:center;}#mermaid-svg-zUGqLQ4Wa6bFMkiR .node.clickable{cursor:pointer;}#mermaid-svg-zUGqLQ4Wa6bFMkiR .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-zUGqLQ4Wa6bFMkiR .arrowheadPath{fill:#333333;}#mermaid-svg-zUGqLQ4Wa6bFMkiR .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-zUGqLQ4Wa6bFMkiR .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-zUGqLQ4Wa6bFMkiR .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-zUGqLQ4Wa6bFMkiR .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-zUGqLQ4Wa6bFMkiR .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-zUGqLQ4Wa6bFMkiR .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-zUGqLQ4Wa6bFMkiR .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-zUGqLQ4Wa6bFMkiR .cluster text{fill:#333;}#mermaid-svg-zUGqLQ4Wa6bFMkiR .cluster span{color:#333;}#mermaid-svg-zUGqLQ4Wa6bFMkiR div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-zUGqLQ4Wa6bFMkiR .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-zUGqLQ4Wa6bFMkiR rect.text{fill:none;stroke-width:0;}#mermaid-svg-zUGqLQ4Wa6bFMkiR .icon-shape,#mermaid-svg-zUGqLQ4Wa6bFMkiR .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-zUGqLQ4Wa6bFMkiR .icon-shape p,#mermaid-svg-zUGqLQ4Wa6bFMkiR .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-zUGqLQ4Wa6bFMkiR .icon-shape .label rect,#mermaid-svg-zUGqLQ4Wa6bFMkiR .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-zUGqLQ4Wa6bFMkiR .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-zUGqLQ4Wa6bFMkiR .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-zUGqLQ4Wa6bFMkiR :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} PoC 验证
数据治理

权限与质量
工具扩展

审批/查询/工单
评估体系

回归测试与监控
私有化部署

与安全合规
生产上线


8. 总结与学习资源

本教程以一个知识库问答 Agent 为例,走完了从需求分析、场景拆解、技术选型、代码实现到效果评估的完整 PoC 流程。

对 FDE 来说,最重要的能力不是写出最复杂的 Agent,而是:

  1. 把模糊需求转成可验证目标;
  2. 快速搭出最小可用版本;
  3. 用数据向客户证明价值;
  4. 清楚知道哪些问题需要产品化解决。

推荐学习资源

  • LangChain 官方文档:了解 RetrievalQA、Agent 与工具调用;
  • LlamaIndex:适合复杂知识库索引场景;
  • 《Building LLM Apps》等 LLM 工程实践资料;
  • 企业内网的 RAG 和 Agent 实践案例。

下一步练习

  • 准备你自己的 20 条测试问题,手动检查检索结果;
  • 把文档切分大小从 500 调到 300 和 800,对比准确率;
  • 给你的 Agent 增加"拒答"逻辑,并展示给非技术同事验证体验。
相关推荐
打不了嗝 ᥬ᭄1 小时前
神经网络基础与整体架构
人工智能·深度学习·神经网络
xp_fangfei1 小时前
Halcon之第7讲--模板匹配详解与实战应用
人工智能·计算机视觉
LaughingZhu1 小时前
Product Hunt 每日热榜 | 2026-09-11
人工智能·深度学习·神经网络·搜索引擎·百度
residual_fan1 小时前
经验模态重构:直向工业时间序列数据的数据扩增方法
人工智能·算法·重构·数据挖掘·数据分析
AI人工智能集结号1 小时前
2026年9月GEO优化服务哪家好?企业选服务商先看哪些交付能力
人工智能
2601_962284171 小时前
从前端到AI全栈:技术演进中的AI赋能革命
需求分析·前端开发·智能测试·ai全栈·技术演进
快乐非自愿1 小时前
2026企业低代码选型对比:制造、政务、供应链转型硬核评测
人工智能·低代码·架构·制造·政务
魔点科技1 小时前
智慧办公空间解决方案:把物理办公空间升级为组织协同的数字空间
人工智能·智慧办公·智能门禁·魔点科技·智能会议
海宇大数据1 小时前
零信任架构实战:基于海宇单人婚姻状态查询构建自动化线上房产交易合规网关
运维·人工智能·架构·自动化