Skip to content

fix: 为知识库 rerank 增加独立超时保护#1259

Open
GggggitHub wants to merge 1 commit into
Tencent:mainfrom
GggggitHub:fix/rerank-timeout-25s
Open

fix: 为知识库 rerank 增加独立超时保护#1259
GggggitHub wants to merge 1 commit into
Tencent:mainfrom
GggggitHub:fix/rerank-timeout-25s

Conversation

@GggggitHub
Copy link
Copy Markdown

Pull Request

描述 (Description)

修复远程 rerank 服务响应过慢时53秒,knowledge_search 工具一直阻塞到整轮工具调用超时的问题。

根因:knowledge_search 复用外层工具执行 context 调用 rerank;embedding 和检索消耗部分时间后,慢 rerank 会占满剩余预算,最终触
context deadline exceeded,并使后续 LLM fallback 也立即失败。

改动:

  • internal/agent/tools/knowledge_search.go: 为 rerankWithModel 增加 25s 子 context,限制单次 rerank 上游调用耗时。
  • rerank 超时后保持原有降级路径,由外层逻辑记录错误并继续 fallback/返回检索结果,避免占满 60s 工具总超时。

变更类型 (Type of Change)

  • 🐛 Bug 修复 (Bug fix)
  • ✨ 新功能 (New feature)
  • 💥 破坏性变更 (Breaking change)
  • 📚 文档更新 (Documentation update)
  • 🎨 代码重构 (Code refactoring)
  • ⚡ 性能优化 (Performance improvement)
  • 🧪 测试相关 (Test related)
  • 🔧 配置变更 (Configuration change)
  • 🐳 Docker 相关 (Docker related)
  • 🎨 前端 UI/UX (Frontend UI/UX)

影响范围 (Scope)

  • 后端 API (Backend API)
  • 前端界面 (Frontend UI)
  • 数据库 (Database)
  • 文档解析服务 (Document Reader Service)
  • MCP 服务器 (MCP Server)
  • Docker 配置 (Docker Configuration)
  • 配置文件 (Configuration)
  • 其他 (Other):

测试 (Testing)

  • 单元测试 (Unit tests)
  • 集成测试 (Integration tests)
  • 手动测试 (Manual testing)
  • 前端测试 (Frontend testing)
  • API 测试 (API testing)

测试步骤 (Test Steps)

  1. 运行后端相关测试:

    go test ./internal/agent ./internal/agent/tools ./internal/models/rerank
    
  2. 使用 WeKnora-app 容器访问远程 rerank 服务,确认接口正常返回:

    curl http://10.67.1.74:18080/v1/rerank

  3. 使用本地 0.6B rerank 服务验证实际响应时间:短文档约 0.69s,长文档约 2.68s,避免阻塞到 60s 工具总超时。

检查清单 (Checklist)

  • 代码遵循项目的编码规范
  • 已进行自我代码审查
  • 代码变更已添加适当的注释
  • 相关文档已更新
  • 变更不会产生新的警告
  • 已添加测试用例证明修复有效或功能正常
  • 新功能和变更已更新到相关文档
  • 破坏性变更已在描述中明确说明

相关 Issue

Fixes #

截图/录屏 (Screenshots/Recordings)

image

无。该 PR 仅涉及后端 rerank 调用超时控制,无前端 UI 变更。

数据库迁移 (Database Migration)

  • 需要数据库迁移
  • 不需要数据库迁移

配置变更 (Configuration Changes)

无。该 PR 仅增加 rerank 调用的独立超时控制,不引入新的配置项。

部署说明 (Deployment Notes)

正常后端部署即可。该变更不需要额外数据库迁移或配置变更。

其他信息 (Additional Information)

该修复不会改变 rerank 成功时的排序逻辑;仅在远程 rerank 服务响应过慢时更早释放调用,避免拖垮整轮 knowledge_search 工具执行。

修复远程 rerank 服务响应过慢时,knowledge_search 工具一直阻塞到整轮工具调用超时的问题。

根因:knowledge_search 复用外层工具执行 context 调用 rerank;embedding 和检索消耗部分时间后,慢 rerank 会占满剩余预算,最终触发 context deadline exceeded,并使后续 LLM fallback 也立即失败。

改动:
- internal/agent/tools/knowledge_search.go: 为 rerankWithModel 增加 25s 子 context,限制单次 rerank 上游调用耗时。
- rerank 超时后保持原有降级路径,由外层逻辑记录错误并继续 fallback/返回检索结果,避免占满 60s 工具总超时。

验证:
- go test ./internal/agent ./internal/agent/tools ./internal/models/rerank
- WeKnora-app -> http://10.67.1.74:18080/v1/rerank 测试 0.6B rerank 正常返回,短文档约 0.69s,长文档约 2.68s。
@GggggitHub
Copy link
Copy Markdown
Author

管理员呢?我的PR怎么 merge ?

@lyingbug
Copy link
Copy Markdown
Collaborator

langfuse中embedding耗时5s+?rerank耗时50s+,这个本身不太正常。通常embedding耗时200ms,rerank 800ms

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.

2 participants