ymq
d3dda01e6e
fix: sqlor IN列表参数展开占位符(kb_delete 500+媒体检索潜伏同病,共4处)
2026-09-04 19:58:31 +08:00
ymq
3f5c6fc3e7
fix(search): 检索结果文档元数据富化——向量id经chunks表反查doc_id(此前恒为{})
2026-09-04 19:32:54 +08:00
ymq
ef4616d290
fix(search): VDB调用键名对齐uapi模板(colname/top_k)——collection/topK占位符不替换致静默0召回
2026-09-04 19:30:35 +08:00
ymq
2113066631
fix(search): VDB v2.0嵌套响应解析(data.data.rows)+output_fields用显式text(Milvus Lite不支持*通配)
2026-09-04 18:38:15 +08:00
ymq
15db4e2e1a
feat(api): kb_list端点(可见知识库)+删除tools.py直调通道(统一API模式)
2026-09-04 15:58:14 +08:00
ymq
bc2849549d
fix(ingest): 入库失败去静默化——真实原因落 error_msg
...
- _fail(): status=failed + error_msg 落库 + exception() 记日志(旧版只写
metadata 且 UPDATE 自身异常被吞 → 文档永停 pending 无从排障)
- dbname 钩子缺失时兜底落错(脱离服务进程的裸任务不再无日志消失)
- 文本主路径:embedding 返回空 / VDB upsert 非 SUCCEEDED 直接 failed+原因,
不再 except:pass 留 vector_id 空壳 done
- chunks INSERT 后补 COMMIT(纯 SELECT 后不 COMMIT 防 MDL 锁惯例)
2026-09-03 16:43:58 +08:00
ymq
98389da60b
fix(ids): 全仓 ID 生成统一 getID()/uuid()——禁 uuid4 截断
...
- api_core.py 5处、init.py 6处、pipeline.py 1处: uuid4().hex -> getID()
(uuid4 hex 32位+chunk后缀_cN 溢出 VARCHAR(32) → ingest 1406 DataError,
即 search 0 命中根因;getID() 21位放得下)
- upload_file.dspy: 去掉 replace('-','')[:16] 手工截断,直用沙箱 uuid()
- 规范:.py 必须 getID(),.dspy 必须 uuid()
2026-09-03 16:29:15 +08:00
ymq
282845bbf1
refactor(rag-api): 鉴权收敛 RBAC 会话,API 端点改授 logined
...
- 端点权限 any -> logined(用户纠偏:路由至少 logined)
- 认证统一由 RBAC 中间件把关:cookie 会话 或 Bearer <dapi key>
(dapi.bearer_auth 注册在 registered_auth_methods,认证后建立会话),
未认证到不了 dspy,删除 verify_api_key 自查
- dspy 用 C.session_env(request) 取真实请求 env(org 走会话),
与 UI 通道同一身份机制
- make_api_env 保留给内部 tools 通道(宿主注入可信 org,无 HTTP 会话)
2026-09-03 16:11:27 +08:00
ymq
51b0bf1b85
refactor(rag-api): API Key 改由平台 dapi 模块统一管理
...
- 删除自建 rag_api_keys 表 model + api_key_create/list/revoke 管理端点
(key 申请/管理走 dapi 的 downapp/downapikey UI,避免两套 key 体系)
- verify_api_key 改调 dapi.get_apikey_user:有效性/过期/IP白名单全走平台机制,
从认证用户 orgid 注入机构边界
- 7 个对外端点去掉 rag 侧 scopes 检查(授权粒度归 dapi 账号)
- 部署目标:产线平台测试环境(ragserver 弃用),rag 模块已在 pipeline-app pkgs
2026-09-03 16:04:54 +08:00
ymq
00262a6d2a
feat(rag-api): 对外B2B API+内部tools包装
...
- wwwroot/api/ 六个对外端点(Bearer Key 鉴权,路由授 any、业务鉴权在 api_core):
kb_create/kb_delete/doc_upload/doc_delete/tag_create/doc_set_tags/search
- rag/api_core.py: verify_api_key + make_api_env(org注入) + 六个业务核心
(复用 init.py 底层检索/入库能力,杜绝双实现分叉)
- 统一返回格式 {"status":"ok"|"error","data":...}
- rag/ingest.py: 入库管线从 upload_file.dspy 抽出共享(UI/API同一引擎)
- rag/tools.py: RAG_TOOL_SCHEMAS + exec_rag_tool(与API同构,供内部助手调用)
- rag_api_keys 表 model(key 只存 SHA256);管理端 api_key_create/list/revoke
- load_path.py 注册 7 个 API 端点(any) + 3 个管理端点(logined)
2026-09-03 15:51:19 +08:00
ymq
fd2a52a1a5
fix(rag-perm): file_list/file_serve 维护者也需要看文件列表和下载——maintain或search任一通过
2026-09-02 14:58:43 +08:00
ymq
1c1ef65931
feat(rag): 机构rags目录+容量检查参数化+KB级角色权限
...
- 存储: 知识库文件存 {workspace_base}/{org}/rags/{kb}/ (机构目录下开设rags目录)
- 容量: rag_check_storage_quota 参数控制是否检查机构上限(默认不检查)
- 权限: rag_knowledge_bases 加 maintain_roles/search_roles; 空=同机构默认可用
维护入口(upload/delete/rename/tree/tags)校验maintain; 检索入口(search/file_list/file_serve)校验search
- file_serve.dspy: 下载/预览走校验端点, 堵住/idfile/猜路径越权
- 机构隔离: 跨机构KB一律拒绝
2026-09-02 12:09:16 +08:00
ymq
03dbf0f2b5
feat(rag): 多媒体知识库接回——qwen3-vl在线(2560维)+CLIP保留给GPU;VDB地址读upapp;在线重排;配置界面4引擎
2026-09-01 15:47:21 +08:00
ymq
8e24060b7c
fix(rag): rag_engine_configs字段名model_name/endpoint_url对齐表结构
2026-09-01 12:34:28 +08:00
ymq
5f3b456955
feat(rag): 在线embedding/rerank(阿里llm表模型)+引擎配置界面,空=屏蔽;NER/图谱保持降级
2026-09-01 12:32:02 +08:00
ymq
789960a1cf
refactor(schema): rag 模块全部数据表加 rag_ 前缀(模块跨应用复用防冲突)
...
- models/ 重建为正确表定义格式(summary+fields+indexes),覆盖全部 11 个表
修正原 models/ 误放 CRUD 格式副本(缺 summary)导致 json2ddl 100% 失败被静默忽略
- json/ 6 个 CRUD 定义 tblname 加前缀 + 文件改名
- 129 处 SQL/sor 表名加 rag_ 前缀(URL 路径 knowledge_bases_list 保持不变)
- 新增 init/migrate_rag_prefix.sql 幂等 RENAME TABLE 迁移
2026-08-25 14:24:37 +08:00
ymq
fb2cf3e703
fix(display): 知识库卡片显示友好向量引擎名(文本 bge-m3 / 多媒体 CLIP)
2026-08-25 13:26:17 +08:00
ymq
1054dbb3a9
feat(embedding): 知识库支持文本(bge-m3 /txte)/多媒体(CLIP /mme)双向量引擎
...
- create_kb/new_kb_form 加向量引擎选择(文本 bge-m3 / 多媒体 clip-vith14)
- upload_file/batch_ingest/search_result/init.py 按 embedding_engine 路由到 /txte 或 /mme
- 文本知识库上传媒体文件友好拒绝(不再崩溃报错)
2026-08-25 13:15:11 +08:00
rag
b86883c1f8
feat: _rag_ingest_async chunk INSERT加metadata列
2026-08-12 11:11:02 +08:00
ymq
24bc017e1f
fix: 所有id统一32字节 — init.py去掉[:16], DSPY文件改用getID(32)去import uuid
2026-08-07 16:47:50 +08:00
1dd59f7caa
feat(tags): multi-select tag list + dedup create + tag_sync endpoint
...
- tag_form.dspy: rewrite as multi-select checkbox list (clickable rows with toggle)
+ input field for new tag with + button (calls /api/tag/create with dedup)
+ submit button calls /api/tag/sync to sync media_tags
+ dynamically add new tag row to list after creation
- media_cards.dspy: read tags from media_tags table instead of metadata
- init.py: tag_create_handler adds dedup (check existing by kb_id+name)
- init.py: new tag_sync_handler (full sync: delete old + insert selected)
- config.json: add /api/tag/sync route
2026-08-05 15:36:44 +08:00
371afae84a
fix: file list action buttons spacing 6px->14px; drop analysis button; legacy /api/doc/upload now saves via FileStorage (flat files/ layout caused 404)
2026-08-05 12:17:25 +08:00
548fc6013e
feat: per-org storage quota enforcement — org_storage_limits table, upload rejection, UI display
2026-08-04 15:36:53 +08:00
Hermes
908480f35e
fix: file_url uses file_path directly with /idfile prefix
2026-07-30 14:24:49 +08:00
Hermes
a481130810
feat: search page + KB selector + file upload, pipeline module
2026-07-30 13:53:17 +08:00
c2f0d4e8a7
fix: detail.ui sidebar overflow hidden — prevent tree nodes from expanding menu width
2026-07-27 18:51:19 +08:00
850e96e0ea
feat: uapi-based unified search with text+media, multi-KB, rerank
...
- search_handler: query(opt) + media(opt) → embed → VDB search → rerank → enriched
- _resolve_search_kbs: specific KB or all org KBs
- _build_search_vector: text + image/audio/video/text file → CLIP embedding
- _parse_vdb_hits/_apply_rerank/_enrich_search_results: result pipeline
2026-07-27 14:08:47 +08:00
f494eaa686
feat: uapi-based RAG ingest pipeline + improved delete cleanup
...
- _rag_ingest_async(): chunk → embed(VDB) → VDB upsert → NER → graph save → DB records
- _split_text(): paragraph-based text chunker
- doc_upload_handler: replace pipeline.ingest with _rag_ingest_async
- doc_delete_handler: use uapi vdb-delete + graph-delete (was broken graph/save)
2026-07-27 13:49:41 +08:00
50b2e35e7b
feat: replace hardcoded VDB/Graph calls with uapi-based async functions
...
- Add _call_uapi() for unified GPU service calling via uapi config
- Add _call_vdb_async() / _call_graph_async() async wrappers
- Update doc_delete_handler to use async versions
- Keep sync wrappers for backward compat
2026-07-27 12:10:28 +08:00
fbba95e683
fix: /rag/ prefix in all module URLs
2026-07-24 14:34:36 +08:00
5664508234
fix: wwwroot/json/models/conf at repo root (Sage module convention)
2026-07-24 13:39:39 +08:00
8bef57b89e
fix: move code into rag/ subpackage for find_packages()
2026-07-24 13:36:54 +08:00