本地部署、资料严格溯源的 NotebookLM 类研究工作台。上传 PDF、EPUB、DOCX、PPTX、XLSX、TXT、Markdown、HTML 或 PNG/JPEG/WebP 图片后,可获得引用到页码/章节/幻灯片/工作表与单元格/段落/原图的摘要与问答,并生成双人音频、单选 Quiz 和 Flashcards。
要求:Git、Node.js 20+ 和 Corepack(推荐 Node.js 24 LTS);Linux/macOS 还需要 curl。引导脚本使用 uv 自动准备 Python 3.11–3.13,并下载经过 SHA-256 校验的 FFmpeg 9.0 LGPL 静态构建与 LibreOffice 26.2.5,全部解压到项目内;不会调用系统包管理器或安装桌面组件。
Linux/macOS:
chmod +x scripts/*.sh
./scripts/bootstrap.sh
./scripts/start.shWindows 11 PowerShell:
Set-ExecutionPolicy -Scope Process Bypass
.\scripts\bootstrap.ps1
.\scripts\start.ps1Windows 11 x64 支持原生部署;ARM64 当前为实验支持。首次部署、Ollama/云端 Provider/AUDIO 配置、更新备份和故障处理详见 Windows 11 原生部署手册。
当前部署可在 runtime/config.toml 配置为监听 0.0.0.0:20830(需访问密钥);本机浏览器打开 http://127.0.0.1:20830。停止服务运行 scripts/stop.sh 或 scripts\stop.ps1。
首次启动会从 config.example.toml 创建 runtime/config.toml。默认开发 Provider 是 http://127.0.0.1:11434 的 qwen3.5:2b,AUDIO 服务是 http://127.0.0.1:20810。旧配置中的 development.tts_url 仍可读取,新配置使用 development.audio_url。Kimi、DeepSeek 或其它服务可在网页设置中添加为 OpenAI-compatible Provider。交互式 API 文档位于 /api/docs,机器可读定义位于 /api/openapi.json;认证接口另见 /docs。
设置页按 MAIN、VLM、AUDIO 三种职责分开管理。MAIN 是必需能力;VLM 和 AUDIO 可以临时暂停而不删除当前选择,暂停只影响之后创建的任务。暂停与恢复都是轻量操作:恢复启用只校验连接与模型清单,不会重新执行深度验证,AUDIO 也不会因此重跑 TTS→ASR 闭环。Podcast 的 TTS、首次 ASR 验收及音频修复后的复验始终使用任务绑定的 AUDIO Provider,不随角色切换改变;绑定配置不存在时不回退到其他 AUDIO Provider,任务降级为仅交付脚本(script_only)。缺少绑定信息的旧任务在开始执行时解析一次 AUDIO,并在本次执行中持续使用。图片处理默认按 VLM → MAIN → 本地 RapidOCR 依次兜底,任一步得到结果即停止;可调整参与步骤、全局关闭,或在每次上传确认时临时覆盖。图片策略仅应用于新上传,不会自动重建已有索引。云端 VLM/MAIN 参与视觉处理时,对应原图会发送给所选服务。
设置页按角色限制可选协议:
| 角色 | 支持的 Provider 类型 |
|---|---|
| MAIN、VLM | Ollama、OpenAI-compatible |
| AUDIO | Sandevistan Audio(TTS + ASR) |
推荐流程是“连接并读取模型 → 从完整清单选择模型 → 验证并启用”。模型搜索与当前选中值相互独立,重新展开仍会显示完整清单;仅当兼容服务不提供清单或目标模型未公开时才切换为手动模型 ID。修改地址、Key 或类型后需要重新读取清单;只修改模型或能力参数不会丢失已读取的清单,保存时会重新验证。服务地址可直接粘贴带 /v1、/api 或 /api/v1 的常见形式,保存时会规范化为服务根地址。
AUDIO 配置同时读取 TTS、ASR、设备、预置音色和可用声纹人员;只有 TTS 与 ASR 都满足 Podcast 验收要求时才能启用,深度验证会分别合成两位主持人的短句,再执行一次 TTS→ASR 闭环。主持人可使用不同的预置音色,或从 Audio Intel 声纹库中选择已有且具有可用样本的人员;系统锁定该人员最新的可用样本,不提供手工声纹 ID 或临时上传入口,两位主持人不能选择相同音色或人员。预置音色支持模型公开的基础表达指令,并会在整集追加稳定语速、音高和情绪范围约束;声纹克隆由固定参考样本控制,不发送模型不支持的表达指令。升级前保存的 Sandevistan TTS 会自动迁移为 AUDIO;OpenAI TTS 会保留为停用的 TTS-only 记录,但不能再用于 Podcast。
MAIN/VLM 会同时管理模型的总上下文窗口、最大输入(服务提供时)和最大输出。Ollama 优先采用当前运行实例的 context_length,其次采用 Modelfile 的 num_ctx,不会把模型理论最大窗口直接当作运行窗口;OpenAI-compatible 服务则读取模型清单或详情中公开的限制。无法探测时使用 4096 tokens 安全回退并显示警告,最大输出默认按有效窗口的 25% 推导且不超过 4096。设置页可人工覆盖上下文窗口和最大输出;人工值优先,但不能超过模型明确报告的理论最大值。也可按 Provider 覆盖 temperature;留空时使用各任务默认值,运行记录会标明实际温度及来源。OpenAI-compatible Provider 可设置“思考模式”(auto/disabled/enabled):auto 不发送任何思考参数;disabled/enabled 发送 Zhipu 风格参数,服务拒绝时自动回退;Ollama 始终按 think=false 调用、忽略此项。
问答、摘要、题卡和播客脚本会预留 20% 安全余量,并按输入与输出预算裁剪证据。产品任务的上下文溢出、临时网络故障、空响应和结构恢复共享最多一次技术恢复;审校失败不重试。隐藏推理与可见输出共享输出预算,人工或服务上报的上限始终是硬顶。发生裁剪、输出受限或回退时,产物显示相应说明。
连接检查不保存配置。深度验证只发送内置的极短测试文本或测试图片,不会发送 Notebook 资料;使用云端模型时仍可能产生少量 API 费用。未通过验证的配置可以保存为未启用状态,启用失败不会替换当前同角色的活跃 Provider。
程序化配置可调用 POST /api/providers/inspect,mode="catalog" 只读取实时清单,mode="deep" 会执行对应角色的最小真实调用;AUDIO catalog 还会返回脱敏的 voiceprint_library 和可持久化的 resolved_audio_config。角色状态分别通过 GET /api/provider-roles 与 PATCH /api/provider-roles/{role} 读取和更新,重新启用默认按 catalog 校验(可用 validation_mode="deep" 显式要求深度验证),暂停会保留 selected_provider_id 所指的已选配置;全局图片策略使用 GET/PUT /api/settings/image-processing;上传接口可在 multipart image_policy 字段中传入单次覆盖。已保存的 MAIN/VLM 可调用 POST /api/providers/{id}/probe 重新探测并持久化窗口能力。请求字段及关键响应说明见 /api/docs。Provider 配置保留扩展字段;新增布尔开关必须传 JSON 布尔值,不能用字符串或数字代替。AUDIO 的 config.podcast_sequence_tts 缺省按开启处理,设为 false 会关闭批量合成;产品任务始终等待脚本检查后再开始 TTS;该设置保存于 Provider 配置,不属于 config.toml。能力清单的 sequence_jobs、模型的 default/checkpoints 和 recommended.reason 可用于解释当前选择。
所有可删除的项目状态都在工作目录:
.venv/:Python 环境.tools/:项目级工具frontend/node_modules/:前端依赖runtime/data/:SQLite、原始文档、渲染页、索引、音频、加密密钥runtime/data/job-work/:任务专属临时文件;删除任务时只清理这里的任务残留runtime/data/backups/:数据库结构升级前的一致性备份runtime/models/:项目内多语言向量模型(安装时下载一次,运行时离线)runtime/cache/、runtime/logs/、runtime/tmp/
卸载时停止服务并删除整个项目目录即可。注意:启用远程(局域网或云端)MAIN/VLM/AUDIO Provider 时,问题上下文、资料片段、页面图片或 Podcast 文本会发送给用户主动配置的服务。声纹克隆时 quick-read 只读取人员与样本元数据并向该 AUDIO 服务提交所选样本 ID,不上传临时参考音频;声纹原始文件由 Audio Intel 自己管理。除此之外应用不调用外部业务服务。默认绑定 localhost;如果改为局域网地址,必须同时设置 security.access_key。
项目内媒体工具位于:
.tools/ffmpeg/bin/ffmpeg(Windows 为ffmpeg.exe).tools/ffmpeg/bin/ffprobe.tools/libreoffice/program/soffice(Windows 为soffice.exe)
原始安装包保留在 runtime/cache/downloads/,可安全清理。FFmpeg 由 scripts/tools.lock.json 固定 Release tag 与资产名,下载时从该 Release 读取并校验 SHA-256;详见 第三方工具说明。bootstrap 会复用已存在的媒体工具;需要替换 FFmpeg 构建时,先停止服务并将旧 .tools/ffmpeg 目录移到项目内其他位置留作回退,再运行 bootstrap。LibreOffice 的无界面用户配置使用 runtime/tmp/libreoffice-profiles/,不会写入用户主目录。若只需离线开发,可在引导时设置 SANDEVISTAN_SKIP_TOOLS=1 跳过工具下载。
FFmpeg 使用 LGPL 静态构建,LibreOffice 使用 The Document Foundation 官方二进制包。第三方程序保留其各自许可证;本项目不修改或重新链接它们。
检索范围固定为当前勾选资料;生成任务固定 MAIN 配置。服务端只返回真实资料片段对应的引用元数据,不为缺少引用的内容补挂无关引用。暂时性 Provider 故障使用任务共享的技术恢复名额;摘要会保留截断响应中结构完整的要点。缺失原文支持时标记待核实,点击已有引用可核对文件名、定位与原文。
连续提问会将同一会话、同一资料修订范围内的近期完整问答用于指代理解及检索;历史回答不作为事实证据,旧引用编号不复用,历史与新证据共享模型上下文预算。检索片段含无法识别的字体字符时,涉及残缺公式的回答会限制为可读文字解释,并提示通过原文件核对精确公式。降级说明随聊天历史保存。
切换 Notebook 或开启新对话会重置当前聊天显示与草稿;目标 Notebook 的资料和历史载入完成后才能发送问题。切换前已提交的问题仍由服务端处理并保存在原会话,其迟到的回答或错误不会覆盖新会话。
学习内容采用本地知识蓝图、必要批次生成和一次聚合抽样审校。系统按模型能力与最大输出预算安排批次,所有档位均尝试所选难度。结构可用的题卡会保留;引用不足、内容相近、语言或难度偏差通过评级提示,不为这些偏差反复补写。数量不足时返回部分产物,零有效内容仍报错,不使用模板填充凑数。Quiz 最多 30 题,Flashcard 最多 50 张;完整数量不等于事实与难度已获认证。
Quiz 若解析或题面引用选项位置,保留原始顺序,避免答案位置调整使解析错位。Quiz 按题作答,提交前不会通过产物或任务 API 暴露答案、解释或引用;作答后才返回该题的答案、解释和原文证据,并支持提示、错题重练和整组重练。Flashcards 支持四档反馈(再来、困难、良好、简单),使用 FSRS 持久化安排到期复习,同时支持到期/全部/本轮队列、洗牌、移除和 CSV 导出。旧版 Quiz 尝试与闪卡复习记录会在数据库 v4 升级后保留,并在需要时参与新调度状态的恢复。
闪卡“移除”会停用该卡片,保留原始题卡、FSRS 状态与历史评分,但从所有学习队列(包括本轮队列与洗牌)中隐藏,并同步当前进度。没有待学习卡片时本轮完成;旧活动会话在恢复时自动校正。对已移除卡片提交评分会返回 409,且不会改写复习记录。
双人音频采用“证据与主张 → 连贯对话 → 脚本审校 → TTS → ASR”流程,两位主持人的事实陈述关联文档引用。所有模型档位均尝试所选参数,实际完整性受资料、模型与生成预算影响。
默认自动选择 12–25 分钟的目标时长,也可指定 5、10、20 或 30 分钟;实际音频可能明显短于或长于目标。5–6 分钟短集通过率较低(时长可达标,但主持人均衡/问句比例等边界门禁的波动更大),参见 评测说明 的短集一节。首次默认输出简体中文,浏览器记住上次选择;也支持英文及自动语言。已有 V2 产物保持兼容。
交互生成保留可用内容,数量、风格、时长或审校偏差显示评级与具体说明。事实支持待核实的轮次保留并标记,不从对话中间删除后直接拼接。每个交流单元包含完整回应;已知断裂或重复按完整单元移除,后续可独立理解的章节继续保留,依赖被移除前文的内容不直接拼接。没有可播放单元时保留草稿。开场缺少前文、连续三个纯问题没有陈述性回答会触发本地检查;先回答再追问不计入这种连续提问。音频合成失败保留脚本;取消任务仍立即停止。
Podcast 先生成并保存完整短稿,再按目标时长插入有新信息的展开;展开失败时保留完整短版,界面分别显示生成方式与收尾检查状态。预读最多两批,首批无有效笔记即回退原文。结构完整不代表事实全部通过检查。 原文核验、叙事、音频和时长分别展示:事实疑点仍可交付并定位到引用,未核验不算通过。Ollama 的 Podcast 使用结构化响应约束;预读、提纲和终审仍有预算上限,任务 token 上限最多比 V7 增加25%,不增加评分重试。音频说话人评估优先使用逐词标签,时长不足不会改写音频验收状态。
支持兼容批量协议时,多轮 TTS 可共用模型加载。产品任务在脚本检查完成后开始合成,关闭脚本/TTS 重叠,避免为后来丢弃的内容提前合成。podcast_sequence_tts 仍控制批量合成。任务分别显示脚本、合成和 ASR 阶段;ASR 分数或时长偏差不再触发重合成。详见 交互生成与严格评测。
Podcast 在首个 MAIN 请求前预留一次连贯性审校,保护额度为任务累计预算的 25% 与模型单次安全预算的较小值。审校只发送精简对话和去重主张;全文放不下时检查完整相邻问答,优先开场、结尾和章节衔接。界面分别显示完整、部分、未完成检查及实际覆盖,删除后形成的新衔接不算独立复核通过。审校服务异常且本地未发现明确断裂时仍保留音频并显著标注未验证;已知断裂保留可独立理解的完整交流单元或草稿。时长、语言和 ASR 偏差不触发反复重写或重合成。
播客第 6 版编写器使用实际末尾对话承接章节,计划中的桥接语不视为已经说过的内容。英文编写和章节规划使用英文指令,提问须紧接回答或明确澄清。首次生成按实际输出容量拆分2–4轮的完整交流单元,用口播量分配目标长度;双方都能解释。审校只判定原文,不自动采纳自由改写的事实内容。单次审校统一实际装入的对话与请求检查的索引;索引错位时凭唯一匹配的相邻原文引文校正,无依据的断裂索引仅作待核实提示;引文只规范化空白和排版标点,不改写原意。未检查和 uncertain 不算连贯通过,时长不足仍保留评级和可用短版。
长节目按实际章节数保留有效大纲,不再被八章截断误判为失败。兼容省略对话行为字段的三字段回复,保留口播正文;引用数组不再被误读成口播。
摘要、连续问答、Quiz、Flashcard 和 Podcast 默认优先交付可用内容,显示“较好 / 一般 / 待核实 / 未评级”和实际检查范围。质量评级是自动检查,不是事实正确性保证;历史产物无需重新生成,显示未评级。题卡的答案相关提示在作答或翻面后展示。
每项任务最多一次额外 MAIN 审校、一次共享技术恢复。数量不足、语言或难度偏差、事实支持待核实不再触发反复补写;必要的大数量分批仍会调用模型。上下文选材仍按 Provider 的窗口与输出预算规划,其质量资格与交付策略独立。
Podcast 目标时长的 80%–125% 视为基本达标,不为时长或 ASR 分数反复重做整集。脚本检查后才开始 TTS;已知衔接问题按完整交流单元移除,保留独立后续章节或仅草稿。音频生成失败保留脚本。delivery_status 区分 full、partial、script_only、draft_only;任务结束不表示完整音频或全部质量要求通过。AUDIO Provider 未配置或不可用时仍可提交 Podcast:界面会提示降级原因,任务生成并交付双人对话脚本(script_only),配置 AUDIO Provider 后即可产出完整播客。
- 任务
complete表示处理结束,不代表内容完整或事实、音频质量全部通过。 - 产物
partial表示部分交付;即使status=ready,也需检查payload.degraded、warnings和相应质量报告,例如知识蓝图回退仍可能有警告。 - 题卡显示请求与实际数量,以及模型标注的难度;模型标签不等于人工确认难度。摘要或问答也可能只保留部分段落或原文摘录。
- Podcast 的脚本质量、ASR 和实际时长分别记录。音频 VERIFIED 要求 ASR 通过,且已有时长检查未失败;旧产物可能没有时长检查字段。这不表示脚本质量也通过。
- 引用检查、模型审校和 ASR 都有局限,重要结论需核对原文。不能承诺所有参数组合均完整、准确输出。严格脚本评测与 TTS 资格评测继续使用原验收门槛。
评测可用 .venv/bin/python scripts/evaluate_podcast.py --notebook-id <ID> --minutes 5 生成文字稿,默认不调用 TTS;复用 --candidate-json 并添加 --render-candidate 可跳过 MAIN、执行音频验收。评测渲染的 --tts-mode 默认为 single,显式选择 sequence 才使用批量模式;不支持或批量失败时会报告失败,以免将逐轮回退误当作批量评测结果。单次模型/设备覆盖、参考音频盲评和多样本冻结验收见 Podcast 评测与 TTS 资格维护。评测结果保存在本地 runtime/evals/,不会进入 Git。
Sandevistan Audio Provider 可在设置中分别配置 TTS 合成、两位主持人的预置/声纹音色与 ASR 验收。TTS 自动模式优先采用服务默认且符合固定 checkpoint revision 与设备资格表的组合,否则按已安装模型的质量排序回退;回退排序主要参考模型参数量,不代表所有备选都经过双基线资格评测。已有 auto_select=false 的人工选择保持不变。自定义表达指令时,若存在支持指令的已安装备选,会优先保留指令能力;不存在此类备选时仍返回原推荐;ASR 自动模式采用服务推荐的模型与设备,两者分别控制 GPU 失败时是否回退同模型 CPU,不会为了速度静默降低模型质量。脚本提示词限制突发愤怒、高亢和夸张标点,TTS 对支持表达指令的预置音色使用整集固定的稳定约束;声纹模式始终使用配置时解析的固定样本。产品任务不为时长反复扩写、压缩或重合成;断点续跑仍按最终文本与配置哈希复用已有片段。双说话人分离、时间对齐及 CER/WER 等验收门槛保持固定。高质量 CPU 合成通常比音频实时长度慢数倍,任务支持取消和项目内断点续跑。最终音频优先输出为经过响度统一的 AAC/M4A,旧版 WAV 产物保持兼容。
批量合成默认开启,可在 AUDIO 设置中关闭并保存;开关本身不改变模型、精度或最终文本顺序。通过 GET /api/artifacts/{id} 返回的 payload.performance 可查看脚本、TTS、总耗时与重叠时长,payload.provider 记录批量大小、复用轮次和降级原因。serial_estimate_seconds 与 overlap_gain_ratio 是本次运行推算值,并非另跑一遍串行流程的实测收益;旧产物可能没有这些字段。
Podcast 产物支持打包下载:GET /api/artifacts/{id}/download?part=all&script_format=both 默认返回 ZIP(音频存在时含 podcast.m4a|wav,另含仅序号/说话人/内容的极简 script.md 与含引用、章节和时间戳的完整 script.json);part=audio 或 part=script(配合 script_format=markdown|json|both)可只下载其中之一。仅脚本产物打包时不含音频、不报错。在线播放仍使用 GET /api/artifacts/{id}/media。
TTS 服务默认组合的资格表绑定 checkpoint revision 与计算设备;GPU 结论不授权 CPU,revision 改变时该组合失去服务默认优先资格。当前 scripts/qualify_podcast_tts.py 固定比较 0.6B/GPU 批量候选与 0.6B/GPU、1.7B/CPU 两组逐轮基线;prepare、auto-finalize 和可选人工 finalize 只生成本地评测报告,不修改 Provider 配置或资格表。维护者在核对固定 revision、实际设备和通过的客观/双基线声学报告后,另行更新代码中的资格表。自动声学指标属于代理指标,人工盲听可作为补充。
网页顶部的 TASKS 提供全局任务记录、搜索、类型/状态筛选、分页、阶段事件、真实计数、排队位置与本地历史 ETA。排队中的任务可立即取消,执行中的任务可安全终止;终止后删除任务只移除任务记录和任务专属临时文件,不会删除正式资料或已完成的 Studio 产物。ETA 少于 5 个同类本地样本时显示“学习中”,不会使用静态倍速冒充预测。
解析任务取消后,尚未完成的资料会显示“解析已取消”(API 状态为 failed),并取消勾选;已经完成索引的资料保持可用。服务启动时会校正旧版本遗留的排队状态,仅处理最新解析任务已取消且没有其他活动解析任务的资料,不重新解析或删除原文件。
NOTEBOOKS 提供统一的资料库管理与空间统计,并支持勾选当前页中的多个 ACTIVE Notebook 批量删除。单项删除前必须输入完整名称,批量删除必须输入固定短语“批量删除”;系统会先取消关联任务,再清理文档、索引、对话、产物和登记的本地资源。清理操作写入 SQLite,可在服务重启后继续,失败时可在界面重试。
均衡策略已实现,目前仍处于质量验证阶段,默认保留保守策略。摘要和问答按 Provider、模型及配置指纹分别匹配本地质量资格;无匹配时保持保守策略。显式设置 MAIN Provider 的 config.context_strategy="balanced" 可用于实验;conservative 优先于资格记录,可随时回退。容量预估不代表已通过质量资格,生产配置不会自动更改。
MAIN 的上下文窗口与最大输出共同决定选材、预读和生成容量,不按模型名称划分固定容量。短资料直接综合;三份及以上资料,或选材超过最终综合容量时,摘要先分批提炼带原文引文和定位的笔记,最终仍读取对应原文。单批提炼失败时保留其它笔记和该资料的原文回退,未产生笔记的资料不会被整体排除。长资料按章节、EPUB区段或连续页区间分布选材。跨资料问答按问题及同范围历史组织证据,普通问题保持直接检索,历史回答不作为事实证据。
摘要采用“简短总览+分资料要点”:总览最多6点,各资料最多4点,实际数量由输出容量和证据共同决定;容量较小时先为各资料分配一项,再补充总览和细节。未生成独立要点的资料明确标示。选材更多不等于已读完全部资料,也不保证重要信息全部覆盖。审校区分支持、不支持和未完成,保留内容及评级,不为评分反复重写。
Provider 设置中的“上下文容量预估”由后端实际规划器计算:有选中资料时使用实际片段长度,否则按每段约 1000 tokens 估算。表格同时显示预计预读批次、笔记容量、摘要要点容量及各功能的实际生效策略,默认启用清单只接受已通过对照验收的功能,显式 Provider 策略优先。预估接口仅在本地计算;MAIN 指向远端服务时,实际预读与综合会将选中的原文及提要发送给该服务。表格采用 Quiz 10 题、Flashcard 20 张和 Podcast 20 分钟,仅表示预计可用容量。运行时按实际数量、时长及资料重新计算;扩大窗口没有进一步收益时显示限制原因。
保留 20% 上下文安全余量,摘要和问答已取消原有 64000 / 32000 tokens 静态上限,按实际窗口、任务输出和累计预算分配原文;其它功能仍保留原规划。摘要与问答的均衡任务累计上限为 max(300000, ceil(1.25 × 有效上下文窗口)),再按实际资料量下调;其它功能上限仍为 300000 tokens。至少预留 25% 用于最终综合、审校和恢复。采用提炼的任务最多4批,调用额度分别预留最终综合、审校和一次技术恢复。输出预算影响笔记和摘要容量,不会强制填满窗口或输出长度。原文选材另受均衡任务预算限制,因此 1M 上下文不会自动发送 1M 内容。失败请求不产生计量消耗、预留自动退还(仍计入调用次数上限),重试调用本身计入预算;预算不足时保留有效部分并报告偏差。
聊天和产物的“本次资料覆盖”区分候选、选材、实际送入成功调用、部分送入和最终引用,并分别统计预读、最终综合和审校。聊天仅带入同一选材范围最近六组完整问答,最多占安全输入的 10%,并受累计任务预算约束,避免超大窗口反而挤少原文空间;历史仅用于理解指代。完整段落数按原文实际出现在成功请求中计数;阶段 source_tokens 是保守估算,真实总用量以 Provider 返回统计为准。章节/页区间涉及率不是重要信息召回率;未列入选材的内容不会因任务完成而算作已读。Quiz 作答前仅提供聚合统计。旧产物没有覆盖字段时保持原有展示。
真实新旧策略对照及资格边界见 上下文策略对照。
scripts/evaluate_generation.py 创建隔离应用和独立数据库,使用指定 PDF 真实调用 MAIN 与 AUDIO;不会读取或更改现用 Provider 配置。先完成 bootstrap,并准备可用的 MAIN、TTS/ASR 模型及自己的样本文件。
以下地址应替换为自己的服务;/path/to/sample.pdf 必须是实际存在的 PDF,仓库不附带本机实验样本。显式传入地址可覆盖脚本保留的原实验默认值。
.venv/bin/python scripts/evaluate_generation.py --output runtime/evals/gemma-baseline --phase baseline --sample /path/to/sample.pdf --main-url http://127.0.0.1:11434 --model gemma4:e4b --audio-url http://127.0.0.1:20810MAIN 默认上下文30720、最大输出4096,可用 --context-window 和 --max-output-tokens 覆盖;AUDIO 固定使用 Qwen3 TTS/ASR 0.6B,GPU 优先,允许同模型 CPU 回退。该评测不属于离线 pytest 或只读浏览器 smoke;文档片段、口播文本及待验收音频会发送到指定服务,可能产生费用。参数矩阵、单项选择、续跑及结果解释见 综合功能实测指南。
支持 DOCX、PPTX、XLSX 和 PDF;不支持旧二进制 DOC、PPT、XLS。XLSX 原生读取工作表、表头、合并范围、日期和百分比,使用文件已保存的公式计算结果;缓存缺失时保留公式并显示提示,不自行计算。完整的标准图表缓存作为带数据范围的原生证据;图片、缓存缺失或不支持的图表仍使用预览及所选图片处理链。
Office 正文提取与 LibreOffice 预览转换分别处理异常。转换工具缺失、失败或超时会保留有效正文,并提示预览及相关视觉内容可能缺失。资料继续在正文、所选图片处理和索引全部结束后才就绪;不提前进入后台补全状态。已经入库的资料不会自动重建,新的解析行为适用于再次上传。
PDF 根据实际绘制的图片及图形判断视觉处理需要,避免共享但未使用的图片资源、背景和装饰线触发整页识别。扫描页与不确定的图表继续识别。本地 OCR 引擎在工作线程中复用;处理器缺失、鉴权失败或连续两次异常时,该次导入跳过后续重复尝试并继续配置中的下一个处理器。未识别的视觉内容会显示提示。
资料元数据的 ingest_timings 记录解析、转换、各视觉处理器、索引和落库耗时;解析耗时包含转换与渲染,视觉总耗时包含各处理器耗时,不应将这些嵌套数字重复相加。完整入库耗时与原生解析耗时应分别比较。真实样本的单文件、批量上传及性能对照见 资料导入评测。
Podcast 按大纲逐章深化:完整短稿保留章节对应关系,深入版本成功后原位替换;失败保留该章短版,不重复附加整集概括。同一主张可用于不同机制与条件的解释。允许口播明确标识的解释性类比,仍核验机制与原文归属;事实疑点、章节回退和音频/时长结果分别报告。产品任务最多一次技术恢复和一次终审。
Podcast 按完整原文证据组规划与写作,保留相邻片段中的必要条件;预读笔记仅辅助理解,不替换同段其他内容。无关注点时按资料和区域分配选材,短稿接收每章完整主张集合,优先解释机制与条件。证据组不足预算时整体略过而不截断条件;选材或引用覆盖不代表知识完整覆盖。一次技术恢复和一次终审保持不变,质量不足仍保留可交付结果。
Podcast 对相同证据组去重,并在每次请求中共享原文、完整计入提示预算。提纲为核心单元分配主讲章节,遗漏映射在本地补齐;已发送、已分配和已引用分别记录,不视为语义覆盖验证。相邻完整问答可跨输出组恢复为最多八轮的整体,不跨越损坏数据。保持一次技术恢复、一次终审与现有任务预算。
Podcast 短章节诊断先回放已有回复,分别检查原文选材、解析、校验和组装的内容损失,再对照现有与简化写作协议。Podcast 预览和执行共用包含文件名、定位的选材成本;未引用的提问可与紧接的回答一起保留,事实引用不足仍提示待核实。短章节测试通过不代表整集或音频达标。参见 评测说明。
当前 v0.4.10 允许 AUDIO Provider 未配置或不可用时仍提交 Podcast:界面提示离线原因,任务交付双人对话脚本(script_only),产物抽屉提供打包下载(ZIP 含音频、极简 Markdown 脚本与完整 JSON)或单独下载其中任一部分;Studio 入口更名为“双人Podcast”。页脚直接读取后端运行版本,升级必须重启后端。
策略迭代循环:2026-09-17 起在 runtime/evals/podcast-strategy-loop-20260917/ 开展针对播客脚本生成策略的三轮迭代实验(生产 MAIN 固定为 alpha-ollama/gemma4:12b,仅评估文字稿,共 44 个记录轮次)。已认证的保留改进:iter-00 预算记账修复、iter-01/02 深槽硬下限与问句/主持人均衡(使 bitcoin-25m 首次达到 90% 线 23/23)、第二轮 recovery 硬化六项(恢复预算授予时机、续写区间重述、嵌套 turns 解包等,消除迭代前的不透明生成失败)与 iter-18 open_hook 实质收尾(重锚盲评 dev_margin −18.5→−11.5)。第三轮在方差削减协议(双指标、K=3 复现、裁判漂移锚点)下测试 10 个杠杆零保留:strange 基线可评率 ≈0–33%,裁判跨轮漂移 −2~−6 分淹没小增益,90% 双样本目标未达成。完整报告与复现命令见 runtime/evals/podcast-strategy-loop-20260917/final-report.md 与 final-report-v3.md;holdout 面板因开发集未双达标而未启动,后续再启前需先修复测量(固定裁判面板或改用程序化指标)。
MAIN 的 config.reasoning_effort 显式配置为 high / xhigh / max 时,结构化生成会为首轮输出预留至少 8192 tokens 的目标额度,仍受模型、上下文和任务预算限制;这些额外额度用于推理,不增加要求的要点或审查条目。成功恢复的同阶段额度在任务内复用。conservative Podcast 的高推理任务采用既有 45000 tokens 上限,扩写使用剩余输入与输出预算,优先保留完整核心稿和终审。模型返回过多章节时按顺序归并其机制与条件,单章旧格式可以本地转换。长资料预读不再为已用完的技术恢复重复预留调用名额;实际选材、预读和最终综合覆盖仍须分别查看。
高推理结构化调用的读取超时随预算调整。章节替换携带原短章解释与原文;预算不足或完全偏离原文依据时保留完整短版。部分引用未沿用时正常交付并提示覆盖待核对,不追加质量重试。该保护不代替事实与连贯性审核。摘要兼容单层嵌套要点和 text 字段;Podcast 保留完整的多轮正文,并本地兼容多余的结束括号,引用与连贯性检查仍生效。
v0.4.10 需重建前端、同步本项目安装元数据并重启后端,无新增数据库迁移或依赖升级。停止服务前等待活动任务完成,备份 runtime/config.toml、runtime/data(含凭据密钥)、旧代码和前端;SQLite 应停服备份或使用 backup API。Podcast engine 15 不复用旧脚本检查点,已有完成产物继续读取;失败任务后续重试可能重新生成。
部署本身不自动修改 Provider。若希望启用上述高推理预算保护,可为支持的 OpenAI-compatible MAIN 显式设置 config.reasoning_effort="high";未指定时按服务默认推理行为,应用不猜测其强度。修改 Provider 的 config 会替换整个对象,需保留其余键。无需同时改变 thinking、模型或窗口;均衡上下文策略仍须独立取得资格或显式选择。
上线后检查后端与页脚版本、静态资源、历史产物与音频、Provider 和任务状态。需回退时恢复旧代码与前端,并撤回本次配置变更;不要用旧数据库覆盖升级后的新写入。完整验证和限制见 Podcast 评估指南,Windows 命令见 部署手册。