GCWing / GCWing/OpenBitFun

[Bug]: LLM 工具调用 XML 泄露导致快速无限膨胀污染上下文

Abierto
#1,492 1 comentario 0 reacciones 1 asignado Reclamado por @wsp1911 Ver en GitHub
bug help wanted
Lenguaje dominante
Rust
Estrellas
2.3k
Forks
231
Merge medio
2 h 49 min
PR fusionados (30 d)
589

Descripción

### Summary

LLM 推理异常时,将工具调用指令( 等 XML 标签)以纯文本形式输出到对话区。系统未做防护,将其识别为合法调用继续执行,形成递归循环,导致上下文在数秒内无限膨胀直至撑爆。

预期行为: 系统应检测这种泄露并中断循环,而非无限递归。

### Area

Desktop app

### Reproduction or evidence

复现步骤:

发起对话触发 LLM 调用
模型某次推理异常,输出中出现本应是工具调用指令的 XML 标签(如 ...)作为自然语言回复内容
系统解析输出时检测到 ,将其作为合法调用执行
工具返回结果 → 再次喂给 LLM → LLM 再次输出同样的 XML 标签
循环往复,上下文飞速膨胀

示例:

<|DSML|tool_calls> <|DSML|invoke name="ExecCommand"> <|DSML|parameter name="cmd" string="false">Get<|DSML|tool_calls> <|DSML|invoke name="ExecCommand"> <|DSML|parameter name="cmd" string="false">Get-<|DSML|tool_calls> <|DSML|invoke name="ExecCommand"> <|DSML|parameter name="cmd" string="false">Get-Child<|DSML|tool_calls> <|DSML|invoke name="ExecCommand"> <|DSML|parameter name="cmd" string="false">Get-ChildItem<|DSML|tool_calls>

可见工具调用 XML 被当作纯文本输出到对话区,且 Get- 命令不断重复,形成死循环。

建议修复方向(供参考):

泄露检测:解析 LLM 输出时,若 出现在自然语言文本块中,判定异常并中断
递归熔断:单次请求最大工具调用嵌套深度限制在 10 层以内
死循环检测:连续 2-3 轮工具调用输出结构完全相同,判定为死循环并立即中断

### Environment, if relevant

BitFun版本:0.2.12
平台:Win11
LLM:DeepSeekv4flash

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.