GET /api/v1/rag/chat_history。🔴 而本页用的那条接口【不写会话历史】 —— 全仓只有 6 条【流式】端点会写(
persist_turn),非流式的 /rag/search 一行都不写。⇒ 所以这里通常是空的,而那不是坏了:只有你在这个
thread_id 上用过流式接口,这里才会有东西。一句话进来,走固定管线(改写 → 向量 + BM25 → RRF → 生成), 出去的是带引用的答案和各阶段真实耗时。 不联网,不调外部工具。
本系统的知识来源被有意分成两条独立的线:
| 线 | 注定查什么 | 编排 |
|---|---|---|
| 内部线(本页) | 我们自己的文档库 —— 没有"要不要查"这个判断 | 固定管线(改写 → 向量+BM25 → RRF → 生成) |
| 外部线 | 模型自身 + 记忆 + 通用工具(含联网)—— 不接本库 | 模型自主决定调不调工具、调哪个 |
分成两条线的原因:意图分流做不到 100% 准。判错一次,外部场景就会被内部资料污染, 而页面上看不出它判错了。与其赌分类,不如让每条线没有判断,也就没有判错。 ⇒ 所以本站不在一个页面上让你"选走哪条线",两条线各有各的页面。
「内部检索 + 编排合起来服务于一个固定业务流」的那种形态 —— 目前尚未实现(施工单已写、未开工)。这里先占位; 那个模块做完之后,会把具体内容回写到本节。
预设问题取自本库的真实主题(售后与保修 / 备件调拨 / 上门作业 / 投诉升级)。
⚠️ 这条接口不收这几项 —— /rag/pg_search 的签名是
(req, user_name):没有 mode、没有 thread_id、也没有那三个开关。
它只做一件事:拿你的问题去做一次向量检索。
默认 accurate_norerank(改写 + 向量 + BM25 + RRF,不含重排)。
accurate 与 full 需要重排模型,本环境没有 ⇒ 这里不给入口。
点一下会真调 POST /api/v1/rag/search(⛔ 不是本地模拟)。
这三段是接口返回的 timing(真实毫秒)。
重排在 demo 上恒为 0 —— 镜像不装重排依赖(DEC-157)。
🔴 「生成答案」那一段【这里没有】 —— 实测 total_ms
只等于上面三段之和(它是检索管线的总时长,⛔ 不含生成)。
⛔ 拿它倒推生成耗时会在页面上印出一个假的 0。本页只读,不改动任何数据。
| 端点 | 它做什么 | 本环境 |
|---|---|---|
| POST /rag/pg_search | 只走向量检索 | 可用 |
| POST /rag/hybrid_search | 向量 + BM25 + RRF | 可用 |
| POST /rag/rewrite_search | 先让模型改写问题再检索 | 可用 |
| POST /rag/rerank_search | 交叉编码器重排 | 缺重排模型 |
| POST /rag/search | 本页用的那条(按 mode 组装) | 可用 |
🔴 点一次「提问」会跑【两次】:一次是你选的档(= 配置 A),另一次是最下面那档里【另一个可用档】(= 配置 B)—— 因为要真比出差异,就必须两个都真跑,⛔ 不能拿一次的结果编两次。
⚠️ 两次都按你当前那三个开关跑;generate_answer 打开时,两次都会花 LLM 的钱。
⛔ 两边一样的时候这个对比就是摆设 —— 真一样了它也会如实显示两边一样。
⚠️ 缺值一律显示「取不到」,⛔ 不显示 0(0 会被读成"没花钱")。
前三格来自 GET /api/v1/agent/cost/records,按本页这次的 thread_id 筛
(那个端点⛔ 没有 thread 过滤,所以是在客户端筛最近一批)。第四格来自 token/budget。
GET /api/v1/rag/chat_history。persist_turn),非流式的 /rag/search 一行都不写。thread_id 上用过流式接口,这里才会有东西。