Skip to main content

15 · 完整后端项目:把 14 篇的零件拼成生产系统

本片目标:本系列最终交付——把前 13 篇学的全部整合成一个知识问答 RAG 机器人:配置化、索引管线、会话持久化、引用溯源、错误处理、健康检查、流式。 新增规定性:15(工程化约定:配置层 / 组件分层 / 索引管线 / 错误边界) 数据字典:项目目录结构、配置模型、各组件职责。 进程线程模型:异步路由 + 单例组件 + 线程安全注意。 网络模型:REST + SSE;外网模型调用 + 本地检索。

1. 全集回顾

每一篇解决一个问题,但现在代码是”散装”的: 本篇把它们全部收进一个分层项目。

2. 项目结构(数据字典:目录即架构)

分层原则(规定性 14):每层只依赖下层,不跨层。改配置不动代码、换存储不动管线、换模型不动接口。

3. 各层数据字典

3.1 配置层 config.py

3.2 组件层 components.py(单例工厂)

为什么单例:ChatAnthropic 内部持有 httpx 客户端(连接池)、重排模型占 1.1GB 显存/内存。每个请求都新建 = 灾难。模块级缓存,进程内一份。

3.3 管线层 pipeline.py(核心逻辑)

溯源的关键:第 07 篇学的 Document.metadata 在这里兑现——metadata["source"] 告诉你答案来自哪份文档。

3.4 存储层 storage.py(会话持久化)

接口即契约InMemoryChatMessageHistoryFileChatMessageHistory → 生产换 RedisChatMessageHistory管线层一行不改——因为它们都实现 BaseChatMessageHistory。这是第 06 篇”规定性 6”的工程回报。

3.5 索引管线 indexer.py(文档更新)

为什么单独成层:建索引和问答是两个独立生命周期——文档更新时跑 indexer,平时只跑 API。生产用 cron/CI 定时跑,或文档变更钩子触发。

3.6 接口层 api.py(第 14 篇的增强版)


4. 进程线程模型(最终全景)


5. 网络模型(最终全景)

两条网络路径:外部(浏览器↔你的服务,HTTP)+ 内部(你的服务↔智谱 API,HTTPS)。你的服务是中间层,把本地知识检索和云端模型组装成对外服务。

6. 错误处理(生产级的”边界”)


7. 验证:跑起来

① 建索引
② 启动 API
③ 测试
预期输出

8. 边界与下一步

本系列到此结束,但生产级不止于此。真实的更大规模系统还会加: 但地基已经打牢:你理解了每个环节的数据形态(数据字典)、调度方式(进程线程)、通信方式(网络模型),以及为什么每一步必然这样展开(规定性链条)。加任何新东西,都是在熟悉的地基上扩展。

推荐资料(延伸阅读)


9. 全系列回顾:规定性展开总图

每一层都是上一层逼出来的:模型有状态差异→统一消息;消息手拼脆弱→模板;文本输出难用→解析器;业务要 JSON→结构化;模型金鱼脑→记忆;记忆救不了公司知识→文档;文档太大→切分;切分后要召回→向量;召回要串链路→LCEL;链路不准→重排;并发不够→异步;地基摸透→服务化;要对外→API;要生产→工程化。 这就是”逻辑必然性”——不是 LangChain 发明了这些概念,是你的需求一步步逼出来的。 恭喜你走完全程。