[polish] 支持根据 ASR 结果和元数据,自定义 LLM 润色策略与调用参数
Mantenedores costumam responder em até 1 dia
Avaliação
- Dificuldade
- 5/5
- Tempo estimado
- Mais de uma semana
- Facilidade para iniciantes
- 38/100
Direção de pesquisa
Start by locating the application pipeline between final ASR output and the LLM request, then map the existing ASR metadata and request configuration structures. Design and document the hook’s typed input, structured output, supported overrides, error fallback, and unchanged default behavior. Done when users can skip polishing or override supported request parameters, with examples and tests covering short-text skipping, text-length-based reasoning settings, and disabled-hook compatibility.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
现象
不同语音输入对润色的需求并不相同。短句的 ASR 结果可能已经足够准确,直接输出或使用较低的推理强度即可;较长、较复杂的内容,则可能需要更充分的整理。
希望能够根据每次 ASR 的结果,自动决定是否调用 LLM,以及本次调用使用哪些参数,减少手动切换配置的操作。
功能建议
在 ASR 完成后、LLM 请求发起前,提供一个可选的用户自定义函数,并明确其输入、输出格式。
OpenLess 应公开传入函数的 ASR 结果结构,提供若干文本和 metadata 字段供用户判断。例如:
| 字段示例 | 含义 |
|---|---|
text |
最终转写文本 |
charCount |
文本字符数,并明确空白、标点等的计数规则 |
audioDurationMs |
音频时长 |
language |
识别语言,如可获得 |
confidence |
识别置信度,如 ASR 服务提供 |
asrProvider |
本次使用的 ASR 服务或引擎 |
这些字段可以来自 ASR 返回结果,也可以由 OpenLess 整理或计算。希望文档明确字段类型、单位、可选性和缺失时的表示方式;不同 ASR 服务的置信度若不可直接比较,也应说明其含义。
函数的返回值可以是一个结构化的策略对象,既能决定是否跳过润色,也能覆盖本次 LLM 调用的部分参数,而不局限于 true / false。
使用示例
以下用 JavaScript 示意,不限定实际脚本语言或最终 Hook 接口名称。
示例中的 action 和 request 是建议的返回结构:action 决定是否润色,request 中的字段用于覆盖本次 LLM 请求参数,未指定的参数沿用当前配置。
LLM 参数采用 OpenAI Chat Completions API 的官方写法 reasoning_effort。如果使用 Responses API,对应写法为 reasoning: { effort: "none" } 等。具体支持哪些值取决于所选模型。OpenAI 官方文档
function configurePolish({ charCount }) {
// 少于 5 个字符:跳过 LLM,直接输出 ASR 原文
if (charCount < 5) {
return { action: "skip" };
}
// 5–9 个字符:调用 LLM 润色,但不启用推理
if (charCount < 10) {
return {
action: "polish",
request: { reasoning_effort: "none" },
};
}
// 100 个字符及以上:使用 medium,也可按需改为 low
if (charCount >= 100) {
return {
action: "polish",
request: { reasoning_effort: "medium" },
};
}
// 10–99 个字符:沿用当前润色配置
return { action: "polish" };
}
这些阈值仅用于说明用户可以自定义策略。skip 表示完全不发送 LLM 请求;reasoning_effort: "none" 则仍会调用 LLM 生成润色结果。
长度只是一个示例。开放明确的输入结构和返回协议后,用户还可以结合语言、音频时长、文本内容等制定规则,也可以按需调整其他受支持的 LLM 请求参数。
预期收益
让简单输入更快完成,同时为复杂输入保留更充分的润色能力。用户可以根据自己的 ASR 准确度和使用习惯,在响应速度、调用成本和输出质量之间进行调整。
建议接受标准
- 提供用户自定义策略函数,在最终转写完成后、LLM 请求发起前执行。
- 文档公开函数输入结构,至少包含转写文本及若干可用于判断的 metadata 字段。
- 明确各字段的类型、含义、计算规则,以及不可用时的表示方式。
- 支持通过返回对象跳过润色,或覆盖本次调用的部分 LLM 参数;未指定的参数沿用当前配置。
- 跳过润色时不发送 LLM 请求,直接输出 ASR 原文,并作为正常流程处理。
- 明确可覆盖的参数、对应的 API 格式及适用范围,并说明模型不支持某个参数时的处理方式。
- 提供同时展示“短文本跳过 LLM”和“按文本长度调整推理强度”的示例。
- 未启用该功能时保持现有行为,并明确函数执行异常时的回退方式。
相关讨论
#1032 已提出按字数跳过短输入润色的场景。本请求进一步希望开放 ASR 结果和元数据,以及可编程的润色策略接口。
- Linguagem predominante
- Rust
- Estrelas
- 3.7k
- Forks
- 349
- Merge médio
- 1d 12h
- PRs com merge (30d)
- 99
Preparar o ambiente
Este projeto não oferece contêiner de desenvolvimento, Dockerfile nem guia de contribuição, então a configuração fica por sua conta: comece pelo README e veja nosso guia da primeira contribuição para os passos gerais.
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de Open-Less/openless
-
[账号] github的退出登陆与云同步不在一起Abertaenhancement P1
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 63/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 62/100
Mantenedores costumam responder em até 1 dia
-
[windows] 录音快捷键还不支持设置为ScrllLock键Talvez já em andamento @HKLHaoBin assumiu há 13 dias. Abertabug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
Open-Less/openless#1241 · 5 comentários ·
Mantenedores costumam responder em até 1 dia
-
area:ui bug P2
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 45/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 48/100
Open-Less/openless#1395 · 4 comentários ·
Mantenedores costumam responder em até 1 dia
Todas as issues de Open-Less/openless
Issues semelhantes
-
[cosmic-applet-battery] Division by zero displays NaN% when UPower reports max_brightness = 0Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
pop-os/cosmic-applets#1619 ·
Mantenedores costumam responder em até 3 dias
-
binding:python bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
Mantenedores costumam responder em até 1 dia
-
enhancement
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
coollabsio/orbit#72 ·
Mantenedores costumam responder em até 1 dia
-
swc_common: Mark::least_ancestor never returns when the answer is the root mark (ANT-2026-JYDQGGRT)Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
swc-project/swc-ai-issues#137 ·
-
Synth suite fails unless run from the repo root: signal_flow's default machine path is cwd-relativeAbertabug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 80/100
Nimblesite/osprey#370 ·
Mantenedores costumam responder em até 1 dia