本节以「智能文档问答」功能为例,完整演示一个AI功能从零到上线的全链路。这个案例真实反映了工程实践中每个阶段的核心决策点和常见坑点。

一、需求分析阶段

很多团队拿到一个模糊需求就开始写代码,这是AI项目失败的头号原因。正确的做法是先把需求分析清楚,明确以下三个维度:

1.1 明确输入输出

1.2 成功标准

量化指标(MVP版本目标):
- 回答准确率 ≥ 85%(基于20题黄金测试集)
- 平均响应时间 ≤ 5秒
- 用户明确标记"有帮助"的比例 ≥ 70%
- 幻觉率(回答内容不在文档中)≤ 5%

1.3 边界条件

二、系统设计阶段

2.1 技术方案选型

决策项选项选择理由
核心模型GPT-4o / Claude 3.5 Sonnet长上下文理解能力强,支持引用来源
向量数据库Chroma / Qdrant开源可本地部署,适合中小规模文档
文档解析PyMuPDF + python-docx覆盖PDF和Word两大主流格式
Embeddingtext-embedding-3-small性价比高,768维足够
框架LangChain / LlamaIndexRAG流程已有成熟实现,避免重复造轮子

2.2 核心Prompt设计

SYSTEM:
你是一个专业的文档问答助手。请严格基于提供的文档内容回答问题。
规则:
1. 只使用文档中明确存在的信息,不得推测或补充外部知识
2. 每个关键陈述后用[第X页]标注来源
3. 如果文档中没有相关内容,明确回答"文档中未找到相关信息"
4. 回答简洁准确,避免重复文档原文

USER:
文档内容片段:
{retrieved_chunks}

用户问题:{user_question}

请基于以上文档内容回答:

2.3 数据流设计

上传阶段:
文档上传 → 格式检测 → 文本提取 → 分块(chunk_size=512, overlap=50)
→ 批量Embedding → 存入向量数据库 → 返回文档ID

查询阶段:
用户提问 → 问题Embedding → 向量检索(Top-K=5)→ 结果重排序
→ 构建Prompt → 调用LLM → 解析输出 → 添加来源标注 → 返回用户

三、实现阶段

3.1 原型(Week 1)

目标:跑通最小闭环,不追求性能和完整性。

from langchain.document_loaders import PyMuPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
from langchain.chat_models import ChatOpenAI
from langchain.chains import RetrievalQA

# 文档加载与分块
loader = PyMuPDFLoader("document.pdf")
docs = loader.load()
splitter = RecursiveCharacterTextSplitter(chunk_size=512, chunk_overlap=50)
chunks = splitter.split_documents(docs)

# 构建向量索引
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = Chroma.from_documents(chunks, embeddings)

# 问答链
llm = ChatOpenAI(model="gpt-4o", temperature=0)
qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    retriever=vectorstore.as_retriever(search_kwargs={"k": 5}),
    return_source_documents=True
)

result = qa_chain("这份合同的付款条件是什么?")
print(result["result"])

3.2 测试与评估(Week 2)

构建20题黄金数据集,评估准确率。发现问题:

3.3 迭代优化(Week 3)

# 改进:加入重排序(Reranker)提升精度
from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import CohereRerank

compressor = CohereRerank(model="rerank-multilingual-v2.0", top_n=3)
compression_retriever = ContextualCompressionRetriever(
    base_compressor=compressor,
    base_retriever=vectorstore.as_retriever(search_kwargs={"k": 10})
)
# 准确率从82%提升至89%

3.4 上线准备(Week 4)

四、完整时间轴

D1-D3   需求分析 → 产出需求文档、成功标准、数据流设计
D4-D7   原型开发 → 跑通最小闭环
D8-D14  评估迭代 → 黄金数据集测试,修复主要问题
D15-D21 工程化   → 错误处理、监控、限流、缓存
D22-D28 灰度上线 → 10%流量→全量,持续收集反馈

小结

从需求到上线,每个阶段都有清晰的交付物和验收标准。AI项目最常见的错误是跳过需求分析直接进入实现,导致方向错误后推倒重来。坚持"先定义成功,再开始实现"的原则,能节省50%以上的无效工作量。