快速结论:这个报错通常出现在使用 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 前端渲染相关,这些通常不是首要排查项。
解决步骤
- 先用最小复现确认问题:在 Chatbot 消息中分别输出
<tool_call>...</tool_call>、<tool_result>...</tool_result>和不带下划线的<example>...</example>,设置allow_tags=True,观察哪些标签被保留、哪些被移除。 - 如果只有带下划线的标签被移除,基本可定位为
allow_tags的标签匹配范围问题。 - 可优先尝试升级 Gradio 到包含该修复的版本;Issue 讨论中已有社区分支修复,仓库地址为
https://github.com/sohaib-0897/gradio/tree/fix/chatbot-allow-tags-custom-tags,但这是社区 fork,不是官方发布包。 - 如果项目无法立即升级,临时规避方案是把自定义标签名中的下划线改为不带下划线的名称,例如用
<toolcall>代替<tool_call>;该规避方式未在 Issue 中作为官方方案确认,属于可优先尝试的临时手段。 - 若必须使用当前版本且不能改标签名,可考虑在前端展示前把自定义标签转义为普通文本,或使用其他不会触发 sanitizer 的占位内容;具体实现需根据项目渲染链路评估。
验证方法
在修复后的 Gradio 版本中重新运行最小复现脚本,确认 <tool_call>、<tool_result>、<example> 等标签都能在 Chatbot 消息中按预期显示,并且 allow_tags=False 时仍会执行正常清洗。同时建议检查普通 Markdown、标准 HTML 和 SVG 的渲染行为没有回归。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[SAP provider] cache_control is stripped from messages — Anthropic prompt caching unusable](https://www.chat-gpts.plus/wp-content/uploads/2026/10/34797-cf3f6cac-768x403.jpg)
![[Bug]: Azure DeepSeek-V4.1-Flash cost map prices both Foundry paths from the Fireworks meter](https://www.chat-gpts.plus/wp-content/uploads/2026/10/43473-1e596b08-768x403.jpg)
