十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Python大模型应用开发实战:从API调用到RAG与FastAPI部署

Python大模型应用开发实战:从API调用到RAG与FastAPI部署 这是一篇真正能让你从零跑通“Python 基础 大模型应用开发”的完整教程。文章不会只讲概念也不会只丢一堆代码而是把 2026 年学习这条技术路线时最值得掌握的环境搭建、API 调用、提示词工程、RAG 检索增强、Agent 智能体开发、FastAPI 服务部署、本地模型私有化部署以及工程落地时的坑点和最佳实践一次性梳理清楚。先把结论放在前面大模型应用开发并没有想象中那么高不可攀。它不需要你从零训练一个大模型也不需要你精通底层矩阵运算。绝大多数企业级应用本质上就是“把大模型的能力通过代码和业务数据封装成可以被用户使用的产品”。你真正需要掌握的是 Python 编程基础、调用大模型 API 的方法、如何处理和存储业务数据以及如何把这一切组合成一个稳定的后端服务。下面我们进入正题。1. 为什么 2026 年一定要学 Python 大模型应用开发1.1 技术门槛正在降低但人才缺口依然巨大过去几年大模型技术经历了从“论文里的算法”到“人人可用的 API 服务”的转变。现在无论是国外的 OpenAI、Anthropic还是国内的百度千帆、阿里百炼、智谱 AI、DeepSeek都提供了非常成熟的 API 接口。你只需要通过 HTTP 请求就能把当前最强大的语言模型能力集成到自己的应用里。这与传统的机器学习开发有本质区别。传统 ML 开发你需要自己收集数据、清洗数据、训练模型、调参、部署周期长且门槛极高。而大模型应用开发更像是“API 调用 业务逻辑封装 数据工程”的结合体。这使得大量有 Python 基础的后端开发者、甚至全栈开发者都能快速切入这个领域。1.2 企业需求的真实场景从目前的招聘市场和企业项目来看大模型应用开发的岗位需求主要集中在以下几类智能客服与问答系统基于企业私有文档构建能够自动回答员工或客户问题的机器人。内容生成与辅助创作帮助运营人员生成营销文案、产品描述、周报总结。代码生成与审查辅助集成到 IDE 或 CI/CD 流程中辅助开发人员写代码、查 Bug。数据分析与报表生成让用户通过自然语言提问系统自动生成 SQL 查询并返回分析结果。Agent 智能体应用让大模型能够自主规划任务、调用外部工具如搜索、计算器、API完成复杂的工作流。这些场景都有一个共同特点不需要重新训练模型而是需要把大模型接入到具体的业务流程中。这正是 Python 开发者最容易切入的机会点。1.3 本套教程的学习路径规划为了照顾不同基础的读者这篇文章规划了一条相对平滑的学习路径Python 核心语法速通只看最常用的部分。虚拟环境与依赖管理。大模型 API 的基本调用方式以 OpenAI 兼容接口为例。提示词Prompt工程入门。检索增强生成RAG实战。使用 FastAPI 将应用封装成服务。本地私有化模型部署使用 Ollama。常见问题排查与工程化最佳实践。只要跟着这篇文章走完一遍你就具备独立开发一个完整的大模型应用的能力。2. 环境准备Python 与开发工具链2.1 Python 版本选择与安装开始写代码之前必须先准备好 Python 环境。这里有一个版本选择的建议大模型相关的 SDK如 OpenAI SDK、LangChain、LlamaIndex对 Python 3.9 以上的版本支持较好。目前最稳妥的选择是Python 3.10 或 3.11。这两个版本在兼容性和性能之间取得了较好的平衡。Python 3.12 虽然已经发布但部分第三方库可能还未完全跟上不建议在生产环境盲目追新。在安装时一定要勾选“Add Python to PATH”否则后续在命令行中使用python命令会提示找不到。安装完成后打开终端Windows 使用 CMD 或 PowerShellmacOS 使用 Terminal输入以下命令验证python --version如果输出类似Python 3.11.9的提示说明安装成功。2.2 虚拟环境隔离项目依赖无论是开发个人项目还是企业项目使用虚拟环境是一个必须养成的习惯。它可以把不同项目的依赖包隔离开避免出现“A 项目需要 Flask 2.0B 项目需要 Flask 3.0”这种冲突。Python 自带的venv模块就足够用不需要额外安装。在项目根目录下执行# 创建虚拟环境 python -m venv .venv # 激活虚拟环境 # Windows: .venv\Scripts\activate # macOS / Linux: source .venv/bin/activate激活之后命令行提示符前面会出现(.venv)字样说明当前已经在虚拟环境中。接下来安装的所有包都会被隔离在这个环境里。2.3 常用依赖库清单在正式开始项目开发前先规划好需要安装的库。以下是一份针对大模型应用开发的基础依赖清单pip install openai # OpenAI 官方 SDK也兼容国内多数平台 pip install fastapi # 高性能 Web 框架用于封装 API pip install uvicorn # ASGI 服务器用于运行 FastAPI pip install python-dotenv # 用于读取 .env 配置文件管理 API Key pip install requests # HTTP 请求库部分场景需要用 pip install langchain # 大模型应用开发框架可选但推荐 pip install chromadb # 轻量级向量数据库用于 RAG可选注意openai这个库虽然在名称上是 OpenAI 官方库但目前国内几乎所有主流大模型平台如 DeepSeek、智谱、阿里云百炼、Moonshot Kimi 等都提供了OpenAI 兼容接口。这意味着你只需要修改base_url和api_key就能用同一套代码访问不同的大模型服务学习成本极低。2.4 IDE 推荐VS Code 配置对于 Python 开发我个人比较推荐使用 VS Code。它轻量、免费而且有非常好的 Python 插件支持。安装 VS Code 后需要装两个核心插件Python由微软发布提供代码补全、调试、语法检查。Pylance提供更强大的类型检查和智能提示。配置好之后按下CtrlShiftPmacOS 为CmdShiftP输入Python: Select Interpreter选择我们刚才创建的.venv环境即可。3. 大模型应用开发的核心概念3.1 Token 是什么Token令牌是大模型处理文本的基本单位。你可以简单理解为一个“词块”。对于英文一个 Token 大约对应一个单词的 70% 左右对于中文一个 Token 通常对应一个汉字或一个常用词。例如“大模型应用开发”这七个字在多数 Tokenizer分词器下面可能会被拆解成 4 到 6 个 Token。Token 的重要性体现在计费依据大模型 API 按输入 输出 Token 总数收费。上下文窗口模型能处理的 Token 数量有限。例如一个 128K 上下文的模型最多能一次性处理大约 9 万字的输入内容。3.2 API 调用的基本逻辑大模型 API 的调用本质上是一次 HTTP POST 请求。你发送给接口的内容分为两部分系统提示词System Prompt告诉模型“你是谁你要以什么角色和规则来回答问题”。用户消息User Message用户实际输入的问题。模型拿到这两部分内容后会基于它已经学习到的知识生成一段文本返回给你。下面是一张简化版的请求流程图你的应用程序 | | POST /v1/chat/completions | Body: { model, messages, temperature, max_tokens } v 大模型 API 服务云端或本地 | | 返回结果: { choices: [ { message: { content: ... } } ] } v 你的应用程序 - 解析 JSON - 展示给用户理解这一点之后大模型应用开发的神秘感就消失了。它本质上就是“把业务数据和用户输入按照特定格式拼成消息交给模型处理再把结果返回给用户”。3.3 温度Temperature参数的含义在调用大模型时有一个非常重要的参数叫temperature。它控制模型输出的随机性temperature0输出结果基本稳定每次回答都差不多适合事实性问答、代码生成。temperature0.7输出有一定的多样性适合通用对话和文案生成。temperature1.0以上输出非常随机适合创意写作、头脑风暴。在实际工程中如果做的是知识库问答建议把temperature调低0.1~0.3避免模型“自由发挥”编造内容。4. 基础实战使用 Python 调用大模型 API4.1 获取 API Key 与配置环境变量我以 OpenAI 兼容接口为例来演示。由于不同平台提供的 API 地址不同且 API Key 属于敏感信息强烈建议使用环境变量来管理而不是直接写在代码里。在项目根目录下创建.env文件# .env OPENAI_API_KEY你的API_Key OPENAI_BASE_URLhttps://api.example.com/v1 MODEL_NAMEgpt-4o-mini然后写一个工具函数来加载这个配置# 文件路径config.py import os from dotenv import load_dotenv # 加载 .env 文件 load_dotenv() # 读取配置 OPENAI_API_KEY os.getenv(OPENAI_API_KEY) OPENAI_BASE_URL os.getenv(OPENAI_BASE_URL) MODEL_NAME os.getenv(MODEL_NAME) # 简单的校验 if not OPENAI_API_KEY: raise ValueError(请检查 .env 文件中是否配置了 OPENAI_API_KEY)4.2 最小可运行调用示例接下来我们写一个最简单的对话程序。# 文件路径chat_demo.py from openai import OpenAI from config import OPENAI_API_KEY, OPENAI_BASE_URL, MODEL_NAME # 初始化客户端 client OpenAI( api_keyOPENAI_API_KEY, base_urlOPENAI_BASE_URL, ) def chat_with_model(user_input: str) - str: 发送用户输入到模型并返回模型生成的回复。 try: response client.chat.completions.create( modelMODEL_NAME, messages[ {role: system, content: 你是一个乐于助人的中文助手。}, {role: user, content: user_input}, ], temperature0.7, max_tokens1024, ) # 返回模型的回复内容 return response.choices[0].message.content except Exception as e: return f调用失败{e} if __name__ __main__: while True: user_input input(用户输入 exit 退出: ) if user_input.lower() exit: break result chat_with_model(user_input) print(助手:, result)运行方式python chat_demo.py预期效果是你在终端输入问题模型会给出回答。代码解释OpenAI(...)创建了一个客户端对象。这里最关键的是base_url它决定请求发送到哪个服务器。messages是核心参数。它是一个列表每个元素包含role和content。常见的role有system系统设定、user用户输入、assistant模型回复。max_tokens1024表示最多允许模型返回 1024 个 Token。设置这个值可以防止模型无限输出控制成本。4.3 多轮对话与上下文管理注意上面的示例中模型是没有记忆的。它每次只知道你当前发送的这一条消息。要实现多轮对话需要把历史对话记录一并发给模型。# 文件路径chat_memory.py from openai import OpenAI from config import OPENAI_API_KEY, OPENAI_BASE_URL, MODEL_NAME client OpenAI( api_keyOPENAI_API_KEY, base_urlOPENAI_BASE_URL, ) # 用一个列表存储对话历史 message_history [ {role: system, content: 你是一个擅长 Python 编程的技术专家回答要简洁、准确。}, ] def chat_with_history(user_input: str) - str: # 追加用户消息到历史 message_history.append({role: user, content: user_input}) response client.chat.completions.create( modelMODEL_NAME, messagesmessage_history, temperature0.7, ) # 将模型回复追加到历史 assistant_reply response.choices[0].message.content message_history.append({role: assistant, content: assistant_reply}) return assistant_reply if __name__ __main__: while True: user_input input(用户输入 exit 退出: ) if user_input.lower() exit: break result chat_with_history(user_input) print(助手:, result) print( * 50)工程提示随着对话轮次增加message_history会越来越长最终会超出模型的上下文窗口。实际生产项目中需要设计上下文管理策略例如只保留最近 5 轮对话或者把历史对话做摘要后再传给模型。这部分内容在后文的“最佳实践”中会详细展开。5. 进阶实战基于 FastAPI 构建大模型应用服务学会了基础调用之后我们需要把“命令行对话”升级为“可以被真实用户访问的 Web 服务”。这里选择 FastAPI因为它性能好、代码简洁、自带接口文档非常适合 AI 应用的开发。5.1 创建 FastAPI 应用首先在项目中创建一个新的文件main.py# 文件路径main.py import json from typing import List, Optional from fastapi import FastAPI, HTTPException from pydantic import BaseModel from openai import OpenAI from config import OPENAI_API_KEY, OPENAI_BASE_URL, MODEL_NAME app FastAPI( title大模型应用开发实战 API, description一个演示如何将大模型能力封装成 Web 服务的项目, version1.0.0, ) client OpenAI( api_keyOPENAI_API_KEY, base_urlOPENAI_BASE_URL, ) # 定义请求体模型 class ChatMessage(BaseModel): role: str content: str class ChatRequest(BaseModel): messages: List[ChatMessage] temperature: Optional[float] 0.7 max_tokens: Optional[int] 1024 class ChatResponse(BaseModel): reply: str app.get(/health) def health_check(): 健康检查接口用于判断服务是否正常启动。 return {status: ok} app.post(/v1/chat, response_modelChatResponse) def chat(request: ChatRequest): 接收对话消息返回大模型生成的回复。 try: # 将请求中的消息转换为 API 需要的格式 messages [msg.model_dump() for msg in request.messages] response client.chat.completions.create( modelMODEL_NAME, messagesmessages, temperaturerequest.temperature, max_tokensrequest.max_tokens, ) reply response.choices[0].message.content return ChatResponse(replyreply) except Exception as e: raise HTTPException(status_code500, detailf调用大模型失败{str(e)})5.2 启动服务并测试在终端中启动服务uvicorn main:app --host 0.0.0.0 --port 8000 --reload启动后FastAPI 会自动生成一份交互式 API 文档你可以在浏览器中访问http://localhost:8000/docs查看。我们可以通过curl命令来测试接口curl -X POST http://localhost:8000/v1/chat \ -H Content-Type: application/json \ -d { messages: [ {role: system, content: 你是一个AI助手}, {role: user, content: 请用一句话介绍大模型} ] }预期返回结果类似于{ reply: 大模型是一种基于深度学习的大规模参数模型能够理解和生成自然语言文本。 }5.3 添加流式输出支持对于真实的用户体验来说流式输出就像 ChatGPT 那样一个字一个字往外蹦非常重要。如果等全部生成完再返回用户等待的时间太长。FastAPI 可以结合StreamingResponse实现流式输出。# 文件路径main.py新增流式接口 from fastapi.responses import StreamingResponse app.post(/v1/chat/stream) async def chat_stream(request: ChatRequest): messages [msg.model_dump() for msg in request.messages] def generate(): stream client.chat.completions.create( modelMODEL_NAME, messagesmessages, temperaturerequest.temperature, max_tokensrequest.max_tokens, streamTrue, # 开启流式 ) for chunk in stream: if chunk.choices[0].delta.content is not None: yield chunk.choices[0].delta.content return StreamingResponse(generate(), media_typetext/plain; charsetutf-8)注意前端在使用这个接口时需要使用fetch或axios的流式读取能力逐段渲染收到的内容。6. 必学框架LangChain 与检索增强生成RAG当业务场景需要回答“基于企业内部文档”的问题时直接问大模型是不够的。原因有两个大模型并不知道你的私有数据。大模型的训练数据有时间截止不知道最新信息。解决这个问题的标准方案是RAGRetrieval-Augmented Generation检索增强生成。它的核心逻辑是先把文档切分成小块转成向量存入向量数据库用户提问时先从数据库中检索出最相关的段落最后把这些段落拼进 Prompt让大模型结合这些内容来回答。6.1 RAG 的完整流程以下是最简化的 RAG 结构阶段的文档 - 分段 - Embedding向量化 - 存入向量数据库 查询阶段用户提问 - 查询向量数据库 - 取出 Top-K 相似段落 - 拼接 Prompt - 调用大模型 - 返回回答6.2 使用 LangChain 快速实现 RAG下面是一个使用LangChain和ChromaDB实现的最简 RAG 示例。假设已经有一个文本文件knowledge.txt。# 文件路径rag_demo.py from langchain_community.document_loaders import TextLoader from langchain_text_splitters import RecursiveCharacterTextSplitter from langchain_community.vectorstores import Chroma from langchain_openai import OpenAIEmbeddings from langchain_openai import ChatOpenAI from langchain.chains import create_retrieval_chain from langchain.chains.combine_documents import create_stuff_documents_chain from config import OPENAI_API_KEY, OPENAI_BASE_URL, MODEL_NAME # 1. 加载文档 loader TextLoader(knowledge.txt, encodingutf-8) documents loader.load() # 2. 切分文档按 500 字符切一段重叠 50 字符 text_splitter RecursiveCharacterTextSplitter( chunk_size500, chunk_overlap50, ) docs text_splitter.split_documents(documents) # 3. 创建 Embedding 模型用于文本向量化 embeddings OpenAIEmbeddings( openai_api_keyOPENAI_API_KEY, openai_api_baseOPENAI_BASE_URL, modeltext-embedding-ada-002 ) # 4. 存入向量数据库 vectorstore Chroma.from_documents(documentsdocs, embeddingembeddings) # 5. 创建检索器 retriever vectorstore.as_retriever(search_kwargs{k: 3}) # 6. 创建大模型 llm ChatOpenAI( openai_api_keyOPENAI_API_KEY, openai_api_baseOPENAI_BASE_URL, modelMODEL_NAME, temperature0.3, ) # 7. 组合 RAG 链路 combine_prompt 你是企业内部知识库助手。请仅根据下面的上下文回答问题。 如果无法从上下文中找到答案请明确表示知识库中没有相关内容不要编造。 context {context} /context 问题: {input} from langchain_core.prompts import ChatPromptTemplate prompt ChatPromptTemplate.from_template(combine_prompt) chain create_retrieval_chain( retriever, create_stuff_documents_chain(llm, prompt) ) # 8. 调用查询 question 根据知识库请介绍一下公司的请假流程 result chain.invoke({input: question}) print(result[answer])代码解释chunk_size 与 chunk_overlap切分文档时相邻段落之间保留一部分重叠内容可以避免因切分位置导致关键信息被截断。Top-Kk3表示每次检索返回最相似的 3 段内容。K 值太小可能漏信息太大则会让 Prompt 内容过多、成本升高。temperature0.3在知识库问答中使用较低温度可以让模型更严格地依据提供的文档内容回答减少“幻觉”。7. 本地私有化部署使用 Ollama 运行大模型在某些场景下如数据敏感、网络隔离、离线环境不能调用云端 API需要将大模型部署在本地或内网服务器上。这时可以使用Ollama这一工具来完成私有化部署。7.1 Ollama 是什么Ollama 是一个极其简单的本地大模型运行工具它将模型下载、依赖配置、GPU 加速、API 服务集成为一个命令。它兼容 OpenAI API 格式因此我们前面写的所有代码只需要修改base_url为http://localhost:11434/v1即可。7.2 安装与运行在 macOS 或 Linux 上执行curl -fsSL https://ollama.com/install.sh | shWindows 用户直接从官网下载安装包即可。安装完成后拉取并运行一个模型。这里以qwen2.5:7b阿里的通义千问 7B 模型为例# 下载并启动模型服务 ollama run qwen2.5:7b启动后Ollama 会在本地开放一个服务端口。我们可以通过以下命令测试它是否正常运行curl http://localhost:11434/v1/chat/completions \ -H Content-Type: application/json \ -d { model: qwen2.5:7b, messages: [{role: user, content: 你好介绍一下你自己}] }如果返回了正常的 JSON 响应说明本地模型已经部署成功。7.3 与业务代码结合在原有代码中只需要改动环境变量OPENAI_API_KEYollama OPENAI_BASE_URLhttp://localhost:11434/v1 MODEL_NAMEqwen2.5:7b这样我们就实现了“代码不变模型可切换”的效果。这也是OpenAI 兼容接口的最大优势。8. 常见问题与排查思路在编写和运行大模型应用时新手往往会遇到以下几类问题。这里整理成表格方便快速排查。问题现象常见原因解决思路ModuleNotFoundError: No module named openai依赖未安装或者安装到了错误的 Python 环境执行pip install openai确认当前使用的是虚拟环境APIConnectionError或超时网络无法访问目标base_url或者base_url配置错误检查.env中的base_url在终端用curl测试目标地址连通性AuthenticationError: Incorrect API keyAPI Key 错误或已过期到平台控制台重新生成 Key确认没有多余空格404 Not Found/Model Not Found指定的模型名称不存在或者 API 地址中/v1路径缺失确认MODEL_NAME拼写确认base_url以/v1结尾模型回答内容与知识库无关检索到的段落不相关chunk 切分过大或过小优化chunk_size尝试k5检查文档编码是否为 UTF-8模型回答幻觉严重编造内容temperature过高Prompt 中未限制回答边界降低temperature至 0.1~0.3在 System Prompt 中明确“不知道就回答不知道”流式接口在axios前端中无响应前端未正确解析text/event-stream或纯文本流确认使用response.body.getReader()或axios的onDownloadProgress本地 Ollama 推理速度极慢没有 GPU 加速或模型参数量过大使用 7B/14B 等更小模型检查是否启用了 GPUollama ps考虑量化版本超出上下文窗口长度错误发送的消息 Token 总和超过模型最大限制增加历史对话裁剪策略减少单次文档内容使用更大的上下文模型这里重点说两个高频问题问题一请求总是超时怎么办大模型 API 在处理长文本或复杂任务时响应时间可能超过默认的 HTTP 超时时间通常是 10 秒或 30 秒。解决方案是调高超时时间。client OpenAI( api_keyOPENAI_API_KEY, base_urlOPENAI_BASE_URL, timeout60.0, # 总超时时间 max_retries2, # 失败重试次数 )问题二中文乱码返回内容全是\uXXXX如果你是使用requests库手动调用 API不要对返回的content提前做json.loads之外的编码转换直接使用response.json()即可。FastAPI 返回给前端时确保响应头包含charsetutf-8。例如return StreamingResponse(generate(), media_typetext/plain; charsetutf-8)9. 工程化最佳实践从“能跑”到“好用”很多初学者能写出调用大模型的 Demo但一旦进入真实项目就会遇到成本、稳定性、安全性等一系列问题。下面这些建议是基于实际项目经验总结出来的建议收藏。9.1 上下文窗口管理策略大模型的上下文窗口是有限的。当对话轮次一多费用和延迟都会显著上升。常用的管理策略有滑动窗口只保留最近 N 轮对话。摘要压缩每当对话达到一定轮次先让模型把历史对话总结成摘要再将摘要作为上下文。关键词路由判断当前问题是否与历史相关不相关时清空历史重新开始。9.2 Prompt 模板统一管理不要把 Prompt 直接写在业务代码里。建议把所有 Prompt 模板统一提取到一个prompts.py文件或配置中心方便后续版本迭代和测试。# 文件路径prompts.py SYSTEM_PROMPT 你是一个专业的{role}你的任务是{task}。请遵守以下规则{rules} QA_PROMPT 请根据以下context中的内容回答问题。 context {context} /context 问题{question} 9.3 成本控制与限流为每个用户或每个 IP 设置访问频率限制Rate Limit防止恶意刷接口。对大模型的调用做缓存如果用户的提问和之前的某个问题相似可以直接返回缓存结果节省 Token。监控单次请求的 Token 用量设置单日消费上限。9.4 数据安全与合规API Key 绝不能提交到 Git 仓库。务必使用.env文件并加入.gitignore。涉及用户隐私的数据在上送大模型之前需要进行脱敏处理例如把手机号、身份证号替换为占位符。如果业务数据敏感优先使用私有化部署如 Ollama方案。9.5 日志与可观测性生产环境必须记录完整的请求日志。建议至少包含以下字段request_id唯一请求ID、user_id、model_name、 prompt_tokens、completion_tokens、total_tokens、 latency_ms、response_code、error_message这些日志不仅能帮你排查线上问题还能用来分析用户行为和模型质量。10. 总结与下一步学习建议这篇文章从 Python 环境搭建开始带你走完了大模型应用开发的一个完整闭环调用 API、多轮对话、封装 Web 服务、流式输出、RAG 知识库、本地私有化部署、以及生产环境的工程优化。可以看到大模型应用开发最核心的能力其实并不复杂第一熟练使用 Python掌握字符串处理、列表/字典操作、文件读写和异常捕获。第二理解 OpenAI 兼容接口的调用格式熟悉messages列表的结构。第三学会将业务数据和 Prompt 模板结合起来让模型在特定约束下回答。第四掌握 FastAPI 服务开发能够把模型能力暴露成 HTTP 接口。第五掌握 RAG 的基本原理与实现这是目前知识库问答系统的通用解决方案。学完本文之后你可以尝试做这样一个小项目来巩固知识做一个简单的本地文档问答系统。把一份几十页的产品说明书或操作手册喂给系统然后通过 Web 页面提问让系统只根据文档内容回答。做完这个项目你就能比较全面地掌握大模型应用开发的核心链路了。如果这篇文章对你有帮助可以收藏备用。接下来围绕你感兴趣的业务场景动手写第一行代码吧。
返回列表