ソースを参照

fix: 知识库绑定两个 Bug — DB 列缺失 + tenant 跨租户校验过严

1. 手动补建 kb_ids / kb_search_mode 列(_migrate 已更新,下次重启自动迁移)
2. update_agent_knowledge 校验 KB 存在性时去掉 tenant_id 约束:
   KB 是共享数据资产,Agent 的租户归属已校验,KB 无需同租户限制
   (单用户系统中 KB 与 Agent 常由不同 API Key/会话创建,tenant 不同属正常)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
kenny67nju 4 ヶ月 前
親
コミット
da4d3e2b62
1 ファイル変更、6 行追加、4 行削除
  1. 6 4
      agentpaas/api/v1/agents.py

+ 6 - 4
agentpaas/api/v1/agents.py

@@ -749,7 +749,10 @@ async def get_agent_knowledge(
     kb_ids = json.loads(agent.get("kb_ids") or "[]")
     kbs = []
     for kb_id in kb_ids:
-        kb = db.fetchone("SELECT * FROM knowledge_bases WHERE id = ?", (kb_id,))
+        kb = db.fetchone(
+            "SELECT id, name, root_dir, description FROM knowledge_bases WHERE id = ?",
+            (kb_id,)
+        )
         if kb:
             kbs.append(dict(kb))
     return {
@@ -773,10 +776,9 @@ async def update_agent_knowledge(
         (agent_id, tenant.tenant_id)
     ):
         api_error(404, "AGENT_NOT_FOUND", f"Agent {agent_id} not found")
-    # Validate that all kb_ids exist (for this tenant)
+    # Validate that all kb_ids exist (KB is a shared resource; no tenant restriction)
     for kb_id in req.kb_ids:
-        if not db.fetchone("SELECT id FROM knowledge_bases WHERE id = ? AND tenant_id = ?",
-                           (kb_id, tenant.tenant_id)):
+        if not db.fetchone("SELECT id FROM knowledge_bases WHERE id = ?", (kb_id,)):
             api_error(404, "KB_NOT_FOUND", f"Knowledge base {kb_id} not found")
     db.execute(
         "UPDATE agents SET kb_ids = ?, kb_search_mode = ?, updated_at = ? WHERE id = ?",