FastAPI + OpenAI SDK 实战:接入 DeepSeek 大模型与流式问答全流程拆解
项目实践FastAPI 接入大模型与 LangChain 配置FastAPI OpenAI SDK 实战接入 DeepSeek 大模型与流式问答全流程拆解一、前言介绍1.1 背景1.2 功能概览1.3 调用模型总览二、环境准备OpenAI 依赖下载与配置2.1 下载安装 OpenAI SDK2.2 配置 API Key环境变量2.3 配置兼容端点 base_url2.4 目录结构三、知识点讲解3.1 OpenAI 兼容模式compatible-mode3.2 MaaS 端点与 DeepSeek 模型3.3 流式 SSE四、代码逻辑拆解严格对照项目代码4.1 请求体模型schemas4.2 密钥读取与客户端初始化4.3 一次问答接口case14.4 流式问答接口case24.5 路由注册到 FastAPI4.6 最小可运行验证脚本case.pyFastAPI OpenAI SDK 实战接入 DeepSeek 大模型与流式问答全流程拆解一、前言介绍1.1 背景后端服务迟早要接大模型智能问答、简历润色、岗位推荐话术生成都离不开一次把用户输入发给模型、把模型回答拿回来的往返。本文聚焦最朴素也最常用的一条链路——用 OpenAI 官方 SDK 调通一个兼容 OpenAI 协议的大模型接口并让它在 FastAPI 里以接口形式对外提供1.2 功能概览一次问答接口接收问题文本调用模型返回完整回答流式问答接口same 模型但以 SSEtext/event-stream逐字吐字前端体验接近打字机入参校验用 Pydantic 模型约束请求体LangChain 配置用ChatDeepSeek封装同一模型便于后续接链Chain、记忆Memory、检索Retriever。1.3 调用模型总览客户端 → FastAPI 路由async def → Pydantic 校验入参 → OpenAI 客户端 / LangChain ChatModel → 大模型兼容端点base_url → 模型DeepSeek → 同步返回 or SSE 流式返回二、环境准备OpenAI 依赖下载与配置这一节把OpenAI 这套东西怎么装、怎么配单独拎出来讲清楚和业务代码拆解分开方便照抄。2.1 下载安装 OpenAI SDKpipinstallopenai就这一个包项目里所有大模型调用都靠它。它不只是调 OpenAI 官方而是任何兼容 OpenAI 协议的服务都能调——这是后面能直连百炼 MaaS 的前提。2.2 配置 API Key环境变量密钥不放代码里从环境变量读# 项目代码里实际读取的变量名 DASHSCOPE_API_KEYsk-xxxxxxxx代码中的位置importos raw_keyos.getenv(DASHSCOPE_API_KEY)api_keyraw_key.strip()第 1 行从环境变量取百炼 API Key第 2 行strip()去掉首尾空白防止复制 Key 时带入换行导致鉴权失败。2.3 配置兼容端点 base_url项目代码里写死的端点是阿里云百炼的 MaaS 兼容地址base_urlhttps://ws-xxxx.cn-beijing.maas.aliyuncs.com/compatible-mode/v1/compatible-mode/v1是兼容开关缺了 SDK 会按官方域名去请求必然 404。模型名跟着这个端点走项目里填的是deepseek-v4-pro。2.4 目录结构app/ ├── apis/ │ └── llm/ │ └── case1.py # 大模型接口一次问答 流式问答 ├── schemas/ │ └── llm_case1.py # 请求体模型 main.py # 路由注册 case.py # 最小可运行验证脚本脱离 Web 框架三、知识点讲解3.1 OpenAI 兼容模式compatible-modeOpenAI 把对话接口定义成一套固定的请求/响应形状messages列表 model字段返回choices[0].message.content。只要厂商把自家接口伪装成这个形状OpenAI 官方 SDK 就能原样调用只需要把base_url指过去。设计意识客户端与厂商解耦。今天接这个端点、明天换另一个只改base_url和model业务代码一行不动。3.2 MaaS 端点与 DeepSeek 模型项目里指向的是阿里云百炼的 MaaS 兼容端点模型名填deepseek-v4-probase_urlhttps://ws-xxxx.cn-beijing.maas.aliyuncs.com/compatible-mode/v1modeldeepseek-v4-pro模型名必须与端点所在平台提供的清单一致写错会返回model not found。本文代码里就是deepseek-v4-pro不另作替换。3.3 流式 SSE非流式接口等模型把整段话说完再返回延迟高、首字时间长。流式接口让模型边生成边回传HTTP 上用SSEServer-Sent Events承载每一片以data: 内容\n\n格式推给前端结束发data: [DONE]\n\n。FastAPI 用StreamingResponse配合生成器即可实现。四、代码逻辑拆解严格对照项目代码4.1 请求体模型schemasclassLLMCase1(BaseModel):question:strField(...,description问题)第 1 行BaseModel继承Pydantic v2 的请求体第 2 行question用Field(...)必填缺字段 FastAPI 自动返回 422省去手写校验。另一个预留的会话模型classLLMCase2(BaseModel):user_id:strField(...,description用户ID)session_id:strField(...,description会话ID)message:strField(...,description消息)三个字段全必填为后续多轮对话 会话隔离预留结构本篇先不展开多轮记忆。4.2 密钥读取与客户端初始化importosfromopenaiimportOpenAI raw_keyos.getenv(DASHSCOPE_API_KEY)api_keyraw_key.strip()clientOpenAI(api_keyapi_key,base_urlhttps://ws-xxxx.cn-beijing.maas.aliyuncs.com/compatible-mode/v1,)第 3 行从环境变量取密钥不落代码第 4 行strip()去掉首尾空白防止复制 Key 时带入换行导致鉴权失败第 6–9 行构造 OpenAI 客户端base_url指向 MaaS 兼容端点api_key作为 Bearer 令牌随请求发出。设计意识客户端构造成本低但每次请求都 new 一个没必要高并发下建议做成模块级单例或连接池避免重复握手。4.3 一次问答接口case1llm1_router.post(/case1,summaryLLM1-case1)asyncdefcase1_api(llm1:LLMCase1):completionclient.chat.completions.create(modeldeepseek-v4-pro,messages[{role:system,content:You are a helpful assistant.},{role:user,content:llm1.question},],)ai_replycompletion.choices[0].message.contentreturn{code:1,message:请求成功,data:{ai_reply:ai_reply}}第 1 行prefix/llm1的路由组下挂/case1summary会显示在 Swagger第 2 行用 Pydantic 模型收参自动校验第 4 行create发起一次对话model指定deepseek-v4-pro第 5–9 行messages是角色数组system设定助手人设user放用户问题——这是 OpenAI 协议的标准对话结构第 10 行choices[0].message.content取模型文本回答第 11–13 行包成{code, message, data}统一返回体前端按data.ai_reply取答案。4.4 流式问答接口case2defstream_chunk(user_querstr:str):clientOpenAI(api_keyapi_key,base_urlBASE_URL)completionclient.chat.completions.create(modeldeepseek-v4-pro,messages[{role:system,content:You are a helpful assistant.},{role:user,content:user_querstr},],streamTrue,stream_options{include_usage:True},)foriincompletion:ifi.choices:choisei.choices[0]ifchoise.delta:deitachoise.deltaifdeita.content:yieldfdata:{deita.content}\n\nyielddata: [DONE]\n\n第 5 行streamTrue打开流式SDK 不再等完整结果而是返回一个可迭代对象每轮给一片增量第 6 行stream_options{include_usage: True}让最后一片带上 token 用量统计计费/监控用第 8–13 行遍历增量i.choices[0].delta.content是这一片增量文字用if层层判空是因为心跳包、首片、结束片可能choices或delta为空第 14 行yield fdata:{内容}\n\n按 SSE 格式吐字\n\n是 SSE 的分片分隔符缺了前端收不到第 15 行结束标志data: [DONE]前端据此关闭连接。路由侧用StreamingResponse包裹生成器llm1_router.post(/case2,summary流式回答)asyncdefcase2_api(llm1:LLMCase1):returnStreamingResponse(stream_chunk(llm1.question),media_typetext/event-stream)media_typetext/event-stream告诉浏览器这是 SSE 流否则会被当成普通文本一次性缓冲。4.5 路由注册到 FastAPIfromapp.apis.llm.case1importllm1_router app.include_router(llm1_router)一行把大模型路由组挂进应用/llm1/case1、/llm1/case2即生效Swagger 里归到文本处理标签下。4.6 最小可运行验证脚本case.py脱离 Web 框架单独验证连通性importosfromopenaiimportOpenAI raw_keyos.getenv(DASHSCOPE_API_KEY)api_keyraw_key.strip()clientOpenAI(api_keyapi_key,base_urlhttps://ws-xxxx.cn-beijing.maas.aliyuncs.com/compatible-mode/v1,)defget_response():completionclient.chat.completions.create(modeldeepseek-v4-pro,messages[{role:system,content:You are a helpful assistant.},{role:user,content:国内大模型哪个最好},],)returncompletion.choices[0].message.contentprint(get_response())与接口代码共用同一套客户端初始化逻辑只是把问题写死、直接print用来在不起 FastAPI 的情况下先确认 Key、端点、模型名三件套是否配通是排障第一招。

相关新闻

苹果AI战略转向:Siri智能化升级与商业模式重塑

苹果AI战略转向:Siri智能化升级与商业模式重塑

上周,当苹果 CEO 蒂姆库克在财报电话会议上被问及 AI 战略时,他给出了一个看似模糊但信息量巨大的回答:“我们相信 AI 有巨大潜力,我们将继续以深思熟虑的方式投资和创新。” 紧接着,他话锋一转,提到了一个…

2026/8/4 4:36:50 阅读更多 →
安卓Wi-Fi已保存不自动连接:NETWORK_SELECTION_PERMANENTLY_DISABLED状态解析与修复

安卓Wi-Fi已保存不自动连接:NETWORK_SELECTION_PERMANENTLY_DISABLED状态解析与修复

1. 问题现象与根源初探“WIFI已保存,但死活不自动连接”——这大概是每个安卓用户都至少遭遇过一次的糟心体验。你明明记得之前连得好好的,密码也正确,可手机就是像个倔强的孩子,盯着那个显示“已保存”的Wi-Fi信号,死…

2026/8/4 4:36:50 阅读更多 →
【20年架构师亲测】:2024程序员AI工具选型终极指南——5大维度实测对比,错过再等一年?

【20年架构师亲测】:2024程序员AI工具选型终极指南——5大维度实测对比,错过再等一年?

更多请点击: https://codechina.net 第一章:程序员选哪个AI 程序员在选择AI工具时,核心考量应聚焦于代码理解深度、本地可部署性、IDE集成能力与私有数据安全。通用大模型虽能回答技术问题,但缺乏对项目上下文、私有API契约和内部…

2026/8/4 4:36:50 阅读更多 →

最新新闻

【需求分析】基于 GPT-5.6 + Codex 开发个人工具箱 Personal Toolbox 项目

【需求分析】基于 GPT-5.6 + Codex 开发个人工具箱 Personal Toolbox 项目

其实是第二个 AI 项目。但前一个项目因没有经验,搞得太乱,现在被卡在一半不想继续。 新的项目从需求分析开始,每一次功能更新/完成都会复盘一下。 本次想法是给自己开发一个多功能工具箱,GitHub仓库。 1 前言 在日常使用 AI、浏览…

2026/8/4 5:38:17 阅读更多 →
PCB全检质量控制:猎板工程师的出货标准

PCB全检质量控制:猎板工程师的出货标准

不知你是否有过这样的经历, 就是收到了一块线路整齐, 焊点光亮, 堪称完美的PCB? 殊不知在你视线外难以留意的情形下, 有一套全检质量控制体系, 正悄无声息地对每一块板的品质起着守护作用。 身为猎板那儿的一名工程师, 我每日打交道的皆是这个问题, 即怎样保证每一块PCB都能够…

2026/8/4 5:38:17 阅读更多 →
AI智能拦截告警风暴:EFK+K8s+OpenAI实战

AI智能拦截告警风暴:EFK+K8s+OpenAI实战

1. 项目概述:当AI遇上告警风暴去年我们团队接手了一个日均告警量超过5000条的EFK(ElasticsearchFluentdKibana)监控系统,运维人员每天要花3小时处理告警邮件。直到某天凌晨2点,一条"K8s节点内存使用率95%"的…

2026/8/4 5:38:17 阅读更多 →
数据仓库核心特性与架构实战:从ETL到OLAP的企业数据中枢构建

数据仓库核心特性与架构实战:从ETL到OLAP的企业数据中枢构建

1. 数据仓库:不只是个数据库,而是企业的“记忆中枢”刚入行那会儿,我也以为数据仓库(Data Warehouse)就是个放大版的数据库,无非是存的数据多点,服务器贵点。直到真正参与一个大型零售企业的数据…

2026/8/4 5:38:17 阅读更多 →
腾讯云IMS AI生成图片识别技术原理与实战应用

腾讯云IMS AI生成图片识别技术原理与实战应用

1. 从一次“乌龙”事件说起:为什么我们需要识别AI生成图片? 上个月,我团队的一个内容审核同事差点闹了个大笑话。一个用户上传了一张极其逼真的“新闻现场照片”,画面里是某国际地标建筑前发生的一场小型冲突,光影、人…

2026/8/4 5:38:17 阅读更多 →
蓝桥杯竞赛通关秘籍:三大语言核心考点与实战技巧全解析

蓝桥杯竞赛通关秘籍:三大语言核心考点与实战技巧全解析

1. 项目概述:蓝桥杯竞赛的“通关秘籍”如果你正在准备蓝桥杯,或者对算法竞赛感兴趣,那你大概率听过一个说法:“蓝桥杯是算法竞赛的敲门砖。”这句话没错,但很多人没说的是,这块“砖”其实挺沉的&#xff0c…

2026/8/4 5:37:17 阅读更多 →

日新闻

AI Agent白手起家26: 使用标准事件驱动大模型实践

AI Agent白手起家26: 使用标准事件驱动大模型实践

纲要 练习目标:掌握大模型标准事件的调用回顾 LangChain 中的核心标准事件 invokestreambatchastream_eventswith_structured_output 环境准备实战代码:多种事件调用对比 同步调用与流式输出批量处理异步事件流监听结构化输出 运行说明与预期结果总结与扩…

2026/8/4 0:00:40 阅读更多 →
dealsea是什么?跨境卖家必知的美国deal站入门指南

dealsea是什么?跨境卖家必知的美国deal站入门指南

说实话,第一次听说美国这个老牌折扣网站的跨境卖家,十个有八个会问同一个问题:这个平台到底是干嘛的?我见过一个做家居出口的朋友,他在亚马逊上月销二十万美金,却从来没用过它。我给他看了首页——一屏一屏…

2026/8/4 0:01:40 阅读更多 →
清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

通讯作者:邓兵、刘建国通讯单位:清华大学DOI:https://doi.org/10.1021/acs.est.6c00603研究背景稀土元素(REEs)是清洁能源技术与电子器件不可或缺的核心原料,然而传统提取方式依赖能耗高、排放大的采矿与强…

2026/8/4 0:01:40 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/3 4:58:13 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/3 1:53:31 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/4 5:26:40 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/3 13:07:03 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/3 5:19:38 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/3 8:27:36 阅读更多 →