开源AI原生代码编辑器Void:构建可定制、隐私优先的编程助手

news2026/5/3 18:21:59
1. 项目概述一个开源的AI原生代码编辑器最近在开发者圈子里一个名为Void的项目引起了我的注意。简单来说Void是一个开源的、对标Cursor的代码编辑器。如果你对Cursor有所了解就会知道它是一款深度集成了AI能力的现代化IDE而Void的目标就是提供一个开源、可自由定制且同样强大的替代品。它的核心卖点在于允许你在自己的代码库上运行AI智能体可视化地检查和管理代码变更并且最关键的是你可以自由选择任何AI模型甚至将其部署在本地环境中。这意味着你的代码和与AI的交互数据可以完全掌握在自己手中因为它直接将消息发送给AI服务提供商自身不保留任何用户数据。这个项目对于像我这样既希望享受AI编程助手的便利又对数据隐私和模型选择有较高要求的开发者来说非常有吸引力。无论是前端、后端还是全栈开发者如果你厌倦了闭源工具的束缚或者希望有一个能深度融入自己工作流的、可编程的AI伙伴Void都值得你花时间了解一下。它基于我们熟悉的Visual Studio Code代码库进行深度定制和开发这意味着它继承了VSCode强大的扩展生态和用户体验基础同时又在其之上构建了全新的AI原生工作流。2. 核心特性与设计思路拆解2.1 为何选择“开源Cursor”这个定位Cursor的成功已经证明了市场对“AI-First”代码编辑器的强烈需求。它模糊了传统IDE与AI助手的边界让代码补全、解释、重构甚至新功能开发都变得像对话一样自然。然而作为闭源商业产品Cursor在数据隐私、模型选择通常绑定特定供应商和深度定制化方面存在天然限制。Void选择从这个痛点切入其设计思路非常清晰在成熟、强大的VSCode地基上构建一个开源、透明、可插拔的AI协作层。这样做有几个显著优势降低使用门槛与风险开发者无需担心“vendor lock-in”供应商锁定。你的所有代码、对话历史、项目上下文都完全由你控制。你可以选择将数据发送给OpenAI的ChatGPT、Anthropic的Claude或者任何你信任的、甚至自己微调的开源模型如Llama、CodeLlama等。极致的可定制性因为是开源项目你可以审查每一行代码修改任何你觉得不合适的功能或者集成自己公司内部的AI服务。这对于有严格合规要求的企业或对工具有特殊偏好的极客开发者来说是无可替代的价值。社区驱动的创新开源生态能够汇聚全球开发者的智慧快速迭代出各种意想不到的插件、智能体和工作流其创新速度可能远超单个公司的闭源开发。2.2 核心功能模块解析从项目描述和其愿景来看Void的核心功能模块主要围绕以下几个层面构建AI智能体集成与调度这是Void的心脏。它需要一套健壮的架构来连接不同的AI服务提供商Provider。这不仅仅是一个简单的API调用封装而是包括对话上下文管理、提示词工程、流式响应处理、错误重试和费用监控等一整套系统。Void需要提供一个统一的接口让开发者能以一致的方式调用ChatGPT、Claude、Copilot或本地模型。代码变更的可视化与检查点这是提升开发体验的关键。传统IDE的“撤销/重做”是线性的而Void引入的“检查点”概念更像是为代码状态拍快照。你可以随时创建一个检查点然后让AI进行大刀阔斧的重构或尝试新的实现方案。如果结果不满意可以一键回滚到某个清晰的检查点而不是在一堆混乱的撤销历史中挣扎。可视化工具则能帮你直观地对比AI修改了哪些文件、哪些行具体改动了什么这大大提升了代码审查和理解的效率。本地化与隐私优先架构Void强调“发送消息而不保留数据”。这意味着其架构设计上编辑器本体可能只是一个“客户端”负责组织请求和渲染界面而将包含代码和问题的消息直接发送给用户配置的AI终端。服务器端如果有的话不存储对话日志或代码片段。对于支持本地部署的模型如通过Ollama、LM Studio运行的模型整个交互过程可以完全在离线环境下完成实现了真正的数据零泄露。基于VSCode的扩展与兼容作为VSCode的一个分支forkVoid天然兼容VSCode庞大的扩展市场。这意味着开发者无需放弃已有的工具链如GitLens、ESLint、Prettier等可以平滑过渡。同时Void团队可以在VSCode的Monaco编辑器、语言服务器协议等成熟组件之上专注于构建其独特的AI功能避免了重复造轮子。3. 从源码构建与深度定制指南虽然项目目前处于“探索性暂停”状态但其代码库完全开放对于想要尝鲜或基于此进行二次开发的开发者来说这正是一个深入理解其架构的好时机。以下是我根据官方文档和代码库结构梳理的构建与定制路径。3.1 环境准备与依赖安装构建Void与构建VSCode类似对开发环境有一定要求。首先你需要确保你的系统满足以下条件Node.js建议使用最新的LTS版本如18.x或20.x。VSCode及其衍生品的构建工具链对Node版本有一定要求使用过旧或过新的版本可能导致未知错误。Git用于克隆代码库和后续的版本管理。Python某些构建步骤或原生模块编译可能需要Python。建议安装Python 3.x版本。C构建工具在Windows上你可能需要安装Visual Studio Build Tools或Windows SDK在macOS上需要Xcode Command Line Tools在Linux上需要gcc、g、make等基础编译工具。YarnVSCode生态使用Yarn 1.x作为包管理器而不是npm。你需要全局安装Yarn (npm install -g yarn)。准备好环境后克隆仓库并安装依赖git clone https://github.com/voideditor/void.git cd void yarn这个yarn命令会读取package.json安装所有必要的Node模块依赖。由于依赖数量庞大首次安装可能需要较长时间10-30分钟取决于网络速度。注意构建过程可能会消耗大量内存建议至少8GB可用内存和磁盘空间。如果遇到内存不足的错误可以尝试设置Node.js的堆内存限制export NODE_OPTIONS--max-old-space-size8192在Linux/macOS终端中或设置对应的环境变量。3.2 理解代码库结构与核心模块Void的代码库结构基本继承了VSCode但核心的AI功能会集中在特定的目录中。对于想要定制AI行为的开发者需要重点关注以下几个部分src/vs/workbench/contrib/chat/或类似目录这里很可能存放着与AI对话界面、交互逻辑相关的核心代码。包括聊天面板的UI组件、消息渲染、输入框处理等。src/vs/workbench/services/chat/或src/vs/platform/ai/这里可能定义了AI服务的抽象层、提供商接口、请求/响应模型、上下文管理等后端服务。这是连接不同AI模型的关键。src/vs/base/common/与src/vs/platform/这些是VSCode的基础设施库包含事件、命令、配置、存储等通用模块。Void的AI功能很可能通过扩展这些基础能力来实现。build/目录包含项目构建和打包的脚本。如果你想修改最终产物的名称、图标或打包方式需要从这里入手。产品化配置文件如product.json、package.json中的特定字段。这些文件定义了编辑器的名称Void、版本号、应用ID、默认配置等产品信息。官方推荐的入门指南是阅读VOID_CODEBASE_GUIDE.md文件它会提供更详细的代码地图。理解这些结构是你进行任何功能修改或调试的第一步。3.3 编译、运行与调试安装完依赖并了解了代码结构后就可以开始编译和运行了。开发模式运行yarn watch执行yarn watch会启动一个监视进程它会编译TypeScript/JavaScript源代码并将结果输出到out/目录。这个过程是增量编译的即你修改源代码后它会自动重新编译相关的模块非常适合开发阶段。在另一个终端标签页中运行yarn electron这个命令会使用Electron启动编译好的Void编辑器。你现在运行的就是你自己编译的开发版本。你可以在此版本中测试功能、修改代码并实时看到变化得益于yarn watch。打包生成可分发版本 如果你想生成一个可以安装的独立应用如.dmg, .exe, .deb文件需要使用专门的打包脚本。Void可能提供了类似VSCode的yarn run package命令或者参考其独立的构建器仓库void-builder。# 可能的方式之一具体请参考项目根目录的package.json中的scripts字段 yarn run build:production # 然后进行打包 yarn run package打包过程会生成针对当前操作系统的安装包。这个过程更耗时并且需要确保所有依赖和原生模块都已正确编译。调试技巧主进程调试Void作为Electron应用分为主进程和渲染进程。你可以通过在VSCode或其它编辑器中配置调试启动任务来附加调试器。渲染进程调试在开发版Void中你可以直接使用Chrome开发者工具CtrlShiftI或CmdOptI来调试界面和渲染进程的脚本这和调试网页应用一样。日志输出关注终端中运行yarn watch和yarn electron的窗口输出任何编译错误或运行时异常都会在这里打印。4. 集成自定义AI模型与智能体实战Void最大的魅力在于其开放性允许你接入任何AI模型。下面我将以一个假设的场景详细说明如何将一个本地运行的开源代码模型例如通过Ollama运行的CodeLlama集成到Void中。4.1 理解AI提供商接口首先我们需要找到Void中定义AI服务提供商的地方。通常会有一个抽象类或接口比如叫做IAIProvider或ChatProvider。这个接口会定义几个核心方法sendMessage(request: ChatRequest): PromiseChatResponse发送消息并获取流式或非流式响应。getModels(): PromiseModel[]获取该提供商支持的模型列表。validateConfig(config: ProviderConfig): boolean验证用户提供的配置如API密钥、端点地址是否有效。你的任务就是创建一个新的类例如OllamaProvider来实现这个接口。你需要查阅Ollama的本地API文档通常是一个REST API运行在http://localhost:11434了解其对话接口的请求格式和响应格式。4.2 实现本地模型提供商假设我们在src/vs/workbench/services/chat/contrib/目录下创建一个新文件ollamaProvider.ts。// 示例代码结构仅供参考 import { IAIProvider, ChatRequest, ChatResponse, StreamHandler } from ../common; export class OllamaProvider implements IAIProvider { id ollama; name Ollama (Local); private baseUrl: string; constructor(private config: { endpoint: string }) { this.baseUrl config.endpoint || http://localhost:11434; } async getModels(): PromiseModel[] { try { const response await fetch(${this.baseUrl}/api/tags); const data await response.json(); // 将Ollama返回的模型列表转换为Void内部定义的Model格式 return data.models.map((m: any) ({ id: m.name, name: m.name, provider: this.id, })); } catch (error) { console.error(Failed to fetch models from Ollama:, error); return []; } } async sendMessage(request: ChatRequest, streamHandler?: StreamHandler): PromiseChatResponse { const { messages, modelId, options } request; // 将Void的对话历史格式转换为Ollama API所需的格式 const ollamaMessages messages.map(msg ({ role: msg.role, // 可能需要映射如 user, assistant, system content: msg.content, })); const body { model: modelId, messages: ollamaMessages, stream: !!streamHandler, // 是否启用流式响应 options: { temperature: options?.temperature || 0.7, // ... 其他参数 }, }; const response await fetch(${this.baseUrl}/api/chat, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify(body), }); if (!streamHandler) { // 非流式响应 const data await response.json(); return { content: data.message.content, model: data.model, }; } else { // 流式响应处理 const reader response.body?.getReader(); if (!reader) throw new Error(No response body); // 这里需要处理流式数据分块解码并调用streamHandler // ... 流式处理逻辑 return { content: }; // 流式处理中最终内容由handler收集 } } validateConfig(config: any): boolean { return typeof config.endpoint string config.endpoint.length 0; } }4.3 注册提供商并配置界面实现类之后需要在Void的扩展激活点或服务注册中心将其注册。这通常在一个入口文件如src/vs/workbench/services/chat/contrib/contributions.ts中完成。import { Registry } from vs/platform/registry/common/platform; import { IAIProviderRegistry, Extensions } from ../common; import { OllamaProvider } from ./ollamaProvider; // 在扩展激活时注册 Registry.asIAIProviderRegistry(Extensions.AIProviderRegistry).registerProvider( new OllamaProvider() );接下来你还需要在Void的设置UI中添加配置项让用户能够输入Ollama服务的地址。这涉及到修改设置架构定义和UI组件。用户最终在设置里看到的效果可能是AI Providers: [x] OpenAI (ChatGPT) [x] Anthropic (Claude) [ ] Ollama (Local) Endpoint: http://localhost:114344.4 测试与验证完成代码修改后重启开发版的Void。在AI聊天界面你应该能在模型选择下拉列表中看到你从本地Ollama拉取到的模型如codellama:7b,deepseek-coder等。选择一个模型进行对话如果一切配置正确Void就会将你的代码和问题发送到本地的Ollama服务并将回复展示出来。实操心得在集成本地模型时最大的挑战往往是网络请求的稳定性和错误处理。本地服务可能未启动、端口被占用或模型未加载。你的Provider实现必须包含健壮的错误处理给用户清晰的反馈例如“无法连接到Ollama服务请检查是否已启动”而不是一个晦涩的网络错误。此外流式响应的处理比一次性响应更复杂你需要正确处理文本的分块chunk接收、解码和实时渲染这涉及到前端的事件处理和状态更新。5. 构建自己的“检查点”与可视化diff系统Void宣传的另一个亮点是“检查点和可视化变更”。这个功能本质上是一个增强版的、与AI操作深度集成的版本控制系统快照。5.1 检查点的工作原理在传统开发中我们使用Git来管理代码状态。Void的检查点可以理解为在本地、针对单个工作区或文件创建了一个轻量级的、语义化的Git Commit。其技术实现可能包括状态捕获当用户触发“创建检查点”命令时Void会遍历当前工作区中所有已打开或受监控的文件获取它们当前的内容。差异计算与存储它可能不会完整存储每个文件的全部内容那样太占空间而是计算相对于上一个检查点或初始状态的差异diff。这些差异数据会被结构化地存储在本地的某个数据库如SQLite或文件系统中。元数据关联每个检查点会保存丰富的元数据例如创建时间、关联的AI对话ID或提示词、用户添加的标签或描述。这使得你可以通过“为尝试重构函数A创建检查点”这样的语义来查找历史而不是枯燥的时间戳。快速回滚回滚到某个检查点时系统会应用从当前状态到目标状态的反向差异快速将文件内容还原。这个过程应该在内存中完成并给予用户预览确认的机会避免误操作。5.2 实现一个简单的检查点系统思路如果你想在Void的基础上扩展或理解其实现可以思考以下简化版的代码逻辑// 伪代码展示核心概念 class CheckpointManager { private storage: CheckpointStorage; // 负责差异的存储和读取 async createCheckpoint(workspaceRoot: string, label: string, context?: AIContext): PromiseCheckpointId { const currentFileSnapshots await this.captureFileStates(workspaceRoot); const previousCheckpoint await this.getLatestCheckpoint(); // 计算差异 const diffs this.computeDiffs(previousCheckpoint?.fileSnapshots, currentFileSnapshots); // 创建检查点对象 const checkpoint: Checkpoint { id: generateId(), timestamp: Date.now(), label, diffs, aiContext: context, // 关联的AI会话信息 }; // 存储 await this.storage.save(checkpoint); return checkpoint.id; } async restoreCheckpoint(checkpointId: CheckpointId): Promisevoid { const targetCheckpoint await this.storage.load(checkpointId); const currentState await this.captureFileStates(); // 计算从当前状态回退到目标状态所需的“反向补丁” const reverseDiffs this.computeReverseDiffs(currentState, targetCheckpoint.diffs); // 在UI中预览变更 const userConfirmed await this.previewChanges(reverseDiffs); if (userConfirmed) { // 应用反向差异还原文件 await this.applyDiffsToFiles(reverseDiffs); } } private computeDiffs(before: FileState[], after: FileState[]): FileDiff[] { // 使用类似diff-match-patch的算法计算文本差异 // 对于每个文件生成一个差异描述对象 } }5.3 可视化差异界面可视化是检查点功能体验的核心。Void需要提供一个比传统Git diff更友好、更聚焦于AI协作的界面。树形文件列表左侧以树状结构展示在两次检查点之间发生变更的文件。文件图标旁可以用颜色高亮绿色代表新增行红色代表删除蓝色代表修改。并排对比视图点击一个文件主区域展示并排Side-by-Side或内联Inline的差异对比。关键是要高亮显示AI生成或修改的代码块可能通过特殊的背景色或边框来区分于人工修改。变更摘要与导航对于大型变更提供一个摘要面板列出所有被AI影响的函数、类或方法。用户可以点击摘要项快速跳转到对应的代码位置。操作集成在差异视图的每一处修改旁提供便捷的操作按钮如“接受此块变更”、“拒绝此块变更”、“就此变更继续与AI对话”。这实现了从代码审查到迭代优化的闭环。注意事项实现一个健壮的差异计算和可视化系统非常复杂尤其是要处理好代码的移动move、重命名rename等复杂变更。直接使用现成的文本diff库如diff-match-patch可能对代码的结构化感知不够。更高级的实现可以考虑集成语言服务器协议获取语法树级别的差异这样能更准确地识别出“一个函数被重构了”而不是“一堆行被删除和添加了”。6. 项目现状、挑战与未来展望根据项目README中的“Note”部分Void IDE的开发目前处于暂停状态。团队将精力转向了探索“一些新颖的编码想法”追求创新而非与现有产品的功能对齐。这是一个非常现实且常见于开源项目尤其是雄心勃勃的初创项目的状态。6.1 当前状态解读与使用建议状态代码仓库可用可以编译、运行和探索。但核心功能可能不完整某些高级AI特性或UI交互可能存在Bug。官方不会主动修复问题或合并新功能请求PR但会通过邮件回复关于构建和维护自身版本的问题。给开发者的建议用于学习和研究这是当前使用Void最主要的价值。你可以通过阅读其源码深入理解一个现代化的、AI原生的IDE是如何架构的特别是如何将AI能力无缝嵌入到编辑、浏览、调试等核心工作流中。作为二次开发的起点如果你所在团队或社区需要一个高度定制化的内部AI编程工具Void的代码库是一个绝佳的起点。你可以在其基础上集成自己训练的领域特定模型或者开发符合内部规范的特殊智能体。谨慎用于生产由于维护暂停随着底层依赖如Electron、Node.js、VSCode上游的更新Void可能会逐渐出现兼容性问题某些功能也可能失效。不建议将其作为团队主力开发工具除非你有能力持续维护自己的分支。6.2 开发中可能遇到的典型问题与排查即使只是构建和运行你也可能会遇到一些挑战。以下是一些常见问题及解决思路问题现象可能原因排查与解决思路yarn安装依赖失败网络超时网络连接问题或某些包需要特定环境1. 检查网络可尝试使用国内镜像源配置npm/yarn。2. 确保Python、C编译工具已正确安装。3. 清除缓存yarn cache clean后重试。yarn watch编译时报 TypeScript 错误依赖版本不匹配或代码本身存在类型问题1. 确保使用项目要求的Node.js版本。2. 查看具体错误信息可能是某个类型定义文件缺失尝试yarn install --force。3. 如果是暂停开发导致的遗留问题可能需要根据错误提示注释掉或简单修复类型定义。yarn electron启动后白屏或崩溃原生模块编译失败或运行时资源加载错误1. 检查终端错误输出看是否有明显的原生模块如keytar,spdlog编译错误。2. 尝试完全重新构建原生模块yarn rebuild-native如果脚本存在。3. 删除node_modules和out目录从头开始yarn和yarn watch。AI聊天功能无法使用模型列表为空AI提供商配置缺失或相关服务未启动1. 检查设置中是否已配置有效的AI提供商如OpenAI API Key。2. 如果使用本地模型确认Ollama等服务已启动并在指定端口监听。3. 在开发者工具F12中查看网络请求和主进程日志确认API调用是否成功。检查点功能点击无反应相关后端服务未正常初始化1. 同样查看开发者工具的控制台输出寻找JavaScript错误。2. 检查与检查点相关的服务是否在启动时被正确注册和激活。6.3 对未来的个人展望虽然Void IDE的开发暂停了但其代表的“开源、可定制、隐私优先的AI编程环境”这一方向我认为具有长久的生命力。未来的编程工具必然会更深地与AI融合但融合的方式不应是黑盒。我个人期待社区能出现更多基于Void理念的项目。也许未来的形态不是一个庞大的、一体化的IDE而是一套模块化的协议和插件标准。核心编辑器可以是VSCode、Neovim或任何其他编辑器提供稳定的文本编辑和扩展平台而AI能力则由一系列遵循统一协议的独立智能体插件提供。这些插件可以自由组合、替换它们管理自己的上下文、调用不同的模型、提供特定的代码操作如“重构此函数为异步”、“为这段代码生成单元测试”。Void的这次探索无论其最终是否以IDE的形式回归都为这个未来图景贡献了宝贵的实践经验和代码资产。对于开发者而言深入其中理解其设计得失本身就是一次宝贵的学习旅程。至少下一次当你使用某个AI编程助手时你会更清楚它背后可能发生了什么以及你真正想要的控制权在哪里。

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