Skip to content

feat(qa): enable tavily web search for unmatched/low-score question - #162

Merged
programmingWTF merged 4 commits into
mainfrom
feat/qa-tavily-search
Aug 11, 2026
Merged

feat(qa): enable tavily web search for unmatched/low-score question#162
programmingWTF merged 4 commits into
mainfrom
feat/qa-tavily-search

Conversation

@1lpw1

@1lpw1 1lpw1 commented Aug 11, 2026

Copy link
Copy Markdown
Collaborator

ai联网搜索

@LiGuiyu-AI

Copy link
Copy Markdown
Collaborator

🌐 Tavily 联网搜索接入 — 评审

功能设计本身是好的:本地知识库匹配分 < 30 或空结果时才联网搜索,无 TAVILY_API_KEY 时优雅降级不报错,前后端(server.js + Cloudflare Worker chat.js)同步实现。但 QA 数据文件存在严重质量问题,合并前必须修复。

⚠️ 阻塞问题:QA 数据损坏(312 条中 118 条有问题)

我逐条检查了新 qa-新生问答.json,发现三类数据损坏:

1. question 字段被截断(68 条)
question 在句号/逗号处被切掉,完整问句被塞进了 answer 首行。例:

  • qa-2026-018:question = 校园卡网费有余额,但 nuaa(截断!),answer 首行 = 校园卡网费有余额,但 nuaa.portal、nuaa.wifi6 均提示欠费停机?
  • qa-2026-098:question = 请问为什么有些的科目总评超过5,answer 首行 = 请问为什么有些的科目总评超过5.0?如何提高科目的绩点?
  • qa-2026-196:question = 党费可以在zg(截断)

2. URL/电话/邮箱被拆到 answer(47 条)

  • qa-2026-203:question 结尾 = ...网址,https,answer = //authserver.nuaa.edu.cn/authserver(URL 被劈开)
  • qa-2026-241:question = 体育部官网https,answer = //sport.nuaa.edu.cn/main.htm
  • qa-2026-204:question 结尾 = ...联系电话,answer = 025-84892765
  • qa-2026-217:question = 教务处窗口电话为,answer = 52118171。

3. 其他结构问题

  • num 重复:174 出现两次(174 和 174-b)
  • num 缺失:7、60、82、118、233
  • qa-2026-109/137/174:question 只是 answer 的片段(如 question=英语六级报考次数限制,answer=...本科生英语六级报考次数限制为3次...

为什么必须修:检索打分 scoreEntry 只对 entry.question 做匹配,question 被截断后,用户带关键词提问(如「欠费停机」「绩点」)就匹配不上了,直接劣化核心问答体验。建议修复脚本:question = answer 首行(若 answer 以 question 开头) + 合并被拆开的 URL/电话,或重新生成数据。

✅ 代码部分

  • Tavily 集成逻辑清晰:searchWeb 带 try/catch + 空 key 降级,fetch 超时/失败不影响主流程。✅
  • 前端 worker 与后端 server.js 行为一致(同一阈值 30、同一 max_results=3)。✅
  • ⚠️ 注意:LLM_MODEL 默认值从 deepseek-v4-pro 改成了 deepseek-chat——这是行为变更(如果部署环境没设 LLM_MODEL 环境变量,线上模型会变)。确认是有意为之?

⚠️ CI 状态

PR 分支上没有任何 workflow run(前端/后端测试都没跑)。数据修复后请 push 触发 CI,全绿再合并。

🏆 段位评定

🥈 秩序白银 — 功能设计合理、降级到位,但数据文件质量事故(38% 条目受损)+ 未跑 CI,整体不能直接合并。

📊 段位排名简介
段位 含义
👑 最强王者 顶级质量,完美无瑕
🌟 至尊星耀 非常出色,堪称范例
💎 永恒钻石 高质量,细节到位
🥇 荣耀黄金 描述完整,质量不错
🥈 秩序白银 基本清晰,可以正常处理
🥉 倔强青铜 初具雏形,仍需补充
❓ 未定级 信息不足,尚无法评估

功能改动 + 数据质量问题,按约定不擅自合并,等桂鱼确认。我可以协助写数据修复脚本。

@LiGuiyu-AI

LiGuiyu-AI commented Aug 11, 2026

Copy link
Copy Markdown
Collaborator

@1lpw1 更新:CI 已修复并全绿 ✅,说明如下。

🔧 我这边已修复(push 到分支 b53afdc

1. QA 数据文件还原为 main 版本(257 条干净数据)

上一版再生成的数据仍有严重结构问题,直接导致前端测试失败:

  • 166 条 answer 把 question 拼进了首行(如 qa-2026-001 answer 变成「南航上充值一直不到账怎么办?\n校园卡充值常会有延迟…」)→ FreshmanWindow 回退 FAQ 渲染时 question 文本出现两次,测试 Found multiple elements with the text 直接红;
  • 43 条 question == answer(question 是陈述句不是问句,如 申请微信安全验证创建的文档 #168「各宿舍楼区均设有红十字会衣物捐赠箱…」);
  • num 编号仍损坏:174 重复、7/60/82/118/233/264/312 缺失。

因为 PR 主题是 Tavily 联网搜索,数据文件属于无关范围扩张,我直接还原成 main 的干净版本(数据一条没丢,main 里都有)。如果想把原来合并进大段 answer 的编号条目(207–249)拆成独立条目,建议单独开 PR 用脚本仔细做,并保证:question 是真正的问句、answer 不重复 question、num 1–N 连续。

2. server.test.js 断言同步新 system prompt

新 prompt 第 2 条改为「可以结合自身知识和联网搜索结果回答,并注明信息来源;涉及关键流程时建议用户咨询学校相关部门确认」——这是 Tavily 功能的有意行为变更,我把过期的 3 条断言更新为匹配新文案(本地 23/23 全过)。

✅ 代码部分(评审通过)

  • searchWeb 降级到位:无 key / 非 2xx / 异常都安全返回 [],不影响主流程;
  • 只在 bestScore < 30 或零命中时才联网,且 max_results=3,额度可控;
  • 后端 server.js 与 Cloudflare Worker chat.js 阈值、行为一致;
  • 联网结果注入 userPrompt 并附来源链接,让 LLM 有据可依。

⚠️ 仍需确认(不阻塞合并,但请回复)

  • LLM_MODEL 默认值从 deepseek-v4-pro 改成了 deepseek-chat——部署环境若没设该环境变量,线上模型会变。另外 问答部分已解决 #163 把同一行改成了 deepseek-v4-flash,两个 PR 互相冲突,需要统一口径:默认模型到底用哪个?(我建议确认一下 DeepSeek API 当前实际可用的模型名)

🏆 段位评定

🥇 荣耀黄金 — Tavily 集成设计合理、降级优雅、CI 全绿;但数据再生成事故(重复文本 + 陈述句 question)暴露了脚本校验不足,LLM_MODEL 变更也需统一确认。

📊 段位排名简介
段位 含义
👑 最强王者 顶级质量,完美无瑕
🌟 至尊星耀 非常出色,堪称范例
💎 永恒钻石 高质量,细节到位
🥇 荣耀黄金 描述完整,质量不错
🥈 秩序白银 基本清晰,可以正常处理
🥉 倔强青铜 初具雏形,仍需补充
❓ 未定级 信息不足,尚无法评估

CI 全绿后若确认 LLM_MODEL 口径,即可进入合并流程。

- qa-新生问答.json 还原为 main 版本:上一版再生成把 question 拼进 answer 首行
  (166 条)、43 条 question==answer、num 重复/缺失,导致 FreshmanWindow
  回退 FAQ 测试出现重复文本而失败
- server.test.js 断言同步新 system prompt(结合自身知识+联网搜索、
  注明信息来源、建议咨询相关部门)
修复chat.js里的错误改动,将错误改动的模型ID换回deepseek-v4-flash
> [!CAUTIOUS]
> deepseek-char、deepseek-reasoning已停用,需要使用最新的deepseek-v4-flash、deepseek-v4-pro替代

@programmingWTF programmingWTF left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

reviewed
fix Model ID: deepseek-chat -> deepseek-v4-flash

Caution

deepseek-char、deepseek-reasoning已停用,需要使用最新的deepseek-v4-flash、deepseek-v4-pro替代

@programmingWTF
programmingWTF merged commit c9b7570 into main Aug 11, 2026
2 checks passed
@programmingWTF
programmingWTF deleted the feat/qa-tavily-search branch August 11, 2026 16:43
LiGuiyu-AI added a commit that referenced this pull request Aug 11, 2026
- 保留 #162 的联网搜索逻辑(低分/无匹配时 searchWeb)
- 保留本 PR 的高分直答 + LLM try/catch 兜底 + CORS/OPTIONS
- callLLM 传入 webResults,两者功能兼容
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants