← 学习路线
AI 学习

FastAPI:让模型调用成为多轮对话服务

理解请求怎样经过校验、恢复上下文,并得到回答。

康雨 · 发布 · 修订 2026-09-21 · 约 3 分钟

阅读基础:Python 函数、list 与 dict

读完可以:分清接口、模型调用与应用管理的聊天历史。

本文目录

从脚本走向服务

以前是我运行 Python,得到一个回答;这一阶段变成客户端发送 HTTP 请求,由后端组织模型调用并返回 JSON。模型只是其中一层,服务还需要输入校验、配置管理、错误处理和历史管理。

组件在练习中的作用
Uvicorn运行应用并监听请求。
FastAPI匹配路由,协调请求处理与响应。
Pydantic描述并校验请求体结构。
Swagger UI在浏览器中发送测试请求,查看实际响应。

请求体的定义与校验可参考 FastAPI 请求体文档。

看起来有记忆,是因为应用重新提供了历史

这一阶段先用 Python 字典,以 conversation_id 为键保存消息列表。每次取出对应历史,再加入当前问题,组成发给模型的上下文。模型没有因为一次聊天就被永久训练。

一次聊天请求的处理顺序

text
读取当前会话历史
→ 组合 system + history + 当前 user
→ 请求模型
→ 成功后保存本轮 user 与 assistant
→ 返回回答

当时的接口使用 question 字段;后来的 Agent 整合改成 message。复现前必须确认自己用的是哪个版本,不能混用请求字段。

笔记记录的测试:记住名字与区分会话

测试记录中的结果能说明什么
同一会话先提供“小明”,再问名字后续回答包含“小明”读取与重新发送历史的链路可用。
换一个会话再问名字不知道上一会话中的名字这组测试中两个会话没有共用历史。

这是学习过程中的记录这里转述原笔记的测试结果,不是本次发布网站时重新调用模型;不同会话查询不串线,也不等于实现了用户鉴权。

按请求停止的位置排错

  • 422:先检查请求体的字段、类型和必填项。
  • model_not_found:先核对实际发送的模型标识,区分家族名和接口可识别的模型 ID。
  • 修改后端后,已打开的 Swagger 页面可能仍保留旧输入,需要核对当前请求。
  • 连接失败与服务器返回的认证、模型错误不是同一层;不要同时乱改所有配置。

配置从环境读取,必要值缺失时尽早暴露。对外返回经过整理的错误信息,不把完整异常、密钥或内部路径显示给访问者。

内存 Memory 的边界

  • 普通字典属于当前进程,不能作为重启后恢复聊天的持久化方案。
  • 多个服务进程不会天然共享同一个普通字典。
  • conversation_id 是查询入口,不是用户身份凭证。
  • 历史会持续增长,后续仍要设计裁剪、摘要与访问权限。

下一阶段没有推倒整个 HTTP 服务,而是保留 Memory 的读写接口,把底层从字典替换成 MySQL。

来源

本页依据个人笔记整理:《AI_Agent学习笔记_FastAPI到Memory多轮对话》第 4—8、11—15、19—25 节。

试着做一个小练习

分别给两个会话传入不同名字,再追问;记录请求体、响应和会话隔离的边界。