首页/新闻资讯/正文详情

启元 T1 二次开发实战:基于 SDK 与 DeepSeek 的技术面试官 Skill

发布时间:2026/11/4 7:05:29 来源:云帆数科 栏目:资讯中心
启元 T1 二次开发实战:基于 SDK 与 DeepSeek 的技术面试官 Skill
1. 前言技术面试中的项目追问往往比概念题更难准备。项目介绍写了“读取机器人电池状态”面试官接着就可能问数据从哪里来接收时间怎么保存接口返回成功以后又怎样确认真正拿到了数据背熟几个术语并不能代替把这些步骤讲清楚。本文给启元 T1 做一个技术面试官 Skill。使用者提交项目资料机器人围绕资料提问听取回答再追问尚未说明的细节。回答“不知道”时先给出简短讲解再把问题缩小到一个可以回答的步骤。练习结束后电脑保存逐轮问答和引用回答原文的复盘便于核对评价依据。这个项目使用 T1 原生 SDK 完成播报与麦克风采集电脑负责本地中文识别、DeepSeek 文本调用和记录管理。目前已经完成两轮真实语音验证问题、讲解和结束提示均由真机播放。本文依次介绍开发环境、Skill 加载、语音接管、识别确认、模型追问与存档也把联调中遇到的插话、唤醒打断和电池缓存问题一起说明。2. 运行效果与整体方案2.1 一次练习怎样进行页面中先填写项目资料和目标岗位。机器人读出一道问题播放完毕后响两声提示音使用者直接作答不需要再叫唤醒名字。电脑显示识别文本提供十秒确认窗口确认后才把回答交给模型。机器人随后讲解或继续追问达到设定轮数时结束并保存复盘。本次使用的资料来自此前的 BMS 读取项目。资料包含一个具体事实消息的源时间戳为零保存电池读数时要另外记录订阅端接收时间。第一道真实问题是你订阅电池状态消息后是怎么把接收时间和电量、电压这些读数一起保存下来的使用者回答“我不知道”。机器人先解释在订阅回调中取接收时间再把它与电量、电压、电流和温度放入同一条记录并提醒接收时间不能代表源时钟已同步。接着实际追问那在订阅回调里你打算用哪个时间函数取接收时间又把它和哪些字段放进同一条记录第二轮仍然回答“我不知道”机器人把任务继续拆成取时间和组织字段两步。最终复盘保留了两轮原文指出相关步骤尚未说明并给出下一次练习建议。这种练习更适合帮助使用者补齐表达而不是给一个看似精确的能力分数。2.2 机器人和电脑的分工机器人端运行原生 Lumina Skill负责问题播报、提示音、录音窗口和语音模式恢复。电脑端运行控制台、Vosk 识别器与面试服务。音频经 SSH 回环转发到开发电脑Vosk 在本地转成文字DeepSeek 接收项目、问题和回答文字生成讲解、追问与复盘。这样划分以后模型密钥和数据库都留在电脑端机器人只承担现场语音交互。SDK 已有的播放和录音能力继续使用项目增加的是项目约束、追问规则、回答确认及复盘依据。运行过程没有调用运动或关节控制接口不依赖行走、巡视等大范围动作。3. 开发环境与启动准备3.1 先区分两端环境位置本次使用环境主要职责开发电脑Windows、Python 3.12.14控制台、模型调用、数据库电脑依赖Paramiko 5.1.0、Vosk 0.3.45SSH 连接、本地语音识别中文模型vosk-model-small-cn-0.22将麦克风音频转为中文T1Ubuntu 22.04、Python 3.10.12、ROS 2 Humble运行已有 SDK 与 Lumina文本服务DeepSeek deepseek-flash讲解、动态追问、复盘开发电脑不需要再安装一套 Ubuntu 或 ROS 2。本方案在机器人内部复用现有运行环境电脑通过 SSH 与本地服务连接。需要先确认自己的设备登录方式、主机指纹和 SDK 版本不能仅凭 App 显示蓝牙已连接就判断电脑已具备开发连接条件。环境检查也要分层看。电脑解释器能启动只说明 Python 可用依赖能导入才说明当前解释器找得到包本地识别模型成功载入后才可以进入语音测试。若第二个终端误用了另一套 Python常会出现第一个终端正常、部署器却缺少依赖的情况。3.2 安装电脑端依赖进入本项目目录后创建虚拟环境并安装仓库中固定的依赖版本python -m venv .venv .\.venv\Scripts\Activate.ps1 python -m pip install -r requirements.txt python prepare_local_asr.pyprepare_local_asr.py 从 Vosk 官网 下载中文模型检查压缩包路径后解压到 models/。本次模型的官方压缩包约 42 MB许可为 Apache-2.0。模型文件和下载记录留在本地不需要随代码重复提交。将自己的 DeepSeek Key 配置为 DEEPSEEK_API_KEY或者保存到项目的 private/deepseek.key。程序优先读取环境变量两处都没有配置时会停止启动。仓库不附带密钥和设备登录凭据机器人端也不保存文本模型的 Key。3.3 启动控制台与真机连接第一个终端运行控制台.\.venv\Scripts\python.exe server.py --port 18881浏览器打开 http://127.0.0.1:18881/。若要练习自己的项目填写资料与岗位后点击“开始文字练习”先建立会话随后启动的真机任务会接着使用这个会话期间无需提交文字答案。第二个终端显式使用同一个虚拟环境解释器启动部署器.\.venv\Scripts\python.exe run_robot.py --host ROBOT_IP --user YOUR_USER --known-hosts PATH_TO_VERIFIED_KNOWN_HOSTS --prepare-only大写参数需要替换成自己的设备信息。--known-hosts 指向已经核验过指纹的文件密码通过交互读取也可以使用 --key-file PATH_TO_PRIVATE_KEY。参数中的设备 IP 是连接目标不能用 App 的蓝牙连接状态代替。终端显示 ready: true 后输入 run 开始默认两轮。若页面已有进行中的会话真机接着使用该会话否则读取 case_project.txt 的示范资料。结束后输入 close 关闭本次 SSH 转发。源码、依赖和启动参数的完整说明见 README。4. 原生 Skill 加载与 SDK 调用4.1 源码怎样组成一个 Skill机器人入口需要同时使用模式适配、麦克风和面试流程。开发时将它们分开方便核对职责构建时由 run_robot.py 按顺序拼接三个文件移除入口中对应的两行本地模块导入形成一份可加载的原生源码。文件负责内容skill/src/voice_mode.py临时语音模式、归属记录、恢复skill/src/microphone.py原始音频读取、声道混合、采样率转换skill/src/main.py播报、收音、回答确认与逐轮流程interview_core.py模型请求、问答状态、引用校验、存档local_asr.py电脑端识别与音频分片处理server.py、dashboard.html本地接口与控制台构建生成的 dist/native_skill.py 与 RPK 内的 src/main.py 使用同一份内容RPK 另包含 cfg/pkg.yaml。代码还会检查直接形如 robot.方法(...) 的调用限制到本项目需要的语音接口。这项检查便于发现误加的直接调用但它不覆盖别名、反射或内部属性访问不能当成执行隔离机制。需要单独构建时可以不连接机器人执行.\.venv\Scripts\python.exe -c from run_robot import build; build()4.2 实际采用的加载路径这次通过 Paramiko 校验设备主机密钥在 SSH 连接内访问机器人回环地址上的 Lumina 本地开发服务。部署器先安装恢复脚本再将面试源码交给 /packages/script输入 run 后通过 /tasks 启动任务并轮询任务状态。电脑控制台也只绑定本机回环地址机器人端的回环转发将请求送回电脑。这条路径能把“源码已接受”“任务已启动”和“任务已完成”分别记录下来。只有安装返回并不能说明 SDK 已经成功播音或麦克风产生了数据。原生技能的组织方式和开发工具可参考 PrimeHub Skill Dev Kit语音能力接入依据 T1 SDK。4.3 播报完成需要检查状态main.py 调用 robot.play_tts() 后还会查询 robot.get_audio_play_state()。程序先观察到 lumina 或本 Skill 包名对应的播放状态再检查连续七次空闲每次间隔 150 毫秒。这样能够区分“请求被接受”和“观察到音频播放过程”。lumina 是运行时的通用播放方仍需结合当前问题事件与现场听感核对内容。如果播报中途被其他播放方抢占或者一直没有观察到稳定空闲程序会记录状态并停止本轮避免问题尚未结束就开始接收回答。这个检查后来也成为定位闲聊插话的重要依据。5. 语音接管与麦克风采集5.1 为什么没有继续使用原来的聊天转写早期直接读取原生 ASR 时收到过“我的项目是机器人验证监控”使用者确认转写与实际说法一致。接入本身可以工作后续问题需要结合播放和唤醒记录分别处理。现象实际记录处理面试中混入原来的聊天两轮复盘已生成播放方却由 lumina 变成 agent不以任务结束判定语音通过将回答输入独立处理新问题截断随后听到“找我吗”local_wakeup.strong_interrupt 取消了对应问题音频完整播完再给提示音作答时不再唤醒only_asr 设置成功却没有新文字属性写入、读回和恢复成功实测无新转写不沿用该路径改用 only_voice 采集 PCM 并本地识别这几种现象并非同一类故障。插话要查输入被谁处理截断要查谁取消了播放继续重试 TTS 或只检查属性值都不足以确认修复。5.2 把作答时机和恢复范围写清楚当前顺序是完整播完问题确认稳定空闲再等待 0.8 秒读取并确认原模式为 normal建立归属记录切换 only_voice 并读回启动录音并等待首批 PCM随后播放两声本地提示音确认提示音进入播放状态后再开启回答采集。使用者听到提示音后直接回答无需唤醒。收音结束后finally 先关闭采集进程再恢复语音模式文本确认和模型调用在恢复以后进行。因此接管范围是每次录音窗口不包含等待模型生成的全部时间。问题和讲解仍在普通模式下播放。这是 Agent 的语音运行属性与身体运动模式无关。voice_mode.py 保存原值、所有者、随机 token、任务编号和过期时间。更新记录时先写临时文件再替换关闭时核对 token仅在当前模式仍属于本项目时写回原值。若外部已经改变模式则保留外部值避免清理逻辑覆盖其他程序的决定。5.3 原始八声道转换为识别输入实际采集沿用官方 SDK 的本机 PulseAudio Unix socket 路径格式为 48 kHz、8 声道、S16LE。本方案无需新增 4713 监听。项目将第 5、6 声道平均、增加 4 倍增益再转换成 16 kHz 单声道满足当前 Vosk 识别器的输入配置。下面是 SdkMicrophone._read 的完整实现导入和采集进程创建见 microphone.pydef _read(self): remainderb;rate_stateNone try: while not self.stop.is_set(): if not select.select([self.process.stdout],[],[],.15)[0]:continue dataos.read(self.process.stdout.fileno(),32768) if not data: if self.stop.is_set():break raise RuntimeError(SDK 麦克风音频流中断) self.raw_byteslen(data);dataremainderdata;endlen(data)//16*16;remainderdata[end:] samplesarray.array(h);samples.frombytes(data[:end]) mixedarray.array(h,((ab)//2 for a,b in zip(samples[4::8],samples[5::8]))).tobytes() mixedaudioop.mul(mixed,2,4.0) mono,rate_stateaudioop.ratecv(mixed,2,1,48000,16000,rate_state) self.mono_byteslen(mono);self.peakmax(self.peak,audioop.max(mono,2)) with self.condition: self.preroll.append(mono) if self.armed: self.queue.extend(mono) if len(self.queue)96000:raise RuntimeError(音频处理落后停止以避免丢帧) self.ready.set();self.condition.notify_all() except Exception as exc: self.errorstr(exc);self.ready.set() with self.condition:self.condition.notify_all()每帧包含八个 16 位样本共 16 字节。一次管道读取可能结束在半帧位置remainder 会保留尾部再与下一块拼接否则声道索引就可能错开。数组索引 4、5 对应第 5、6 声道rate_state 则让采样率转换跨块保留状态不必每块重新开始。采集线程会保留最近六块预缓冲在正式开启回答窗口时一起送入队列减少起始音节落在边界之外的机会。块长取决于实际读取不能换算成固定的预录毫秒数。转换后队列超过 96000 字节时会报错相当于约三秒单声道音频积压正常读取每次取 6400 字节即 0.2 秒逐片发给电脑。5.4 异常恢复怎样安排除正常退出的 finally 外代码设置了九十秒活动期限并由独立进程检查本项目记录。有效请求会续期超时才请求恢复 Skill原模式不是 normal、归属不匹配或前次记录尚未清理时会拒绝开启新录音。活动期限使用单调时钟避免一次普通的系统时间校准改变超时判断。续期最多每五秒写一次记录既保持活动状态也减少连续音频请求带来的文件更新。恢复脚本会再次核对所有者、原值和期限而不是看到一个旧文件就立即修改模式。情形恢复判断已有验证录音正常返回或抛出异常finally 关闭采集核对归属后恢复两次正常结束有真机回读受控检查覆盖模式设置与恢复失败活动记录超时核对所有者与期限再请求恢复 Skill已实现受控检查仅确认恢复失败会将记录置为过期独立超时恢复尚未验证外部已改变语音模式保留外部值不覆盖为本项目原值受控检查不能当成现场故障注入结果这部分适配复用了本机 Lumina SDK 的内部节点需要与设备版本匹配。更换固件后应重新检查节点结构、属性读写和恢复过程再接入完整面试。6. 本地识别与回答确认6.1 每次采集建立独立识别器电脑收到 /api/asr/start 时创建独立采集编号和 Vosk recognizer。后续片段带着编号与从零递增的序号到达服务先检查数据非空、字节数为偶数、单片不超过一秒再送入识别器。连续性检查有助于发现断片避免乱序音频悄悄进入同一句回答。对于紧邻上一片序号的重传程序返回现有状态其他不连续序号会报错。这里没有任意乱序重排也没有对所有历史音频做内容去重。收到最终识别结果以后继续到达的片段会返回已经形成的结果防止同次采集生成两份回答。下面是协议规则示例假定识别尚未结束不是本次录音的原始抓包到达序号服务预期序号处理结果00接受下一片预期为 111接受下一片预期为 21再次发送2返回已有状态不再次送入识别器32报错缺少序号 2不自动补片或重排AcceptWaveform 检测到端点时读取结果六十秒窗口到期则取 FinalResult仍没有有效文字就返回超时。空音频或空文本不会被替换成一段示范答案。机器人收到超时后暂停已完成的轮次继续保留。每次开始采集都会建立新的识别器避免上一轮尚未完成的内部状态混到下一轮。服务还会清理创建超过一百二十秒的旧采集对象并对累计音频设置六十五秒上限前者管理对象生命周期后者限制单次输入规模不能与机器人的六十秒回答等待时间混为同一个设置。6.2 原始转写和采用文本分开两轮真实记录如下。readable_chinese() 只清理相邻汉字之间的空白两次结果有各自的采集编号可以核对它们来自两个录音窗口。轮次原始 raw_asr采用回答corrected第一轮我 不知道我不知道false第二轮我 不知道我不知道false识别后先进入十秒确认状态。页面可以修正术语、缩写和误识别词修改后的文字与初始文本不同时标记 corrected来源也增加修正标识。原始文本始终保留后面的引用检查针对采用回答进行。否则回看一份流畅复盘时很难知道问题出在识别、人工修正还是模型评价。确认窗口只存在于当前服务内存中超时采用由轮询触发。确认后提交的问答才进入 SQLite。服务重启能够恢复已保存轮次但不会恢复尚未提交的确认窗口。当前实现应在确认完成后再关闭服务。6.3 控制口令先于答案处理早期收到“进行技术面试吧”时程序曾把它当作技术回答。现在 voice_control.py 先规范空白和标点再匹配开始、暂停、结束等明确口令其余内容才进入答案确认。这样不用让文本模型猜测一次输入究竟是操作还是作答。源码动作支持的口令处理repeat开始面试、开始技术面试、进行技术面试吧、开始面试吧、开始吧、准备好了、继续面试、请开始面试提示后重复当前问题pause暂停面试、请暂停面试、暂停一下保留记录并暂停finish结束面试、退出面试、结束面试吧、请结束面试结束并生成复盘“我不知道”作为普通答案进入评价。表中的 repeat 作用于进行中的录音窗口不负责恢复暂停状态。暂停会结束本次语音流程若要接着原会话练习先在页面恢复再重新输入 run 启动 Skill。采集编号还会作为回答事件标识保存。相同事件已经形成轮次时再次提交直接返回已有会话不增加轮数、不重复调用模型。这与音频层的序号检查分别处理片段重传和回答重交作用范围不同。7. 项目追问与复盘生成7.1 给模型的资料与规则每轮请求都包含项目资料、岗位、历史问答、当前问题和采用回答。资料负责限制事实范围历史负责延续上下文。提示词要求回答含糊时追问可核验细节回答充分时再转向另一项技术取舍未说出的内容表达为“尚未说明”不推断成“没有做过”。遇到“不知道”或请求讲解模型先用短句解释再问一个小步骤。机器人入口也据此选择是否播报本轮反馈。本次先讲接收时间和字段再问具体时间函数正好验证了这条分支。问题还要求适合口头表达避免把路径、网址和长代码标识读给使用者。把这次真实记录并列起来可以看到追问如何对应到项目细节内容本次记录项目事实BMS 消息源时间戳为零保存读数时另记订阅端接收时间当前问题你订阅电池状态消息后是怎么把接收时间和电量、电压这些读数一起保存下来的实际回答我不知道实际追问那在订阅回调里你打算用哪个时间函数取接收时间又把它和哪些字段放进同一条记录7.2 JSON 格式与原文依据校验项目使用 DeepSeek 非流式 JSON 输出设置 response_format 为 json_object返回反馈、依据、缺漏、下一问和主题。接入方式见 DeepSeek JSON Output。JSON 能解析只解决格式问题字段类型、问题长度和引用内容仍由程序核对。下面是 interview_core.py 中完整的单轮校验方法staticmethod def validate_turn(result, answer): if not isinstance(result,dict) or not isinstance(result.get(next_question),str): raise ValueError(缺少 next_question 字符串) if not 1 len(result[next_question]) 110: raise ValueError(追问为空或过长) for field in (feedback,focus): if not isinstance(result.get(field),str):raise ValueError(缺少 field) if not isinstance(result.get(missing),list) or not all(isinstance(v,str) for v in result[missing]): raise ValueError(missing 必须是字符串数组) evidenceresult.get(evidence) if not isinstance(evidence,list):raise ValueError(evidence 必须是数组) if answer and not evidence:raise ValueError(评价回答必须给出原文依据) for item in evidence: if not isinstance(item,dict) or not isinstance(item.get(quote),str) or not item[quote] or item[quote] not in answer: raise ValueError(引用不在本轮回答原文中) if not isinstance(item.get(finding),str):raise ValueError(缺少依据说明)quote in answer 要求依据逐字出现在本轮采用回答中。最终复盘还按轮次找到对应回答再检查引用避免把一句真实的话安到错误轮次上。两轮只有“我不知道”评价就必须围绕这两句话展开不能补出候选人并未说明的实现方案或成绩。7.3 单轮评价校验失败时不推进结构或引用校验失败时程序将错误说明与上次输出交回模型纠正最多处理两次输出。仍然失败就抛出错误不写入本轮评价。HTTP 或网络错误则直接报错目前没有网络退避重试不能把两次内容纠正当成断网恢复策略。有效单轮写入后才更新下一问达到设定轮数再生成整体复盘。没有有效回答时结束操作生成“没有形成有效回答”的说明不制造优点或不足。引用校验能发现伪造依据但技术解释是否正确仍需核对复盘也不作录用判断。8. 会话存档与控制台8.1 三类记录分别保存SQLite 使用 sessions、turns、events 三张表。会话表保存项目、岗位、轮数、状态和报告问答表保存问题、采用回答、原始转写、来源、评价与事件编号事件表保存播报、收音、模式恢复和模型调用等过程记录。单轮插入与下一问更新放在同一个数据库事务中。写入异常时一起回滚避免回答已经出现、当前问题却仍指向上一轮。会话与轮次还设有组合唯一约束。模型调用发生在写入之前事件记录和最终复盘分别提交当前实现没有把整个模型调用过程包装成一个事务。会话有进行中、暂停和完成状态。暂停保留当前问题继续后使用已有记录完成操作发现报告已存在就直接返回。控制台重新启动时读取最近的已保存会话方便回看但这不会自动恢复机器人的录音进程或重新启动任务。8.2 页面用于确认和追查控制台把项目资料、当前问题、识别确认、逐轮记录和复盘放在同一页面。真机运行期间不允许从页面切换到另一会话也不接收独立文字答案只允许修正确认中的识别文本避免把键盘样例混入真机语音记录。问答区保留原始与采用文本复盘区显示轮次、引用和观察。使用者可以回到具体问题而不必只接受一段概括性的评价。播放被谁抢占、是否收到音频、是否恢复模式等信息则进入事件记录供排查使用。当前服务围绕一台机器人、一场面试设计。写操作由本进程的锁串行处理模型等待也会占用这条处理路径不能据此宣称适合多机器人高并发。扩大使用范围时需要单独设计会话隔离、任务队列与持久确认状态。9. 真机验证9.1 先看每一步的证据最终原生任务状态为 success错误字段为空。日志中有两轮独立采集、两次模式恢复、两轮采用回答和报告生成记录。使用者同时确认问题、提示音、讲解及结束提示完整没有原来的聊天插话。两类证据相互补充任务状态说明流程完成现场确认说明听到的体验符合预期。检查点本次结果原生 Skill 加载通过 Lumina 本地开发接口加载并执行真机收音两轮原始转写均为“我 不知道”回答采用均为“我不知道”没有人工修正播报与提示音记录播放状态使用者确认完整语音模式恢复两次读回 normal恢复标记为真追问与复盘完成讲解、追问报告含原文依据9.2 本地检查覆盖哪些分支电脑端通过了十三项受控检查涉及音频顺序与相邻片段重传、空转写、中文空白、回答修正、口令分流、重复事件、持久化复盘、伪造引用拒绝及模式恢复分支。可按仓库说明运行.\.venv\Scripts\python.exe -m unittest discover -s tests -v这些检查验证确定性逻辑真人两轮则验证麦克风、播放与模型组合后的交互。完整回答和含糊回答的对照使用受控文字输入不能把它们与真人说出的答案合并统计。公开结果摘录见 验证摘要。9.3 当前验证范围两次“我不知道”支持的是采集、转写、讲解和追问分支已经运行尚不足以评价不同专业答案的判断质量。Vosk 词置信度不等于准确率累计音频秒数也包含缓冲和静音本文不把它们当作识别耗时。录音使用原始八声道源自行混合不代表已验证降噪或回声消除。正常模式恢复有实机记录独立恢复进程尚未经过真实断网、强杀或掉电试验。RPK 与成功运行源码一致但本次没有验证 PrimeConsole 图形界面导入、市场上架或官方验收。运行仍需要电脑、本地模型和文本服务。9.4 网页配置与真机演示网页中的岗位、题数和项目资料都可以更换。这段演示选择“AI 应用开发工程师”设置 1 道问题用版本查询项目进行练习。使用者回答“我不知道”后T1 给出讲解网页保存本轮问答与复盘。网页操作与复盘技术面试官_网页操作与复盘真机语音演示技术面试官_真机语音演示10. 常见问题与处理10.1 App 能发现设备获取 SN 仍超时这台工程样机在两台安卓手机上都能被发现点击连接后获取 SN 超时权限和重启已经排查。根据收到的售后反馈应用商店版本与这台非量产机器不匹配需要配套内测 App。换用以后连接正常。这是本机的处理结果不能推广成所有超时都应换 App。10.2 Wi-Fi 已连上电量仍然读不到蓝牙连接、Wi-Fi 联网、IP 服务可达和 DDS 订阅建立是不同检查点。本次电脑端外部 DDS 路径没有验证成功后来通过 SSH 进入机器人使用机内 ROS 2 与 aimdk_msgs 订阅 /aima/hal/bms/state连续收到三条 BMS 消息。此前一次采样读到电量 87%、电压 52.20 V、温度 30.5°C。这些是当时的快照启动面试不会重新采集电池。源时间戳为零时保存接收时间这也成为本文演示中的追问材料。10.3 “没有可用缓存”怎样理解GetHeartbeatData 当时返回 service_code1011 与 No cached data available说明该汇总入口没有提供缓存。底层 BMS 随后确实产生消息因此不能把缓存为空直接等同于电池没有数据。缓存为何未填充尚未确定直接订阅是绕过缓存不代表修好了缓存。10.4 有 ASR 发布者却没有收到回答发布者存在只说明发现了端点还需要观察是否产生新文本、订阅是否收到。早期曾有发布者计数为一而新消息为零的情况不能直接判定麦克风故障。此次最终用实际 PCM 采集和本地识别建立了可检查的数据路径。出现播报截断时优先看播放方、唤醒事件和问题是否被取消出现空回答时再分别检查音频字节、识别状态和确认提交。更完整的现象、依据及处理范围见 FAQ不需要为一次订阅失败关闭整个防火墙。11. 总结本项目完成了一个能在 T1 上运行的技术面试官 Skill机器人使用 SDK 播报并收音电脑用 Vosk 本地转写DeepSeek 根据项目和回答继续追问SQLite 保存问答与带原文依据的复盘。两轮真实语音验证完成了“不知道”后的讲解和下一步追问并确认语音没有被原来的聊天打断。联调中最关键的调整是把回答窗口独立出来问题播完再给明确提示录音时临时接管语音收完先恢复模式再确认文字和请求模型。原始转写、采用回答和评价依据分别保存也让后续发现问题时有地方核对。另一个收获是把完成条件拆开。加载成功只确认源码被接受任务成功确认流程走完播放状态和现场反馈再确认问题是否听全。复盘也要回到具体回答核对避免程序有输出就忽略交互中的中断或错位。当前版本集中服务一台 T1 和一场练习真实语音样本主要覆盖“不知道”分支。受控检查用于核对程序规则后续仍需增加真人答案逐项观察技术内容与语音体验。下一步可以按下面的顺序补充验证每项保留对应记录下一步重点检查同题录制完整、含糊与不知道三类回答追问是否沿着回答变化引用是否来自正确轮次补充技术缩写、长句和不同背景声音样本对照原始转写与采用文本分别定位识别和确认问题补做恢复场景及图形界面导入记录模式实际恢复结果与 RPK 导入结果不用构建成功替代完整源码、运行说明与 RPK 保存在 qiyuan 仓库每篇项目使用独立目录便于按上述步骤复现和补充记录。

相关推荐

QwenImageEditPipeline API 参考:Qwen-Image-Edit-GGUF 开发者完整调用指南
QwenImageEditPipeline API 参考:Qwen-Image-Edit-GGUF 开发者完整调用指南

QwenImageEditPipeline API 参考:Qwen-Image-Edit-GGUF 开发者完整调用指南 【免费下载链接】Qwen-Image-Edit-GGUF 项目地址: https://ai.gitcode.com/hf_mirrors/unsloth/Qwen-Image-Edit-GGUF Qwen-Image-Edit-GGUF 是通义千问 Qwen-Image-Edit 图像编辑… · 2026/11/4 7:05:29

Listen1 音乐聚合插件:一个搜索框搜遍 7 个平台,免费开源
Listen1 音乐聚合插件:一个搜索框搜遍 7 个平台,免费开源

Listen1 音乐聚合插件:一个搜索框搜遍 7 个平台,免费开源 【免费下载链接】listen1_chrome_extension one for all free music in china (chrome extension, also works for firefox) 项目地址: https://gitcode.com/gh_mirrors/li/listen1_chrome_ext… · 2026/11/4 7:04:29

GitHub 界面汉化三步走:把英文按钮全变可读中文
GitHub 界面汉化三步走:把英文按钮全变可读中文

GitHub 界面汉化三步走:把英文按钮全变可读中文 【免费下载链接】github-chinese GitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese 打开仓库页,标… · 2026/11/4 7:04:29

8G显存本地AI数字人实战:从ASR到TTS的完整搭建与调优指南
8G显存本地AI数字人实战:从ASR到TTS的完整搭建与调优指南

8G显存在AI本地化圈子里处境挺尴尬的:你说它能跑模型吧,7B量化之后勉强能聊;你说它跑不好吧,又确实比集显强太多。大多数教程讲的都是怎么用Ollama跑一个聊天模型,但很少有人说可以更进一步——把它变成一只能听懂人话… · 2026/11/5 0:00:39

大模型系统性入门:从原理、部署到微调应用的完整路线
大模型系统性入门:从原理、部署到微调应用的完整路线

1. 为什么你收藏了300个教程,依然觉得大模型没入门我先讲一个前几天在交流群里看到的真实场景:有人问"大模型怎么入门",群里立马有人甩出几个网盘链接,里面躺着几百个PDF和视频,说是"全网最全的大模型学… · 2026/11/5 0:00:39

鸿蒙文件系统沙箱机制解析与开发实践
鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的… · 2026/11/5 0:00:39

大模型系统性入门实战指南:从原理到部署微调的全链路路线
大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#… · 2026/11/5 0:00:39

多智能体协作系统架构设计与实践优化
多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中… · 2026/11/5 0:00:39

Mac软件下载站分类指南:四类渠道与安全判断标准
Mac软件下载站分类指南:四类渠道与安全判断标准

Mac用户找软件这件事,说大不大,说小也真不小。我用了十来年Mac,从最早在论坛里翻帖子找注册码,到后来自己维护一份资源清单,踩过的坑能写满一页纸:下到过套壳安装包、遇到过捆绑浏览器主页的“绿色版”、也… · 2026/11/4 23:59:37

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

多智能体协作系统架构设计与实践优化
多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中… · 2026/11/5 0:00:39

大模型系统性入门实战指南:从原理到部署微调的全链路路线
大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#… · 2026/11/5 0:00:39

鸿蒙文件系统沙箱机制解析与开发实践
鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的… · 2026/11/5 0:00:39

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码