本地AI大模型API网关部署指南:从Ollama到OpenAI兼容接口

news2026/5/15 2:13:15
1. 项目概述当本地AI大模型遇上API网关如果你和我一样是个喜欢折腾本地AI部署的开发者最近可能被一个词刷屏了LocalAIPilot。简单来说它不是一个具体的AI模型而是一个将本地运行的大型语言模型LLM封装成标准化API服务的框架或工具集。想象一下你费尽心思在本地电脑或服务器上部署了一个像Llama 3、Qwen 2.5这样的开源大模型它能流畅地跟你聊天、写代码、分析文档。但当你想要把它集成到自己的Web应用、手机App或者让团队其他成员通过编程方式调用时麻烦就来了——你需要自己写一个HTTP服务器处理并发请求、管理模型加载、设计API格式、做身份验证……这完全偏离了你的核心目标使用AI能力。而nagaraj-real/localaipilot-api这个项目正是为了解决这个“最后一公里”的问题。它提供了一个开箱即用的API服务层让你能像调用OpenAI的API一样轻松调用你自己本地部署的模型。这意味着你获得了数据隐私的绝对安全数据不出本地、完全可控的成本无需为API调用次数付费以及对模型行为的深度定制能力同时还能享受到云服务般的便捷接口。这个项目的核心价值在于标准化和易用性。它试图弥合前沿AI研究与实际生产应用之间的鸿沟。对于个人开发者、小团队、或是注重数据安全的企业内部项目来说这无疑是一个极具吸引力的方案。你可以用它快速搭建一个内部的AI助手服务、一个文档智能处理平台或者任何需要AI能力但又不希望数据外流的应用。2. 核心架构与设计思路拆解要理解localaipilot-api的价值我们需要先拆解一个完整的本地AI服务需要哪些组件以及这个项目是如何将它们优雅地组织起来的。2.1 核心组件与职责划分一个健壮的本地AI API服务绝不仅仅是启动一个模型然后暴露一个/v1/chat/completions端点那么简单。localaipilot-api的设计通常涵盖以下几个核心层模型管理层这是最底层负责与具体的AI推理引擎交互。它需要支持多种后端例如Ollama当前最流行的本地LLM运行和管理的工具支持拉取、运行和管理大量开源模型。LM Studio一个带图形界面的本地AI桌面应用也提供了本地API。vLLM一个专注于高速推理和服务化的大模型库特别适合需要高并发的场景。直接调用 Transformers通过 Hugging Face 的transformers库直接加载模型。 这一层的设计目标是可插拔。localaipilot-api需要定义一个统一的模型接口然后为不同的后端编写适配器Adapter。这样无论底层技术如何变化上层的API服务都能保持稳定。API网关层这是项目的核心负责接收HTTP请求、解析参数、调用模型管理层、格式化响应并返回。它的关键设计包括API兼容性最重要的目标是兼容OpenAI API格式。这意味着你的应用原本调用https://api.openai.com/v1/chat/completions的代码只需要把base_url改成http://localhost:8000几乎无需修改其他代码就能无缝切换。这极大地降低了迁移和开发成本。路由设计除了核心的/v1/chat/completions对话补全通常还会实现/v1/models列出可用模型、/v1/embeddings生成文本向量等端点以提供更完整的能力。请求/响应处理需要正确处理流式输出Server-Sent Events这是实现类似ChatGPT打字机效果的关键。同时要处理非流式请求并保证JSON格式的严格兼容。配置与上下文管理层模型运行需要参数如温度temperature、最大生成长度max_tokens、停止词stop等。API网关需要将这些参数从HTTP请求中提取出来并正确地传递给底层模型。此外对于多轮对话还需要管理对话历史即上下文这通常通过维护一个消息列表messages数组来实现。辅助服务层一个生产可用的服务还需要考虑认证与鉴权简单的API密钥认证防止服务被随意调用。日志与监控记录请求、响应和错误便于调试和运营。健康检查提供/health端点供容器编排工具如Kubernetes检查服务状态。并发与资源管理控制同时处理的请求数量防止本地GPU内存被撑爆。2.2 技术栈选型考量nagaraj-real/localaipilot-api的具体实现技术栈会直接影响其性能、易用性和可维护性。根据常见的开源实践我们可以推测其可能的选择Web框架FastAPI是当前Python生态中构建API的首选。它天生支持异步性能优异自动生成交互式API文档Swagger UI并且对数据验证通过Pydantic的支持极好非常适合实现一个规范化的API服务。异步编程为了在处理多个AI生成请求这通常是I/O密集型等待模型推理时不阻塞采用asyncio是必然选择。FastAPI的异步支持让这一点变得简单。模型交互对于Ollama可以使用其官方的Python库ollama或直接调用其REST API。对于其他后端则需要使用对应的SDK或库。部署与打包提供Dockerfile是标准操作这允许用户在任何支持Docker的环境本地、云服务器中一键部署。同时项目根目录提供requirements.txt或pyproject.toml来管理Python依赖。注意这里存在一个关键的设计权衡——模型加载方式。一种方式是API服务自身启动并加载模型。这种方式控制力强但会导致服务启动慢、内存占用固定且一个服务只能服务一个模型。另一种更优雅的方式是API服务作为客户端连接到一个独立的、已经运行起来的模型服务如Ollama服务。后者更灵活一个API网关可以动态切换连接后端不同的模型服务也更符合微服务架构。localaipilot-api很可能采用后者。3. 核心细节解析与实操要点理解了架构我们来看看在实际部署和使用localaipilot-api时有哪些必须关注的细节和容易踩坑的地方。3.1 环境准备与依赖管理本地AI对硬件有一定要求尤其是GPU。但即使只有CPU通过量化模型也能运行只是速度会慢很多。硬件与基础软件要求内存至少16GB RAM。运行7B参数模型INT4量化大约需要6-8GB内存13B模型则需要更多。GPU可选但强烈推荐拥有至少6GB显存的NVIDIA GPU如RTX 2060, 3060能获得质的飞跃。需要安装对应版本的CUDA和cuDNN。存储准备足够的硬盘空间存放模型文件一个7B模型大约4-8GB一个70B模型可能超过40GB。Python版本3.8或以上。Docker可选如果使用Docker部署需要安装Docker Engine。依赖安装的“坑”项目依赖通常写在requirements.txt中。除了安装这些包你还需要确保系统有模型后端所需的依赖。例如如果项目使用Ollama作为后端你需要先独立安装并运行Ollama然后再启动localaipilot-api。# 假设使用Ollama作为后端 # 1. 首先安装并启动Ollama (请参考Ollama官网) # 2. 拉取一个模型例如Llama 3 8B ollama pull llama3:8b # 3. 在另一个终端运行模型服务 ollama run llama3:8b # 或者以后台服务方式运行 # 4. 然后再克隆并设置 localaipilot-api git clone https://github.com/nagaraj-real/localaipilot-api.git cd localaipilot-api pip install -r requirements.txt实操心得强烈建议使用Python虚拟环境如venv或conda来隔离项目依赖。AI相关的库版本冲突是家常便饭虚拟环境能帮你省去无数麻烦。命令很简单python -m venv venv然后source venv/bin/activateLinux/Mac或venv\Scripts\activateWindows。3.2 配置文件深度解读一个设计良好的localaipilot-api项目会通过配置文件如config.yaml或.env文件来管理所有可变参数。理解这些参数至关重要。一个典型的配置文件可能包含以下部分# config.yaml 示例 server: host: 0.0.0.0 # 监听所有网络接口允许外部访问 port: 8000 log_level: info model: backend: ollama # 可选: ollama, lmstudio, vllm, transformers base_url: http://localhost:11434 # Ollama服务的地址 model_name: llama3:8b # 默认使用的模型 api_key: # 如果后端服务需要认证 openai_compatibility: enabled: true default_temperature: 0.7 default_max_tokens: 2048 auth: enabled: false # 是否启用API密钥认证 api_keys: [sk-your-secret-key-here] # 有效的API密钥列表关键配置解析model.backend和model.base_url这是核心。它告诉API服务去哪里找真正的模型。如果你用LM Studiobase_url可能是http://localhost:1234/v1。model.model_name指定默认模型。在调用/v1/chat/completions时如果请求中没有指定model参数就会使用这个默认值。auth.enabled对于暴露在公网的服务务必启用认证否则你的算力和模型可能被他人滥用。启用后客户端需要在请求头中携带Authorization: Bearer sk-your-secret-key-here。实操心得不要将配置文件尤其是包含API密钥的配置文件提交到Git仓库。应该使用.env文件加载环境变量并将.env添加到.gitignore中。在代码中通过os.getenv(MODEL_BASE_URL)来读取。很多开源项目都提供了.env.example文件作为模板。3.3 启动与运行模型服务启动顺序很重要。你必须先确保模型后端服务已经正常运行并监听在某个端口然后再启动localaipilot-api。以 Ollama 为例的启动流程启动Ollama模型服务你可以让Ollama在后台运行一个模型。Ollama本身也提供API默认端口11434但它的API可能不完全兼容OpenAI格式。# 方式一直接运行会占用一个终端 ollama run llama3:8b # 方式二作为后台服务Ollama默认启动后即可通过其API调用已拉取的模型 # 只需确保 ollama serve 在运行即可验证模型服务通过curl测试Ollama服务是否正常。curl http://localhost:11434/api/generate -d { model: llama3:8b, prompt: Hello, stream: false }如果收到一个JSON响应说明Ollama服务正常。启动 localaipilot-api# 假设在项目根目录且虚拟环境已激活 uvicorn main:app --host 0.0.0.0 --port 8000 --reload # 或者如果项目提供了启动脚本 python app.py验证API服务访问http://localhost:8000/docs你应该能看到自动生成的Swagger API文档。这是FastAPI带来的巨大便利你可以直接在这个页面上测试接口。常见问题1端口冲突如果端口8000或11434被占用服务会启动失败。你需要修改配置或停止占用端口的进程。Linux/Mac:lsof -i :8000查看占用进程。Windows:netstat -ano | findstr :8000。常见问题2模型加载失败如果localaipilot-api启动时报错连接不上后端模型服务请检查model.base_url配置是否正确。模型后端服务是否真的在运行用上面的curl命令测试。防火墙是否阻止了本地端口通信。4. 实操过程从零搭建到第一个API调用现在让我们模拟一个完整的实操过程假设我们手头有一台拥有RTX 4060显卡8GB显存的电脑目标是部署localaipilot-api并使用它完成一次对话。4.1 第一步部署模型后端Ollama我们选择Ollama作为后端因为它简单、流行且社区活跃。安装Ollama前往Ollama官网下载对应操作系统的安装包并安装。拉取一个合适的模型考虑到8GB显存我们可以选择量化版本的7B或8B模型。Llama 3 8B是一个很好的起点。ollama pull llama3:8b这个命令会从Ollama的模型库下载模型可能需要一段时间取决于你的网速。运行模型可选Ollama安装后默认以后台服务运行。你可以通过ollama list查看已下载的模型通过ollama run llama3:8b在命令行交互测试。对于API调用只要Ollama服务在运行即可。4.2 第二步部署 localaipilot-api获取代码git clone https://github.com/nagaraj-real/localaipilot-api.git cd localaipilot-api创建虚拟环境并激活python -m venv venv # Linux/Mac source venv/bin/activate # Windows venv\Scripts\activate安装依赖pip install -r requirements.txt如果项目没有提供requirements.txt你可能需要查看setup.py或pyproject.toml或者根据代码中的导入语句手动安装如fastapi,uvicorn,httpx,pydantic等。配置复制项目提供的配置文件模板如config.example.yaml到config.yaml并根据你的环境修改。关键是把model.base_url指向你的Ollama服务http://localhost:11434model.model_name设为llama3:8b。启动服务uvicorn app.main:app --host 0.0.0.0 --port 8000看到类似Uvicorn running on http://0.0.0.0:8000的输出说明服务启动成功。4.3 第三步发起第一个API调用现在你的本地OpenAI兼容API已经就绪。让我们用最经典的curl命令来测试。非流式调用curl http://localhost:8000/v1/chat/completions \ -H Content-Type: application/json \ -d { model: llama3:8b, messages: [ {role: system, content: 你是一个乐于助人的助手。}, {role: user, content: 用Python写一个快速排序函数并加上注释。} ], temperature: 0.7, max_tokens: 1000 }你应该会收到一个完整的JSON响应其中choices[0].message.content包含了模型生成的代码。流式调用实现打字机效果流式调用对于构建聊天应用至关重要。它通过Server-Sent EventsSSE逐步返回生成的文本。curl http://localhost:8000/v1/chat/completions \ -H Content-Type: application/json \ -d { model: llama3:8b, messages: [ {role: user, content: 给我讲一个关于太空探索的短故事。} ], stream: true }你会看到一系列以data:开头的行每一行都是一个JSON片段最后一行是data: [DONE]。前端应用可以解析这些片段并实时更新界面。4.4 第四步集成到现有应用这是最激动人心的部分。假设你有一个原本使用OpenAI API的Python应用。修改前使用OpenAI官方库from openai import OpenAI client OpenAI(api_keyyour-openai-key) response client.chat.completions.create( modelgpt-3.5-turbo, messages[{role: user, content: Hello}] ) print(response.choices[0].message.content)修改后切换到本地服务你只需要修改base_url和api_key如果启用了认证。代码逻辑完全不变from openai import OpenAI # 关键变化在这里将 base_url 指向你的本地服务 client OpenAI( base_urlhttp://localhost:8000/v1, # 注意这里通常要加上 /v1 api_keysk-xxx # 如果 localaipilot-api 启用了认证 ) response client.chat.completions.create( modelllama3:8b, # 指定你本地运行的模型名 messages[{role: user, content: Hello}] ) print(response.choices[0].message.content)这种无缝切换的能力正是localaipilot-api这类项目最大的魅力所在。5. 性能调优与高级配置当基本服务跑通后你会开始关注性能和稳定性。本地部署的AI服务资源有限调优至关重要。5.1 并发与资源限制本地GPU内存是瓶颈。如果同时处理多个长文本生成请求很容易导致显存溢出OOM服务崩溃。解决方案使用请求队列Queue和信号量Semaphore在localaipilot-api的服务端代码中应该实现一个全局的并发控制机制。例如使用asyncio.Semaphore来限制同时进行的模型推理任务数量。import asyncio # 在全局区域定义假设我们限制最多同时处理2个请求根据GPU能力调整 concurrency_limiter asyncio.Semaphore(2) async def generate_chat_completion(request_data): async with concurrency_limiter: # 只有拿到信号量才能进入 # 调用底层模型生成内容 response await call_model_backend(request_data) return response这样当第三个请求到来时它会等待直到前面某个请求完成并释放信号量。这虽然增加了等待时间但保证了服务的稳定性。实操心得这个并发数需要根据你的模型大小和GPU显存进行压测来确定。从一个保守的数字开始比如2然后逐渐增加同时使用nvidia-smi命令监控显存占用找到在OOM临界点之前的最大值。5.2 模型参数调优通过API传递的生成参数直接影响输出质量和速度。你需要理解它们temperature温度0-2控制随机性。越低如0.1输出越确定、保守越高如0.9输出越有创意、越可能“胡言乱语”。对于代码生成、事实问答建议较低0.1-0.3对于创意写作可以调高0.7-0.9。top_p核采样0-1与温度类似但用的是另一种采样策略。通常只使用温度或top_p其一不建议同时调整。max_tokens生成的最大token数。务必设置一个合理的上限防止模型“陷入循环”生成极长的无用文本耗尽资源。根据你的应用场景设定比如对话可以设512或1024。stop停止序列。当模型生成包含这些字符串时停止生成。例如在对话中设置[\n\nHuman:, “\n\nAI:”]来明确区分对话轮次。在localaipilot-api的配置中可以为特定模型设置默认参数model_presets: llama3:8b: default_temperature: 0.2 default_max_tokens: 1024 default_stop: [\n] qwen2.5:7b: default_temperature: 0.7 default_max_tokens: 2048这样即使用户请求中没有指定这些参数也会使用更合理的默认值。5.3 启用API密钥认证暴露在局域网甚至公网的服务必须启用认证。在配置中启用并设置密钥auth: enabled: true api_keys: - sk-this-is-a-secret-key-for-internal-team-a - sk-another-key-for-service-b在代码中实现认证中间件FastAPI可以使用依赖注入或中间件来实现。一个简单的依赖项如下from fastapi import Depends, HTTPException, status from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials security HTTPBearer() async def verify_api_key(credentials: HTTPAuthorizationCredentials Depends(security)): config_api_keys settings.auth.api_keys # 从配置读取 if credentials.scheme ! Bearer or credentials.credentials not in config_api_keys: raise HTTPException( status_codestatus.HTTP_401_UNAUTHORIZED, detailInvalid or missing API Key, ) return credentials.credentials # 在路由中使用 app.post(/v1/chat/completions, dependencies[Depends(verify_api_key)]) async def create_chat_completion(request: ChatRequest): # ... 处理逻辑客户端调用时携带密钥curl http://localhost:8000/v1/chat/completions \ -H Authorization: Bearer sk-this-is-a-secret-key-for-internal-team-a \ -H Content-Type: application/json \ -d {model: llama3:8b, messages: [...]}6. 常见问题与排查技巧实录在实际操作中你一定会遇到各种问题。下面是我踩过坑后总结的排查清单。6.1 连接与启动问题问题现象可能原因排查步骤启动localaipilot-api时报连接错误 (Connection refused/Timeout)1. 模型后端服务未启动。2. 配置中的base_url端口错误。3. 防火墙/安全组阻止。1. 运行curl base_url/api/tags(Ollama) 或类似健康检查端点确认后端服务可达。2. 检查后端服务日志看是否正常监听。3. 使用netstat -tulnp查看端口监听状态。访问localhost:8000/docs无响应1. API服务未成功启动。2. 绑定地址不是0.0.0.0无法从外部访问。1. 检查uvicorn启动日志是否有错误。2. 尝试用curl http://127.0.0.1:8000/health从本机测试。调用API返回404 Not FoundAPI路由路径错误。1. 确认FastAPI应用的路由定义是否正确。2. 确认请求的URL路径是否完整例如是否是/v1/chat/completions。6.2 模型推理与响应问题问题现象可能原因排查步骤响应速度极慢1. 使用CPU推理。2. 模型过大超出硬件能力。3. 并发请求被排队。1. 检查任务管理器或nvidia-smi确认是否使用了GPU。2. 尝试更小的量化模型如4bit量化。3. 检查服务端的并发控制设置。生成内容乱码或胡言乱语1.temperature参数过高。2. 模型本身能力问题或未对齐。3. 上下文窗口溢出。1. 将temperature调低至0.1-0.3再试。2. 尝试不同的提示词Prompt或系统指令。3. 减少max_tokens或输入消息的长度。流式响应不工作一次性返回1. 客户端未设置stream: true。2. 服务端流式响应实现有误。3. 某些代理或中间件缓冲了响应。1. 用curl直接测试流式接口观察输出是否为多行data:。2. 检查服务端代码是否使用了StreamingResponse并正确生成了SSE格式。3. 检查Nginx等反向代理配置是否关闭了缓冲 (proxy_buffering off;)。报错CUDA out of memoryGPU显存不足。1. 降低并发请求数。2. 使用max_tokens限制生成长度。3. 换用更小的模型或更低精度的量化版本。6.3 部署与运维问题问题现象可能原因排查步骤Docker容器启动后立即退出1. 容器内应用启动失败。2. 依赖缺失或配置错误。3. 启动命令错误。1. 使用docker logs container_id查看退出前的日志。2. 检查Dockerfile中是否安装了所有依赖。3. 尝试在Dockerfile最后使用CMD [sleep, infinity]保持容器运行然后进入容器内部手动调试。服务运行一段时间后崩溃1. 内存/显存泄漏。2. 请求积压导致资源耗尽。3. 模型后端服务不稳定。1. 监控服务的内存占用曲线。2. 检查服务日志看崩溃前是否有大量错误。3. 为服务添加进程守护如使用systemd或容器编排的健康检查与重启策略。如何查看服务的实时日志-1. 如果直接使用uvicorn日志会输出到终端。2. 在生产环境应将日志重定向到文件或日志系统。可以在启动命令中加--log-config log_config.ini进行配置。3. Docker部署使用docker logs -f container_name。独家避坑技巧使用--reload参数进行开发生产环境务必去掉uvicorn main:app --reload在开发时非常方便但生产环境使用会带来性能和安全风险。为Docker容器设置资源限制在docker run时使用--memory、--cpus参数或在docker-compose.yml中设置防止单个容器耗尽主机资源。services: localaipilot-api: image: my-localaipilot-api deploy: resources: limits: cpus: 2.0 memory: 4G准备一个“降级”模型在配置中设置一个非常小的备用模型如TinyLlama。当主要模型因OOM失败时API服务可以自动降级到备用模型返回一个“服务降级”的提示而不是直接报错提供更好的用户体验。7. 扩展应用场景与进阶玩法当你的本地AI API服务稳定运行后它的潜力才真正开始展现。以下是一些进阶的应用思路7.1 构建企业内部知识库问答系统这是最经典的应用之一。结合向量数据库如Chroma、Qdrant、Weaviate和嵌入模型Embedding Model你可以让本地大模型“阅读”公司内部文档、代码库、会议纪要并智能地回答相关问题。架构流程知识入库使用本地嵌入模型API/v1/embeddings将文档切片并转化为向量存入向量数据库。用户提问将用户问题也转化为向量。语义检索在向量数据库中搜索最相关的文档片段。智能回答将检索到的片段作为上下文连同用户问题一起发送给本地对话模型/v1/chat/completions生成最终答案。优势所有数据文档、问题、答案都在内网处理彻底杜绝敏感信息泄露风险。7.2 作为自动化工作流的核心大脑利用Zapier、n8n、或者简单的Python脚本将本地AI API接入到你的工作流中。自动处理邮件读取邮箱让AI总结邮件内容、判断紧急程度、甚至生成回复草稿。代码审查助手在CI/CD流程中将代码变更发送给AI让它生成审查意见。会议纪要生成连接录音转文字工具将文字稿发给AI进行要点总结、任务提取。社交媒体内容生成根据产品更新日志自动生成不同风格的宣传文案。7.3 多模型路由与负载均衡如果你的服务器资源足够可以运行多个不同专长的模型。路由策略在localaipilot-api之上再封装一层路由层。根据请求内容例如通过分析用户问题中的关键词决定将请求转发给哪个后端模型。例如编程问题路由给CodeLlama。创意写作路由给Llama 3。中文对话路由给Qwen或ChatGLM。负载均衡对于同一个模型可以启动多个实例在不同端口让路由层进行简单的轮询或基于负载的调度提高整体吞吐量。实现这个功能需要对localaipilot-api进行二次开发在它接收到请求后不直接调用固定的后端而是根据策略动态选择后端地址。这进一步提升了本地AI服务的灵活性和专业性。我个人在实际部署和使用的过程中最大的体会是本地AI API化的真正价值在于将“实验性玩具”变成了“生产级组件”。它让大模型能力能够像数据库、缓存服务一样被稳定、可靠、安全地集成到任何需要它的应用架构中。从最初的环境配置踩坑到后来的性能调优、高可用设计这个过程虽然充满挑战但当你看到自己的应用完全摆脱对第三方API的依赖在内部网络中飞速运转时那种成就感和掌控感是无与伦比的。最后一个小建议是做好日志记录和监控它是你在黑暗中排查问题的唯一灯塔。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2613811.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…