基于Gemini API的开源UI项目gemiui:从原理到部署的完整实践指南

news2026/5/3 1:16:32
1. 项目概述一个为Gemini API量身定制的UI界面如果你最近在折腾AI应用开发或者单纯想给自己搭建一个更顺手、更可控的AI对话前端那么你很可能已经听说过或者正在寻找一个合适的开源UI项目。今天要聊的MarkShawn2020/gemiui就是一个非常精准地切中了这个需求的开源工具。简单来说它是一个专门为Google的Gemini系列大语言模型API设计的用户界面。想象一下你拿到了Gemini API的密钥官方可能只提供了一个简单的Playground或者基础的curl示例。你想用它来写代码、分析文档、进行多轮对话但那个简陋的界面用起来总感觉差点意思。gemiui就是为了解决这个问题而生的。它提供了一个类似ChatGPT那样直观、友好的Web界面让你可以方便地调用Gemini Pro、Gemini Pro Vision等模型进行文本对话、上传图片进行分析、管理对话历史甚至进行一些基础的参数调优。它非常适合开发者、研究人员或者任何希望将Gemini模型能力以更美观、更易用的方式呈现出来的个人用户。这个项目的核心价值在于“专一”和“轻量”。它不试图做一个包罗万象的AI聚合平台而是聚焦于Gemini API这一件事把交互体验做到足够好。对于想要快速搭建一个私有化、可定制的Gemini聊天前端的开发者来说gemiui提供了一个几乎可以“开箱即用”的起点。2. 核心功能与设计思路拆解2.1 为什么需要一个专用的Gemini UI在深入代码之前我们先聊聊为什么会有gemiui这样的项目出现。Google的Gemini API功能强大支持多模态输入、长上下文、流式响应等先进特性。然而官方的使用方式主要是通过API调用这对于非开发者或者希望进行高频、复杂交互的用户来说门槛较高。首先交互效率问题。通过命令行curl或者写简单的脚本每次都要构造请求体处理JSON响应这对于调试和日常使用极其不便。一个良好的UI可以将模型选择、参数调整、对话历史、文件上传等操作可视化极大提升使用效率。其次功能场景化需求。单纯的API调用是原子化的。而实际使用中我们可能需要“会话”的概念需要保存历史以便追溯上下文需要将图片、PDF等文件直接拖拽上传进行分析。gemiui将这些与Gemini API相关的常见使用场景封装成了直观的UI组件。最后隐私与控制权。使用第三方集成的AI服务数据需要经过他人的服务器。而gemiui允许你自行部署API密钥保存在本地或你自己的服务器环境中所有对话数据仅在你和Google的API服务器之间传输满足了部分用户对数据隐私和掌控权的需求。gemiui的设计思路非常清晰以Web应用的形式提供一个最小可行产品MVP级别的Gemini客户端。它优先实现了最核心的聊天功能并围绕Gemini API的特色能力如图像理解进行了针对性设计避免了功能泛化带来的复杂度。2.2 技术栈选型现代前端框架的轻量化实践查看gemiui的源码我们可以清晰地看到其技术选型。项目前端大概率基于React或Vue这样的现代前端框架具体需看源码确认这里以常见模式分析结合诸如Tailwind CSS之类的工具库来快速构建UI。这种选型是经过深思熟虑的。选择React/Vue是因为它们组件化的开发模式非常适合构建此类交互复杂的单页面应用SPA。聊天消息列表、输入框、侧边栏历史记录、设置面板每一个都可以是独立的组件状态管理清晰开发和维护效率高。相较于直接使用原生JavaScript或jQuery现代框架能更好地处理动态数据流和UI更新。使用Tailwind CSS这类工具则体现了项目“轻量”和“快速迭代”的初衷。开发者无需为每个CSS类命名也无需维护庞大的独立CSS文件通过工具类即可快速实现响应式、美观的界面。这对于个人或小团队维护的开源项目来说能显著降低样式开发的负担。注意技术栈的具体构成需要查阅项目根目录的package.json文件来最终确认。但无论具体是React还是Vue其选型逻辑都是服务于“快速开发一个体验良好的现代Web应用”这一核心目标。后端部分为了简化部署和降低复杂度gemiui很可能采用了一种“无独立后端”或“极简后端”的架构。一种非常常见的模式是前端应用直接通过浏览器向Gemini API发起请求。但这会暴露API密钥极不安全。因此更合理的架构是前端将请求发送到自己部署的一个轻量级代理服务器由这个代理服务器携带API密钥去调用Gemini API再将结果返回前端。这个代理服务器可以用Node.js Express、Python Flask、Go等任何轻量级技术快速实现核心逻辑可能就是几十行代码专门用于转发请求和隐藏密钥。2.3 核心交互流程设计一个典型的gemiui使用流程从用户视角看是这样的配置入口用户首次打开应用进入设置页面填入从Google AI Studio获取的Gemini API密钥并选择默认模型如gemini-pro或gemini-pro-vision。会话管理用户可以创建新的对话或从侧边栏加载历史对话。每个对话都是一个独立的上下文会话。消息输入在主界面输入文本问题。如果需要图片分析则通过上传按钮或拖拽方式添加图片文件。请求构造与发送前端UI将用户输入文本和图片按照Gemini API要求的格式multipart/form-data 或 特定的JSON结构组装成请求体并附上用户配置的模型、温度Temperature、最大输出令牌数等参数。流式响应处理UI将请求发送到后端代理。代理调用Gemini API时可以启用流式响应streaming。后端将收到的数据流chunk实时转发给前端。前端则需要处理这种流式数据将其逐步拼接并显示在聊天界面上营造出“逐字打印”的效果这比等待完整响应再一次性显示体验好得多。历史持久化对话结束后前端可以选择将本次对话的标题通常由第一条用户消息自动生成、消息记录等保存到浏览器的LocalStorage中或者发送到后端服务器存入数据库以实现历史记录的持久化。这个流程设计的关键在于它完美复刻了用户习以为常的聊天软件体验同时在后端无缝对接了Gemini API的官方协议。开发者通过gemiui源码可以清晰地学习到如何将一个裸API包装成产品级交互的全过程。3. 关键模块深度解析与实现要点3.1 多模态输入处理让AI“看见”图片Gemini Pro Vision模型的核心能力之一是理解图像内容。gemiui要实现图片上传和分析功能就必须正确处理多模态输入。这不仅仅是加一个文件上传按钮那么简单。前端实现要点文件读取与预览用户选择图片文件后前端需要使用FileReaderAPI 或新的URL.createObjectURL()方法将文件转换为可以在页面上预览的数据URLbase64格式或Blob URL。同时应在消息输入区域附近显示图片缩略图让用户确认上传成功。格式转换与编码Gemini API接收的图片数据通常是base64编码的字符串。前端需要将图片文件转换为base64。需要注意的是如果图片很大直接转换并传输可能会影响性能。一种优化策略是前端先进行压缩和尺寸调整再将压缩后的图片转换为base64。请求体构造Gemini API对于包含图片的消息有特定的请求格式。例如一个消息可能包含多个部分parts其中一个部分是文本{“text”: “描述这张图片”}另一个部分是图片数据{“inline_data”: {“mime_type”: “image/jpeg”, “data”: “base64StringHere”}}。前端需要动态构造这个复杂的嵌套对象。// 这是一个简化的示例展示如何构造一个包含文本和图片的请求内容 const userMessageContent { parts: [ { text: 请分析这张图片中的内容。 }, { inline_data: { mime_type: uploadedFile.type, // 例如 image/jpeg data: await fileToBase64(uploadedFile), // 自定义函数将文件转base64 }, }, ], };实操心得在处理图片上传时一定要在前端做好文件类型MIME Type和大小校验。只允许上传API支持的格式如image/jpeg, image/png, image/webp并限制单文件大小例如5MB避免无效请求和服务器压力。同时提供清晰的错误提示如“不支持该文件格式”或“图片大小超过限制”。3.2 流式响应Streaming的实现流式响应是现代LLM应用提升用户体验的关键。gemiui要实现类似ChatGPT的逐字输出效果必须处理流式数据。技术实现解析后端代理的流式转发后端服务在调用Gemini API时需要设置stream: true参数。收到API返回的流之后不能等待流结束再一次性返回给前端而应该建立管道式的转发。在后端如Node.js这通常意味着监听API响应流的data事件并将收到的每一个数据块chunk立即通过Server-Sent Events (SSE) 或 WebSocket 发送给前端。前端的流式接收与渲染前端需要建立一个到后端流式端口的持久连接使用EventSource API处理SSE或使用WebSocket。每当收到一个数据块就解析其中的内容通常是JSON格式包含文本片段并将其追加到当前正在回复的消息DOM元素中。文本拼接与性能随着对话变长直接操作DOM频繁追加文本可能引发性能问题。一个常见的优化是使用“防抖”debounce或“节流”throttle技术或者将收到的文本片段先暂存在一个变量中每收到若干片段或每隔一定时间如100毫秒再统一更新一次DOM以减少浏览器重绘的次数。// 前端使用EventSource接收流式响应的简化示例 const eventSource new EventSource(‘/api/chat-stream’); eventSource.onmessage (event) { const data JSON.parse(event.data); if (data.type ‘content’ data.text) { // 将data.text追加到聊天窗口的当前回答中 appendToAnswerElement(data.text); } else if (data.type ‘done’) { // 流式响应结束 eventSource.close(); } };注意事项流式传输需要妥善处理连接异常。网络中断、服务器错误都可能导致流意外关闭。前端必须监听error事件并给用户友好的提示如“连接断开正在重试…”并提供手动重新生成回答的按钮。同时在开始新的请求前务必关闭之前的连接防止内存泄漏和请求混乱。3.3 对话历史管理与持久化没有历史记录的聊天工具是不完整的。gemiui的对话历史管理模块虽然看起来是边角功能却极大地影响了产品的可用性。实现方案对比纯前端存储LocalStorage/IndexedDB优点实现简单无需后端支持数据完全保存在用户本地浏览器隐私性极好。缺点数据无法跨设备同步浏览器清理缓存可能导致数据丢失存储空间有限LocalStorage通常约5MB。适用场景对数据同步无要求、侧重隐私、快速原型验证的阶段。后端数据库存储优点数据可跨设备同步存储空间大可做更复杂的管理如搜索、标签分类。缺点需要设计和维护后端API及数据库增加了部署复杂度需要考虑用户认证和数据的隔离。适用场景希望提供多端同步服务的正式产品。对于gemiui这类个人向工具初期采用LocalStorage是更合理的选择。它的实现非常直观数据结构在内存中维护一个对话列表conversations: Array每个对话对象包含id,title,messages,createdAt,model等字段。保存时机当用户创建新对话、发送/接收消息、修改对话标题后将整个conversations数组序列化为JSON字符串存入localStorage.setItem(‘gemiui_conversations’, jsonString)。加载时机应用初始化时从localStorage.getItem(‘gemiui_conversations’)读取并解析还原到内存状态中。踩坑记录直接存储完整的消息历史如果对话很长包含大量文本或base64图片很容易超出LocalStorage的大小限制。一个优化策略是只保存最近N条对话或者对特别长的对话进行压缩。更高级的方案是使用IndexedDB它存储空间更大且支持异步操作但API相对复杂。4. 从零开始部署与深度配置指南4.1 环境准备与依赖安装假设我们选择的是最常见的Node.js React技术栈。部署gemiui的第一步是搭建开发/生产环境。获取源代码git clone https://github.com/MarkShawn2020/gemiui.git cd gemiui这是最基本的步骤确保你能访问到项目的最新代码。检查与安装Node.js 项目通常会在package.json中指定所需的Node.js版本范围如“engines”: {“node”: “18”}。请确保你的系统安装了符合要求的Node.js版本建议使用LTS版本如18.x或20.x。可以使用node -v命令检查。安装项目依赖npm install # 或使用 yarn yarn install这个过程会读取package.json中的dependencies和devDependencies下载所有必需的库如React框架、UI组件库、HTTP客户端、构建工具等到本地的node_modules文件夹。网络环境不佳时此步骤可能耗时较长可以考虑配置国内镜像源。环境变量配置 项目根目录下通常会有.env.example或.env.local.example文件里面列出了所有需要配置的环境变量。复制一份并重命名为.env.local对于前端项目或.env对于后端项目。# 示例 .env.local 文件内容 REACT_APP_GEMINI_API_KEYyour_actual_gemini_api_key_here REACT_APP_API_BASE_URLhttp://localhost:3001/apiREACT_APP_GEMINI_API_KEY你的Gemini API密钥。这是最关键也是最敏感的信息绝对不要提交到代码仓库。REACT_APP_API_BASE_URL指向你后端代理服务的地址。在开发阶段前端通常跑在3000端口和后端代理跑在3001端口是分开的所以需要配置这个地址来实现跨域请求。4.2 开发环境运行与调试环境准备好后就可以在本地运行项目了。启动前端开发服务器npm start # 或 yarn start这个命令会启动一个本地开发服务器通常是Webpack Dev Server默认在http://localhost:3000。它会自动监听文件变化并热重载Hot Module Replacement让你修改代码后能立刻在浏览器看到效果无需手动刷新。启动后端代理服务如果项目结构包含 如果项目采用了前后端分离并且后端代理代码也在同一仓库中例如一个server/目录你需要另外打开一个终端窗口进入后端目录并启动它。cd server npm run dev后端服务可能会在http://localhost:3001启动。它的作用是接收前端发来的聊天请求然后加上你的API密钥去调用真正的Gemini API并将结果返回给前端。浏览器访问与测试 打开浏览器访问http://localhost:3000。你应该能看到gemiui的界面。首次使用需要进入设置页面配置API密钥如果前端直接读取了环境变量则可能已自动填充。配置完成后就可以开始进行对话测试了。关键排查点如果打开页面空白或报错首先检查浏览器开发者工具F12的Console控制台和Network网络标签页。Console会显示JavaScript错误信息Network可以查看前端请求是否成功发送到了后端代理以及代理返回了什么响应。最常见的初期问题是CORS跨域资源共享错误表现为Network中前端对后端代理的请求失败并报CORS相关错误。这需要在后端代理服务器中正确配置CORS头允许来自前端域名http://localhost:3000的请求。4.3 构建与生产环境部署当开发和测试完成后你需要将项目构建成静态文件并部署到生产服务器如Nginx、Apache、Vercel、Netlify等。构建静态文件 在项目根目录运行构建命令。npm run build # 或 yarn build这个命令会启动构建流程将React代码、样式、图片等资源进行压缩、打包、优化并输出到一个通常是build或dist的文件夹中。这个文件夹里的内容就是可以部署到任何静态文件托管服务的最终产品。部署静态文件传统Web服务器将build文件夹内的全部文件上传到你的Nginx或Apache服务器的网站根目录如/var/www/html/gemiui。然后配置服务器将所有非静态文件的请求重定向到index.html这是单页面应用路由的常见要求。Nginx配置示例server { listen 80; server_name your-domain.com; # 你的域名 root /var/www/html/gemiui; index index.html; location / { try_files $uri $uri/ /index.html; } # 可选配置后端代理转发 location /api/ { proxy_pass http://localhost:3001/; # 指向你的后端代理服务 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }云平台托管如果你使用Vercel、Netlify等平台通常只需将项目仓库与之关联它们会自动检测项目类型如Create React App并执行build命令和部署流程。你只需要在平台的控制面板中配置环境变量如REACT_APP_GEMINI_API_KEY即可。部署后端代理 生产环境下后端代理服务也需要部署。你可以使用PM2、Docker等方式将其部署在与前端同一台服务器或另一台服务器上。确保其持续运行并监听指定的端口如3001。同时在生产环境的后端配置中务必通过环境变量或安全的配置管理工具来设置API密钥绝不要硬编码在源码中。5. 高级功能扩展与定制化开发基础功能跑通后你可以基于gemiui进行二次开发添加更多实用或个性化的功能。5.1 模型参数精细化调节Gemini API提供了多个参数来控制生成效果gemiui的基础界面可能只暴露了温度Temperature和最大输出令牌数Max Output Tokens。你可以扩展设置面板加入更多参数Top-P (Nucleus Sampling)与温度采样并列的另一种采样策略。值越小输出越集中、确定性越高值越大输出越多样。Top-K采样时只考虑概率最高的前K个令牌。可以限制模型从荒谬的低概率选项中进行选择。停止序列Stop Sequences设置一个字符串列表当模型生成其中任何一个字符串时即停止生成。这对于控制输出格式非常有用。安全设置Safety Settings调整模型在有害、危险、色情、骚扰等不同维度上的过滤严格程度。这对于构建面向特定人群的应用很重要。在UI上可以为这些参数添加滑块Slider、输入框或下拉菜单。在后端需要将这些参数整合到发送给Gemini API的请求体中。5.2 实现上下文长度管理与“系统指令”Gemini模型有上下文窗口限制例如Gemini 1.5 Pro的上下文窗口极大但普通版本仍有限制。长时间对话后token数可能超限。上下文管理策略滑动窗口只保留最近N轮对话或最近N个token的历史作为上下文发送给API。这是最简单有效的方法。智能摘要当对话历史过长时调用模型自身对之前的对话历史进行总结然后将摘要作为新的“系统指令”或上下文开头再附上最近的几轮对话。这需要额外的API调用和逻辑但能保留更多长期记忆。系统指令System Instruction这是一个强大的功能允许你为模型设定一个持久的角色或行为准则。例如“你是一个专业的代码助手回答应简洁且只包含代码。” 你可以在gemiui的对话设置中增加一个“系统指令”文本框用户填写的内容会在每次请求时作为独立的“system”角色部分具体字段名需参考Gemini API文档发送给模型从而全局影响本次对话中模型的行为。5.3 插件化或工具调用集成虽然Gemini本身支持函数调用Function Calling但gemiui作为UI可以设计一个插件机制来扩展其能力。例如网络搜索插件用户勾选“启用联网搜索”后当模型认为需要实时信息时UI可以拦截请求先调用一个搜索API如Serper、Google Search API将搜索结果作为上下文提供给模型再让模型生成最终回答。代码执行插件对于代码解释类问题可以集成一个安全的代码沙箱如在后端运行一个Docker容器将模型生成的代码片段在其中执行并将结果返回并显示在聊天界面。文档处理插件支持上传PDF、Word、Excel文件后端先使用OCR或文本提取库如PyPDF2, mammoth.js提取文字内容再发送给Gemini进行分析。实现插件化需要设计一个良好的前端扩展点和后端处理管道。例如前端在发送消息时附带一个plugins: [‘web_search’]的标识后端根据标识在调用Gemini前后插入相应的插件处理逻辑。6. 常见问题排查与性能优化实战在实际部署和使用gemiui的过程中你肯定会遇到各种各样的问题。这里汇总了一些典型问题及其解决思路。6.1 网络与API相关问题问题现象可能原因排查步骤与解决方案页面打开空白控制台报错1. 依赖安装不完整或失败。2. 环境变量未正确配置。3. 构建产物损坏。1. 删除node_modules和package-lock.json重新运行npm install。2. 检查.env.local文件是否存在且格式正确无空格无引号。3. 运行npm run build查看是否有构建错误。发送消息后长时间无响应1. API密钥无效或过期。2. 网络问题导致请求超时。3. 后端代理服务未运行或崩溃。4. Gemini API服务暂时不可用。1. 前往Google AI Studio检查API密钥状态和配额。2. 打开浏览器开发者工具的Network面板查看请求状态。如果是502/504错误可能是代理或网络问题。3. 检查后端代理服务的日志。4. 查看Google Cloud Status Dashboard。错误提示“API key not valid...”API密钥错误。1. 确认在设置中输入的密钥无误注意前后有无空格。2. 确认该密钥在Google AI Studio中已启用且对应的项目已正确关联结算账户。上传图片后分析失败1. 图片格式或大小不支持。2. 图片base64编码错误。3. 请求体构造格式不符合API要求。1. 前端增加文件格式和大小校验。2. 在后端代理日志中打印出即将发送给Gemini API的请求体检查其结构是否正确特别是图片数据的MIME类型和编码。3. 参考Google官方API文档核对多模态请求的格式。流式响应中断回答不完整1. 网络连接不稳定。2. 前端EventSource或WebSocket连接处理不当。3. 后端代理转发流时出错。1. 在前端增加连接重试逻辑和错误提示。2. 检查后端代码确保在流式传输过程中没有未捕获的异常导致进程退出。3. 在后端增加心跳机制保持连接活跃。6.2 性能与体验优化前端加载速度优化代码分割利用React.lazy和Suspense进行路由级或组件级的代码分割让用户首次加载时只下载必要的代码。图片等资源优化对项目中使用的图标、Logo进行压缩并使用现代格式如WebP。依赖分析使用webpack-bundle-analyzer分析构建产物移除未使用或过大的库。对话历史性能优化虚拟列表当单次对话消息数量非常多时比如超过100条渲染所有消息DOM节点会严重拖慢页面滚动和响应速度。实现一个虚拟列表只渲染可视区域及附近的消息可以极大提升性能。历史数据分页加载不要一次性加载所有历史对话的所有消息。首次只加载对话的元数据标题、时间等当用户点击某个历史对话时再异步加载该对话的详细消息记录。API调用成本与速率限制请求去重与缓存对于完全相同的用户输入可以考虑在前端或后端做短期缓存在一定时间内直接返回缓存结果避免重复调用API产生费用。实现请求队列与限流如果有多人同时使用你部署的gemiui突然的并发请求可能触发Gemini API的速率限制。可以在后端代理实现一个简单的请求队列或者使用令牌桶等算法进行限流平滑请求发送。响应压缩Gemini API返回的文本可能很长启用后端如Nginx的gzip或Brotli压缩可以减少网络传输数据量加快前端接收速度。6.3 安全加固建议API密钥保护这是重中之重。永远不要将API密钥硬编码在前端代码中或提交到公开仓库。必须通过后端代理来中转请求在后端的环境变量中管理密钥。对于开源项目务必在.gitignore中忽略.env、.env.local等配置文件。输入验证与清理后端代理在转发请求前应对前端发送过来的数据进行基本的验证和清理防止注入攻击。虽然Gemini API本身可能有一定防护但良好的习惯是必要的。部署HTTPS在生产环境务必为你的域名配置SSL证书启用HTTPS。这可以防止中间人攻击保护用户与你的gemiui实例之间传输的对话内容虽然内容本身会发给Google但中间路径也应保护。访问控制如果你的gemiui部署在内网或希望限制访问可以通过Nginx配置HTTP Basic认证、IP白名单或者集成简单的密码认证功能。经过以上六个部分的拆解我们从项目定位、设计思路、核心模块实现到部署配置、扩展开发最后到问题排查和优化完整地走了一遍gemiui这类项目的生命周期。它不仅仅是一个工具更是一个学习如何将强大AI API产品化的优秀范例。你可以直接使用它也可以将其作为脚手架注入自己的想法打造出更符合自己需求的专属AI助手界面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2576710.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;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…