Linux下构建本地优先的语音编码助手:voice2agent项目实战

news2026/5/8 16:14:08
1. 项目概述解放双手的智能语音编码伴侣作为一名长期与代码和终端打交道的开发者我深知在构思复杂逻辑或向AI编程助手如Claude Code、Codex描述需求时反复敲击键盘的疲惫感。市面上的语音输入方案要么过于笨重要么与特定工具深度绑定要么就是隐私性堪忧。这正是我深度体验并拆解voice2agent这个项目的初衷它瞄准了一个非常精准的痛点——为任何接受文本输入的编码代理或终端提供一个轻量、可靠、可本地化的“一键说话”语音输入层。简单来说voice2agent是一个运行在Linux GNOME Wayland桌面环境下的后台服务。它的核心工作流极其简洁当你需要输入时按下预设的热键默认是F8开始说话停止说话后稍作停顿你刚才的语音内容就会以文本形式精准地“粘贴”到你光标所在的任何位置——无论是终端、代码编辑器、浏览器输入框还是AI助手的聊天窗口。它不关心你前面运行的是claude-code、cursor还是普通的bash它只负责将你的语音转换成文字并送达。这个项目的魅力在于其“胶水”定位。它没有重新发明语音识别STT轮子而是巧妙地整合了现有的强大工具用arecord捕获音频用可配置的STT服务本地Whisper或云端OpenAI进行转录最后通过ydotool和wl-copy完成跨应用的文本注入。这种设计使得它既保持了核心功能的专注与稳定又通过开放的接口获得了极大的灵活性。接下来我将带你深入其内部从设计思路到每一步的实操细节完整复现这个能显著提升开发效率的工具。2. 核心设计思路与架构解析2.1 为什么是“Agent-Agnostic”代理无关这是voice2agent最核心的设计哲学也是它区别于许多集成式AI语音工具的关键。许多语音编码工具会深度绑定某个特定的AI助手API导致用户被锁死在一个生态里。voice2agent则采取了截然不同的路径它将自己定位为一个系统级的输入法增强组件。它的工作流程完全独立于目标应用。触发录音、音频处理、语音识别、文本生成这一系列操作在后台静默完成。最后一步“粘贴文本”是通过模拟系统级键盘事件ydotool和操作剪贴板wl-copy来实现的。这意味着任何能够接收键盘输入或粘贴操作的应用都能成为它的输出目标。这种设计带来了巨大的兼容性优势无论是新兴的OpenClaw还是经典的vim亦或是网页版的ChatGPT都能无缝接入。2.2 本地优先与隐私考量项目作者明确提出了“Local-first capable”的理念。这不仅仅是提供一个选项而是贯穿于架构之中。默认的STT提供商配置就是指向本地HTTP服务local_http。你可以轻松地在自己的机器上部署faster-whisper或官方whisper服务让所有的语音数据都在本地完成处理无需流出个人设备。即使你选择使用能力更强的OpenAI转录服务项目也通过环境变量和配置文件分离的设计鼓励用户将敏感的API密钥存放在Git版本控制之外的安全位置。这种对隐私和数据主权的尊重对于处理可能包含代码片段、业务逻辑甚至敏感信息的开发者语音输入来说至关重要。2.3 模块化与清晰的职责边界浏览代码结构你会发现清晰的模块化设计热键监听与服务层由系统托盘服务管理负责接收F8触发信号。音频采集与端点检测模块使用arecord进行原始PCM音频采集并内置一个简单的基于RMS均方根的语音活动检测器用于判断何时开始和结束录音。STT提供商抽象层定义了统一的接口local_http和openai使得更换识别引擎变得非常简单。未来支持新的STT服务只需实现对应的提供商模块。文本注入模块独立处理将得到的文本送入系统剪贴板并模拟粘贴键CtrlV或CmdV的操作。这种架构使得每个部分都可以被独立测试、调试或替换。例如你可以单独测试音频采集是否正常也可以直接用curl命令测试你的本地Whisper服务器而无需启动整个托盘应用。3. 环境准备与详细安装指南3.1 系统依赖与前置条件检查voice2agent目前深度集成于 Linux GNOME Wayland 环境。这不是一个随意的选择Wayland 是现代Linux桌面的大势所趋而GNOME对其支持最为成熟。在开始前请确认你的系统满足以下条件操作系统Ubuntu 22.04 LTS 或更高版本、Fedora Workstation 36、Arch Linux with GNOME等主流发行版。桌面环境GNOME并运行在Wayland会话下通常为默认。你可以在终端输入echo $XDG_SESSION_TYPE确认输出应为wayland。Python版本 3.10 或以上。使用python3 --version检查。接下来安装核心的系统工具这些是voice2agent与系统交互的桥梁sudo apt update sudo apt install -y alsa-utils wl-clipboard ydotool sshpass gir1.2-ayatanaappindicator3-0.1 python3-gi python3-venvalsa-utils包含arecord用于从麦克风捕获音频。wl-clipboard提供wl-copy命令用于在Wayland环境下操作剪贴板。ydotool一个模拟全局键盘/鼠标输入的工具用于实现“自动粘贴”。sshpass用于在配置SSH隧道到远程STT服务器时自动提供密码可选但建议安装。gir1.2-ayatanaappindicator3-0.1与python3-gi用于在GNOME顶栏创建系统托盘图标提供可视化的状态控制和退出入口。注意ydotool需要特殊的权限才能模拟输入。安装后你需要将当前用户添加到input组并可能需要配置uinput权限。一个常见的做法是创建如下udev规则echo KERNELuinput, GROUPinput, MODE0660 | sudo tee /etc/udev/rules.d/99-uinput.rules然后重新登录或重启系统使更改生效。如果粘贴功能不工作请首先检查ydotool的权限问题。3.2 项目部署与虚拟环境配置永远不要在系统Python环境中直接安装项目依赖使用虚拟环境是保持系统清洁的最佳实践。# 1. 克隆仓库 git clone https://github.com/thom-heinrich/voice2agent.git cd voice2agent # 2. 创建并激活虚拟环境 python3 -m venv .venv source .venv/bin/activate # 注意后续所有操作都应在此激活的虚拟环境下进行 # 3. 更新pip并安装项目以可编辑模式安装方便开发调试 python -m pip install -U pip pip install -e .-e参数代表“可编辑模式”它不会将包复制到site-packages而是在那里创建一个链接指向当前目录。这样你在项目目录下修改源代码就能立即生效无需重新安装。3.3 配置文件初始化与安全设置配置是voice2agent的核心它采用环境变量文件.env来管理所有设置并将敏感信息与代码分离。# 1. 创建私有的配置目录并设置严格的权限700表示仅所有者可读、写、执行 mkdir -p ~/.config/voice2agent chmod 700 ~/.config/voice2agent # 2. 从项目示例复制配置文件模板 cp configs/voice2agent.env.example ~/.config/voice2agent/voice2agent.env # 3. 为配置文件设置更严格的权限600表示仅所有者可读写 chmod 600 ~/.config/voice2agent/voice2agent.env权限设置chmod 600/700至关重要。这确保了你的API密钥如果使用OpenAI等秘密不会被其他用户或意外进程读取。现在用文本编辑器打开这个配置文件进行下一步的个性化设置。4. 核心配置详解与两种STT模式实战4.1 基础配置与音频设备选择打开~/.config/voice2agent/voice2agent.env你会看到一系列配置项。我们首先关注最基础的几个# STT提供商选择local_http 或 openai VOICE2AGENT_STT_PROVIDERlocal_http # 最重要的配置之一你的麦克风ALSA设备名。 VOICE2AGENT_AUDIO_DEVICEVOICE2AGENT_AUDIO_DEVICE不能为空。你需要找出你的麦克风设备。使用arecord -L命令它会列出所有可用的音频设备。输出可能类似这样null Discard all samples (playback) or generate zero samples (capture) default Default audio device sysdefault:CARDMicrophone Default Audio Device, USB Audio Direct sample mixing device ...你需要找到标识为“capture”或明显是麦克风的设备。一个常见的选择是default系统默认输入设备但更稳妥的是使用具体的设备名如sysdefault:CARDMicrophone。你可以先用arecord -D default --duration5 test.wav录一段音测试default是否工作。其他关键基础参数# 识别语言向STT服务提示音频的语言。例如en英语 zh中文 de德语。不设置则STT服务自动检测。 VOICE2AGENT_LANGUAGEen # 触发录音的热键。默认是 F8。你可以改为其他键但需确保不与系统或其他应用冲突。 VOICE2AGENT_KEYSYMF8 # 静默多长时间毫秒后停止录音。1200ms是一个比较宽松的设置适合说话中有思考停顿。 VOICE2AGENT_PAUSE_MS1200 # 语音开始前保留多长时间的音频毫秒。这能确保不会漏掉你按下热键后说出的第一个词。 VOICE2AGENT_PREROLL_MS800 # 语音活动检测的阈值。数值越低越敏感。如果环境安静但总无法触发录音可以调低如150如果环境噪音大导致误触发可以调高如200。 VOICE2AGENT_SPEECH_THRESHOLD1804.2 模式一搭建本地Whisper HTTP服务器推荐这是最具隐私性和可控性的方案。你需要一个实现简单HTTP接口的语音识别服务。这里以faster-whisper为例它是Whisper模型的一个高效实现。步骤1安装并启动本地STT服务首先在一个新的终端窗口或后台进程中设置你的STT服务。你可以使用任何你喜欢的模型这里我们用faster-whisper和Flask快速搭建一个# 在另一个终端中操作 # 1. 为STT服务创建独立的虚拟环境可选但推荐 mkdir ~/stt-server cd ~/stt-server python3 -m venv .venv source .venv/bin/activate pip install faster-whisper flask # 2. 创建一个简单的 server.py 文件 cat server.py EOF from flask import Flask, request, jsonify from faster_whisper import WhisperModel import tempfile import os app Flask(__name__) # 加载模型第一次运行会自动下载。base模型在精度和速度间取得平衡。 model WhisperModel(base, devicecpu, compute_typeint8) # 根据你的GPU情况device可选 cuda app.route(/v1/transcribe, methods[POST]) def transcribe(): if file not in request.files: return jsonify({error: No file part}), 400 audio_file request.files[file] if audio_file.filename : return jsonify({error: No selected file}), 400 # 将上传的音频保存为临时文件 with tempfile.NamedTemporaryFile(suffix.wav, deleteFalse) as tmp: audio_file.save(tmp.name) tmp_path tmp.name try: # 进行转录 segments, info model.transcribe(tmp_path, beam_size5, languagerequest.form.get(language)) text .join([segment.text for segment in segments]) # 清理临时文件 os.unlink(tmp_path) return jsonify({text: text.strip()}) except Exception as e: if os.path.exists(tmp_path): os.unlink(tmp_path) return jsonify({error: str(e)}), 500 if __name__ __main__: app.run(host127.0.0.1, port18090, debugFalse) EOF # 3. 启动服务 python server.py服务启动后会在http://127.0.0.1:18090监听。你可以用curl测试一下curl -F file/path/to/your/audio.wav http://127.0.0.1:18090/v1/transcribe步骤2配置 voice2agent 连接本地服务现在修改你的voice2agent.env配置文件VOICE2AGENT_STT_PROVIDERlocal_http VOICE2AGENT_STT_URLhttp://127.0.0.1:18090/v1/transcribe VOICE2AGENT_STT_FIELDfile # 对应服务端接收文件的字段名我们上面代码用的是file VOICE2AGENT_LANGUAGEen # 可选如果设置会作为 language 参数传递给服务这样就完成了本地模式的配置。所有语音数据都在你的机器内部流转。4.3 模式二使用OpenAI音频转录API如果你追求极致的识别准确率尤其是对于专业术语或多语言混合场景OpenAI的转录模型是当前的天花板。配置起来更简单但会产生API调用费用。步骤1获取并配置API密钥首先你需要一个OpenAI API密钥。登录OpenAI平台在API密钥页面创建新的密钥。安全建议不要将密钥直接硬编码在配置文件中。最佳实践是使用环境变量。# 在你的shell配置文件如 ~/.bashrc 或 ~/.zshrc中临时或永久添加 export OPENAI_API_KEYsk-your-actual-api-key-here # 然后重新加载配置文件或开一个新终端 source ~/.bashrc步骤2配置 voice2agent 使用OpenAI项目提供了OpenAI专用的配置模板我们可以基于它修改cp configs/voice2agent.openai.env.example ~/.config/voice2agent/voice2agent.env chmod 600 ~/.config/voice2agent/voice2agent.env然后编辑这个新的.env文件。关键配置如下VOICE2AGENT_STT_PROVIDERopenai # 方法一指向包含密钥的环境变量名更安全 VOICE2AGENT_OPENAI_API_KEY_ENVOPENAI_API_KEY # 方法二直接将密钥写在配置文件中确保文件权限为600 # VOICE2AGENT_OPENAI_API_KEYsk-... VOICE2AGENT_OPENAI_MODELgpt-4o-mini-transcribe # 性价比之选也支持 whisper-1 或 gpt-4o-transcribe VOICE2AGENT_OPENAI_RESPONSE_FORMATjson VOICE2AGENT_LANGUAGEen # 强烈建议设置提升准确率 # 可选给模型一些提示例如“This is a programming context with code terms.” # VOICE2AGENT_OPENAI_PROMPTYou are transcribing voice commands for a software developer. Include code keywords as is.OpenAI模型的响应格式固定所以配置相对简单。成本方面gpt-4o-mini-transcribe价格非常低廉对于开发者的碎片化语音输入每月成本几乎可以忽略不计。4.4 配置验证与手动测试在启动服务前强烈建议使用命令行工具验证配置是否正确并测试整个链路。# 确保你在项目目录下且虚拟环境已激活 source .venv/bin/activate # 1. 打印当前有效配置检查所有参数是否正确加载 voice2agent --config ~/.config/voice2agent/voice2agent.env print-config # 2. 进行一次完整的录音-转录测试 # 执行此命令后对着麦克风说话它会自动触发录音根据SPEECH_THRESHOLD停止后显示转录结果。 voice2agent --config ~/.config/voice2agent/voice2agent.env record-transcribe # 3. 测试现有音频文件的转录用于调试STT服务本身 voice2agent --config ~/.config/voice2agent/voice2agent.env transcribe-file --audio-file /path/to/test.wav如果record-transcribe能成功录音并打印出你说的话那么恭喜你最复杂的部分已经完成了。如果失败请根据错误信息排查常见问题集中在麦克风设备选择、音频权限或STT服务连接上。5. 服务部署、热键绑定与日常使用5.1 启动系统托盘服务配置验证无误后就可以启动后台服务了。这个服务会常驻系统监听热键。voice2agent --config ~/.config/voice2agent/voice2agent.env run如果一切正常你应该能在GNOME顶栏的右上角看到一个麦克风图标系统托盘区域。这个图标提供了可视化反馈灰色服务运行中等待热键触发。红色闪烁正在录音。绿色闪烁正在处理音频和转录。蓝色转录完成文本已就绪并准备粘贴。你可以右键点击图标选择“Quit”来退出服务。为了开机自启你需要将上述命令添加到GNOME的自动启动程序中。可以通过“启动应用程序”Startup Applications工具添加或者手动在~/.config/autostart/目录下创建一个.desktop文件。5.2 安装GNOME全局热键服务在运行但还需要告诉GNOME“当按下F8时去通知voice2agent服务。” 这通过一个GNOME自定义快捷键来实现。项目提供了一个便捷的命令来完成这个设置voice2agent --config ~/.config/voice2agent/voice2agent.env install-gnome-shortcut这个命令本质上是在后台执行了类似gsettings set的操作在GNOME的快捷键设置中注册了一个自定义命令该命令会通过D-Bus向正在运行的voice2agent服务发送触发信号。你也可以手动验证或修改这个快捷键打开“设置” - “键盘” - “键盘快捷键” - “查看及自定义快捷键” - “自定义快捷键”你应该能看到一个名为“Voice2Agent Trigger”的条目其快捷键为F8命令是类似voice2agent trigger的内容。5.3 实战工作流与技巧现在激动人心的时刻到了。打开你的终端或者启动claude-code将光标聚焦到输入区域。按下F8。你会听到一声提示音如果系统有提示音设置并且托盘图标变红闪烁。开始清晰地说出你的指令。例如“写一个Python函数接收一个列表返回去重后的新列表。”说完后保持安静大约1.2秒根据你设置的PAUSE_MS。图标会变成绿色闪烁处理中然后变蓝。查看你的光标处刚才的指令应该已经被精准地粘贴进去了就像你用键盘打出来的一样。使用心得与技巧断句与思考系统通过静默检测来断句。如果你在长段描述中需要思考可以稍作停顿但不要超过PAUSE_MS设置的时间否则会被认为输入结束。对于非常长的需求可以分几次说。修正与编辑转录不可能100%准确尤其是专业术语。最好的方式是说完后快速目视检查一下粘贴过来的文本进行微调。这仍然比全部手打要快得多。环境噪音在安静的环境下使用效果最佳。如果环境嘈杂可以适当提高VOICE2AGENT_SPEECH_THRESHOLD的值避免背景噪音误触发开始录音。多语言混合如果你像我一样经常在描述中夹杂英文术语OpenAI的模型处理得更好。本地Whisper模型在多语言混合识别上稍弱。6. 高级配置与故障排查手册6.1 通过SSH隧道连接远程STT服务器也许你有一台性能更强的服务器比如有GPU专门跑faster-whisper服务你希望从笔记本上连接它。直接暴露服务端口不安全voice2agent支持通过SSH隧道安全连接。首先在服务器上启动你的STT服务例如监听在127.0.0.1:18090。然后在你的本地voice2agent.env旁创建隧道配置文件cp configs/stt-tunnel.env.example ~/.config/voice2agent/stt-tunnel.env chmod 600 ~/.config/voice2agent/stt-tunnel.env编辑stt-tunnel.env# SSH连接信息 SSH_HOSTyour.server.com SSH_USERyour_username # 方法一使用密码不推荐需配合sshpass SSH_PASSyour_password # 方法二使用密钥推荐更安全 # 确保你的SSH私钥已添加到ssh-agent或在此指定密钥路径 # SSH_IDENTITY_FILE/home/you/.ssh/id_rsa然后修改主配置文件voice2agent.envVOICE2AGENT_STT_PROVIDERlocal_http VOICE2AGENT_STT_URLhttp://127.0.0.1:18090/v1/transcribe # 注意这里指向本地端口 VOICE2AGENT_STT_FIELDfile VOICE2AGENT_STT_TUNNEL_ENABLEDtrue VOICE2AGENT_STT_TUNNEL_SSH_ENV_FILE/home/you/.config/voice2agent/stt-tunnel.env VOICE2AGENT_STT_TUNNEL_LOCAL_PORT18090 # 本地隧道端口 VOICE2AGENT_STT_TUNNEL_REMOTE_HOST127.0.0.1 # 服务器上STT服务绑定的地址 VOICE2AGENT_STT_TUNNEL_REMOTE_PORT18090 # 服务器上STT服务的端口这样voice2agent会在启动时自动建立SSH隧道将本地的18090端口流量安全地转发到远程服务器的18090端口。6.2 诊断日志分析当遇到问题时日志是你的第一手资料。voice2agent默认将JSON Lines格式的日志写入~/.local/state/voice2agent/voice2agent.jsonl。你也可以通过VOICE2AGENT_LOG环境变量指定其他路径。查看实时日志tail -f ~/.local/state/voice2agent/voice2agent.jsonl一条典型的成功日志如下{timestamp: 2024-05-27T10:15:30.123456, level: INFO, event: trigger_received} {timestamp: 2024-05-27T10:15:30.234567, level: INFO, event: recording_started, device: default} {timestamp: 2024-05-27T10:15:32.345678, level: INFO, event: recording_stopped, duration_ms: 2111, audio_size_bytes: 168888} {timestamp: 2024-05-27T10:15:32.456789, level: INFO, event: stt_request_started, provider: local_http} {timestamp: 2024-05-27T10:15:33.567890, level: INFO, event: stt_request_finished, response_time_ms: 1101, text: Write a Python function to calculate factorial.} {timestamp: 2024-05-27T10:15:33.678901, level: INFO, event: paste_simulated}通过日志你可以清晰地看到每个阶段的耗时以及问题出在哪个环节如recording_started失败可能是麦克风问题stt_request_finished失败则是网络或服务问题。6.3 常见问题与解决方案速查表问题现象可能原因排查步骤与解决方案按下F8无任何反应1. 服务未运行2. 热键未正确注册3. 热键冲突1. 检查voice2agent run是否在运行托盘图标是否存在。2. 运行install-gnome-shortcut命令或手动检查GNOME快捷键设置。3. 检查F8是否被其他应用如某些游戏、IDE全局占用。托盘图标变红后立刻变蓝无录音1. 麦克风设备错误2. 语音检测阈值过高3. 麦克风被其他应用占用1. 用arecord -L和arecord -D device --duration3 test.wav测试麦克风。2. 调低VOICE2AGENT_SPEECH_THRESHOLD如到150。3. 关闭可能占用麦克风的软件如浏览器、通讯工具。录音正常但转录失败/返回空文本1. STT服务未启动或地址错误2. 网络问题OpenAI模式3. 音频格式问题1. 用curl命令直接测试STT服务端点。2. 检查网络连接和API密钥有效性。3. 用transcribe-file命令测试一个已知良好的WAV文件。转录成功但文本未粘贴到光标处1.ydotool权限问题2. 焦点窗口问题3. Wayland兼容性问题1. 确认用户已在input组检查uinput设备权限。2. 确保目标窗口终端/编辑器在按下F8前已获得焦点。3. 确保运行在Wayland会话下且安装了wl-copy和ydotool。转录文本包含大量“[INAUDIBLE]”或错误1. 麦克风质量差或距离远2. 环境噪音大3. 语言设置错误1. 使用外接麦克风靠近音源。2. 改善环境或尝试使用OpenAI模型抗噪能力更强。3. 正确设置VOICE2AGENT_LANGUAGE对于OpenAI可尝试使用prompt参数。服务启动报错提示Python模块缺失虚拟环境未激活或依赖未安装确保在项目目录下执行source .venv/bin/activate然后重新运行命令。6.4 性能调优与个性化减少延迟转录速度取决于STT服务。本地faster-whisper使用tiny或base模型速度最快。OpenAI的gpt-4o-mini-transcribe延迟也极低。确保网络通畅。提高准确性对于代码场景可以在OpenAI的prompt中加入“This is a programming dictation. Preserve exact code keywords, function names, and technical terms.” 这样的提示。节省资源本地STT服务尤其是大型模型较耗资源。可以配置为只在需要时启动服务或者使用远程服务器方案。自定义热键如果你习惯使用其他键如Pause/Break或一个不常用的功能键只需修改VOICE2AGENT_KEYSYM。你可以在Linux下使用xev或wev工具来获取键位的准确符号名。经过以上步骤你应该已经拥有了一个完全属于你自己的、高效且私密的语音编码输入系统。它就像一位隐形的助手在你思考时静静等待在你需要时准确地将想法转化为文字。从构思复杂的算法描述到向AI助手提出多步需求再到快速记录终端命令voice2agent以一种近乎无感的方式显著降低了思维到代码之间的摩擦。这种流畅感一旦习惯就再也回不去了。

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