Skip to content

新增基于 You.com Search API 的联网检索(/v1/websearch + web_search MCP 工具)#44

Open
Emos21 wants to merge 4 commits into
wangle201210:mainfrom
Cooperation-org:feat/youcom-websearch
Open

新增基于 You.com Search API 的联网检索(/v1/websearch + web_search MCP 工具)#44
Emos21 wants to merge 4 commits into
wangle201210:mainfrom
Cooperation-org:feat/youcom-websearch

Conversation

@Emos21

@Emos21 Emos21 commented Jul 7, 2026

Copy link
Copy Markdown

关联 Issue: #43

动机

go-rag 目前的检索能力均基于知识库向量存储,无法获取实时网络信息。本 PR 新增基于 You.com Search API 的联网检索能力,作为 eino retriever.Retriever 的一种实现,与知识库检索互补。纯增量改动,现有向量检索链路完全不受影响。

变更内容

  • 新增 server/core/websearch/youcom.go — 实现 eino retriever.Retriever 接口(GET https://ydc-index.io/v1/searchX-API-Key 认证),结果映射为 schema.Document(ID=url,Content=标题+描述+摘录片段,MetaData 含 url/title/source),按排名生成递减分数,结果总数按 TopK 截断(与 /v1/retriever 语义一致)
  • 新增 POST /v1/websearch 接口 — api/rag/v1/websearch.go + internal/controller/rag/rag_v1_websearch.go,参数风格与 /v1/retriever 一致(question 必填 / top_k 默认 5)
  • 新增 MCP 工具 web_searchinternal/mcp/websearch.go,与现有 retriever 工具相同的注册方式(cmd.go 一行注册);检索失败时返回友好文本而非协议错误
  • 新增 internal/logic/websearch/websearch.go — 惰性初始化(websearch 为可选功能,未配置时不影响进程启动)
  • 配置:config_demo.yaml 新增 websearch.youcom 段(apiKey / count / timeout);apiKey 留空时读取环境变量 YDC_API_KEY(获取地址 https://you.com/platform/api-keys)
  • API Key 不出现在任何日志或错误信息中;错误映射覆盖 401 / 403 / 422 / 429 / 5xx / 超时 / 响应解析失败
  • 新增 14 个单元测试(httptest 模拟,全部离线可运行)+ 1 个真实 API 集成测试(未设置 YDC_API_KEY 时自动跳过)
  • README 补充功能说明与配置方式

测试方式

# 单元测试(离线,无需 API Key)
cd server
go test ./core/websearch/ -v

# 集成测试(需要 API Key,仅 1 次真实调用)
export YDC_API_KEY=<你的 Key>
go test ./core/websearch/ -run TestYouComRetrieverIntegration -v

接口实测(服务启动后):

curl -X POST http://localhost:8000/api/v1/websearch \
  -H "Content-Type: application/json" \
  -d '{"question":"人工智能最新进展","top_k":3}'

实测返回 3 条真实结果(分数递减、附来源 url)。MCP 侧 tools/list 可见 web_search 工具,tools/call 实测返回真实网页结果。

未配置 Key 时:接口返回明确提示「未配置 You.com API Key,请设置环境变量 YDC_API_KEY 或在配置文件 websearch.youcom.apiKey 中填写」;MCP 工具返回友好文本;现有 /v1/retriever 与其他功能不受任何影响(已与干净 main 分支对比验证)。

gofmtgo vetgo build ./... 均通过;go test ./... 与 main 分支基线对比,唯一差异是新增的 websearch 包测试全部通过(main 上 core/rerank 等包的既有失败与本 PR 无关,未改动)。前端 npm run build 通过(本 PR 未改动前端代码)。

备注

  • 本 PR 未将联网结果接入 Rag.Retrieve 的向量检索与 rerank 流程,保持改动最小;如有需要,可作为后续迭代(例如将 websearch 作为可选召回路挂入多路召回)。
  • 遵循项目现有代码风格与提交习惯。

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