Chatbot allow_tags is not working for some tags.

这个报错通常出现在使用 Gradio gr.Chatbot 并设置 allow_tags=True 时,某些自定义标签(尤其是带下划线的标签,如 、 )仍被前端清洗掉。优先排查 allow_tags 的标签匹配正则是否覆盖了下划线字符。

快速结论:这个报错通常出现在使用 Gradio gr.Chatbot 并设置 allow_tags=True 时,某些自定义标签(尤其是带下划线的标签,如 <tool_call>、<tool_result>)仍被前端清洗掉。优先排查 allow_tags 的标签匹配正则是否覆盖了下划线字符。

适用环境:Issue 确认环境为 Windows,Gradio 6.29.1,gradio_client 2.7.2;社区复现与修复验证涉及前端测试与 Python 测试,但未提供完整的 OS、Python、CUDA、显卡信息。

最快修复方案:暂无确认的一步修复方案。Issue 讨论中给出的方向是修复前端清洗逻辑中 allow_tags=True 的转义正则,使包含下划线的自定义标签能被正确保留,并在合入修复后升级 Gradio。

注意事项:该修复在讨论中由社区贡献者验证了 118 个相关前端测试和 21 个 Python 测试通过,并检查了 lint、格式化、生产前端构建等;但 Issue 关闭时未在正文中给出官方发布版本号,正式修复版本需以 Gradio 后续发布说明为准。修改正则或前端清洗逻辑可能影响其他 Markdown/HTML/SVG 渲染行为,升级前建议先在测试环境验证。

问题场景

用户在 Gradio 应用中使用 gr.Chatbot(allow_tags=True),希望 Chatbot 输出消息里保留自定义标签,例如 <tool_call>、<tool_response>、<tool_result>、<example>。实际表现为:部分自定义标签被移除,即使它们并非标准 HTML 标签;把 sanitize_html 设为 False 后文本能显示,但标签本身仍可能消失。

报错原文

Chatbot allow_tags is not working for some tags.

The `allow_tags` parameter does not seem to be working. Certain custom tags are being removed from output messages regardless of the value passed into `allow_tags`. This is in Gradio version 6.29.1.

Tags that I've noticed are automatically excluded include <tool_call> and <tool_response>.

Setting `sanitize_html` to `False` causes the text to show up, but without the surrounding tags, even though these are not standard HTML tags and shouldn't be treated as such.

原因分析

根据 Issue 讨论中的复现结论,最可能的原因是:allow_tags=True 时用于转义标签的正则没有覆盖包含下划线的标签名,导致 <tool_call>、<tool_result> 这类带下划线的自定义标签绕过了“允许标签”的转义路径,随后被前端 sanitizer 当作不安全内容移除。而不带下划线的标签(例如 <example>)可以正常显示,也符合“正则字符集未包含下划线”这一判断。

环境排查

  • 确认 Gradio 版本是否为 6.29.1 或相近版本,并查看后续版本是否已合入相关修复。
  • 确认 gr.Chatbot 是否显式设置 allow_tags=True,以及输出内容中自定义标签的具体命名。
  • 测试带下划线的标签(如 <tool_call>、<tool_result>)与不带下划线的标签(如 <example>)是否表现不同。
  • 检查前端构建产物是否与 Python 包版本匹配;如果使用本地构建或 fork,需确认已包含对应修复。
  • Issue 未提供 Python、CUDA、显卡、PyTorch 信息;若问题与 Gradio 前端渲染相关,这些通常不是首要排查项。

解决步骤

  1. 先用最小复现确认问题:在 Chatbot 消息中分别输出 <tool_call>...</tool_call>、<tool_result>...</tool_result> 和不带下划线的 <example>...</example>,设置 allow_tags=True,观察哪些标签被保留、哪些被移除。
  2. 如果只有带下划线的标签被移除,基本可定位为 allow_tags 的标签匹配范围问题。
  3. 可优先尝试升级 Gradio 到包含该修复的版本;Issue 讨论中已有社区分支修复,仓库地址为 https://github.com/sohaib-0897/gradio/tree/fix/chatbot-allow-tags-custom-tags,但这是社区 fork,不是官方发布包。
  4. 如果项目无法立即升级,临时规避方案是把自定义标签名中的下划线改为不带下划线的名称,例如用 <toolcall> 代替 <tool_call>;该规避方式未在 Issue 中作为官方方案确认,属于可优先尝试的临时手段。
  5. 若必须使用当前版本且不能改标签名,可考虑在前端展示前把自定义标签转义为普通文本,或使用其他不会触发 sanitizer 的占位内容;具体实现需根据项目渲染链路评估。

验证方法

在修复后的 Gradio 版本中重新运行最小复现脚本,确认 <tool_call>、<tool_result>、<example> 等标签都能在 Chatbot 消息中按预期显示,并且 allow_tags=False 时仍会执行正常清洗。同时建议检查普通 Markdown、标准 HTML 和 SVG 的渲染行为没有回归。

参考来源

gradio-app/gradio #13939

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 27632

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注