Просмотр исходного кода

fix: convert timestamps to milliseconds and ensure array fields are properly formatted

guantao 3 часов назад
Родитель
Сommit
5167c0feb4
1 измененных файлов с 44 добавлено и 7 удалено
  1. 44 7
      knowhub/vector_store.py

+ 44 - 7
knowhub/vector_store.py

@@ -168,22 +168,23 @@ class MilvusStore:
             return []
 
         # 返回实体字典,包含所有字段
+        # 注意:时间戳需要转换为毫秒(JavaScript Date 需要)
         return [
             {
                 "id": hit.entity.get("id"),
                 "message_id": hit.entity.get("message_id"),
                 "task": hit.entity.get("task"),
                 "content": hit.entity.get("content"),
-                "types": hit.entity.get("types"),
+                "types": list(hit.entity.get("types")) if hit.entity.get("types") else [],
                 "tags": hit.entity.get("tags"),
-                "tag_keys": hit.entity.get("tag_keys"),
-                "scopes": hit.entity.get("scopes"),
+                "tag_keys": list(hit.entity.get("tag_keys")) if hit.entity.get("tag_keys") else [],
+                "scopes": list(hit.entity.get("scopes")) if hit.entity.get("scopes") else [],
                 "owner": hit.entity.get("owner"),
-                "resource_ids": hit.entity.get("resource_ids"),
+                "resource_ids": list(hit.entity.get("resource_ids")) if hit.entity.get("resource_ids") else [],
                 "source": hit.entity.get("source"),
                 "eval": hit.entity.get("eval"),
-                "created_at": hit.entity.get("created_at"),
-                "updated_at": hit.entity.get("updated_at"),
+                "created_at": hit.entity.get("created_at") * 1000 if hit.entity.get("created_at") else None,
+                "updated_at": hit.entity.get("updated_at") * 1000 if hit.entity.get("updated_at") else None,
             }
             for hit in results[0]
         ]
@@ -206,6 +207,23 @@ class MilvusStore:
                           "source", "eval", "created_at", "updated_at"],
             limit=limit
         )
+
+        # 转换时间戳为毫秒,确保数组字段格式正确
+        for r in results:
+            if r.get("created_at"):
+                r["created_at"] = r["created_at"] * 1000
+            if r.get("updated_at"):
+                r["updated_at"] = r["updated_at"] * 1000
+            # 确保数组字段是列表格式
+            if r.get("types") and not isinstance(r["types"], list):
+                r["types"] = list(r["types"])
+            if r.get("tag_keys") and not isinstance(r["tag_keys"], list):
+                r["tag_keys"] = list(r["tag_keys"])
+            if r.get("scopes") and not isinstance(r["scopes"], list):
+                r["scopes"] = list(r["scopes"])
+            if r.get("resource_ids") and not isinstance(r["resource_ids"], list):
+                r["resource_ids"] = list(r["resource_ids"])
+
         return results
 
     def get_by_id(self, knowledge_id: str) -> Optional[Dict]:
@@ -224,7 +242,26 @@ class MilvusStore:
                           "tags", "tag_keys", "scopes", "owner", "resource_ids",
                           "source", "eval", "created_at", "updated_at"]
         )
-        return results[0] if results else None
+
+        if not results:
+            return None
+
+        # 转换时间戳和数组字段
+        r = results[0]
+        if r.get("created_at"):
+            r["created_at"] = r["created_at"] * 1000
+        if r.get("updated_at"):
+            r["updated_at"] = r["updated_at"] * 1000
+        if r.get("types") and not isinstance(r["types"], list):
+            r["types"] = list(r["types"])
+        if r.get("tag_keys") and not isinstance(r["tag_keys"], list):
+            r["tag_keys"] = list(r["tag_keys"])
+        if r.get("scopes") and not isinstance(r["scopes"], list):
+            r["scopes"] = list(r["scopes"])
+        if r.get("resource_ids") and not isinstance(r["resource_ids"], list):
+            r["resource_ids"] = list(r["resource_ids"])
+
+        return r
 
     def update(self, knowledge_id: str, updates: Dict):
         """