最近在AI技术社区看到一个很有意思的讨论一个开发者团队训练了一个名为“Deepseek娘”的AI助手初期内部评估时大家对这个AI的“用户价值”感到迷茫不清楚它到底能解决什么具体问题。但团队最终决定“先养着看看能长出什么。” 这个看似随性的决策背后其实折射出当前AI应用开发中一个非常普遍的心态——面对一个强大的基础模型我们常常不知道它的边界在哪里最好的方式往往是先让它跑起来在实践中探索可能性。本文将从技术实战的角度带你完整走一遍将一个类似“Deepseek”的大语言模型LLM集成到实际项目中的流程。无论你是想为内部团队打造一个智能问答机器人还是探索AI在特定业务场景如代码辅助、文档分析中的应用这篇教程都将提供从环境搭建、核心接口调用、功能扩展到工程化部署和成本优化的全链路指南。我们将使用目前主流且易于上手的Python技术栈目标是让你获得一个可运行、可迭代的AI应用原型。1. 背景与核心概念为什么“先养着”是个策略在深入代码之前我们有必要理解“先养着”这个决策背后的逻辑。这并非技术上的懒惰而是一种敏捷的、基于实证的探索策略。1.1 大语言模型LLM的能力与不确定性以Deepseek、GPT、Claude等为代表的现代大语言模型是一种“通用任务处理器”。它们通过海量数据训练获得了理解、生成、推理和编程等广泛能力。然而这种“通用性”也带来了不确定性能力广度未知你无法通过文档穷尽它所有能做的事情。性能边界模糊它在你的特定领域如医疗法律文本、内部代码库表现如何需要实测。最佳交互模式待探索是用简单的问答还是复杂的多步推理Chain-of-Thought需要针对你的任务进行调试。因此传统的“先完整定义需求再开发”的瀑布流模式在这里可能效率低下。更高效的方式是“构建-测量-学习”的循环快速构建一个最小可行产品MVP投入真实或模拟的使用环境中收集反馈观察它“自然生长”出的用例再针对性优化。1.2 本教程的目标与范围我们将构建一个本地化部署的AI助手后端服务。这个服务将封装对大语言模型API以Deepseek API为例同样适用于OpenAI、通义千问等兼容接口的调用。提供标准的Web API接口供前端或其他系统调用。实现基础的对话记忆、上下文管理功能。考虑简单的成本控制与监控。保持架构的开放性便于后续集成知识库、工具调用Function Calling等高级能力。即使你最终不确定用它来做什么拥有这样一个可随时对话、可观测、可扩展的“AI伙伴”基础设施也是探索其价值的第一步。2. 环境准备与版本说明我们将使用Python作为开发语言因为它拥有最丰富的AI和Web开发生态。项目采用模块化设计便于理解和扩展。2.1 基础环境操作系统Windows 10/11, macOS, 或 Linux (Ubuntu 20.04)。本文命令以Linux/macOS的bash为例Windows用户可在PowerShell或WSL2中运行。Python版本 3.8 推荐 3.9 或 3.10。避免使用3.7等已结束主流支持的老版本。包管理工具pip(Python自带) 或conda(如果你习惯Anaconda环境)。代码编辑器VS Code, PyCharm 或任何你熟悉的IDE。2.2 创建项目与虚拟环境隔离项目依赖是Python开发的最佳实践。# 1. 创建项目目录 mkdir ai_assistant_project cd ai_assistant_project # 2. 创建Python虚拟环境 (以venv为例) python3 -m venv venv # 3. 激活虚拟环境 # Linux/macOS: source venv/bin/activate # Windows: # venv\Scripts\activate # 激活后命令行提示符前通常会出现 (venv) 标识2.3 安装核心依赖我们创建requirements.txt文件来管理依赖。# requirements.txt # Web框架用于构建API fastapi0.104.1 uvicorn[standard]0.24.0 # ASGI服务器用于运行FastAPI # 调用大语言模型API的核心库 openai1.3.0 # 注意OpenAI官方库也兼容其他遵循OpenAI API格式的服务如Deepseek-v2 # 或者使用 litellm (一个统一多种模型API的库)二选一即可 # litellm1.13.2 # 环境变量管理避免将API密钥硬编码在代码中 python-dotenv1.0.0 # 用于可能的结构化输出处理 pydantic2.5.0 # 可选用于更复杂的对话历史管理如使用Redis # redis5.0.1使用pip安装(venv) pip install -r requirements.txt2.4 获取API密钥要调用Deepseek等模型的API你需要一个有效的API密钥。访问Deepseek官方平台或其他你选择的模型平台如OpenAI, Anthropic, 国内的通义千问、智谱AI等。注册账号并登录。在控制台中找到“API Keys”或“密钥管理”部分。创建一个新的API密钥并妥善保存。切勿将此密钥提交到Git等版本控制系统2.5 项目结构预览创建以下目录和文件形成清晰的项目结构ai_assistant_project/ ├── .env # 存储环境变量如API密钥.gitignore会忽略它 ├── .gitignore # Git忽略文件 ├── requirements.txt # 项目依赖 ├── app/ │ ├── __init__.py │ ├── main.py # FastAPI应用主入口 │ ├── config.py # 配置管理 │ ├── services/ │ │ ├── __init__.py │ │ └── llm_service.py # 封装LLM调用的核心服务 │ ├── api/ │ │ ├── __init__.py │ │ └── endpoints.py # 定义Web API路由 │ └── models/ │ ├── __init__.py │ └── schemas.py # 使用Pydantic定义请求/响应数据模型 └── tests/ # 测试目录后续扩展 └── __init__.py3. 核心组件与原理拆解我们的应用核心是构建一个可靠、可配置的LLM调用中间层。下面拆解几个关键部分。3.1 配置管理config.py为什么需要独立的配置模块为了安全性和灵活性。将API密钥、模型名称、超时时间等配置项集中管理并通过环境变量注入使得安全敏感信息不进入代码库。灵活不同环境开发、测试、生产可以使用不同配置。易维护修改配置无需改动业务代码。3.2 LLM服务层llm_service.py这是系统的“大脑”。它的职责是初始化客户端根据配置创建连接到对应AI平台如Deepseek的客户端。构造请求将用户的输入、系统指令、对话历史等格式化为模型API要求的格式。调用API发送请求并处理网络超时、认证失败等异常。解析响应从API返回的复杂JSON中提取出我们需要的文本回答。流式响应支持为了更好的用户体验需要支持逐字输出Streaming的能力。3.3 API端点endpoints.py使用FastAPI框架我们将LLM服务的能力暴露为HTTP接口。主要端点包括POST /chat/completions用于一次性的问答。POST /chat/completions/stream用于流式问答Server-Sent Events。GET /health用于健康检查监控服务状态。3.4 数据模型schemas.py使用Pydantic定义清晰的数据结构这能带来两大好处自动验证FastAPI会自动验证传入的JSON数据是否符合你定义的模型无效请求会被直接拒绝并返回清晰的错误信息。自动生成文档这些模型会成为你API交互文档的一部分让前端开发者或调用方一目了然。4. 完整实战构建AI助手后端服务现在让我们一步步填充代码构建一个可运行的服务。4.1 设置环境变量与配置文件首先在项目根目录创建.env文件# .env # 你的Deepseek API密钥请替换为你的真实密钥 DEEPSEEK_API_KEYsk-your-actual-deepseek-api-key-here # Deepseek API的基础URL (以Deepseek官方为例其他服务商类似) DEEPSEEK_API_BASEhttps://api.deepseek.com # 默认使用的模型名称 DEEPSEEK_MODELdeepseek-chat # API调用超时时间秒 LLM_TIMEOUT30然后创建.gitignore文件确保.env不会被提交# .gitignore # Python __pycache__/ *.py[cod] *$py.class *.so .Python venv/ env/ .venv/ # Environment variables .env .env.local # IDE .vscode/ .idea/ *.swp *.swo # OS .DS_Store Thumbs.db接下来创建配置管理模块app/config.py# app/config.py import os from typing import Optional from pydantic_settings import BaseSettings # 用于更强大的配置管理需安装 pydantic-settings from dotenv import load_dotenv # 加载 .env 文件中的环境变量 load_dotenv() class Settings(BaseSettings): 应用配置类从环境变量读取配置。 # API相关配置 deepseek_api_key: str os.getenv(DEEPSEEK_API_KEY, ) deepseek_api_base: str os.getenv(DEEPSEEK_API_BASE, https://api.deepseek.com) deepseek_model: str os.getenv(DEEPSEEK_MODEL, deepseek-chat) llm_timeout: int int(os.getenv(LLM_TIMEOUT, 30)) # 应用配置 app_name: str AI Assistant API app_version: str 0.1.0 debug: bool os.getenv(DEBUG, False).lower() in (true, 1, t) # 安全相关可选用于更复杂的场景 # api_key_header: str X-API-Key class Config: # 如果你有 .env 文件Pydantic会自动读取 env_file .env # 环境变量名不区分大小写 case_sensitive False # 创建全局配置实例 settings Settings() # 简单验证关键配置 if not settings.deepseek_api_key: print(警告: DEEPSEEK_API_KEY 未设置。请检查 .env 文件。)注意上述代码使用了pydantic-settings它是一个更专业的配置管理库。如果你希望保持极简也可以直接使用os.getenv。安装它pip install pydantic-settings。4.2 定义数据模型创建app/models/schemas.py# app/models/schemas.py from pydantic import BaseModel, Field from typing import List, Optional, Literal, Union, Dict, Any class Message(BaseModel): 单条消息模型遵循OpenAI API格式。 role: Literal[system, user, assistant] Field( ..., description消息角色system(系统指令), user(用户), assistant(AI助手) ) content: str Field(..., description消息内容) class ChatCompletionRequest(BaseModel): 聊天补全请求体。 messages: List[Message] Field( ..., description对话历史消息列表。通常以system消息开始后跟交替的user和assistant消息。, min_items1 ) model: Optional[str] Field( None, description指定使用的模型。若不提供则使用服务端默认配置。 ) stream: Optional[bool] Field( False, description是否启用流式输出。 ) temperature: Optional[float] Field( 0.7, ge0.0, le2.0, description采样温度介于0和2之间。值越高输出越随机。 ) max_tokens: Optional[int] Field( 2048, gt0, description生成结果的最大token数。 ) # 可以根据需要添加更多参数如 top_p, presence_penalty 等 class ChatCompletionResponse(BaseModel): 非流式聊天补全响应体。 id: str Field(..., description本次对话的唯一ID) object: str Field(chat.completion, description对象类型) created: int Field(..., description创建时间戳) model: str Field(..., description使用的模型名称) choices: List[Dict[str, Any]] Field( ..., description模型生成的选择列表。通常包含message和finish_reason。 ) usage: Optional[Dict[str, int]] Field( None, description本次请求的token使用情况。 ) class StreamChatCompletionChunk(BaseModel): 流式聊天补全的单个数据块。 id: str object: str chat.completion.chunk created: int model: str choices: List[Dict[str, Any]] class HealthResponse(BaseModel): 健康检查响应。 status: str Field(healthy, description服务状态) version: str Field(..., description应用版本) model: str Field(..., description当前配置的默认模型)4.3 实现LLM核心服务创建app/services/llm_service.py# app/services/llm_service.py import logging from typing import AsyncGenerator, List, Optional, Dict, Any import openai from openai import AsyncOpenAI, APIError, APITimeoutError, APIConnectionError from app.config import settings from app.models.schemas import Message # 配置日志 logger logging.getLogger(__name__) class LLMService: 大语言模型服务类封装与Deepseek等兼容OpenAI API的服务的交互。 def __init__(self): # 初始化OpenAI客户端配置指向Deepseek API self.client AsyncOpenAI( api_keysettings.deepseek_api_key, base_urlsettings.deepseek_api_base, timeoutsettings.llm_timeout, ) self.default_model settings.deepseek_model logger.info(fLLMService初始化完成默认模型: {self.default_model}) async def create_chat_completion( self, messages: List[Message], model: Optional[str] None, stream: bool False, **kwargs, ) - Dict[str, Any]: 创建聊天补全。 Args: messages: 消息列表。 model: 模型名称为None时使用默认模型。 stream: 是否流式输出。 **kwargs: 其他传递给OpenAI API的参数如temperature, max_tokens等。 Returns: 如果streamFalse返回完整的响应字典。 如果streamTrue返回一个异步生成器逐块产出响应。 Raises: APIConnectionError: 网络连接错误。 APITimeoutError: API请求超时。 APIError: API返回错误如认证失败、额度不足等。 model_to_use model or self.default_model request_params { model: model_to_use, messages: [msg.dict() for msg in messages], # 将Pydantic模型转为字典 stream: stream, **kwargs, # 合并其他参数如temperature, max_tokens } logger.debug(f调用LLM API模型: {model_to_use}, stream: {stream}) try: if stream: # 流式响应返回一个异步生成器 return self._handle_stream_response(request_params) else: # 非流式响应直接返回完整结果 response await self.client.chat.completions.create(**request_params) # 将OpenAI对象转换为字典便于序列化返回 return response.model_dump() except APITimeoutError as e: logger.error(fLLM API请求超时: {e}) raise except APIConnectionError as e: logger.error(fLLM API连接错误: {e}) raise except APIError as e: logger.error(fLLM API返回错误 (状态码: {e.status_code}): {e.message}) # 这里可以更精细地处理不同的API错误码 raise except Exception as e: logger.exception(f调用LLM API时发生未知错误: {e}) raise async def _handle_stream_response(self, request_params: Dict) - AsyncGenerator[str, None]: 处理流式响应将数据块转换为SSE格式字符串。 try: stream await self.client.chat.completions.create(**request_params) async for chunk in stream: # 将每个chunk转换为JSON字符串并格式化为SSE数据行 if chunk.choices: # 使用Pydantic的model_dump_json确保序列化正确 yield fdata: {chunk.model_dump_json()}\n\n # 流结束标记 yield data: [DONE]\n\n except Exception as e: logger.error(f处理流式响应时出错: {e}) # 发送错误信息可选需要前端配合处理 error_chunk { error: { message: fStream error: {str(e)}, type: stream_error } } import json yield fdata: {json.dumps(error_chunk)}\n\n yield data: [DONE]\n\n # 创建全局服务实例 llm_service LLMService()4.4 实现Web API端点创建app/api/endpoints.py# app/api/endpoints.py import logging from typing import Optional from fastapi import APIRouter, HTTPException, Depends from fastapi.responses import StreamingResponse from sse_starlette.sse import EventSourceResponse # 更专业的SSE响应需安装 from app.services.llm_service import llm_service from app.models.schemas import ( ChatCompletionRequest, ChatCompletionResponse, StreamChatCompletionChunk, HealthResponse, Message, ) from app.config import settings # 安装 sse-starlette: pip install sse-starlette router APIRouter(prefix/api/v1, tags[chat]) logger logging.getLogger(__name__) router.post(/chat/completions, response_modelChatCompletionResponse) async def create_chat_completion(request: ChatCompletionRequest): 非流式聊天补全接口。 接收消息列表返回完整的AI回复。 try: # 调用LLM服务 response_data await llm_service.create_chat_completion( messagesrequest.messages, modelrequest.model, streamFalse, temperaturerequest.temperature, max_tokensrequest.max_tokens, ) return response_data except Exception as e: logger.error(f非流式聊天请求失败: {e}) # 根据异常类型返回不同的HTTP状态码 if hasattr(e, status_code): raise HTTPException(status_codee.status_code, detailstr(e)) raise HTTPException(status_code500, detailInternal server error) router.post(/chat/completions/stream) async def create_chat_completion_stream(request: ChatCompletionRequest): 流式聊天补全接口。 以Server-Sent Events (SSE) 格式流式返回AI回复。 async def event_generator(): SSE事件生成器。 try: # 调用LLM服务的流式接口 async for chunk in await llm_service.create_chat_completion( messagesrequest.messages, modelrequest.model, streamTrue, temperaturerequest.temperature, max_tokensrequest.max_tokens, ): yield chunk except Exception as e: logger.error(f流式聊天请求失败: {e}) # 在SSE流中发送错误信息 import json error_event { event: error, data: json.dumps({error: str(e)}) } yield fevent: {error_event[event]}\ndata: {error_event[data]}\n\n # 使用EventSourceResponse返回SSE流 return EventSourceResponse( event_generator(), headers{ Cache-Control: no-cache, Connection: keep-alive, Content-Type: text/event-stream, } ) router.get(/health, response_modelHealthResponse) async def health_check(): 健康检查端点用于监控服务状态。 # 这里可以添加更复杂的健康检查逻辑例如测试数据库连接、验证API密钥等 return HealthResponse( statushealthy, versionsettings.app_version, modelsettings.default_model, ) # 一个简单的对话端点示例用于快速测试 router.post(/chat/simple) async def chat_simple(user_input: str, system_prompt: Optional[str] None): 简化版聊天接口只需提供用户输入和可选的系统指令。 messages [] if system_prompt: messages.append(Message(rolesystem, contentsystem_prompt)) messages.append(Message(roleuser, contentuser_input)) try: response await llm_service.create_chat_completion(messagesmessages) # 从响应中提取AI的回复内容 ai_reply response.get(choices, [{}])[0].get(message, {}).get(content, ) return {reply: ai_reply} except Exception as e: logger.error(f简单聊天失败: {e}) raise HTTPException(status_code500, detailstr(e))4.5 创建FastAPI应用主入口创建app/main.py# app/main.py import logging from contextlib import asynccontextmanager from fastapi import FastAPI, Request from fastapi.middleware.cors import CORSMiddleware from fastapi.responses import JSONResponse from app.api.endpoints import router as api_router from app.config import settings # 配置日志 logging.basicConfig( levellogging.DEBUG if settings.debug else logging.INFO, format%(asctime)s - %(name)s - %(levelname)s - %(message)s, ) logger logging.getLogger(__name__) # 生命周期管理启动和关闭时执行的操作 asynccontextmanager async def lifespan(app: FastAPI): 应用生命周期管理。 启动时执行的操作如初始化数据库连接池可以放在这里。 logger.info(fStarting {settings.app_name} v{settings.app_version}) yield # 应用运行期间 logger.info(fShutting down {settings.app_name}) # 关闭时执行的操作如关闭连接池可以放在这里 # 创建FastAPI应用实例 app FastAPI( titlesettings.app_name, versionsettings.app_version, description一个基于大语言模型的AI助手后端API服务, lifespanlifespan, ) # 添加CORS中间件允许前端跨域请求生产环境应严格限制来源 app.add_middleware( CORSMiddleware, allow_origins[*], # 生产环境请替换为具体的前端域名如 [https://your-frontend.com] allow_credentialsTrue, allow_methods[*], allow_headers[*], ) # 全局异常处理 app.exception_handler(Exception) async def global_exception_handler(request: Request, exc: Exception): 捕获未处理的全局异常返回统一的错误格式。 logger.error(f未处理的全局异常: {exc}, exc_infoTrue) return JSONResponse( status_code500, content{ detail: Internal server error, message: str(exc) if settings.debug else An unexpected error occurred. }, ) # 包含API路由 app.include_router(api_router) # 根路径返回简单的欢迎信息 app.get(/) async def root(): return { message: fWelcome to {settings.app_name}, version: settings.app_version, docs: /docs, # FastAPI自动生成的交互式API文档 redoc: /redoc, # 另一种API文档格式 } if __name__ __main__: # 使用uvicorn直接运行用于开发 import uvicorn uvicorn.run( app.main:app, host0.0.0.0, # 监听所有网络接口 port8000, reloadTrue, # 开发时启用热重载 log_levelinfo )4.6 运行与验证现在我们的服务已经准备好了。在项目根目录下运行(venv) python -m app.main你应该看到类似以下的输出INFO: Started server process [12345] INFO: Waiting for application startup. INFO: app.config - LLMService初始化完成默认模型: deepseek-chat INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRLC to quit)打开浏览器访问http://localhost:8000/docs你会看到自动生成的Swagger UI交互式API文档。4.7 测试API你可以直接在/docs页面测试或者使用curl命令测试健康检查curl http://localhost:8000/api/v1/health预期返回{status:healthy,version:0.1.0,model:deepseek-chat}测试非流式聊天curl -X POST http://localhost:8000/api/v1/chat/completions \ -H Content-Type: application/json \ -d { messages: [ {role: system, content: 你是一个乐于助人的AI助手。}, {role: user, content: 你好请介绍一下你自己。} ], temperature: 0.7 }测试流式聊天使用支持SSE的工具如httpie或编写前端代码# 使用 httpie 示例 # pip install httpie http --stream POST http://localhost:8000/api/v1/chat/completions/stream \ messages:[{role:user,content:用Python写一个快速排序函数}]测试简化接口curl -X POST http://localhost:8000/api/v1/chat/simple?user_input你好世界5. 常见问题与排查思路在部署和运行过程中你可能会遇到以下问题问题现象常见原因解决思路启动失败ModuleNotFoundError1. 虚拟环境未激活。2. 依赖未安装。3.PYTHONPATH设置问题。1. 确认命令行提示符前有(venv)。2. 运行pip install -r requirements.txt。3. 在项目根目录下运行或设置export PYTHONPATH$(pwd)。API调用返回 401 Unauthorized1. API密钥错误或未设置。2. API密钥已过期或被撤销。3..env文件未加载。1. 检查.env文件中的DEEPSEEK_API_KEY是否正确。2. 登录对应平台控制台确认密钥状态并重新生成。3. 确认app/config.py中成功加载了环境变量可打印settings.deepseek_api_key的前几位验证。API调用超时 (Timeout)1. 网络连接不稳定。2. 模型服务端响应慢。3. 请求的max_tokens过大。1. 检查网络尝试增加LLM_TIMEOUT值如60。2. 可能是服务端负载高稍后重试。3. 减少max_tokens参数。流式接口不工作或前端收不到数据1. 前端未正确处理SSE。2. 代理服务器如Nginx未正确配置SSE。3. 浏览器或工具不支持SSE。1. 使用curl或httpie直接测试后端接口是否正常输出数据流。2. 检查Nginx配置确保包含proxy_buffering off;和正确的proxy_set_header。3. 使用Postman或专门支持SSE的客户端测试。响应内容不符合预期1.system指令设置不当。2.temperature参数过高导致输出随机。3. 对话历史 (messages) 格式错误。1. 优化system指令明确AI的角色和任务。2. 将temperature调低如0.3以获得更确定性的输出。3. 确保messages列表是role和content交替的正确序列。服务内存占用持续增长1. 对话历史未做长度限制导致每次请求携带的上下文过长。2. 未及时释放资源。1. 在服务层实现对话历史的截断或总结功能限制token总数。2. 确保使用异步客户端并在生产环境使用连接池。监控长期运行的进程。6. 最佳实践与工程建议将原型发展为可维护、可扩展的生产级服务需要考虑更多工程化因素。6.1 配置与安全密钥管理永远不要将API密钥硬编码或提交到代码仓库。使用.env文件开发和环境变量/密钥管理服务如AWS Secrets Manager, HashiCorp Vault生产。配置分离为开发、测试、生产环境创建不同的配置文件如.env.dev,.env.prod通过ENVIRONMENT变量加载对应的配置。API访问控制为你的后端API添加认证层如JWT、API Key防止未授权访问。可以在FastAPI中使用Depends和中间件实现。6.2 性能与可观测性实现缓存对于重复或相似的用户问题可以考虑在服务层添加缓存如Redis直接返回缓存结果显著降低API调用成本和延迟。超时与重试为LLM API调用设置合理的超时和重试机制使用指数退避。openai库和tenacity库可以方便地实现。日志与监控记录所有API请求和响应注意脱敏敏感信息。集成监控工具如Prometheus, Grafana来跟踪请求量、延迟、错误率和token消耗。限流使用slowapi或fastapi-limiter等库对API端点进行限流防止滥用。6.3 功能扩展对话状态管理目前的实现是无状态的。为了实现多轮对话需要为每个会话session维护一个对话历史。可以将会话ID和消息列表存储在Redis或数据库中。集成知识库RAG这是让AI“有用”的关键。将你的内部文档、代码库等数据向量化并存入向量数据库如Chroma, Pinecone, Weaviate。当用户提问时先检索相关文档片段再连同问题和文档一起发送给LLM使其能基于你的私有知识回答问题。工具调用Function Calling让AI不仅能说还能做。定义一些工具函数如查询天气、搜索数据库、发送邮件当AI认为需要时可以请求调用这些工具然后将工具执行结果返回给AI由AI组织最终回复给用户。异步与队列对于耗时的任务如处理长文档、批量生成不要阻塞HTTP请求。可以将任务放入消息队列如Celery Redis/RabbitMQ立即返回一个任务ID让客户端通过轮询或WebSocket来获取结果。6.4 成本优化监控用量仔细记录每次调用的输入/输出token数并关联到用户或项目。设置预算告警。模型选择根据任务复杂度选择合适的模型。简单的分类、提取任务可以使用更小、更便宜的模型。上下文管理积极管理对话历史长度。采用“滑动窗口”只保留最近N条消息或使用更高级的“对话总结”技术将冗长的历史总结成一条短的system指令。7. 总结与下一步通过本教程我们从一个“不知道有什么用”的起点成功搭建了一个具备完整功能的AI助手后端服务。你现在拥有一个可运行的API服务封装了与Deepseek等大模型交互的核心能力。清晰的架构配置、服务、API、模型分层代码易于理解和维护。关键特性支持流式/非流式响应具备基础的健康检查和错误处理。扩展蓝图了解了如何向缓存、知识库、工具调用等方向演进。“先养着”的下一步是什么连接前端使用Vue/React开发一个简单的聊天界面连接到你的/stream端点获得实时的对话体验。探索第一个用例尝试用这个服务做点什么。比如代码助手让它帮你审查代码片段、解释错误信息。内容生成输入几个关键词让它帮你写邮件、周报、文章大纲。学习伙伴向它提问任何你想学习的技术概念。收集反馈将服务分享给一个小范围的团队成员或朋友观察他们如何使用询问他们觉得哪里好用、哪里不好用。这些反馈是决定它未来走向的黄金信息。迭代优化根据反馈选择一个最有价值的痛点用前面提到的扩展功能如RAG、Function Calling去解决它。技术的价值最终体现在解决实际问题上。这个可运行的“AI伙伴”就是你探索其价值的实验场。开始喂养它数据向它提问观察它的反应你很快就会发现那个最初“不知道有什么用”的模糊感会被一个个具体的、或惊喜或好笑的用例所取代。