Skip to content

feat: 信源透传 (webSearchResults + xSearchResults)#468

Open
Huan-zhaojun wants to merge 1 commit intochenyme:mainfrom
Huan-zhaojun:pr/feat/search-sources
Open

feat: 信源透传 (webSearchResults + xSearchResults)#468
Huan-zhaojun wants to merge 1 commit intochenyme:mainfrom
Huan-zhaojun:pr/feat/search-sources

Conversation

@Huan-zhaojun
Copy link
Copy Markdown
Contributor

@Huan-zhaojun Huan-zhaojun commented Apr 13, 2026

Why

Grok 搜索时 SSE 流返回 44~400 条信源(web + X 帖子),但此前 grok2api 全部丢弃,
下游消费者(如 GrokSearch MCP)的 sources_count 为 0。

三层 URL 体系中,模型正文内联引用 [[N]](url) 仅 5–15 条(严格子集),
大量的信源没有暴露给调用方。本 PR 将完整信源透传到响应中,可作为 GrokSearch MCP 信源链路的基础设施。

Summary

  • Grok SSE 流中的 webSearchResults(网页)和 xSearchResults(X 帖子)透传到响应末尾的 ## Sources 段落
  • 多轮对话自动剥离前轮注入的 Sources,防止上下文膨胀
  • 新增 features.show_search_sources 配置开关(默认关闭),管理面板可切换

Changes

采集层 — xai_chat.py StreamAdapter

  • webSearchResults: 直接使用原始 url + title,多帧累积去重
  • xSearchResults: postId + username 拼接 URL,text 前 50 字构造 title,空白归一化
  • 共享 _web_search_urls_seen set 跨类型去重(web 中的 x.com URL 与 X 帖子自动去重)
  • references_suffix() 统一转义 Markdown 特殊字符(\ [ ]

多轮剥离 — chat.py _extract_message

  • 标记行 [grok2api-sources]: #(CommonMark link reference definition,渲染器不显示)
  • 正则覆盖 string content + block list content 两条路径,CRLF 兼容
  • 仅匹配含标记行的段落,用户自写的 ## Sources 不受影响

配置 & UI

  • config.defaults.toml 新增 show_search_sources = false
  • 管理面板新增开关 + 6 语言 i18n(zh/en/de/es/fr/ja)

Test plan

  • 开启 show_search_sources,发送搜索类问题,验证响应末尾出现 ## Sources 段落
  • 关闭该配置,验证无 Sources 追加
  • 多轮对话:第二轮发送时确认前轮 Sources 被剥离(不出现在 Grok 请求中)
  • 非搜索查询(如纯聊天)不追加 Sources
  • 验证 X 帖子 URL 格式正确(https://x.com/{username}/status/{postId}

… Sources

Grok SSE 流中的 webSearchResults 和 xSearchResults 透传给下游消费者。

采集层(StreamAdapter):
  - webSearchResults: 直接使用原始 url + title
  - xSearchResults: postId+username 拼接 URL,text 前 50 字构造 title,
    空白归一化,共享 set 跨类型去重
  - references_suffix() 统一转义 Markdown 特殊字符后输出

多轮剥离(_extract_message):
  - 标记行 [grok2api-sources]: # (CommonMark link ref def,渲染器不显示)
  - 正则覆盖 string content + block list content,CRLF 兼容
  - 仅匹配含标记行的段落,用户自写 ## Sources 不受影响

配置:
  - features.show_search_sources(默认 false),管理面板可开关
  - 管理面板 + 6 语言 i18n (zh/en/de/es/fr/ja)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant