当前位置: 首页 > news >正文

《AI大模型应知应会100篇》第61篇:FastAPI搭建大模型API服务

第61篇:FastAPI搭建大模型API服务


在这里插入图片描述

摘要

随着大语言模型(LLM)在各行各业的广泛应用,构建一个高性能、可扩展的大模型 API 服务变得尤为重要。FastAPI 以其异步支持、类型安全、自动生成文档等优势,成为当前最流行的选择之一。

本篇文章将从零开始,手把手教你使用 FastAPI 搭建一个完整的大模型 API 服务,涵盖项目初始化、接口设计、模型集成、安全认证、部署方案及性能优化等全流程内容,并附有完整的代码示例与部署指南。


核心概念与知识点

1. FastAPI基础架构

项目结构设计(推荐目录组织)
fastapi-llm-service/
├── app/
│   ├── main.py               # 主入口
│   ├── api/                  # 接口模块
│   │   ├── chat.py
│   │   ├── models.py
│   │   └── __init__.py
│   ├── services/             # 服务层
│   │   ├── model_service.py
│   │   └── cache.py
│   ├── utils/                # 工具函数
│   │   └── logger.py
│   ├── config.py             # 配置文件
│   └── models/               # Pydantic 数据模型
│       └── request_models.py
├── Dockerfile
├── requirements.txt
└── README.md

✅ 这种分层结构便于后期维护和扩展。

FastAPI 的依赖注入机制

FastAPI 支持强大的依赖注入系统,可以用于管理数据库连接、身份验证、配置加载等。

from fastapi import Depends, FastAPIapp = FastAPI()def get_db():db = "Connected to DB"yield dbprint("Closing DB connection")@app.get("/items/")
async def read_items(db: str = Depends(get_db)):return {"db": db}

💡 使用 Depends() 可以实现跨接口复用逻辑,提升代码可维护性。

使用 Pydantic 进行请求/响应验证

Pydantic 是 FastAPI 的核心组件之一,它提供数据校验功能,确保输入输出符合预期格式。

from pydantic import BaseModelclass ChatRequest(BaseModel):prompt: strmax_tokens: int = 50temperature: float = 0.7@app.post("/chat")
async def chat(request: ChatRequest):return {"response": f"Received: {request.prompt}"}

🧪 如果请求体不符合 ChatRequest 定义的字段或类型,会自动返回 422 错误。

异步处理与高并发支持

FastAPI 基于 ASGI(如 Uvicorn),天然支持异步编程,适合处理大模型推理这类 I/O 密集型任务。

import asyncio
from fastapi import FastAPIapp = FastAPI()@app.get("/slow")
async def slow_api():await asyncio.sleep(3)return {"message": "This is a slow endpoint"}

⏱️ 上述接口模拟了一个耗时操作,但不会阻塞主线程,非常适合调用远程模型 API 或本地 GPU 推理。


2. 核心API设计【实战部分】

Chat 接口实现(支持流式响应)
from fastapi import FastAPI
from fastapi.responses import StreamingResponse
import asyncioapp = FastAPI()async def generate_stream(prompt: str):for word in ["Hello", prompt, "How", "can", "I", "help", "?"]:yield f"data: {word}\n\n"await asyncio.sleep(0.5)@app.post("/stream-chat")
async def stream_chat(request: ChatRequest):return StreamingResponse(generate_stream(request.prompt), media_type="text/event-stream")

🔁 流式输出能显著提升用户体验,尤其适用于对话类应用。

嵌入生成接口设计
from typing import List@app.post("/embeddings")
async def embeddings(texts: List[str]):# 模拟嵌入生成return {"embeddings": [[0.1 * i for i in range(128)] for _ in texts]}
文档上传与处理端点
from fastapi import UploadFile, File@app.post("/upload")
async def upload_file(file: UploadFile = File(...)):content = await file.read()return {"filename": file.filename,"type": file.content_type,"size": len(content)}

📁 可以结合 OCR/NLP 模块对上传文档进行进一步处理。

多模型路由策略(按需切换模型)
model_mapping = {"gpt": GPTModel(),"llama": LlamaModel(),"chatglm": ChatGLMModel()
}@app.post("/multi-model")
async def multi_model(model_name: str, request: ChatRequest):if model_name not in model_mapping:raise HTTPException(status_code=404, detail="Model not found")model = model_mapping[model_name]response = model.generate(request.prompt, ...)return {"response": response}

3. 服务层实现【实战部分】

集成 OpenAI / 本地模型
import openaiclass GPTModel:def generate(self, prompt, max_tokens=50, temperature=0.7):response = openai.Completion.create(engine="text-davinci-003",prompt=prompt,max_tokens=max_tokens,temperature=temperature)return response.choices[0].text.strip()

对于本地模型,如 HuggingFace Transformers:

from transformers import pipelineclass LocalModel:def __init__(self):self.pipe = pipeline("text-generation", model="distilgpt2")def generate(self, prompt, max_length=50):result = self.pipe(prompt, max_length=max_length, num_return_sequences=1)return result[0]['generated_text']
实现缓存与速率限制

使用 Redis 缓存:

import redis.asyncio as redisredis_client = redis.Redis(host='localhost', port=6379, db=0)async def get_cached_response(prompt):cached = await redis_client.get(prompt)return cached.decode() if cached else Noneasync def set_cached_response(prompt, response):await redis_client.setex(prompt, 3600, response)
错误处理与优雅降级
from fastapi.exceptions import HTTPException
from starlette.middleware.base import BaseHTTPMiddleware@app.exception_handler(HTTPException)
async def custom_http_exception_handler(request, exc):return JSONResponse(status_code=exc.status_code,content={"error": exc.detail},)
并发控制与负载均衡

可以通过中间件或使用 concurrent.futures.ThreadPoolExecutor 来限制并发请求数量。


4. 安全与认证

API Key 认证机制
from fastapi.security import APIKeyHeaderAPI_KEY_HEADER = APIKeyHeader(name="X-API-Key")@app.get("/secure")
async def secure_endpoint(api_key: str = Depends(API_KEY_HEADER)):if api_key != "SECRET123":raise HTTPException(status_code=403, detail="Invalid API key")return {"message": "Access granted"}
JWT 身份验证

使用 python-josepasslib 实现 JWT 登录流程:

pip install python-jose[cryptography] passlib
from jose import jwt
from datetime import datetime, timedeltaSECRET_KEY = "your-secret-key"
ALGORITHM = "HS256"def create_access_token(data: dict, expires_delta: timedelta = None):to_encode = data.copy()if expires_delta:expire = datetime.utcnow() + expires_deltaelse:expire = datetime.utcnow() + timedelta(minutes=15)to_encode.update({"exp": expire})encoded_jwt = jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM)return encoded_jwt
请求签名与加密通信

建议使用 HTTPS + 签名机制防止重放攻击。例如使用 HMAC 对请求头进行签名:

import hmac
import hashlibdef verify_signature(payload: str, signature: str, secret: str):expected_sig = hmac.new(secret.encode(), payload.encode(), hashlib.sha256).hexdigest()return hmac.compare_digest(expected_sig, signature)

5. 部署与扩展【实战部分】

Docker 容器化部署

编写 Dockerfile

FROM python:3.10-slimWORKDIR /appCOPY requirements.txt .
RUN pip install -r requirements.txtCOPY . .CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]

构建镜像并运行:

docker build -t llm-api .
docker run -p 8000:8000 llm-api
Kubernetes 编排方案

使用 Helm Chart 或 YAML 文件部署到 K8s:

apiVersion: apps/v1
kind: Deployment
metadata:name: llm-api
spec:replicas: 3selector:matchLabels:app: llm-apitemplate:metadata:labels:app: llm-apispec:containers:- name: llm-apiimage: your-dockerhub/llm-api:latestports:- containerPort: 8000
使用 Nginx 做反向代理与负载均衡
upstream backend {least_conn;server llm-api-0:8000;server llm-api-1:8000;server llm-api-2:8000;
}server {listen 80;location / {proxy_pass http://backend;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}
}
监控与日志收集(Prometheus + Grafana)

使用 starlette_exporter 集成 Prometheus 指标:

pip install starlette-exporter
from starlette_exporter import PrometheusMiddleware, handle_metricsapp.add_middleware(PrometheusMiddleware)
app.add_route("/metrics", handle_metrics)

访问 /metrics 即可获取指标,供 Prometheus 抓取。


性能优化与最佳实践

优化方向具体措施
提升性能使用 Uvicorn/Gunicorn 启动多进程
设置超时uvicorn --timeout-keep-alive 120
减少计算使用 Redis 缓存重复请求结果
用户体验支持 SSE 流式输出
日志监控集成 ELK、Prometheus、Grafana

实战案例研究

案例一:多租户大模型服务

通过 URL 路径或子域名识别租户 ID,动态加载模型:

@app.post("/{tenant_id}/chat")
async def tenant_chat(tenant_id: str, request: ChatRequest):model = load_tenant_model(tenant_id)response = model.generate(request.prompt)return {"response": response}

案例二:支持多种模型(GPT、Llama、ChatGLM)

model_map = {"gpt": GPTModel(),"llama": LlamaModel(),"chatglm": ChatGLMModel()
}@app.post("/chat")
async def chat(model: str, request: ChatRequest):if model not in model_map:raise HTTPException(404, "Model not supported")return {"response": model_map[model].generate(request.prompt)}

案例三:企业级聊天机器人平台(Chatbot Platform)


一、项目概述

本案例旨在构建一个企业级聊天机器人平台,集成多个 AI 模块,包括:

  • NLU(自然语言理解)模块:用于意图识别和槽位提取;
  • 对话管理模块(Dialogue Manager):管理多轮对话状态;
  • 知识库检索模块:基于用户问题从数据库或向量库中查找答案;
  • 外部接口调用模块:如天气、订单查询等第三方服务;
  • 统一 API 接口层:对外暴露 /chatbot 接口,供前端或其他系统调用。

我们使用 FastAPI + Python 构建后端服务,并提供完整的部署指南。


二、项目结构设计
enterprise-chatbot/
├── app/
│   ├── main.py                       # FastAPI 入口
│   ├── api/
│   │   └── chatbot.py              # 对外 API 接口
│   ├── services/
│   │   ├── nlu_service.py          # NLU 模块封装
│   │   ├── dialogue_manager.py     # 对话状态管理
│   │   ├── knowledge_base.py       # 知识库检索
│   │   ├── external_api.py         # 外部服务调用
│   │   └── chatbot_service.py      # 整合所有模块的主流程
│   ├── models/
│   │   └── request_models.py       # Pydantic 数据模型定义
│   ├── utils/
│   │   └── logger.py               # 日志工具
│   └── config.py                   # 配置文件
├── requirements.txt                # 依赖包
├── Dockerfile                      # 容器化配置
└── README.md

三、核心代码实现
1. 请求数据模型定义(models/request_models.py
from pydantic import BaseModel
from typing import Optional, Dictclass ChatbotRequest(BaseModel):user_id: strmessage: strsession_id: Optional[str] = Noneclass ChatbotResponse(BaseModel):reply: strintent: strconfidence: floatsession_id: strmetadata: Dict = {}

2. NLU 服务模拟(services/nlu_service.py
class NLUService:def recognize_intent(self, text: str) -> dict:# 实际应调用 BERT/NLU 模型进行意图识别if "天气" in text:return {"intent": "weather", "confidence": 0.95}elif "订单" in text:return {"intent": "order_status", "confidence": 0.85}else:return {"intent": "greeting", "confidence": 0.7}nlu_service = NLUService()

3. 对话管理器(services/dialogue_manager.py
class DialogueManager:def __init__(self):self.sessions = {}def update_state(self, session_id: str, state: dict):self.sessions[session_id] = statedef get_state(self, session_id: str) -> dict:return self.sessions.get(session_id, {})dialogue_manager = DialogueManager()

4. 知识库检索(services/knowledge_base.py
import faiss
import numpy as npclass KnowledgeBaseService:def __init__(self):# 模拟 FAISS 向量库self.index = faiss.IndexFlatL2(768)self.documents = ["你好,我是客服助手。", "我们的营业时间是每天上午9点到晚上8点。"]def search(self, query_embedding: np.ndarray, top_k=1):D, I = self.index.search(query_embedding.reshape(1, -1), top_k)return [self.documents[i] for i in I[0]]kb_service = KnowledgeBaseService()

5. 外部接口调用(services/external_api.py
import requestsclass ExternalAPIService:def get_weather(self, city: str):# 示例调用天气 APItry:res = requests.get(f"https://api.weather.com/city/{city}")return res.json().get("temperature")except Exception as e:return f"获取天气失败: {str(e)}"external_api = ExternalAPIService()

6. 聊天机器人服务整合(services/chatbot_service.py
from .nlu_service import nlu_service
from .dialogue_manager import dialogue_manager
from .knowledge_base import kb_service
from .external_api import external_apiclass ChatbotService:def process(self, request):session_id = request.session_id or f"sess_{request.user_id}"intent_info = nlu_service.recognize_intent(request.message)intent = intent_info["intent"]confidence = intent_info["confidence"]# 根据意图执行不同逻辑if intent == "weather":response = f"北京今天的温度是 {external_api.get_weather('Beijing')}°C"elif intent == "order_status":response = f"您的订单正在处理中,请稍候..."else:response = kb_service.search(np.random.rand(768))  # 模拟 embedding 查询# 更新对话状态dialogue_manager.update_state(session_id, {"last_intent": intent,"last_message": request.message})return {"reply": response,"intent": intent,"confidence": confidence,"session_id": session_id,"metadata": {}}chatbot_service = ChatbotService()

7. API 接口(api/chatbot.py
from fastapi import APIRouter
from ..models.request_models import ChatbotRequest, ChatbotResponse
from ..services.chatbot_service import chatbot_servicerouter = APIRouter(prefix="/chatbot")@router.post("/", response_model=ChatbotResponse)
async def chatbot_endpoint(req: ChatbotRequest):result = chatbot_service.process(req)return result

8. 主入口(main.py
from fastapi import FastAPI
from app.api.chatbot import router as chatbot_routerapp = FastAPI(title="Enterprise Chatbot Platform")app.include_router(chatbot_router)@app.on_event("startup")
def on_startup():print("Chatbot service started...")if __name__ == "__main__":import uvicornuvicorn.run(app, host="0.0.0.0", port=8000)

四、部署指南
1. 安装依赖
pip install fastapi uvicorn pydantic faiss-cpu python-jose[cryptography] requests

如需 GPU 支持可安装 faiss-gpu


2. 本地运行
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

访问 http://localhost:8000/docs 查看自动生成的 Swagger 文档。


3. 使用 Docker 容器化部署
Dockerfile
FROM python:3.10-slimWORKDIR /appCOPY requirements.txt .
RUN pip install -r requirements.txtCOPY . .CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]

构建镜像并运行:

docker build -t enterprise-chatbot .
docker run -p 8000:8000 enterprise-chatbot

4. Kubernetes 部署(可选)

提供一个简化的 Deployment 和 Service YAML 文件:

apiVersion: apps/v1
kind: Deployment
metadata:name: chatbot
spec:replicas: 3selector:matchLabels:app: chatbottemplate:metadata:labels:app: chatbotspec:containers:- name: chatbotimage: your-dockerhub/enterprise-chatbot:latestports:- containerPort: 8000
---
apiVersion: v1
kind: Service
metadata:name: chatbot-service
spec:selector:app: chatbotports:- protocol: TCPport: 80targetPort: 8000

应用配置:

kubectl apply -f deployment.yaml

五、性能优化建议
优化项建议
异步支持所有服务调用尽量使用 async/await
缓存机制Redis 缓存高频问答结果
流式输出使用 StreamingResponse 提升体验
模型推理将模型服务独立部署为 gRPC 服务
监控告警Prometheus + Grafana 可视化指标

六、测试示例(使用 curl)
curl -X POST http://localhost:8000/chatbot/ \
-H "Content-Type: application/json" \
-d '{"user_id": "U12345","message": "今天北京天气怎么样?"
}'
输出示例:
{"reply": "北京今天的温度是 22°C","intent": "weather","confidence": 0.95,"session_id": "sess_U12345","metadata": {}
}

七、结语

通过本案例,你已经掌握了一个完整的企业级聊天机器人平台搭建方法,涵盖从模块划分、服务整合、API 设计到容器化部署的全流程。

如果你希望将其扩展为支持多租户、多模型、插件化架构的 AI 中台系统,可以在此基础上继续演进。


未来展望
Serverless 架构下的大模型服务
  • AWS Lambda、Azure Functions 支持 Python,可用于部署轻量级推理接口。
  • 结合模型压缩(如 ONNX、量化)降低冷启动延迟。
自动扩缩容与弹性调度
  • Kubernetes HPA + Prometheus 指标实现自动伸缩。
  • 使用 Ray、Celery 分布式任务队列处理批量推理。
AI 中间件平台的发展趋势
  • 将大模型抽象为“能力即服务”(Capability-as-a-Service)
  • 统一接入 OpenAI、Anthropic、百川、通义千问等多平台模型
  • 提供可视化编排界面,支持 Prompt 编写、插件调用、链式推理等高级功能

FastAPI 作为现代 Web 框架的代表,凭借其简洁易用、高性能、强类型等特性,在构建大模型 API 服务方面展现出巨大潜力。本文不仅介绍了其核心原理,还提供了丰富的实战代码与部署方案,帮助你快速搭建一个企业级的大模型服务。

如果你希望更深入地了解如何构建 AI 应用平台,欢迎关注《AI大模型应知应会100篇》专栏系列文章!


📘 参考文档

  • FastAPI 官方文档
  • Uvicorn 文档
  • OpenAI API 文档
  • HuggingFace Transformers 文档

相关文章:

《AI大模型应知应会100篇》第61篇:FastAPI搭建大模型API服务

第61篇:FastAPI搭建大模型API服务 摘要 随着大语言模型(LLM)在各行各业的广泛应用,构建一个高性能、可扩展的大模型 API 服务变得尤为重要。FastAPI 以其异步支持、类型安全、自动生成文档等优势,成为当前最流行的选择…...

Java 源码 HashMap源码分析

Java 源码 HashMap源码分析 1 初始容量 /*** The default initial capacity - MUST be a power of two.* 默认的初始容量&#xff0c;必须为2的幂*/static final int DEFAULT_INITIAL_CAPACITY 1 << 4; // aka 16容量表示哈希表中槽的数量&#xff08;即哈希数组的长度…...

requestAnimationFrame 与 requestIdleCallback 对比

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、背景与问题场景二、核心API对比分析三、选择 requestIdleCallback 的核心原因四、特殊场景处理建议五、最佳实践总结六、结论前言 看过埋点库 sunshine-track ,很多人疑惑为啥批量上报埋点信息的时候,用的是 request…...

【C/C++】自定义类型:结构体

文章目录 前言自定义类型&#xff1a;结构体1.结构体类型的声明1.1 结构体回顾1.1.1 结构的声明 1.1.2 结构体变量的创建和初始化1.2 结构的特殊声明1.3 结构的自引用 2.结构体内存对齐2.1 对⻬规则2.2 为什么存在内存对齐&#xff1f;2.3 修改默认对⻬数 3. 结构体传参4.结构体…...

视频编解码学习十二之Android疑点

一、android.view.SurfaceControl.setDisplaySurface的作用 android.view.SurfaceControl.setDisplaySurface 是 Android 系统中一个 native 层级别的 API&#xff0c;主要用于 设置某个物理显示屏&#xff08;Display&#xff09;的输出 Surface&#xff0c;属于 SurfaceFlin…...

web第三次课后作业--基于JDBC对mysql数据库的增删查改操作

一、工程搭建步骤 1.新建java项目&#xff0c;添加jdbc依赖 2.写java程序 3.添加mysql数据源&#xff0c;连接本地数据库 4.运行程序二、运行结果 三、代码 代码解析 加载数据驱动 try {Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundExceptio…...

fiftyone-数据库配置和config与app_config配置文件

一数据库配置&#xff1a;&#xff08;以本地为例&#xff09; fiftyone数据库信息存在配置文件中&#xff1a; 配置文件地址&#xff1a; ~/.fiftyone/config.json 这个配置文件的作用&#xff1a;存放数据库地址信息&#xff1b;&#xff08;如果不配置&#xff0c;fiftyon…...

Nginx的核心功能--正向代理、反向代理、缓存和Rewrite

Nginx作为高性能的Web服务器&#xff0c;其核心功能主要体现在以下四大模块&#xff1a; 一、正向代理 主要用于客户端访问外部网络的中转服务。典型配置示例&#xff1a; server {listen 8080;resolver 8.8.8.8;location / {proxy_pass http://$http_host$request_uri;prox…...

mac latex vscode 配置

mac latex vscode 配置 安装mactex.pkg 这里有个快速下载的镜像 https://mirrors.aliyun.com/CTAN/systems/mac/mactex/ 可以检查是否将 PATH 写入 export PATH"/Library/TeX/texbin:$PATH"vscode 下载插件 Latex Workshop 在配置文件 settings.json 中输入如下的…...

【GESP真题解析】第 4 集 GESP一级 2023 年 3 月编程题 1:每月天数

大家好&#xff0c;我是莫小特。 这篇文章给大家分享 GESP 一级 2023 年 3 月编程题第 1 题&#xff1a;每月天数。 题目链接 洛谷链接&#xff1a;B3835 每月天数 一、完成输入 根据题目要求&#xff0c;我们需要输入两个整数&#xff0c;分别表示一个日期的年份和月份。 年…...

国产免费工作流引擎star 6.5k,Warm-Flow升级1.7.2(新增案例和修复缺陷)

文章目录 主要更新内容项目介绍功能思维导图设计器流程图演示地址官网Warm-Flow视频 主要更新内容 [feat] 开启流程实例&#xff0c;新增流程定义是否存在校验[feat] 新增合同签订流程案例[feat] 新增企业采购流程案例[update] mybatis-plus逻辑删除&#xff0c;删除值和未删除…...

计算机网络:移动通信蜂窝网络指的是什么?

无线基站的蜂窝网络(Cellular Network)是现代移动通信系统的核心架构,其核心思想是通过蜂窝状小区划分和频率复用,实现广域覆盖、高效频谱利用和动态资源管理。以下从设计原理、网络架构、关键技术及实际挑战等方面深入解析蜂窝网络。 一、蜂窝网络的设计原理 1. 蜂窝结构…...

scratch基础-外观模块

一、本次任务 二、内容详解 1、模块介绍 1、说[你好] (2)秒&#xff1a;临时对话框&#xff0c;短暂对话 2、说[你好]&#xff1a;持续显示对话框&#xff0c;长文本显示 3、思考[嗯…] (2)秒&#xff1a;临时显示思考气泡&#xff0c;用于角色思考 4、思考[嗯…] &#xff1a…...

前端服务器部署分类总结

目前所了解的部署有三种方式&#xff1a; 一是本地服务器部署&#xff1b;二是 nginx 服务器部署&#xff1b;三是云服务器部署 本地部署&#xff0c;准备好部署的包 以Vue项目为例&#xff0c;执行npm run build 命令打成前端包 第二步&#xff1a;将打包结果交给服务器(本地…...

精益数据分析(58/126):移情阶段的深度实践与客户访谈方法论

精益数据分析&#xff08;58/126&#xff09;&#xff1a;移情阶段的深度实践与客户访谈方法论 在创业的漫长旅途中&#xff0c;正确识别和验证问题是成功的第一步。今天&#xff0c;我们继续围绕《精益数据分析》中创业阶段的核心内容&#xff0c;深入探讨移情阶段的关键实践…...

MK米客方德SD NAND:无人机存储的高效解决方案

在无人机技术迅猛发展的当下&#xff0c;飞控系统的数据记录对于飞行性能剖析、故障排查以及飞行安全保障极为关键。以往&#xff0c;SD 卡是飞控 LOG 记录常见的存储介质&#xff0c;但随着技术的革新&#xff0c;新的存储方案不断涌现。本文聚焦于以 ESP32 芯片为主控制器的无…...

LVDS系列12:Xilinx Ultrascale系可编程输入延迟(二)

本节讲解Ultrascale IDELAYE3的参数&#xff1b;  IDELAYE3参数&#xff1a; REFCLK_FREQUENCY&#xff1a;如果使用COUNT模式&#xff0c;保持300MHz的默认值即可&#xff1b; 如果使用TIME模式&#xff0c;则该值与IDELAYCTRL参考时钟要匹配&#xff1b; DELAY_SRC&#…...

Spring的bean的生命周期?

Spring中bean的生命周期包括以下步骤&#xff1a; 通过BeanDefinition获取bean的定义信息。 调用构造函数实例化bean。 进行bean的依赖注入&#xff0c;例如通过setter方法或Autowired注解。 处理实现了Aware接口的bean。 执行BeanPostProcessor的前置处理器。 调用初始化…...

OpenCV CUDA模块中逐元素操作------逻辑运算

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 比较、AND、OR、NOT等。这类操作可用于创建基于条件的掩码&#xff0c;这对于图像分割或特征选择非常有用。 主要函数 1. 按位与 (cv::cuda::b…...

微信开发者工具里面模拟操作返回、录屏、网络速度、截屏等操作

微信开发者工具里面模拟操作返回、录屏、网络速度、截屏等操作...

Void: Cursor 的开源平替

GitHub&#xff1a;https://github.com/voideditor/void 更多AI开源软件&#xff1a;发现分享好用的AI工具、AI开源软件、AI模型、AI变现 - 小众AI Void&#xff0c;这款编辑器号称是开源的 Cursor 和 GitHub Copilot 替代品&#xff0c;而且完全免费&#xff01; 在你的代码库…...

【MySQL】日志缓冲区详解 以及 InnoDB内存结构总结

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…...

在Spark搭建YARN

&#xff08;一&#xff09;什么是SparkONYarn模式 Spark on YARN&#xff08;Yet Another Resource Negotiator&#xff09;是 Spark 框架在 Hadoop 集群中运行的一种部署模式&#xff0c;它借助 Hadoop YARN 来管理资源和调度任务。 架构组成 ResourceManager&#xff1a;作…...

postman 用法 LTS

postman 用法 LTS File ---- View ---- Show Postman Console...

Spring Boot requestBody postman

Spring Boot requestBody postman 在处理Spring Boot应用程序中的RequestBody注解时&#xff0c;通常用于接收客户端&#xff08;如Postman&#xff09;发送的JSON格式数据。如果你在Postman中配置请求&#xff0c;并希望将JSON数据发送到Spring Boot后端&#xff0c;你可以按…...

OpenHarmony 开源鸿蒙南向开发——linux下使用make交叉编译第三方库——wget

准备工作 请依照这篇文章搭建环境 OpenHarmony 开源鸿蒙南向开发——linux下使用make交叉编译第三方库——环境配置_openharmony交叉编译-CSDN博客 编译依赖 Wget依赖Gnutls库&#xff0c;gnutls库依赖gmp、nettle、libunistring库 上述库可在历史文章中自行查找 下载 w…...

枢轴支压点策略

一种基于枢轴点&#xff08;Pivot Point&#xff09;的交易策略&#xff0c;主要用于在趋势行情中进行交易。 策略的核心思路是通过计算前一天的最高价、最低价和收盘价来确定当天的枢轴点&#xff0c;并据此计算出第一和第二阻力位以及第一和第二支撑位。 可以根据这些关键点位…...

【SSL部署与优化​】​​TLS 1.3的核心改进与性能优化​​

TLS 1.3 的核心改进与性能优化 TLS 1.3 是当前最安全的 TLS 协议版本&#xff0c;通过简化协议、增强加密算法和优化握手流程&#xff0c;显著提升了性能和安全性。以下是其核心改进、性能优化及关键技术的详细解析&#xff1a; 一、TLS 1.3 核心改进 精简加密套件 • 移除弱算…...

等经纬度投影下求经纬度的行列号

一 概述 使用等经纬度投影&#xff08;Equirectangular Projection&#xff09;&#xff0c; 将经纬度转换为行列号。 二 C实现 1 代码 以下是C的实现方法。该实现将地球的经纬度范围划分为固定分辨率的网格&#xff0c;每个网格对应一个行列号。 #include <cmath> #in…...

MetaHipMer2:从头组装宏基因组

Terabase-scale metagenome coassembly with MetaHipMer | Scientific Reports https://academic.oup.com/nar/advance-article/doi/10.1093/nar/gkaf369/8126258 安装 配置环境 berkeleylab / upcxx / wiki / INSTALL — Bitbucket mamba create -n mhm2_env -c conda-fo…...

CK-S654-PA60一拖四分体式半导体电子货架专用RFID读写器|读码器接线使用说明

半导体行业RFID电子货架通过物联网技术将传统仓储从“经验驱动”转向“数据驱动”&#xff0c;其自动化识别、实时追踪与智能决策能力&#xff0c;正重塑物流与库存管理的底层逻辑。从晶圆盒的精准定位到柔性化生产&#xff0c;这一技术不仅提升了效率&#xff0c;更让半导体行…...

C++类和对象练习:Date类实现日期的差,比较日期的大小,日期的前置后置++,--,输入输出Date类,对默认函数的练习。

引言 C类和对象练习&#xff1a;Date类实现日期的差&#xff0c;比较日期的大小&#xff0c;日期的前置后置&#xff0c;--&#xff0c;输入输出Date类&#xff0c;对默认函数的练习。 _涂色_-博客主页 C基础专栏 分三个文件来写&#xff1a; Date.cpp //类函数的实现 Date.h…...

C++学习之打车软件git版本控制

目录 01 3-git的简介 02 4-git的下载和提交代码 03 5-git添加一个新文件 04 5-删除一个文件 05 6-git的批量添加和提交文件 06 7-git重命名文件名 07 8-git解决代码冲突 08 9-git的分支的概念 09 10-创建项目代码仓库 10 1-git提交代码复习 01 3-git的简介 1 --------…...

QT之信号与槽

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 文章目录 QT信号与槽机制详解基本概念信号(Signal)槽(Slot) 信号与槽的连接方式基本语法QT5新语法(推荐) 信号与槽的特点实际示例传统方式QT5新语法 连接类型注意事项高级用法信号连接信号使用lambda表达式自动…...

文章记单词 | 第73篇(六级)

一&#xff0c;单词释义 apart /əˈpɑːt/ adv. 分开地&#xff1b;相距assistant /əˈsɪstənt/ n. 助手&#xff1b;助理useless /ˈjuːsləs/ adj. 无用的&#xff1b;无效的ampere /ˈmpɛr/ n. 安培&#xff08;电流单位&#xff09;recite /rɪˈsaɪt/ v. 背诵&am…...

在Ubuntu24.04中配置开源直线特征提取软件DeepLSD

在Ubuntu24.04中配置开源直线特征提取软件DeepLSD 本文提供在Ubuntu24.04中配置开源直线特征提取软件DeepLSD的基础环境配置、列出需要修改的文件内容&#xff0c;以及报错解决方案集锦。 基础的编译安装环境 python3.8.12CUDA12gcc/g 9.5&#xff08;系统自带的g-13版本太新…...

什么是SparkONYarn模式?

&#xff08;一&#xff09;什么是SparkONYarn模式 Spark on YARN&#xff08;Yet Another Resource Negotiator&#xff09;是 Spark 框架在 Hadoop 集群中运行的一种部署模式&#xff0c;它借助 Hadoop YARN 来管理资源和调度任务。 架构组成 ResourceManager&#xff1a;作…...

STMCubeMX使用TB6612驱动编码轮并进行测速

硬件介绍 TB6612电机驱动模块功能与特性 电机方向控制 描述如何通过 TB6612 的 IN1 和 IN2 引脚控制电机的旋转方向。提供代码示例&#xff0c;展示如何通过 GPIO 控制电机的正反转。 速度控制与减速 解释如何通过调整 PWM 信号的占空比来控制电机的速度&#xff0c;并…...

数据安全与权限管控,如何实现双重保障?

数据安全和权限管控并非孤立存在&#xff0c;而是相互依存、相互促进的关系。强大的权限管控体系是数据安全的重要防线&#xff0c;能够从源头上限制潜在的风险&#xff1b;而完善的数据安全策略和技术手段&#xff0c;则为权限管控的有效实施提供了保障。只有构建起数据安全与…...

如何创建自动工作流程拆分Google Drive中的PDF文件

以下是完整的工作流程。在构建自动拆分工作流程之前&#xff0c;您可以尝试我们的免费在线 PDF 拆分器。 步骤 1&#xff1a;Make 自动拆分 PDF 的要求 要设置自动 PDF 拆分工作流程&#xff0c;您需要&#xff1a; 免费的Make.com帐户。可访问 Google Drive 并处理 PDF 文件…...

【SpringBoot实战指南】集成Easy ES

一、Easy ES 简介 Easy ES&#xff08;简称EE&#xff09;是一款基于 Elasticsearch 官方 RestHighLevelClient 封装的 ORM 框架&#xff0c;提供类似 MyBatis-Plus 的 API 设计&#xff0c;可以帮助开发者更简单地集成和使用 Elasticsearch&#xff0c;让操作 Elasticsearch …...

深入理解指针(1)

&#x1f381;个人主页&#xff1a;工藤新一 &#x1f50d;系列专栏&#xff1a;C面向对象&#xff08;类和对象篇&#xff09; &#x1f31f;心中的天空之城&#xff0c;终会照亮我前方的路 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 文章目录 深…...

vue.js中的渲染【条件渲染】

条件渲染 在 Vue 中&#xff0c;条件渲染用于根据表达式的值来决定是否在 DOM 中渲染某个元素。Vue 提供了几种方式来实现条件渲染&#xff1a; v-if 指令 用于根据条件是否为真来销毁或创建元素。 <p v-if"isVisible">显示这段内容</p>data() {retu…...

Qwen3如何强化推理能力?

大模型的推理能力一直是衡量其智能水平的关键指标。近期&#xff0c;Qwen3系列模型在这方面取得了显著突破。通过对Qwen3技术报告的解读&#xff0c;我们可以窥见一套完整的推理能力提升体系。本文将以结构化视角&#xff0c;剖析Qwen3推理能力提升的关键环节。 报告地址&#…...

2025年中国主流DevOps平台对比分析:Gitee、阿里云效与GitLab CE的技术适配与合规实践全景解读

在2025年中国企业数字化转型持续深化的背景下&#xff0c;DevOps 工具的选型呈现出多元化趋势。以下从安全合规、技术生态适配性、实践案例和选型建议四个维度&#xff0c;对 Gitee、阿里云效&#xff08;云效 DevOps&#xff09;和 GitLab CE&#xff08;中国版&#xff09;三…...

从lightrag的prompt到基于openai Structured Outputs 的优化实现思路

LightRAG 是一个用于构建 RAG 系统核心组件的配置和管理类。它集成了文档处理、存储、向量化、图谱构建和 LLM 交互等功能。你可以通过配置 LightRAG 实例的各种参数来定制 RAG 系统的行为。 目前lightrag中的实体关系抽取实现如下 PROMPTS["entity_extraction"] …...

论文阅读笔记——双流网络

双流网络论文 视频相比图像包含更多信息&#xff1a;运动信息、时序信息、背景信息等等。 原先处理视频的方法&#xff1a; CNN LSTM&#xff1a;CNN 抽取关键特征&#xff0c;LSTM 做时序逻辑&#xff1b;抽取视频中关键 K 帧输入 CNN 得到图片特征&#xff0c;再输入 LSTM&…...

Android清单文件

清单文件AndroidManifest.xml AndroidManifest.xml 配置清单文件是 每个 Android 应用的配置中心&#xff0c;系统在安装和运行应用时&#xff0c;首先会读取它。 它是 Android 应用的 “说明书”&#xff0c;主要作用是&#xff1a; 功能说明声明应用组件比如 Activity、Se…...

Single image dehazing论文阅读

Single image dehazing 1. 论文的研究目标与实际意义1.1 研究目标1.2 实际问题与产业意义2. 论文的创新方法、模型与公式2.1 改进的大气散射模型2.2 局部统计不相关性约束2.2.1 传输函数估计2.2.2 大气光颜色估计2.3 算法流程2.4 与传统方法的对比优势3. 实验设计与结果3.1 实验…...

数字信号处理-大实验1.3

MATLAB仿真实验目录 验证实验&#xff1a;常见离散信号产生和实现验证实验&#xff1a;离散系统的时域分析应用实验&#xff1a;语音信号的基音周期&#xff08;频率&#xff09;测定 说明&#xff1a;&#xff08;1&#xff09;本文是DSP大实验1的最后一篇&#xff0c;主要讲…...