From 88e3d12bd356f1e70a2442c3ea4ae85a9b123b5f Mon Sep 17 00:00:00 2001 From: lipengfei <15566300566@163.com> Date: Fri, 18 Oct 2024 22:03:08 +0800 Subject: [PATCH] feat: add document structure into GraphRAG (#2033) Co-authored-by: Appointat Co-authored-by: tpoisonooo Co-authored-by: vritser --- .env.template | 5 +- dbgpt/_private/config.py | 4 +- dbgpt/app/knowledge/service.py | 12 +- dbgpt/datasource/conn_tugraph.py | 40 +- dbgpt/rag/transformer/graph_extractor.py | 12 +- dbgpt/rag/transformer/keyword_extractor.py | 18 +- dbgpt/serve/rag/connector.py | 2 +- dbgpt/storage/graph_store/base.py | 84 +- dbgpt/storage/graph_store/factory.py | 1 + dbgpt/storage/graph_store/graph.py | 123 ++- dbgpt/storage/graph_store/memgraph_store.py | 84 +- dbgpt/storage/graph_store/tugraph_store.py | 466 ++-------- dbgpt/storage/knowledge_graph/base.py | 3 +- .../storage/knowledge_graph/community/base.py | 121 ++- .../community/community_store.py | 17 +- .../knowledge_graph/community/factory.py | 17 +- .../community/memgraph_store_adapter.py | 186 ++++ .../community/tugraph_adapter.py | 52 -- .../community/tugraph_store_adapter.py | 808 ++++++++++++++++++ .../knowledge_graph/community_summary.py | 568 ++++++++---- .../knowledge_graph/knowledge_graph.py | 31 +- dbgpt/storage/metadata/db_manager.py | 1 + .../cookbook/rag/graph_rag_app_develop.md | 61 +- .../cookbook/rag/image_graphrag_0_6_1.png | Bin 0 -> 199966 bytes .../graph_rag/image_graphrag_0_6_1.png | Bin 0 -> 199966 bytes .../datasource/test_conn_tugraph.py | 7 +- .../graph_store/test_memgraph_store.py | 43 +- .../graph_store/test_tugraph_store.py | 57 +- .../test_tugraph_store_with_summary.py | 23 +- 29 files changed, 1910 insertions(+), 936 deletions(-) create mode 100644 dbgpt/storage/knowledge_graph/community/memgraph_store_adapter.py delete mode 100644 dbgpt/storage/knowledge_graph/community/tugraph_adapter.py create mode 100644 dbgpt/storage/knowledge_graph/community/tugraph_store_adapter.py create mode 100644 docs/docs/cookbook/rag/image_graphrag_0_6_1.png create mode 100644 docs/static/img/chat_knowledge/graph_rag/image_graphrag_0_6_1.png diff --git a/.env.template b/.env.template index 598407456..84ebe84a6 100644 --- a/.env.template +++ b/.env.template @@ -157,12 +157,15 @@ EXECUTE_LOCAL_COMMANDS=False #*******************************************************************# VECTOR_STORE_TYPE=Chroma GRAPH_STORE_TYPE=TuGraph -GRAPH_COMMUNITY_SUMMARY_ENABLED=True KNOWLEDGE_GRAPH_EXTRACT_SEARCH_TOP_SIZE=5 KNOWLEDGE_GRAPH_EXTRACT_SEARCH_RECALL_SCORE=0.3 KNOWLEDGE_GRAPH_COMMUNITY_SEARCH_TOP_SIZE=20 KNOWLEDGE_GRAPH_COMMUNITY_SEARCH_RECALL_SCORE=0.0 +ENABLE_GRAPH_COMMUNITY_SUMMARY=True # enable the graph community summary +ENABLE_TRIPLET_GRAPH=True # enable the graph search for triplets +ENABLE_DOCUMENT_GRAPH=True # enable the graph search for documents and chunks + ### Chroma vector db config #CHROMA_PERSIST_PATH=/root/DB-GPT/pilot/data diff --git a/dbgpt/_private/config.py b/dbgpt/_private/config.py index 99eb0e2eb..bbdf59953 100644 --- a/dbgpt/_private/config.py +++ b/dbgpt/_private/config.py @@ -213,8 +213,8 @@ def __init__(self) -> None: # Vector Store Configuration self.VECTOR_STORE_TYPE = os.getenv("VECTOR_STORE_TYPE", "Chroma") - self.GRAPH_COMMUNITY_SUMMARY_ENABLED = ( - os.getenv("GRAPH_COMMUNITY_SUMMARY_ENABLED", "").lower() == "true" + self.ENABLE_GRAPH_COMMUNITY_SUMMARY = ( + os.getenv("ENABLE_GRAPH_COMMUNITY_SUMMARY", "").lower() == "true" ) self.MILVUS_URL = os.getenv("MILVUS_URL", "127.0.0.1") self.MILVUS_PORT = os.getenv("MILVUS_PORT", "19530") diff --git a/dbgpt/app/knowledge/service.py b/dbgpt/app/knowledge/service.py index 0aecac6e7..9904ecb36 100644 --- a/dbgpt/app/knowledge/service.py +++ b/dbgpt/app/knowledge/service.py @@ -12,7 +12,6 @@ KnowledgeDocumentEntity, ) from dbgpt.app.knowledge.request.request import ( - ChunkEditRequest, ChunkQueryRequest, DocumentQueryRequest, DocumentRecallTestRequest, @@ -650,12 +649,17 @@ def query_graph(self, space_name, limit): { "id": node.vid, "communityId": node.get_prop("_community_id"), - "name": node.vid, - "type": "", + "name": node.name, + "type": node.get_prop("type") or "", } ) for edge in graph.edges(): res["edges"].append( - {"source": edge.sid, "target": edge.tid, "name": edge.name, "type": ""} + { + "source": edge.sid, + "target": edge.tid, + "name": edge.name, + "type": edge.get_prop("type") or "", + } ) return res diff --git a/dbgpt/datasource/conn_tugraph.py b/dbgpt/datasource/conn_tugraph.py index 18c2dd9cd..191bfea87 100644 --- a/dbgpt/datasource/conn_tugraph.py +++ b/dbgpt/datasource/conn_tugraph.py @@ -1,7 +1,7 @@ """TuGraph Connector.""" import json -from typing import Dict, Generator, List, cast +from typing import Dict, Generator, List, Tuple, cast from .base import BaseConnector @@ -21,8 +21,7 @@ def __init__(self, driver, graph): self._session = None def create_graph(self, graph_name: str) -> None: - """Create a new graph.""" - # run the query to get vertex labels + """Create a new graph in the database if it doesn't already exist.""" try: with self._driver.session(database="default") as session: graph_list = session.run("CALL dbms.graph.listGraphs()").data() @@ -32,10 +31,10 @@ def create_graph(self, graph_name: str) -> None: f"CALL dbms.graph.createGraph('{graph_name}', '', 2048)" ) except Exception as e: - raise Exception(f"Failed to create graph '{graph_name}': {str(e)}") + raise Exception(f"Failed to create graph '{graph_name}': {str(e)}") from e def delete_graph(self, graph_name: str) -> None: - """Delete a graph.""" + """Delete a graph in the database if it exists.""" with self._driver.session(database="default") as session: graph_list = session.run("CALL dbms.graph.listGraphs()").data() exists = any(item["graph_name"] == graph_name for item in graph_list) @@ -61,17 +60,20 @@ def from_uri_db( "`pip install neo4j`" ) from err - def get_table_names(self) -> Dict[str, List[str]]: + def get_table_names(self) -> Tuple[List[str], List[str]]: """Get all table names from the TuGraph by Neo4j driver.""" - # run the query to get vertex labels with self._driver.session(database=self._graph) as session: - v_result = session.run("CALL db.vertexLabels()").data() - v_data = [table_name["label"] for table_name in v_result] + # Run the query to get vertex labels + raw_vertex_labels: Dict[str, str] = session.run( + "CALL db.vertexLabels()" + ).data() + vertex_labels = [table_name["label"] for table_name in raw_vertex_labels] + + # Run the query to get edge labels + raw_edge_labels: Dict[str, str] = session.run("CALL db.edgeLabels()").data() + edge_labels = [table_name["label"] for table_name in raw_edge_labels] - # run the query to get edge labels - e_result = session.run("CALL db.edgeLabels()").data() - e_data = [table_name["label"] for table_name in e_result] - return {"vertex_tables": v_data, "edge_tables": e_data} + return vertex_labels, edge_labels def get_grants(self): """Get grants.""" @@ -100,7 +102,7 @@ def run(self, query: str, fetch: str = "all") -> List: result = session.run(query) return list(result) except Exception as e: - raise Exception(f"Query execution failed: {e}") + raise Exception(f"Query execution failed: {e}\nQuery: {query}") from e def run_stream(self, query: str) -> Generator: """Run GQL.""" @@ -109,11 +111,15 @@ def run_stream(self, query: str) -> Generator: yield from result def get_columns(self, table_name: str, table_type: str = "vertex") -> List[Dict]: - """Get fields about specified graph. + """Retrieve the column for a specified vertex or edge table in the graph db. + + This function queries the schema of a given table (vertex or edge) and returns + detailed information about its columns (properties). Args: table_name (str): table name (graph name) table_type (str): table type (vertex or edge) + Returns: columns: List[Dict], which contains name: str, type: str, default_expression: str, is_in_primary_key: bool, comment: str @@ -146,8 +152,8 @@ def get_indexes(self, table_name: str, table_type: str = "vertex") -> List[Dict] """Get table indexes about specified table. Args: - table_name:(str) table name - table_type:(str)'vertex' | 'edge' + table_name (str): table name + table_type (str): 'vertex' | 'edge' Returns: List[Dict]:eg:[{'name': 'idx_key', 'column_names': ['id']}] """ diff --git a/dbgpt/rag/transformer/graph_extractor.py b/dbgpt/rag/transformer/graph_extractor.py index 18e867683..12751e89f 100644 --- a/dbgpt/rag/transformer/graph_extractor.py +++ b/dbgpt/rag/transformer/graph_extractor.py @@ -65,7 +65,9 @@ def _parse_response(self, text: str, limit: Optional[int] = None) -> List[Graph] match = re.match(r"\((.*?)#(.*?)\)", line) if match: name, summary = [part.strip() for part in match.groups()] - graph.upsert_vertex(Vertex(name, description=summary)) + graph.upsert_vertex( + Vertex(name, description=summary, vertex_type="entity") + ) elif current_section == "Relationships": match = re.match(r"\((.*?)#(.*?)#(.*?)#(.*?)\)", line) if match: @@ -74,7 +76,13 @@ def _parse_response(self, text: str, limit: Optional[int] = None) -> List[Graph] ] edge_count += 1 graph.append_edge( - Edge(source, target, name, description=summary) + Edge( + source, + target, + name, + description=summary, + edge_type="relation", + ) ) if limit and edge_count >= limit: diff --git a/dbgpt/rag/transformer/keyword_extractor.py b/dbgpt/rag/transformer/keyword_extractor.py index dec5f14a0..9a0776e13 100644 --- a/dbgpt/rag/transformer/keyword_extractor.py +++ b/dbgpt/rag/transformer/keyword_extractor.py @@ -1,4 +1,5 @@ """KeywordExtractor class.""" + import logging from typing import List, Optional @@ -39,12 +40,15 @@ def __init__(self, llm_client: LLMClient, model_name: str): def _parse_response(self, text: str, limit: Optional[int] = None) -> List[str]: keywords = set() - for part in text.split(";"): - for s in part.strip().split(","): - keyword = s.strip() - if keyword: - keywords.add(keyword) - if limit and len(keywords) >= limit: - return list(keywords) + lines = text.replace(":", "\n").split("\n") + + for line in lines: + for part in line.split(";"): + for s in part.strip().split(","): + keyword = s.strip() + if keyword: + keywords.add(keyword) + if limit and len(keywords) >= limit: + return list(keywords) return list(keywords) diff --git a/dbgpt/serve/rag/connector.py b/dbgpt/serve/rag/connector.py index ae7cf1773..4601ae9ae 100644 --- a/dbgpt/serve/rag/connector.py +++ b/dbgpt/serve/rag/connector.py @@ -128,7 +128,7 @@ def __init__( def __rewrite_index_store_type(self, index_store_type): # Rewrite Knowledge Graph Type - if CFG.GRAPH_COMMUNITY_SUMMARY_ENABLED: + if CFG.ENABLE_GRAPH_COMMUNITY_SUMMARY: if index_store_type == "KnowledgeGraph": return "CommunitySummaryKnowledgeGraph" return index_store_type diff --git a/dbgpt/storage/graph_store/base.py b/dbgpt/storage/graph_store/base.py index 24a4b467b..8c0454425 100644 --- a/dbgpt/storage/graph_store/base.py +++ b/dbgpt/storage/graph_store/base.py @@ -1,11 +1,11 @@ """Graph store base class.""" + import logging from abc import ABC, abstractmethod -from typing import Generator, List, Optional, Tuple +from typing import Optional from dbgpt._private.pydantic import BaseModel, ConfigDict, Field from dbgpt.core import Embeddings -from dbgpt.storage.graph_store.graph import Direction, Graph logger = logging.getLogger(__name__) @@ -23,78 +23,36 @@ class GraphStoreConfig(BaseModel): default=None, description="The embedding function of graph store, optional.", ) - summary_enabled: bool = Field( + enable_summary: bool = Field( default=False, description="Enable graph community summary or not.", ) + enable_document_graph: bool = Field( + default=True, + description="Enable document graph search or not.", + ) + enable_triplet_graph: bool = Field( + default=True, + description="Enable knowledge graph search or not.", + ) class GraphStoreBase(ABC): """Graph store base class.""" + def __init__(self, config: GraphStoreConfig): + """Initialize graph store.""" + self._config = config + self._conn = None + @abstractmethod def get_config(self) -> GraphStoreConfig: """Get the graph store config.""" @abstractmethod - def get_vertex_type(self) -> str: - """Get the vertex type.""" - - @abstractmethod - def get_edge_type(self) -> str: - """Get the edge type.""" - - @abstractmethod - def insert_triplet(self, sub: str, rel: str, obj: str): - """Add triplet.""" - - @abstractmethod - def insert_graph(self, graph: Graph): - """Add graph.""" - - @abstractmethod - def get_triplets(self, sub: str) -> List[Tuple[str, str]]: - """Get triplets.""" - - @abstractmethod - def delete_triplet(self, sub: str, rel: str, obj: str): - """Delete triplet.""" + def _escape_quotes(self, text: str) -> str: + """Escape single and double quotes in a string for queries.""" - @abstractmethod - def truncate(self): - """Truncate Graph.""" - - @abstractmethod - def drop(self): - """Drop graph.""" - - @abstractmethod - def get_schema(self, refresh: bool = False) -> str: - """Get schema.""" - - @abstractmethod - def get_full_graph(self, limit: Optional[int] = None) -> Graph: - """Get full graph.""" - - @abstractmethod - def explore( - self, - subs: List[str], - direct: Direction = Direction.BOTH, - depth: Optional[int] = None, - fan: Optional[int] = None, - limit: Optional[int] = None, - ) -> Graph: - """Explore on graph.""" - - @abstractmethod - def query(self, query: str, **args) -> Graph: - """Execute a query.""" - - def aquery(self, query: str, **args) -> Graph: - """Async execute a query.""" - return self.query(query, **args) - - @abstractmethod - def stream_query(self, query: str) -> Generator[Graph, None, None]: - """Execute stream query.""" + # @abstractmethod + # def _paser(self, entities: List[Vertex]) -> str: + # """Parse entities to string.""" diff --git a/dbgpt/storage/graph_store/factory.py b/dbgpt/storage/graph_store/factory.py index cf598966a..a7564d0c9 100644 --- a/dbgpt/storage/graph_store/factory.py +++ b/dbgpt/storage/graph_store/factory.py @@ -1,4 +1,5 @@ """Graph store factory.""" + import logging from typing import Tuple, Type diff --git a/dbgpt/storage/graph_store/graph.py b/dbgpt/storage/graph_store/graph.py index 555bcc14d..2807afda1 100644 --- a/dbgpt/storage/graph_store/graph.py +++ b/dbgpt/storage/graph_store/graph.py @@ -1,4 +1,5 @@ """Graph definition.""" + import itertools import json import logging @@ -6,13 +7,41 @@ from abc import ABC, abstractmethod from collections import defaultdict from enum import Enum -from typing import Any, Dict, Iterator, List, Optional, Set, Tuple +from typing import Any, Callable, Dict, Iterator, List, Optional, Set, Tuple import networkx as nx logger = logging.getLogger(__name__) +class GraphElemType(Enum): + """Type of element in graph.""" + + DOCUMENT = "document" + CHUNK = "chunk" + ENTITY = "entity" # view as general vertex in the general case + RELATION = "relation" # view as general edge in the general case + INCLUDE = "include" + NEXT = "next" + + DOCUMENT_INCLUDE_CHUNK = "document_include_chunk" + CHUNK_INCLUDE_CHUNK = "chunk_include_chunk" + CHUNK_INCLUDE_ENTITY = "chunk_include_entity" + CHUNK_NEXT_CHUNK = "chunk_next_chunk" + + def is_vertex(self) -> bool: + """Check if the element is a vertex.""" + return self in [ + GraphElemType.DOCUMENT, + GraphElemType.CHUNK, + GraphElemType.ENTITY, + ] + + def is_edge(self) -> bool: + """Check if the element is an edge.""" + return not self.is_vertex() + + class Direction(Enum): """Direction class.""" @@ -41,7 +70,7 @@ def props(self) -> Dict[str, Any]: def set_prop(self, key: str, value: Any): """Set a property of ELem.""" - self._props[key] = value + self._props[key] = value # note: always update the value def get_prop(self, key: str): """Get one of the properties of Elem.""" @@ -124,6 +153,18 @@ def __init__(self, sid: str, tid: str, name: str, **props): for k, v in props.items(): self.set_prop(k, v) + def __eq__(self, other): + """Check if two edges are equal. + + Let's say two edges are equal if they have the same source vertex ID, + target vertex ID, and edge label. The properties are not considered. + """ + return (self.sid, self.tid, self.name) == (other.sid, other.tid, other.name) + + def __hash__(self): + """Return the hash value of the edge.""" + return hash((self.sid, self.tid, self.name)) + @property def sid(self) -> str: """Return the source vertex ID of the edge.""" @@ -188,11 +229,15 @@ def get_neighbor_edges( """Get neighbor edges.""" @abstractmethod - def vertices(self) -> Iterator[Vertex]: + def vertices( + self, filter_fn: Optional[Callable[[Vertex], bool]] = None + ) -> Iterator[Vertex]: """Get vertex iterator.""" @abstractmethod - def edges(self) -> Iterator[Edge]: + def edges( + self, filter_fn: Optional[Callable[[Edge], bool]] = None + ) -> Iterator[Edge]: """Get edge iterator.""" @abstractmethod @@ -241,7 +286,7 @@ def __init__(self): self._edge_prop_keys = set() self._edge_count = 0 - # init vertices, out edges, in edges index + # vertices index, out edges index, in edges index self._vs: Any = defaultdict() self._oes: Any = defaultdict(lambda: defaultdict(set)) self._ies: Any = defaultdict(lambda: defaultdict(set)) @@ -269,7 +314,7 @@ def upsert_vertex(self, vertex: Vertex): # update metadata self._vertex_prop_keys.update(vertex.props.keys()) - def append_edge(self, edge: Edge): + def append_edge(self, edge: Edge) -> bool: """Append an edge if it doesn't exist; requires edge label.""" sid = edge.sid tid = edge.tid @@ -290,6 +335,34 @@ def append_edge(self, edge: Edge): self._edge_count += 1 return True + def upsert_vertex_and_edge( + self, + src_vid: str, + src_name: str, + src_props: Dict[str, Any], + dst_vid: str, + dst_name: str, + dst_props: Dict[str, Any], + edge_name: str, + edge_type: str, + ): + """Uperst src and dst vertex, and edge.""" + src_vertex = Vertex(src_vid, src_name, **src_props) + dst_vertex = Vertex(dst_vid, dst_name, **dst_props) + edge = Edge(src_vid, dst_vid, edge_name, **{"edge_type": edge_type}) + + self.upsert_vertex(src_vertex) + self.upsert_vertex(dst_vertex) + self.append_edge(edge) + + def upsert_graph(self, graph: "MemoryGraph"): + """Upsert a graph.""" + for vertex in graph.vertices(): + self.upsert_vertex(vertex) + + for edge in graph.edges(): + self.append_edge(edge) + def has_vertex(self, vid: str) -> bool: """Retrieve a vertex by ID.""" return vid in self._vs @@ -335,13 +408,26 @@ def unique_elements(elements): return itertools.islice(es, limit) if limit else es - def vertices(self) -> Iterator[Vertex]: + def vertices( + self, filter_fn: Optional[Callable[[Vertex], bool]] = None + ) -> Iterator[Vertex]: """Return vertices.""" - return iter(self._vs.values()) + # Get all vertices in the graph + all_vertices = self._vs.values() + + return all_vertices if filter_fn is None else filter(filter_fn, all_vertices) - def edges(self) -> Iterator[Edge]: + def edges( + self, filter_fn: Optional[Callable[[Edge], bool]] = None + ) -> Iterator[Edge]: """Return edges.""" - return iter(e for nbs in self._oes.values() for es in nbs.values() for e in es) + # Get all edges in the graph + all_edges = (e for nbs in self._oes.values() for es in nbs.values() for e in es) + + if filter_fn is None: + return all_edges + else: + return filter(filter_fn, all_edges) def del_vertices(self, *vids: str): """Delete specified vertices.""" @@ -353,7 +439,7 @@ def del_edges(self, sid: str, tid: str, name: str, **props): """Delete edges.""" old_edge_cnt = len(self._oes[sid][tid]) - def remove_matches(es): + def remove_matches(es: Set[Edge]): return set( filter( lambda e: not ( @@ -452,7 +538,7 @@ def schema(self) -> Dict[str, Any]: ] } - def format(self) -> str: + def format(self, entities_only: Optional[bool] = False) -> str: """Format graph to string.""" vs_str = "\n".join(v.format() for v in self.vertices()) es_str = "\n".join( @@ -461,11 +547,14 @@ def format(self) -> str: f"{self.get_vertex(e.tid).format(concise=True)}" for e in self.edges() ) - return ( - f"Entities:\n{vs_str}\n\n" f"Relationships:\n{es_str}" - if (vs_str or es_str) - else "" - ) + if entities_only: + return f"Entities:\n{vs_str}" if vs_str else "" + else: + return ( + f"Entities:\n{vs_str}\n\nRelationships:\n{es_str}" + if (vs_str or es_str) + else "" + ) def truncate(self): """Truncate graph.""" diff --git a/dbgpt/storage/graph_store/memgraph_store.py b/dbgpt/storage/graph_store/memgraph_store.py index 1a6dd2c42..36d720829 100644 --- a/dbgpt/storage/graph_store/memgraph_store.py +++ b/dbgpt/storage/graph_store/memgraph_store.py @@ -1,11 +1,10 @@ """Memory graph store.""" -import json + import logging -from typing import Generator, List, Optional, Tuple from dbgpt._private.pydantic import ConfigDict from dbgpt.storage.graph_store.base import GraphStoreBase, GraphStoreConfig -from dbgpt.storage.graph_store.graph import Direction, Edge, Graph, MemoryGraph +from dbgpt.storage.graph_store.graph import MemoryGraph logger = logging.getLogger(__name__) @@ -28,77 +27,8 @@ def get_config(self): """Get the graph store config.""" return self._graph_store_config - def get_edge_type(self) -> str: - """Get the edge type.""" - raise NotImplementedError("Memory graph store does not have edge type") - - def get_vertex_type(self) -> str: - """Get the vertex type.""" - raise NotImplementedError("Memory graph store does not have vertex type") - - def insert_triplet(self, sub: str, rel: str, obj: str): - """Insert a triplet into the graph.""" - self._graph.append_edge(Edge(sub, obj, rel)) - - def insert_graph(self, graph: Graph): - """Add graph.""" - for vertex in graph.vertices(): - self._graph.upsert_vertex(vertex) - - for edge in graph.edges(): - self._graph.append_edge(edge) - - def get_triplets(self, sub: str) -> List[Tuple[str, str]]: - """Retrieve triplets originating from a subject.""" - subgraph = self.explore([sub], direct=Direction.OUT, depth=1) - return [(e.name, e.tid) for e in subgraph.edges()] - - def delete_triplet(self, sub: str, rel: str, obj: str): - """Delete a specific triplet from the graph.""" - self._graph.del_edges(sub, obj, rel) - - def truncate(self): - """Truncate graph.""" - self._graph.truncate() - - def drop(self): - """Drop graph.""" - self._graph = None - - def get_schema(self, refresh: bool = False) -> str: - """Return the graph schema as a JSON string.""" - return json.dumps(self._graph.schema()) - - def get_full_graph(self, limit: Optional[int] = None) -> Graph: - """Return self.""" - if not limit: - return self._graph - - subgraph = MemoryGraph() - for count, edge in enumerate(self._graph.edges()): - if count >= limit: - break - subgraph.upsert_vertex(self._graph.get_vertex(edge.sid)) - subgraph.upsert_vertex(self._graph.get_vertex(edge.tid)) - subgraph.append_edge(edge) - count += 1 - return subgraph - - def explore( - self, - subs: List[str], - direct: Direction = Direction.BOTH, - depth: Optional[int] = None, - fan: Optional[int] = None, - limit: Optional[int] = None, - ) -> MemoryGraph: - """Explore the graph from given subjects up to a depth.""" - return self._graph.search(subs, direct, depth, fan, limit) - - def query(self, query: str, **args) -> Graph: - """Execute a query on graph.""" - raise NotImplementedError("Query memory graph not allowed") - - def stream_query(self, query: str) -> Generator[Graph, None, None]: - """Execute stream query.""" - raise NotImplementedError("Stream query memory graph not allowed") + def _escape_quotes(self, text: str) -> str: + """Escape single and double quotes in a string for queries.""" + raise NotImplementedError( + "_escape_quotes is not implemented by MemoryGraphStore" + ) diff --git a/dbgpt/storage/graph_store/tugraph_store.py b/dbgpt/storage/graph_store/tugraph_store.py index 3fdd2df8b..2eb7af91b 100644 --- a/dbgpt/storage/graph_store/tugraph_store.py +++ b/dbgpt/storage/graph_store/tugraph_store.py @@ -1,14 +1,15 @@ """TuGraph store.""" + import base64 import json import logging import os -from typing import Any, Generator, Iterator, List, Optional, Tuple +from typing import List from dbgpt._private.pydantic import ConfigDict, Field from dbgpt.datasource.conn_tugraph import TuGraphConnector from dbgpt.storage.graph_store.base import GraphStoreBase, GraphStoreConfig -from dbgpt.storage.graph_store.graph import Direction, Edge, Graph, MemoryGraph, Vertex +from dbgpt.storage.graph_store.graph import GraphElemType logger = logging.getLogger(__name__) @@ -35,12 +36,28 @@ class TuGraphStoreConfig(GraphStoreConfig): description="login password", ) vertex_type: str = Field( - default="entity", - description="The type of vertex, `entity` by default.", + default=GraphElemType.ENTITY.value, + description="The type of entity vertex, `entity` by default.", + ) + document_type: str = Field( + default=GraphElemType.DOCUMENT.value, + description="The type of document vertex, `document` by default.", + ) + chunk_type: str = Field( + default=GraphElemType.CHUNK.value, + description="The type of chunk vertex, `relation` by default.", ) edge_type: str = Field( - default="relation", - description="The type of edge, `relation` by default.", + default=GraphElemType.RELATION.value, + description="The type of relation edge, `relation` by default.", + ) + include_type: str = Field( + default=GraphElemType.INCLUDE.value, + description="The type of include edge, `include` by default.", + ) + next_type: str = Field( + default=GraphElemType.NEXT.value, + description="The type of next edge, `next` by default.", ) plugin_names: List[str] = Field( default=["leiden"], @@ -62,17 +79,24 @@ def __init__(self, config: TuGraphStoreConfig) -> None: self._port = int(os.getenv("TUGRAPH_PORT", config.port)) self._username = os.getenv("TUGRAPH_USERNAME", config.username) self._password = os.getenv("TUGRAPH_PASSWORD", config.password) - self._summary_enabled = ( - os.getenv("GRAPH_COMMUNITY_SUMMARY_ENABLED", "").lower() == "true" - or config.summary_enabled + self._enable_summary = ( + os.getenv("ENABLE_GRAPH_COMMUNITY_SUMMARY", "").lower() == "true" + or config.enable_summary + ) + self._enable_document_graph = ( + os.getenv("ENABLE_DOCUMENT_GRAPH", "").lower() == "true" + or config.enable_document_graph + ) + self._enable_triplet_graph = ( + os.getenv("ENABLE_TRIPLET_GRAPH", "").lower() == "true" + or config.enable_triplet_graph ) self._plugin_names = ( os.getenv("TUGRAPH_PLUGIN_NAMES", "leiden").split(",") or config.plugin_names ) + self._graph_name = config.name - self._vertex_type = os.getenv("TUGRAPH_VERTEX_TYPE", config.vertex_type) - self._edge_type = os.getenv("TUGRAPH_EDGE_TYPE", config.edge_type) self.conn = TuGraphConnector.from_uri_db( host=self._host, @@ -82,34 +106,29 @@ def __init__(self, config: TuGraphStoreConfig) -> None: db_name=config.name, ) - self._create_graph(config.name) - - def get_vertex_type(self) -> str: - """Get the vertex type.""" - return self._vertex_type - - def get_edge_type(self) -> str: - """Get the edge type.""" - return self._edge_type - - def _create_graph(self, graph_name: str): - self.conn.create_graph(graph_name=graph_name) - self._create_schema() - if self._summary_enabled: - self._upload_plugin() - - def _check_label(self, elem_type: str): - result = self.conn.get_table_names() - if elem_type == "vertex": - return self._vertex_type in result["vertex_tables"] - if elem_type == "edge": - return self._edge_type in result["edge_tables"] + def get_config(self) -> TuGraphStoreConfig: + """Get the TuGraph store config.""" + return self._config def _add_vertex_index(self, field_name): - gql = f"CALL db.addIndex('{self._vertex_type}', '{field_name}', false)" + """Add an index to the vertex table.""" + # TODO: Not used in the current implementation. + gql = f"CALL db.addIndex('{GraphElemType.ENTITY.value}', '{field_name}', false)" self.conn.run(gql) def _upload_plugin(self): + """Upload missing plugins to the TuGraph database. + + This method checks for the presence of required plugins in the database and + uploads any missing plugins. It performs the following steps: + 1. Lists existing plugins in the database. + 2. Identifies missing plugins by comparing with the required plugin list. + 3. For each missing plugin, reads its binary content, encodes it, and uploads to + the database. + + The method uses the 'leiden' plugin as an example, but can be extended for other + plugins. + """ gql = "CALL db.plugin.listPlugin('CPP','v1')" result = self.conn.run(gql) result_names = [ @@ -122,8 +141,8 @@ def _upload_plugin(self): if len(missing_plugins): for name in missing_plugins: try: - from dbgpt_tugraph_plugins import ( # type: ignore # noqa - get_plugin_binary_path, + from dbgpt_tugraph_plugins import ( + get_plugin_binary_path, # type:ignore[import-untyped] ) except ImportError: logger.error( @@ -136,375 +155,12 @@ def _upload_plugin(self): content = f.read() content = base64.b64encode(content).decode() gql = ( - f"CALL db.plugin.loadPlugin('CPP', '{name}', '{content}', " - "'SO', '{name} Plugin', false, 'v1')" + f"CALL db.plugin.loadPlugin('CPP', '{name}', '{content}', 'SO', " + f"'{name} Plugin', false, 'v1')" ) self.conn.run(gql) - def _create_schema(self): - if not self._check_label("vertex"): - if self._summary_enabled: - create_vertex_gql = ( - f"CALL db.createLabel(" - f"'vertex', '{self._vertex_type}', " - f"'id', ['id',string,false]," - f"['name',string,false]," - f"['_document_id',string,true]," - f"['_chunk_id',string,true]," - f"['_community_id',string,true]," - f"['description',string,true])" - ) - self.conn.run(create_vertex_gql) - self._add_vertex_index("_community_id") - else: - create_vertex_gql = ( - f"CALL db.createLabel(" - f"'vertex', '{self._vertex_type}', " - f"'id', ['id',string,false]," - f"['name',string,false])" - ) - self.conn.run(create_vertex_gql) - - if not self._check_label("edge"): - create_edge_gql = f"""CALL db.createLabel( - 'edge', '{self._edge_type}', - '[["{self._vertex_type}", - "{self._vertex_type}"]]', - ["id",STRING,false], - ["name",STRING,false])""" - if self._summary_enabled: - create_edge_gql = f"""CALL db.createLabel( - 'edge', '{self._edge_type}', - '[["{self._vertex_type}", - "{self._vertex_type}"]]', - ["id",STRING,false], - ["name",STRING,false], - ["description",STRING,true])""" - self.conn.run(create_edge_gql) - - def _format_query_data(self, data, white_prop_list: List[str]): - nodes_list = [] - rels_list: List[Any] = [] - _white_list = white_prop_list - from neo4j import graph - - def get_filtered_properties(properties, white_list): - return { - key: value - for key, value in properties.items() - if (not key.startswith("_") and key not in ["id", "name"]) - or key in white_list - } - - def process_node(node: graph.Node): - node_id = node._properties.get("id") - node_name = node._properties.get("name") - node_properties = get_filtered_properties(node._properties, _white_list) - nodes_list.append( - {"id": node_id, "name": node_name, "properties": node_properties} - ) - - def process_relationship(rel: graph.Relationship): - name = rel._properties.get("name", "") - rel_nodes = rel.nodes - src_id = rel_nodes[0]._properties.get("id") - dst_id = rel_nodes[1]._properties.get("id") - for node in rel_nodes: - process_node(node) - edge_properties = get_filtered_properties(rel._properties, _white_list) - if not any( - existing_edge.get("name") == name - and existing_edge.get("src_id") == src_id - and existing_edge.get("dst_id") == dst_id - for existing_edge in rels_list - ): - rels_list.append( - { - "src_id": src_id, - "dst_id": dst_id, - "name": name, - "properties": edge_properties, - } - ) - - def process_path(path: graph.Path): - for rel in path.relationships: - process_relationship(rel) - - def process_other(value): - if not any( - existing_node.get("id") == "json_node" for existing_node in nodes_list - ): - nodes_list.append( - { - "id": "json_node", - "name": "json_node", - "properties": {"description": value}, - } - ) - - for record in data: - for key in record.keys(): - value = record[key] - if isinstance(value, graph.Node): - process_node(value) - elif isinstance(value, graph.Relationship): - process_relationship(value) - elif isinstance(value, graph.Path): - process_path(value) - else: - process_other(value) - nodes = [ - Vertex(node["id"], node["name"], **node["properties"]) - for node in nodes_list - ] - rels = [ - Edge(edge["src_id"], edge["dst_id"], edge["name"], **edge["properties"]) - for edge in rels_list - ] - return {"nodes": nodes, "edges": rels} - - def get_config(self): - """Get the graph store config.""" - return self._config - - def get_triplets(self, subj: str) -> List[Tuple[str, str]]: - """Get triplets.""" - query = ( - f"MATCH (n1:{self._vertex_type})-[r]->(n2:{self._vertex_type}) " - f'WHERE n1.id = "{subj}" RETURN r.id as rel, n2.id as obj;' - ) - data = self.conn.run(query) - return [(record["rel"], record["obj"]) for record in data] - - def insert_triplet(self, subj: str, rel: str, obj: str) -> None: - """Add triplet.""" - - def escape_quotes(value: str) -> str: - """Escape single and double quotes in a string for queries.""" - return value.replace("'", "\\'").replace('"', '\\"') - - subj_escaped = escape_quotes(subj) - rel_escaped = escape_quotes(rel) - obj_escaped = escape_quotes(obj) - - node_query = f"""CALL db.upsertVertex( - '{self._vertex_type}', - [{{id:'{subj_escaped}',name:'{subj_escaped}'}}, - {{id:'{obj_escaped}',name:'{obj_escaped}'}}])""" - edge_query = f"""CALL db.upsertEdge( - '{self._edge_type}', - {{type:"{self._vertex_type}",key:"sid"}}, - {{type:"{self._vertex_type}", key:"tid"}}, - [{{sid:"{subj_escaped}", - tid: "{obj_escaped}", - id:"{rel_escaped}", - name: "{rel_escaped}"}}])""" - self.conn.run(query=node_query) - self.conn.run(query=edge_query) - - def insert_graph(self, graph: Graph) -> None: - """Add graph.""" - - def escape_quotes(value: str) -> str: - """Escape single and double quotes in a string for queries.""" - if value is not None: - return value.replace("'", "").replace('"', "") - - nodes: Iterator[Vertex] = graph.vertices() - edges: Iterator[Edge] = graph.edges() - node_list = [] - edge_list = [] - - def parser(node_list): - formatted_nodes = [ - "{" - + ", ".join( - f'{k}: "{v}"' if isinstance(v, str) else f"{k}: {v}" - for k, v in node.items() - ) - + "}" - for node in node_list - ] - return f"""{', '.join(formatted_nodes)}""" - - for node in nodes: - node_list.append( - { - "id": escape_quotes(node.vid), - "name": escape_quotes(node.name), - "description": escape_quotes(node.get_prop("description")) or "", - "_document_id": "0", - "_chunk_id": "0", - "_community_id": "0", - } - ) - node_query = ( - f"""CALL db.upsertVertex("{self._vertex_type}", [{parser(node_list)}])""" - ) - for edge in edges: - edge_list.append( - { - "sid": escape_quotes(edge.sid), - "tid": escape_quotes(edge.tid), - "id": escape_quotes(edge.name), - "name": escape_quotes(edge.name), - "description": escape_quotes(edge.get_prop("description")), - } - ) - - edge_query = f"""CALL db.upsertEdge( - "{self._edge_type}", - {{type:"{self._vertex_type}", key:"sid"}}, - {{type:"{self._vertex_type}", key:"tid"}}, - [{parser(edge_list)}])""" - self.conn.run(query=node_query) - self.conn.run(query=edge_query) - - def truncate(self): - """Truncate Graph.""" - gql = "MATCH (n) DELETE n" - self.conn.run(gql) - - def drop(self): - """Delete Graph.""" - self.conn.delete_graph(self._graph_name) - - def delete_triplet(self, sub: str, rel: str, obj: str) -> None: - """Delete triplet.""" - del_query = ( - f"MATCH (n1:{self._vertex_type} {{id:'{sub}'}})" - f"-[r:{self._edge_type} {{id:'{rel}'}}]->" - f"(n2:{self._vertex_type} {{id:'{obj}'}}) DELETE n1,n2,r" - ) - self.conn.run(query=del_query) - - def get_schema(self, refresh: bool = False) -> str: - """Get the schema of the graph store.""" - query = "CALL dbms.graph.getGraphSchema()" - data = self.conn.run(query=query) - schema = data[0]["schema"] - return schema - - def get_full_graph(self, limit: Optional[int] = None) -> Graph: - """Get full graph.""" - if not limit: - raise Exception("limit must be set") - graph_result = self.query( - f"MATCH (n)-[r]-(m) RETURN n,r,m LIMIT {limit}", - white_list=["_community_id"], - ) - all_graph = MemoryGraph() - for vertex in graph_result.vertices(): - all_graph.upsert_vertex(vertex) - for edge in graph_result.edges(): - all_graph.append_edge(edge) - return all_graph - - def explore( - self, - subs: List[str], - direct: Direction = Direction.BOTH, - depth: Optional[int] = None, - fan: Optional[int] = None, - limit: Optional[int] = None, - ) -> Graph: - """Explore the graph from given subjects up to a depth.""" - if not subs: - return MemoryGraph() - - if fan is not None: - raise ValueError("Fan functionality is not supported at this time.") - else: - depth_string = f"1..{depth}" - if depth is None: - depth_string = ".." - - limit_string = f"LIMIT {limit}" - if limit is None: - limit_string = "" - if direct.name == "OUT": - rel = f"-[r:{self._edge_type}*{depth_string}]->" - elif direct.name == "IN": - rel = f"<-[r:{self._edge_type}*{depth_string}]-" - else: - rel = f"-[r:{self._edge_type}*{depth_string}]-" - query = ( - f"MATCH p=(n:{self._vertex_type})" - f"{rel}(m:{self._vertex_type}) " - f"WHERE n.id IN {subs} RETURN p {limit_string}" - ) - return self.query(query) - - def query(self, query: str, **args) -> MemoryGraph: - """Execute a query on graph.""" - result = self.conn.run(query=query) - white_list = args.get("white_list", []) - graph = self._format_query_data(result, white_list) - mg = MemoryGraph() - for vertex in graph["nodes"]: - mg.upsert_vertex(vertex) - for edge in graph["edges"]: - mg.append_edge(edge) - return mg - - def stream_query(self, query: str) -> Generator[Graph, None, None]: - """Execute a stream query.""" - from neo4j import graph - - for record in self.conn.run_stream(query): - mg = MemoryGraph() - for key in record.keys(): - value = record[key] - if isinstance(value, graph.Node): - node_id = value._properties["id"] - description = value._properties["description"] - vertex = Vertex(node_id, name=node_id, description=description) - mg.upsert_vertex(vertex) - elif isinstance(value, graph.Relationship): - rel_nodes = value.nodes - prop_id = value._properties["id"] - src_id = rel_nodes[0]._properties["id"] - dst_id = rel_nodes[1]._properties["id"] - description = value._properties["description"] - edge = Edge(src_id, dst_id, name=prop_id, description=description) - mg.append_edge(edge) - elif isinstance(value, graph.Path): - nodes = list(record["p"].nodes) - rels = list(record["p"].relationships) - formatted_path = [] - for i in range(len(nodes)): - formatted_path.append( - { - "id": nodes[i]._properties["id"], - "description": nodes[i]._properties["description"], - } - ) - if i < len(rels): - formatted_path.append( - { - "id": rels[i]._properties["id"], - "description": rels[i]._properties["description"], - } - ) - for i in range(0, len(formatted_path), 2): - mg.upsert_vertex( - Vertex( - formatted_path[i]["id"], - name=formatted_path[i]["id"], - description=formatted_path[i]["description"], - ) - ) - if i + 2 < len(formatted_path): - mg.append_edge( - Edge( - formatted_path[i]["id"], - formatted_path[i + 2]["id"], - name=formatted_path[i + 1]["id"], - description=formatted_path[i + 1]["description"], - ) - ) - else: - vertex = Vertex("json_node", name="json_node", description=value) - mg.upsert_vertex(vertex) - yield mg + def _escape_quotes(self, value: str) -> str: + """Escape single and double quotes in a string for queries.""" + if value is not None: + return value.replace("'", "").replace('"', "") diff --git a/dbgpt/storage/knowledge_graph/base.py b/dbgpt/storage/knowledge_graph/base.py index e47094bba..8080cbd0f 100644 --- a/dbgpt/storage/knowledge_graph/base.py +++ b/dbgpt/storage/knowledge_graph/base.py @@ -1,4 +1,5 @@ """Knowledge graph base class.""" + import logging from abc import ABC, abstractmethod from typing import List, Optional @@ -27,6 +28,6 @@ def get_config(self) -> KnowledgeGraphConfig: def query_graph(self, limit: Optional[int] = None) -> Graph: """Get graph data.""" + @abstractmethod def delete_by_ids(self, ids: str) -> List[str]: """Delete document by ids.""" - raise Exception("Delete document not supported by knowledge graph") diff --git a/dbgpt/storage/knowledge_graph/community/base.py b/dbgpt/storage/knowledge_graph/community/base.py index 9dcb17bc1..6679c0448 100644 --- a/dbgpt/storage/knowledge_graph/community/base.py +++ b/dbgpt/storage/knowledge_graph/community/base.py @@ -1,11 +1,19 @@ """Define Classes about Community.""" + import logging from abc import ABC, abstractmethod from dataclasses import dataclass -from typing import List, Optional +from typing import AsyncGenerator, Iterator, List, Optional from dbgpt.storage.graph_store.base import GraphStoreBase -from dbgpt.storage.graph_store.graph import Graph +from dbgpt.storage.graph_store.graph import ( + Direction, + Edge, + Graph, + GraphElemType, + MemoryGraph, + Vertex, +) logger = logging.getLogger(__name__) @@ -24,7 +32,7 @@ class CommunityTree: """Represents a community tree.""" -class CommunityStoreAdapter(ABC): +class GraphStoreAdapter(ABC): """Community Store Adapter.""" def __init__(self, graph_store: GraphStoreBase): @@ -44,6 +52,113 @@ async def discover_communities(self, **kwargs) -> List[str]: async def get_community(self, community_id: str) -> Community: """Get community.""" + @abstractmethod + def get_graph_config(self): + """Get config.""" + + @abstractmethod + def get_vertex_type(self) -> str: + """Get vertex type.""" + + @abstractmethod + def get_edge_type(self) -> str: + """Get edge type.""" + + @abstractmethod + def get_triplets(self, sub: str) -> List[tuple[str, str]]: + """Get triplets.""" + + @abstractmethod + def get_document_vertex(self, doc_name: str) -> Vertex: + """Get document vertex.""" + + @abstractmethod + def get_schema(self, refresh: bool = False) -> str: + """Get schema.""" + + @abstractmethod + def get_full_graph(self, limit: Optional[int] = None) -> Graph: + """Get full graph.""" + + @abstractmethod + def upsert_entities(self, entities: Iterator[Vertex]) -> None: + """Upsert entity.""" + + @abstractmethod + def upsert_edge( + self, edges: Iterator[Edge], edge_type: str, src_type: str, dst_type: str + ): + """Upsert edge.""" + + @abstractmethod + def upsert_chunks(self, chunk: Iterator[Vertex]) -> None: + """Upsert chunk.""" + + @abstractmethod + def upsert_documents(self, documents: Iterator[Vertex]) -> None: + """Upsert documents.""" + + @abstractmethod + def upsert_relations(self, relations: Iterator[Edge]) -> None: + """Upsert relations.""" + + @abstractmethod + def insert_triplet(self, sub: str, rel: str, obj: str) -> None: + """Insert triplet.""" + + @abstractmethod + def upsert_graph(self, graph: Graph) -> None: + """Insert graph.""" + + @abstractmethod + def delete_document(self, chunk_id: str) -> None: + """Delete document in graph store.""" + + @abstractmethod + def delete_triplet(self, sub: str, rel: str, obj: str) -> None: + """Delete triplet.""" + + @abstractmethod + def drop(self) -> None: + """Drop graph.""" + + @abstractmethod + def create_graph(self, graph_name: str) -> None: + """Create graph.""" + + @abstractmethod + def create_graph_label(self) -> None: + """Create a graph label. + + The graph label is used to identify and distinguish different types of nodes + (vertices) and edges in the graph. + """ + + @abstractmethod + def truncate(self) -> None: + """Truncate graph.""" + + @abstractmethod + def check_label(self, graph_elem_type: GraphElemType) -> bool: + """Check if the label exists in the graph.""" + + @abstractmethod + def explore( + self, + subs: List[str], + direct: Direction = Direction.BOTH, + depth: Optional[int] = None, + ) -> MemoryGraph: + """Explore the graph from given subjects up to a depth.""" + + @abstractmethod + def query(self, query: str, **kwargs) -> MemoryGraph: + """Execute a query on graph.""" + + @abstractmethod + async def stream_query(self, query: str, **kwargs) -> AsyncGenerator[Graph, None]: + """Execute a stream query.""" + class CommunityMetastore(ABC): """Community metastore class.""" diff --git a/dbgpt/storage/knowledge_graph/community/community_store.py b/dbgpt/storage/knowledge_graph/community/community_store.py index 41bb494a3..3a5eb2474 100644 --- a/dbgpt/storage/knowledge_graph/community/community_store.py +++ b/dbgpt/storage/knowledge_graph/community/community_store.py @@ -4,10 +4,7 @@ from typing import List from dbgpt.rag.transformer.community_summarizer import CommunitySummarizer -from dbgpt.storage.knowledge_graph.community.base import ( - Community, - CommunityStoreAdapter, -) +from dbgpt.storage.knowledge_graph.community.base import Community, GraphStoreAdapter from dbgpt.storage.knowledge_graph.community.community_metastore import ( BuiltinCommunityMetastore, ) @@ -21,23 +18,23 @@ class CommunityStore: def __init__( self, - community_store_adapter: CommunityStoreAdapter, + graph_store_adapter: GraphStoreAdapter, community_summarizer: CommunitySummarizer, vector_store: VectorStoreBase, ): """Initialize the CommunityStore class.""" - self._community_store_adapter = community_store_adapter + self._graph_store_adapter = graph_store_adapter self._community_summarizer = community_summarizer self._meta_store = BuiltinCommunityMetastore(vector_store) async def build_communities(self): """Discover communities.""" - community_ids = await self._community_store_adapter.discover_communities() + community_ids = await self._graph_store_adapter.discover_communities() # summarize communities communities = [] for community_id in community_ids: - community = await self._community_store_adapter.get_community(community_id) + community = await self._graph_store_adapter.get_community(community_id) graph = community.data.format() if not graph: break @@ -65,7 +62,7 @@ def truncate(self): self._community_summarizer.truncate() logger.info("Truncate graph") - self._community_store_adapter.graph_store.truncate() + self._graph_store_adapter.truncate() def drop(self): """Drop community store.""" @@ -76,4 +73,4 @@ def drop(self): self._community_summarizer.drop() logger.info("Remove graph") - self._community_store_adapter.graph_store.drop() + self._graph_store_adapter.drop() diff --git a/dbgpt/storage/knowledge_graph/community/factory.py b/dbgpt/storage/knowledge_graph/community/factory.py index 4bafa74cd..e238935ae 100644 --- a/dbgpt/storage/knowledge_graph/community/factory.py +++ b/dbgpt/storage/knowledge_graph/community/factory.py @@ -1,28 +1,29 @@ -"""CommunityStoreAdapter factory.""" +"""GraphStoreAdapter factory.""" + import logging from dbgpt.storage.graph_store.base import GraphStoreBase from dbgpt.storage.graph_store.tugraph_store import TuGraphStore -from dbgpt.storage.knowledge_graph.community.base import CommunityStoreAdapter -from dbgpt.storage.knowledge_graph.community.tugraph_adapter import ( - TuGraphCommunityStoreAdapter, +from dbgpt.storage.knowledge_graph.community.base import GraphStoreAdapter +from dbgpt.storage.knowledge_graph.community.tugraph_store_adapter import ( + TuGraphStoreAdapter, ) logger = logging.getLogger(__name__) -class CommunityStoreAdapterFactory: +class GraphStoreAdapterFactory: """Factory for community store adapter.""" @staticmethod - def create(graph_store: GraphStoreBase) -> CommunityStoreAdapter: - """Create a CommunityStoreAdapter instance. + def create(graph_store: GraphStoreBase) -> GraphStoreAdapter: + """Create a GraphStoreAdapter instance. Args: - graph_store_type: graph store type Memory, TuGraph, Neo4j """ if isinstance(graph_store, TuGraphStore): - return TuGraphCommunityStoreAdapter(graph_store) + return TuGraphStoreAdapter(graph_store) else: raise Exception( "create community store adapter for %s failed", diff --git a/dbgpt/storage/knowledge_graph/community/memgraph_store_adapter.py b/dbgpt/storage/knowledge_graph/community/memgraph_store_adapter.py new file mode 100644 index 000000000..d26b9f519 --- /dev/null +++ b/dbgpt/storage/knowledge_graph/community/memgraph_store_adapter.py @@ -0,0 +1,186 @@ +"""TuGraph Community Store Adapter.""" + +import json +import logging +from typing import AsyncGenerator, Iterator, List, Optional, Tuple + +from dbgpt.storage.graph_store.graph import ( + Direction, + Edge, + Graph, + GraphElemType, + MemoryGraph, + Vertex, +) +from dbgpt.storage.graph_store.memgraph_store import ( + MemoryGraphStore, + MemoryGraphStoreConfig, +) +from dbgpt.storage.knowledge_graph.community.base import Community, GraphStoreAdapter + +logger = logging.getLogger(__name__) + + +class MemGraphStoreAdapter(GraphStoreAdapter): + """MemGraph Community Store Adapter.""" + + MAX_HIERARCHY_LEVEL = 3 + + def __init__(self, enable_summary: bool = False): + """Initialize MemGraph Community Store Adapter.""" + self._graph_store = MemoryGraphStore(MemoryGraphStoreConfig()) + self._enable_summary = enable_summary + + super().__init__(self._graph_store) + + # Create the graph + self.create_graph(self._graph_store.get_config().name) + + async def discover_communities(self, **kwargs) -> List[str]: + """Run community discovery with leiden.""" + pass + + async def get_community(self, community_id: str) -> Community: + """Get community.""" + pass + + def get_graph_config(self): + """Get the graph store config.""" + return self._graph_store.get_config() + + def get_vertex_type(self) -> str: + """Get the vertex type.""" + # raise NotImplementedError("Memory graph store does not have vertex type") + return "" + + def get_edge_type(self) -> str: + """Get the edge type.""" + # raise NotImplementedError("Memory graph store does not have edge type") + return "" + + def get_triplets(self, subj: str) -> List[Tuple[str, str]]: + """Get triplets.""" + subgraph = self.explore([subj], direct=Direction.OUT, depth=1) + return [(e.name, e.tid) for e in subgraph.edges()] + + def get_document_vertex(self, doc_name: str) -> Vertex: + """Get the document vertex in the graph.""" + raise NotImplementedError("Memory graph store does not have document vertex") + + def get_schema(self, refresh: bool = False) -> str: + """Get the schema of the graph store.""" + return json.dumps(self._graph_store._graph.schema()) + + def get_full_graph(self, limit: Optional[int] = None) -> Graph: + """Get full graph.""" + if not limit: + return self._graph_store._graph + + subgraph = MemoryGraph() + for count, edge in enumerate(self._graph_store._graph.edges()): + if count >= limit: + break + subgraph.upsert_vertex(self._graph_store._graph.get_vertex(edge.sid)) + subgraph.upsert_vertex(self._graph_store._graph.get_vertex(edge.tid)) + subgraph.append_edge(edge) + count += 1 + return subgraph + + def upsert_entities(self, entities: Iterator[Vertex]) -> None: + """Upsert entities.""" + pass + + def upsert_edge( + self, edges: Iterator[Edge], edge_type: str, src_type: str, dst_type: str + ) -> None: + """Upsert edges.""" + pass + + def upsert_chunks(self, chunks: Iterator[Vertex]) -> None: + """Upsert chunks.""" + pass + + def upsert_documents(self, documents: Iterator[Vertex]) -> None: + """Upsert documents.""" + pass + + def upsert_relations(self, relations: Iterator[Edge]) -> None: + """Upsert relations.""" + pass + + def insert_triplet(self, subj: str, rel: str, obj: str) -> None: + """Add triplet.""" + self._graph_store._graph.append_edge(Edge(subj, obj, rel)) + + def upsert_graph(self, graph: Graph) -> None: + """Add graph to the graph store. + + Args: + graph (Graph): The graph to be added. + """ + for vertex in graph.vertices(): + self._graph_store._graph.upsert_vertex(vertex) + + for edge in graph.edges(): + self._graph_store._graph.append_edge(edge) + + def delete_document(self, chunk_ids: str) -> None: + """Delete document in the graph.""" + pass + + def delete_triplet(self, sub: str, rel: str, obj: str) -> None: + """Delete triplet.""" + self._graph_store._graph.del_edges(sub, obj, rel) + + def drop(self): + """Delete Graph.""" + self._graph_store._graph = None + + def create_graph(self, graph_name: str): + """Create a graph.""" + pass + + def create_graph_label( + self, + ) -> None: + """Create a graph label. + + The graph label is used to identify and distinguish different types of nodes + (vertices) and edges in the graph. + """ + pass + + def truncate(self): + """Truncate Graph.""" + self._graph_store._graph.truncate() + + def check_label(self, graph_elem_type: GraphElemType) -> bool: + """Check if the label exists in the graph. + + Args: + graph_elem_type (GraphElemType): The type of the graph element. + + Returns: + True if the label exists in the specified graph element type, otherwise + False. + """ + pass + + def explore( + self, + subs: List[str], + direct: Direction = Direction.BOTH, + depth: int | None = None, + fan: int | None = None, + limit: int | None = None, + ) -> MemoryGraph: + """Explore the graph from given subjects up to a depth.""" + return self._graph_store._graph.search(subs, direct, depth, fan, limit) + + def query(self, query: str, **kwargs) -> MemoryGraph: + """Execute a query on graph.""" + pass + + async def stream_query(self, query: str, **kwargs) -> AsyncGenerator[Graph, None]: + """Execute a stream query.""" + pass diff --git a/dbgpt/storage/knowledge_graph/community/tugraph_adapter.py b/dbgpt/storage/knowledge_graph/community/tugraph_adapter.py deleted file mode 100644 index 9dcbbe046..000000000 --- a/dbgpt/storage/knowledge_graph/community/tugraph_adapter.py +++ /dev/null @@ -1,52 +0,0 @@ -"""TuGraph Community Store Adapter.""" -import json -import logging -from typing import List - -from dbgpt.storage.graph_store.graph import MemoryGraph -from dbgpt.storage.knowledge_graph.community.base import ( - Community, - CommunityStoreAdapter, -) - -logger = logging.getLogger(__name__) - - -class TuGraphCommunityStoreAdapter(CommunityStoreAdapter): - """TuGraph Community Store Adapter.""" - - MAX_HIERARCHY_LEVEL = 3 - - async def discover_communities(self, **kwargs) -> List[str]: - """Run community discovery with leiden.""" - mg = self._graph_store.query( - "CALL db.plugin.callPlugin" - "('CPP','leiden','{\"leiden_val\":\"_community_id\"}',60.00,false)" - ) - result = mg.get_vertex("json_node").get_prop("description") - community_ids = json.loads(result)["community_id_list"] - logger.info(f"Discovered {len(community_ids)} communities.") - return community_ids - - async def get_community(self, community_id: str) -> Community: - """Get community.""" - query = ( - f"MATCH (n:{self._graph_store.get_vertex_type()})" - f"WHERE n._community_id = '{community_id}' RETURN n" - ) - edge_query = ( - f"MATCH (n:{self._graph_store.get_vertex_type()})-" - f"[r:{self._graph_store.get_edge_type()}]-" - f"(m:{self._graph_store.get_vertex_type()})" - f"WHERE n._community_id = '{community_id}' RETURN n,r,m" - ) - - all_vertex_graph = self._graph_store.aquery(query) - all_edge_graph = self._graph_store.aquery(edge_query) - all_graph = MemoryGraph() - for vertex in all_vertex_graph.vertices(): - all_graph.upsert_vertex(vertex) - for edge in all_edge_graph.edges(): - all_graph.append_edge(edge) - - return Community(id=community_id, data=all_graph) diff --git a/dbgpt/storage/knowledge_graph/community/tugraph_store_adapter.py b/dbgpt/storage/knowledge_graph/community/tugraph_store_adapter.py new file mode 100644 index 000000000..ae1d587a0 --- /dev/null +++ b/dbgpt/storage/knowledge_graph/community/tugraph_store_adapter.py @@ -0,0 +1,808 @@ +"""TuGraph Community Store Adapter.""" + +import json +import logging +from typing import ( + Any, + AsyncGenerator, + Dict, + Iterator, + List, + Literal, + Optional, + Tuple, + Union, +) + +from dbgpt.storage.graph_store.graph import ( + Direction, + Edge, + Graph, + GraphElemType, + MemoryGraph, + Vertex, +) +from dbgpt.storage.graph_store.tugraph_store import TuGraphStore +from dbgpt.storage.knowledge_graph.community.base import Community, GraphStoreAdapter + +logger = logging.getLogger(__name__) + + +class TuGraphStoreAdapter(GraphStoreAdapter): + """TuGraph Community Store Adapter.""" + + MAX_QUERY_LIMIT = 1000 + MAX_HIERARCHY_LEVEL = 3 + + def __init__(self, graph_store: TuGraphStore): + """Initialize TuGraph Community Store Adapter.""" + super().__init__(graph_store) + + # Create the graph + self.create_graph(self.graph_store.get_config().name) + + async def discover_communities(self, **kwargs) -> List[str]: + """Run community discovery with leiden.""" + mg = self.query( + "CALL db.plugin.callPlugin('CPP'," + "'leiden','{\"leiden_val\":\"_community_id\"}',60.00,false)" + ) + result = mg.get_vertex("json_node").get_prop("description") + community_ids = json.loads(result)["community_id_list"] + logger.info(f"Discovered {len(community_ids)} communities.") + return community_ids + + async def get_community(self, community_id: str) -> Community: + """Get community.""" + query = ( + f"MATCH (n:{self.get_vertex_type()}) WHERE n._community_id = " + f"'{community_id}' RETURN n" + ) + edge_query = ( + f"MATCH (n:{self.get_vertex_type()})-" + f"[r:{self.get_edge_type()}]-" + f"(m:{self.get_vertex_type()})" + f"WHERE n._community_id = '{community_id}' RETURN n,r,m" + ) + + all_vertex_graph = self.query(query) + all_edge_graph = self.query(edge_query) + all_graph = MemoryGraph() + for vertex in all_vertex_graph.vertices(): + all_graph.upsert_vertex(vertex) + for edge in all_edge_graph.edges(): + all_graph.append_edge(edge) + + return Community(id=community_id, data=all_graph) + + @property + def graph_store(self) -> TuGraphStore: + """Get the graph store.""" + return self._graph_store + + def get_graph_config(self): + """Get the graph store config.""" + return self.graph_store.get_config() + + def get_vertex_type(self) -> str: + """Get the vertex type.""" + return GraphElemType.ENTITY.value + + def get_edge_type(self) -> str: + """Get the edge type.""" + return GraphElemType.RELATION.value + + def get_triplets(self, subj: str) -> List[Tuple[str, str]]: + """Get triplets.""" + triplet_query = ( + f"MATCH (n1:{GraphElemType.ENTITY.value})-[r]->(n2:" + f"{GraphElemType.ENTITY.value}) " + f'WHERE n1.id = "{subj}" RETURN r.id as rel, n2.id as obj;' + ) + data = self.graph_store.conn.run(triplet_query) + return [(record["rel"], record["obj"]) for record in data] + + def get_document_vertex(self, doc_name: str) -> Vertex: + """Get the document vertex in the graph.""" + gql = f"""MATCH (n) WHERE n.id = {doc_name} RETURN n""" + graph = self.query(gql) + vertex = graph.get_vertex(doc_name) + return vertex + + def get_schema(self, refresh: bool = False) -> str: + """Get the schema of the graph store.""" + query = "CALL dbms.graph.getGraphSchema()" + data = self.graph_store.conn.run(query=query) + schema = data[0]["schema"] + return schema + + def get_full_graph(self, limit: Optional[int] = None) -> Graph: + """Get full graph.""" + if not limit: + limit = self.MAX_QUERY_LIMIT + if limit <= 0: + raise ValueError("Limit must be greater than 0.") + graph_result = self.query( + f"MATCH (n)-[r]-(m) RETURN n,r,m LIMIT {limit}", + white_list=["_community_id"], + ) + full_graph = MemoryGraph() + for vertex in graph_result.vertices(): + full_graph.upsert_vertex(vertex) + for edge in graph_result.edges(): + full_graph.append_edge(edge) + return full_graph + + def upsert_entities(self, entities: Iterator[Vertex]) -> None: + """Upsert entities.""" + entity_list = [ + { + "id": self.graph_store._escape_quotes(entity.vid), + "name": self.graph_store._escape_quotes(entity.name), + "description": self.graph_store._escape_quotes( + entity.get_prop("description") + ) + or "", + "_document_id": "0", + "_chunk_id": "0", + "_community_id": "0", + } + for entity in entities + ] + entity_query = ( + f"CALL db.upsertVertex(" + f'"{GraphElemType.ENTITY.value}", ' + f"[{self._parser(entity_list)}])" + ) + self.graph_store.conn.run(query=entity_query) + + def upsert_edge( + self, edges: Iterator[Edge], edge_type: str, src_type: str, dst_type: str + ) -> None: + """Upsert edges.""" + edge_list = [ + { + "sid": self.graph_store._escape_quotes(edge.sid), + "tid": self.graph_store._escape_quotes(edge.tid), + "id": self.graph_store._escape_quotes(edge.name), + "name": self.graph_store._escape_quotes(edge.name), + "description": self.graph_store._escape_quotes( + edge.get_prop("description") + ) + or "", + "_chunk_id": self.graph_store._escape_quotes(edge.get_prop("_chunk_id")) + or "", + } + for edge in edges + ] + relation_query = f"""CALL db.upsertEdge("{edge_type}", + {{type:"{src_type}", key:"sid"}}, + {{type:"{dst_type}", key:"tid"}}, + [{self._parser(edge_list)}])""" + self.graph_store.conn.run(query=relation_query) + + def upsert_chunks(self, chunks: Iterator[Vertex]) -> None: + """Upsert chunks.""" + chunk_list = [ + { + "id": self.graph_store._escape_quotes(chunk.vid), + "name": self.graph_store._escape_quotes(chunk.name), + "content": self.graph_store._escape_quotes(chunk.get_prop("content")), + } + for chunk in chunks + ] + chunk_query = ( + f"CALL db.upsertVertex(" + f'"{GraphElemType.CHUNK.value}", ' + f"[{self._parser(chunk_list)}])" + ) + self.graph_store.conn.run(query=chunk_query) + + def upsert_documents(self, documents: Iterator[Vertex]) -> None: + """Upsert documents.""" + document_list = [ + { + "id": self.graph_store._escape_quotes(document.vid), + "name": self.graph_store._escape_quotes(document.name), + "content": self.graph_store._escape_quotes(document.get_prop("content")) + or "", + } + for document in documents + ] + document_query = ( + "CALL db.upsertVertex(" + f'"{GraphElemType.DOCUMENT.value}", ' + f"[{self._parser(document_list)}])" + ) + self.graph_store.conn.run(query=document_query) + + def upsert_relations(self, relations: Iterator[Edge]) -> None: + """Upsert relations.""" + pass + + def insert_triplet(self, subj: str, rel: str, obj: str) -> None: + """Add triplet.""" + subj_escaped = subj.replace("'", "\\'").replace('"', '\\"') + rel_escaped = rel.replace("'", "\\'").replace('"', '\\"') + obj_escaped = obj.replace("'", "\\'").replace('"', '\\"') + + vertex_query = f"""CALL db.upsertVertex( + '{GraphElemType.ENTITY.value}', + [{{id:'{subj_escaped}',name:'{subj_escaped}'}}, + {{id:'{obj_escaped}',name:'{obj_escaped}'}}])""" + edge_query = f"""CALL db.upsertEdge( + '{GraphElemType.RELATION.value}', + {{type:"{GraphElemType.ENTITY.value}",key:"sid"}}, + {{type:"{GraphElemType.ENTITY.value}", key:"tid"}}, + [{{sid:"{subj_escaped}", + tid: "{obj_escaped}", + id:"{rel_escaped}", + name: "{rel_escaped}"}}])""" + + self.graph_store.conn.run(query=vertex_query) + self.graph_store.conn.run(query=edge_query) + + def upsert_graph(self, graph: MemoryGraph) -> None: + """Add graph to the graph store. + + Args: + graph (Graph): The graph to be added. + """ + # Get the iterators of all the vertices and the edges from the graph + documents: Iterator[Vertex] = graph.vertices( + filter_fn=lambda x: x.get_prop("vertex_type") + == GraphElemType.DOCUMENT.value + ) + chunks: Iterator[Vertex] = graph.vertices( + filter_fn=lambda x: x.get_prop("vertex_type") == GraphElemType.CHUNK.value + ) + entities: Iterator[Vertex] = graph.vertices( + filter_fn=lambda x: x.get_prop("vertex_type") == GraphElemType.ENTITY.value + ) + doc_include_chunk: Iterator[Edge] = graph.edges( + filter_fn=lambda x: x.get_prop("edge_type") + == GraphElemType.DOCUMENT_INCLUDE_CHUNK.value + ) + chunk_include_chunk: Iterator[Edge] = graph.edges( + filter_fn=lambda x: x.get_prop("edge_type") + == GraphElemType.CHUNK_INCLUDE_CHUNK.value + ) + chunk_include_entity: Iterator[Edge] = graph.edges( + filter_fn=lambda x: x.get_prop("edge_type") + == GraphElemType.CHUNK_INCLUDE_ENTITY.value + ) + chunk_next_chunk: Iterator[Edge] = graph.edges( + filter_fn=lambda x: x.get_prop("edge_type") + == GraphElemType.CHUNK_NEXT_CHUNK.value + ) + relation: Iterator[Edge] = graph.edges( + filter_fn=lambda x: x.get_prop("edge_type") == GraphElemType.RELATION.value + ) + + # Upsert the vertices and the edges to the graph store + self.upsert_entities(entities) + self.upsert_chunks(chunks) + self.upsert_documents(documents) + self.upsert_edge( + doc_include_chunk, + GraphElemType.INCLUDE.value, + GraphElemType.DOCUMENT.value, + GraphElemType.CHUNK.value, + ) + self.upsert_edge( + chunk_include_chunk, + GraphElemType.INCLUDE.value, + GraphElemType.CHUNK.value, + GraphElemType.CHUNK.value, + ) + self.upsert_edge( + chunk_include_entity, + GraphElemType.INCLUDE.value, + GraphElemType.CHUNK.value, + GraphElemType.ENTITY.value, + ) + self.upsert_edge( + chunk_next_chunk, + GraphElemType.NEXT.value, + GraphElemType.CHUNK.value, + GraphElemType.CHUNK.value, + ) + self.upsert_edge( + relation, + GraphElemType.RELATION.value, + GraphElemType.ENTITY.value, + GraphElemType.ENTITY.value, + ) + + def delete_document(self, chunk_ids: str) -> None: + """Delete document in the graph.""" + chunkids_list = [uuid.strip() for uuid in chunk_ids.split(",")] + del_chunk_gql = ( + f"MATCH(m:{GraphElemType.DOCUMENT.value})-[r]->" + f"(n:{GraphElemType.CHUNK.value}) WHERE n.id IN {chunkids_list} DELETE n" + ) + del_relation_gql = ( + f"MATCH(m:{GraphElemType.ENTITY.value})-[r:" + f"{GraphElemType.RELATION.value}]-(n:{GraphElemType.ENTITY.value}) " + f"WHERE r._chunk_id IN {chunkids_list} DELETE r" + ) + delete_only_vertex = "MATCH (n) WHERE NOT EXISTS((n)-[]-()) DELETE n" + self.graph_store.conn.run(del_chunk_gql) + self.graph_store.conn.run(del_relation_gql) + self.graph_store.conn.run(delete_only_vertex) + + def delete_triplet(self, sub: str, rel: str, obj: str) -> None: + """Delete triplet.""" + del_query = ( + f"MATCH (n1:{GraphElemType.ENTITY.value} {{id:'{sub}'}})" + f"-[r:{GraphElemType.RELATION.value} {{id:'{rel}'}}]->" + f"(n2:{GraphElemType.ENTITY.value} {{id:'{obj}'}}) DELETE n1,n2,r" + ) + self.graph_store.conn.run(query=del_query) + + def drop(self): + """Delete Graph.""" + self.graph_store.conn.delete_graph(self.get_graph_config().name) + + def create_graph(self, graph_name: str): + """Create a graph.""" + self.graph_store.conn.create_graph(graph_name=graph_name) + + # Create the graph schema + def _format_graph_propertity_schema( + name: str, + type: str = "STRING", + optional: bool = False, + index: Optional[bool] = None, + **kwargs, + ) -> Dict[str, str | bool]: + """Format the property for TuGraph. + + Args: + name: The name of the property. + type: The type of the property. + optional: The optional of the property. + index: The index of the property. + kwargs: Additional keyword arguments. + + Returns: + The formatted property. + """ + property: Dict[str, str | bool] = { + "name": name, + "type": type, + "optional": optional, + } + + if index is not None: + property["index"] = index + + # Add any additional keyword arguments to the property dictionary + property.update(kwargs) + return property + + # Create the graph label for document vertex + document_proerties: List[Dict[str, Union[str, bool]]] = [ + _format_graph_propertity_schema("id", "STRING", False), + _format_graph_propertity_schema("name", "STRING", False), + _format_graph_propertity_schema("_community_id", "STRING", True, True), + ] + self.create_graph_label( + graph_elem_type=GraphElemType.DOCUMENT, graph_properties=document_proerties + ) + + # Create the graph label for chunk vertex + chunk_proerties: List[Dict[str, Union[str, bool]]] = [ + _format_graph_propertity_schema("id", "STRING", False), + _format_graph_propertity_schema("name", "STRING", False), + _format_graph_propertity_schema("_community_id", "STRING", True, True), + _format_graph_propertity_schema("content", "STRING", True, True), + ] + self.create_graph_label( + graph_elem_type=GraphElemType.CHUNK, graph_properties=chunk_proerties + ) + + # Create the graph label for entity vertex + vertex_proerties: List[Dict[str, Union[str, bool]]] = [ + _format_graph_propertity_schema("id", "STRING", False), + _format_graph_propertity_schema("name", "STRING", False), + _format_graph_propertity_schema("_community_id", "STRING", True, True), + _format_graph_propertity_schema("description", "STRING", True, True), + ] + self.create_graph_label( + graph_elem_type=GraphElemType.ENTITY, graph_properties=vertex_proerties + ) + + # Create the graph label for relation edge + edge_proerties: List[Dict[str, Union[str, bool]]] = [ + _format_graph_propertity_schema("id", "STRING", False), + _format_graph_propertity_schema("name", "STRING", False), + _format_graph_propertity_schema("_chunk_id", "STRING", True, True), + _format_graph_propertity_schema("description", "STRING", True, True), + ] + self.create_graph_label( + graph_elem_type=GraphElemType.RELATION, graph_properties=edge_proerties + ) + + # Create the graph label for include edge + include_proerties: List[Dict[str, Union[str, bool]]] = [ + _format_graph_propertity_schema("id", "STRING", False), + _format_graph_propertity_schema("name", "STRING", False), + _format_graph_propertity_schema("description", "STRING", True), + ] + self.create_graph_label( + graph_elem_type=GraphElemType.INCLUDE, graph_properties=include_proerties + ) + + # Create the graph label for next edge + next_proerties: List[Dict[str, Union[str, bool]]] = [ + _format_graph_propertity_schema("id", "STRING", False), + _format_graph_propertity_schema("name", "STRING", False), + _format_graph_propertity_schema("description", "STRING", True), + ] + self.create_graph_label( + graph_elem_type=GraphElemType.NEXT, graph_properties=next_proerties + ) + + if self.graph_store._enable_summary: + self.graph_store._upload_plugin() + + def create_graph_label( + self, + graph_elem_type: GraphElemType, + graph_properties: List[Dict[str, Union[str, bool]]], + ) -> None: + """Create a graph label. + + The graph label is used to identify and distinguish different types of nodes + (vertices) and edges in the graph. + """ + if graph_elem_type.is_vertex(): # vertex + data = json.dumps({ + "label": graph_elem_type.value, + "type": "VERTEX", + "primary": "id", + "properties": graph_properties, + }) + gql = f"""CALL db.createVertexLabelByJson('{data}')""" + + gql_check_exist = ( + f"""CALL db.getLabelSchema('VERTEX', '{graph_elem_type.value}')""" + ) + else: # edge + + def edge_direction(graph_elem_type: GraphElemType) -> List[List[str]]: + """Define the edge direction. + + `include` edge: document -> chunk, chunk -> entity + `next` edge: chunk -> chunk + `relation` edge: entity -> entity + """ + if graph_elem_type.is_vertex(): + raise ValueError("The graph element type must be an edge.") + if graph_elem_type == GraphElemType.INCLUDE: + return [ + [GraphElemType.DOCUMENT.value, GraphElemType.CHUNK.value], + [GraphElemType.CHUNK.value, GraphElemType.ENTITY.value], + [GraphElemType.CHUNK.value, GraphElemType.CHUNK.value], + ] + elif graph_elem_type == GraphElemType.NEXT: + return [[GraphElemType.CHUNK.value, GraphElemType.CHUNK.value]] + elif graph_elem_type == GraphElemType.RELATION: + return [[GraphElemType.ENTITY.value, GraphElemType.ENTITY.value]] + else: + raise ValueError("Invalid graph element type.") + + data = json.dumps({ + "label": graph_elem_type.value, + "type": "EDGE", + "constraints": edge_direction(graph_elem_type), + "properties": graph_properties, + }) + gql = f"""CALL db.createEdgeLabelByJson('{data}')""" + + gql_check_exist = ( + f"""CALL db.getLabelSchema('EDGE', '{graph_elem_type.value}')""" + ) + + # Make sure the graph label is identical + try: + self.graph_store.conn.run( + gql_check_exist + ) # if not exist, qurying raises an exception + except Exception: + self.graph_store.conn.run(gql) # create the graph label + return + + logger.info(f"Graph label {graph_elem_type.value} already exists.") + + def truncate(self): + """Truncate Graph.""" + gql = "MATCH (n) DELETE n" + self.graph_store.conn.run(gql) + + def check_label(self, graph_elem_type: GraphElemType) -> bool: + """Check if the label exists in the graph. + + Args: + graph_elem_type (GraphElemType): The type of the graph element. + + Returns: + True if the label exists in the specified graph element type, otherwise + False. + """ + vertex_tables, edge_tables = self.graph_store.conn.get_table_names() + + if graph_elem_type.is_vertex(): + return graph_elem_type in vertex_tables + else: + return graph_elem_type in edge_tables + + def explore( + self, + subs: List[str], + direct: Direction = Direction.BOTH, + depth: Optional[int] = None, + limit: Optional[int] = None, + search_scope: Optional[ + Literal["knowledge_graph", "document_graph"] + ] = "knowledge_graph", + ) -> MemoryGraph: + """Explore the graph from given subjects up to a depth.""" + if not subs: + return MemoryGraph() + + if depth is None or depth < 0 or depth > self.MAX_HIERARCHY_LEVEL: + # TODO: to be discussed, be none or MAX_HIERARCHY_LEVEL + # depth_string = ".." + depth = self.MAX_HIERARCHY_LEVEL + depth_string = f"1..{depth}" + + if limit is None: + limit_string = "" + else: + limit_string = f"LIMIT {limit}" + + if search_scope == "knowledge_graph": + if direct.name == "OUT": + rel = f"-[r:{GraphElemType.RELATION.value}*{depth_string}]->" + elif direct.name == "IN": + rel = f"<-[r:{GraphElemType.RELATION.value}*{depth_string}]-" + else: + rel = f"-[r:{GraphElemType.RELATION.value}*{depth_string}]-" + query = ( + f"MATCH p=(n:{GraphElemType.ENTITY.value})" + f"{rel}(m:{GraphElemType.ENTITY.value}) " + f"WHERE n.id IN {subs} RETURN p {limit_string}" + ) + return self.query(query) + else: + graph = MemoryGraph() + + for sub in subs: + query = ( + f"MATCH p=(n:{GraphElemType.DOCUMENT.value})-" + f"[r:{GraphElemType.INCLUDE.value}*{depth_string}]-" + f"(m:{GraphElemType.CHUNK.value})WHERE m.content CONTAINS '{sub}' " + f"RETURN p {limit_string}" + ) # if it contains the subjects + result = self.query(query) + for vertex in result.vertices(): + graph.upsert_vertex(vertex) + for edge in result.edges(): + graph.append_edge(edge) + + return graph + + def query(self, query: str, **kwargs) -> MemoryGraph: + """Execute a query on graph. + + white_list: List[str] = kwargs.get("white_list", []), which contains the white + list of properties and filters the properties that are not in the white list. + """ + query_result = self.graph_store.conn.run(query=query) + white_list: List[str] = kwargs.get( + "white_list", + [ + "id", + "name", + "description", + "_document_id", + "_chunk_id", + "_community_id", + ], + ) + vertices, edges = self._get_nodes_edges_from_queried_data( + query_result, white_list + ) + mg = MemoryGraph() + for vertex in vertices: + mg.upsert_vertex(vertex) + for edge in edges: + mg.append_edge(edge) + return mg + + async def stream_query(self, query: str, **kwargs) -> AsyncGenerator[Graph, None]: + """Execute a stream query.""" + from neo4j import graph + + async for record in self.graph_store.conn.run_stream(query): + mg = MemoryGraph() + for key in record.keys(): + value = record[key] + if isinstance(value, graph.Node): + node_id = value._properties["id"] + description = value._properties["description"] + vertex = Vertex(vid=node_id, name=node_id, description=description) + mg.upsert_vertex(vertex) + elif isinstance(value, graph.Relationship): + edge_nodes = value.nodes + prop_id = value._properties["id"] + assert edge_nodes and edge_nodes[0] and edge_nodes[1] + src_id = edge_nodes[0]._properties["id"] + dst_id = edge_nodes[1]._properties["id"] + description = value._properties["description"] + edge = Edge( + sid=src_id, tid=dst_id, name=prop_id, description=description + ) + mg.append_edge(edge) + elif isinstance(value, graph.Path): + nodes = list(record["p"].nodes) + rels = list(record["p"].relationships) + formatted_path = [] + for i in range(len(nodes)): + formatted_path.append({ + "id": nodes[i]._properties["id"], + "description": nodes[i]._properties["description"], + }) + if i < len(rels): + formatted_path.append({ + "id": rels[i]._properties["id"], + "description": rels[i]._properties["description"], + }) + for i in range(0, len(formatted_path), 2): + mg.upsert_vertex( + Vertex( + vid=formatted_path[i]["id"], + name=formatted_path[i]["id"], + description=formatted_path[i]["description"], + ) + ) + if i + 2 < len(formatted_path): + mg.append_edge( + Edge( + sid=formatted_path[i]["id"], + tid=formatted_path[i + 2]["id"], + name=formatted_path[i + 1]["id"], + description=formatted_path[i + 1]["description"], + ) + ) + else: + vertex = Vertex( + vid="json_node", name="json_node", description=value + ) + mg.upsert_vertex(vertex) + yield mg + + def _get_nodes_edges_from_queried_data( + self, + data: List[Dict[str, Any]], + white_prop_list: List[str], + ) -> Tuple[List[Vertex], List[Edge]]: + """Format the query data. + + Args: + data: The data to be formatted. + white_prop_list: The white list of properties. + + Returns: + Tuple[List[Vertex], List[Edge]]: The formatted vertices and edges. + """ + vertex_list: List[Vertex] = [] + edge_list: List[Edge] = [] + + # Remove id, src_id, dst_id and name from the white list + # to avoid duplication in the initialisation of the vertex and edge + _white_list = [ + prop + for prop in white_prop_list + if prop not in ["id", "src_id", "dst_id", "name"] + ] + + from neo4j import graph + + def filter_properties( + properties: dict[str, Any], white_list: List[str] + ) -> Dict[str, Any]: + """Filter the properties. + + It will remove the properties that are not in the white list. + The expected propertities are: + entity_properties = ["id", "name", "description", "_document_id", + "_chunk_id", "_community_id"] + edge_properties = ["id", "name", "description", "_chunk_id"] + """ + return { + key: value + for key, value in properties.items() + if (not key.startswith("_") and key not in ["id", "name"]) + or key in white_list + } + + # Parse the data to nodes and relationships + for record in data: + for value in record.values(): + if isinstance(value, graph.Node): + assert value._properties.get("id") + vertex = Vertex( + vid=value._properties.get("id", ""), + name=value._properties.get("name"), + **filter_properties(value._properties, _white_list), + ) + if vertex not in vertex_list: + # TODO: Do we really need to check it every time? + vertex_list.append(vertex) + elif isinstance(value, graph.Relationship): + for node in value.nodes: # num of nodes is 2 + assert node and node._properties + vertex = Vertex( + vid=node._properties.get("id", ""), + name=node._properties.get("name"), + **filter_properties(node._properties, _white_list), + ) + if vertex not in vertex_list: + vertex_list.append(vertex) + + assert value.nodes and value.nodes[0] and value.nodes[1] + edge = Edge( + sid=value.nodes[0]._properties.get("id", ""), + tid=value.nodes[1]._properties.get("id", ""), + name=value._properties.get("name", ""), + **filter_properties(value._properties, _white_list), + ) + if edge not in edge_list: + edge_list.append(edge) + elif isinstance(value, graph.Path): + for rel in value.relationships: + for node in rel.nodes: # num of nodes is 2 + assert node and node._properties + vertex = Vertex( + vid=node._properties.get("id", ""), + name=node._properties.get("name"), + **filter_properties(node._properties, _white_list), + ) + if vertex not in vertex_list: + vertex_list.append(vertex) + + assert rel.nodes and rel.nodes[0] and rel.nodes[1] + edge = Edge( + sid=rel.nodes[0]._properties.get("id", ""), + tid=rel.nodes[1]._properties.get("id", ""), + name=rel._properties.get("name", ""), + **filter_properties(rel._properties, _white_list), + ) + if edge not in edge_list: + edge_list.append(edge) + + else: # json_node + vertex = Vertex( + vid="json_node", + name="json_node", + **filter_properties({"description": value}, _white_list), + ) + if vertex not in vertex_list: + vertex_list.append(vertex) + return vertex_list, edge_list + + def _parser(self, entity_list: List[Dict[str, Any]]) -> str: + """Parse entities to string.""" + formatted_nodes = [ + "{" + + ", ".join( + f'{k}: "{v}"' if isinstance(v, str) else f"{k}: {v}" + for k, v in node.items() + ) + + "}" + for node in entity_list + ] + return f"""{", ".join(formatted_nodes)}""" diff --git a/dbgpt/storage/knowledge_graph/community_summary.py b/dbgpt/storage/knowledge_graph/community_summary.py index a5bf272ac..cab298a00 100644 --- a/dbgpt/storage/knowledge_graph/community_summary.py +++ b/dbgpt/storage/knowledge_graph/community_summary.py @@ -2,14 +2,16 @@ import logging import os +import uuid from typing import List, Optional from dbgpt._private.pydantic import ConfigDict, Field from dbgpt.core import Chunk from dbgpt.rag.transformer.community_summarizer import CommunitySummarizer from dbgpt.rag.transformer.graph_extractor import GraphExtractor +from dbgpt.storage.graph_store.graph import GraphElemType, MemoryGraph from dbgpt.storage.knowledge_graph.community.community_store import CommunityStore -from dbgpt.storage.knowledge_graph.community.factory import CommunityStoreAdapterFactory +from dbgpt.storage.knowledge_graph.community.factory import GraphStoreAdapterFactory from dbgpt.storage.knowledge_graph.knowledge_graph import ( BuiltinKnowledgeGraph, BuiltinKnowledgeGraphConfig, @@ -27,7 +29,8 @@ class CommunitySummaryKnowledgeGraphConfig(BuiltinKnowledgeGraphConfig): model_config = ConfigDict(arbitrary_types_allowed=True) vector_store_type: str = Field( - default="Chroma", description="The type of vector store." + default="Chroma", + description="The type of vector store.", ) user: Optional[str] = Field( default=None, @@ -36,7 +39,8 @@ class CommunitySummaryKnowledgeGraphConfig(BuiltinKnowledgeGraphConfig): password: Optional[str] = Field( default=None, description=( - "The password of vector store, if not set, will use the default password." + "The password of vector store, " + "if not set, will use the default password." ), ) extract_topk: int = Field( @@ -120,7 +124,7 @@ def community_store_configure(name: str, cfg: VectorStoreConfig): cfg.score_threshold = self._community_score_threshold self._community_store = CommunityStore( - CommunityStoreAdapterFactory.create(self._graph_store), + GraphStoreAdapterFactory.create(self._graph_store), CommunitySummarizer(self._llm_client, self._model_name), VectorStoreFactory.create( self._vector_store_type, @@ -135,21 +139,165 @@ def get_config(self) -> BuiltinKnowledgeGraphConfig: async def aload_document(self, chunks: List[Chunk]) -> List[str]: """Extract and persist graph.""" - # todo add doc node - for chunk in chunks: - # todo add chunk node - # todo add relation doc-chunk + data_list = self._parse_chunks(chunks) # parse the chunks by def _lod_doc_graph + graph_of_all = MemoryGraph() - # extract graphs and save - graphs = await self._graph_extractor.extract(chunk.content) - for graph in graphs: - self._graph_store.insert_graph(graph) + # Support graph search by the document and the chunks + if self._graph_store.get_config().enable_document_graph: + doc_vid = str(uuid.uuid4()) + doc_name = os.path.basename(chunks[0].metadata["source"] or "Text_Node") + for chunk_index, chunk in enumerate(data_list): + if chunk["parent_id"] != "document": + # chunk -> include -> chunk + graph_of_all.upsert_vertex_and_edge( + src_vid=chunk["parent_id"], + src_name=chunk["parent_title"], + src_props={ + "vertex_type": GraphElemType.CHUNK.value, + "content": chunk["content"], + }, + dst_vid=chunk["id"], + dst_name=chunk["title"], + dst_props={ + "vertex_type": GraphElemType.CHUNK.value, + "content": chunk["content"], + }, + edge_name=GraphElemType.INCLUDE.value, + edge_type=GraphElemType.CHUNK_INCLUDE_CHUNK.value, + ) + else: + # document -> include -> chunk + graph_of_all.upsert_vertex_and_edge( + src_vid=doc_vid, + src_name=doc_name, + src_props={ + "vertex_type": GraphElemType.DOCUMENT.value, + "content": "", + }, + dst_vid=chunk["id"], + dst_name=chunk["title"], + dst_props={ + "vertex_type": GraphElemType.CHUNK.value, + "content": chunk["content"], + }, + edge_name=GraphElemType.INCLUDE.value, + edge_type=GraphElemType.DOCUMENT_INCLUDE_CHUNK.value, + ) + + # chunk -> next -> chunk + if chunk_index >= 1: + graph_of_all.upsert_vertex_and_edge( + src_vid=data_list[chunk_index - 1]["id"], + src_name=data_list[chunk_index - 1]["title"], + src_props={ + "vertex_type": GraphElemType.CHUNK.value, + "content": data_list[chunk_index - 1]["content"], + }, + dst_vid=chunk["id"], + dst_name=chunk["title"], + dst_props={ + "vertex_type": GraphElemType.CHUNK.value, + "content": chunk["content"], + }, + edge_name=GraphElemType.NEXT.value, + edge_type=GraphElemType.CHUNK_NEXT_CHUNK.value, + ) + + # Support knowledge graph search by the entities and the relationships + if self._graph_store.get_config().enable_triplet_graph: + for chunk_index, chunk in enumerate(data_list): + # TODO: Use asyncio to extract graph to accelerate the process + # (attention to the CAP of the graph db) + + graphs: List[MemoryGraph] = await self._graph_extractor.extract( + chunk["content"] + ) + + for graph in graphs: + graph_of_all.upsert_graph(graph) + + # chunk -> include -> entity + if self._graph_store.get_config().enable_document_graph: + for vertex in graph.vertices(): + graph_of_all.upsert_vertex_and_edge( + src_vid=chunk["id"], + src_name=chunk["title"], + src_props={ + "vertex_type": GraphElemType.CHUNK.value, + "content": chunk["content"], + }, + dst_vid=vertex.vid, + dst_name=vertex.name, + dst_props={ + "vertex_type": GraphElemType.ENTITY.value, + "description": vertex.props.get("description", ""), + }, # note: description is only used for the entity + edge_name=GraphElemType.INCLUDE.value, + edge_type=GraphElemType.CHUNK_INCLUDE_ENTITY.value, + ) + + self._graph_store_apdater.upsert_graph(graph_of_all) + + # use asyncio.gather + # tasks = [self._graph_extractor.extract(chunk.content) for chunk in chunks] + # results = await asyncio.gather(*tasks) + # for result in results: + # self._graph_store_apdater.upsert_graph(result[0]) # build communities and save + await self._community_store.build_communities() return [chunk.chunk_id for chunk in chunks] + def _parse_chunks(slef, chunks: List[Chunk]): + """Parse the chunks by anlyzing the markdown chunks.""" + # TODO: Need to refact. + data = [] + for chunk_index, chunk in enumerate(chunks): + parent = None + directory_keys = list(chunk.metadata.keys())[:-1] + parent_level = directory_keys[-2] if len(directory_keys) > 1 else None + current_level = directory_keys[-1] if directory_keys else "Header0" + + chunk_data = { + "id": chunk.chunk_id, + "title": chunk.metadata.get(current_level, "none_header_chunk"), + "directory_keys": directory_keys, + "level": current_level, + "content": chunk.content, + "parent_id": None, + "parent_title": None, + "type": "chunk", + "chunk_index": chunk_index, + } + + # Find the parent chunk + if parent_level: + for parent_direct in reversed(directory_keys[:-1]): + parent_titile = chunk.metadata.get(parent_direct, None) + for n in range(chunk_index - 1, -1, -1): + metadata = chunks[n].metadata + keys = list(metadata.keys())[:-1] + if ( + metadata + and parent_direct == keys[-1] + and parent_titile == metadata.get(parent_direct) + ): + parent = chunks[n] + chunk_data["parent_id"] = parent.chunk_id + chunk_data["parent_title"] = parent_titile + break + if chunk_index - n > len(directory_keys): + break + if chunk_data["parent_id"]: + break + + if not chunk_data["parent_id"]: + chunk_data["parent_id"] = "document" + data.append(chunk_data) + return data + async def asimilar_search_with_scores( self, text, @@ -158,7 +306,7 @@ async def asimilar_search_with_scores( filters: Optional[MetadataFilters] = None, ) -> List[Chunk]: """Retrieve relevant community summaries.""" - # global search: retrieve relevant community summaries + # Global search: retrieve relevant community summaries communities = await self._community_store.search_communities(text) summaries = [ f"Section {i + 1}:\n{community.summary}" @@ -166,16 +314,53 @@ async def asimilar_search_with_scores( ] context = "\n".join(summaries) if summaries else "" - # local search: extract keywords and explore subgraph - keywords = await self._keyword_extractor.extract(text) - subgraph = self._graph_store.explore(keywords, limit=topk).format() - logger.info(f"Search subgraph from {len(keywords)} keywords") + keywords: List[str] = await self._keyword_extractor.extract(text) - if not summaries and not subgraph: + # Local search: extract keywords and explore subgraph + subgraph = MemoryGraph() + subgraph_for_doc = MemoryGraph() + + enable_triplet_graph = self._graph_store.get_config().enable_triplet_graph + enable_document_graph = self._graph_store.get_config().enable_document_graph + + if enable_triplet_graph: + subgraph: MemoryGraph = self._graph_store_apdater.explore( + subs=keywords, limit=10, search_scope="knowledge_graph" + ) + + if enable_document_graph: + keywords_for_document_graph = keywords + for vertex in subgraph.vertices(): + keywords_for_document_graph.append(vertex.name) + + subgraph_for_doc = self._graph_store_apdater.explore( + subs=keywords_for_document_graph, + limit=5, + search_scope="document_graph", + ) + else: + if enable_document_graph: + subgraph_for_doc = self._graph_store_apdater.explore( + subs=keywords, + limit=10, + search_scope="document_graph", + ) + + knowledge_graph_str = subgraph.format() + knowledge_graph_for_doc_str = subgraph_for_doc.format() + + logger.info(f"Search subgraph from the following keywords:\n{len(keywords)}") + + if not (summaries or knowledge_graph_str or knowledge_graph_for_doc_str): return [] # merge search results into context - content = HYBRID_SEARCH_PT_CN.format(context=context, graph=subgraph) + content = HYBRID_SEARCH_PT_CN.format( + context=context, + knowledge_graph=knowledge_graph_str, + knowledge_graph_for_doc=knowledge_graph_for_doc_str, + ) + logger.info(f"Final GraphRAG queried prompt:\n{content}") return [Chunk(content=content)] def truncate(self) -> List[str]: @@ -200,174 +385,179 @@ def delete_vector_name(self, index_name: str): self._graph_extractor.drop() -HYBRID_SEARCH_PT_CN = ( - "## 角色\n" - "你非常擅长结合提示词模板提供的[上下文]信息与[知识图谱]信息," - "准确恰当地回答用户的问题,并保证不会输出与上下文和知识图谱无关的信息。" - "\n" - "## 技能\n" - "### 技能 1: 上下文理解\n" - "- 准确地理解[上下文]提供的信息,上下文信息可能被拆分为多个章节。\n" - "- 上下文的每个章节内容都会以[Section]开始,并按需进行了编号。\n" - "- 上下文信息提供了与用户问题相关度最高的总结性描述,请合理使用它们。" - "### 技能 2: 知识图谱理解\n" - "- 准确地识别[知识图谱]中提供的[Entities:]章节中的实体信息" - "和[Relationships:]章节中的关系信息,实体和关系信息的一般格式为:\n" - "```" - "* 实体信息格式:\n" - "- (实体名)\n" - "- (实体名:实体描述)\n" - "- (实体名:实体属性表)\n" - "- (文本块ID:文档块内容)\n" - "- (目录ID:目录名)\n" - "- (文档ID:文档名称)\n" - "\n" - "* 关系信息的格式:\n" - "- (来源实体名)-[关系名]->(目标实体名)\n" - "- (来源实体名)-[关系名:关系描述]->(目标实体名)\n" - "- (来源实体名)-[关系名:关系属性表]->(目标实体名)\n" - "- (文本块实体)-[包含]->(实体名)\n" - "- (目录ID)-[包含]->(文本块实体)\n" - "- (目录ID)-[包含]->(子目录ID)\n" - "- (文档ID)-[包含]->(文本块实体)\n" - "- (文档ID)-[包含]->(目录ID)\n" - "```" - "- 正确地将关系信息中的实体名/ID与实体信息关联,还原出图结构。" - "- 将图结构所表达的信息作为用户提问的明细上下文,辅助生成更好的答案。\n" - "\n" - "## 约束条件\n" - "- 不要在答案中描述你的思考过程,直接给出用户问题的答案,不要生成无关信息。\n" - "- 若[知识图谱]没有提供信息,此时应根据[上下文]提供的信息回答问题。" - "- 确保以第三人称书写,从客观角度结合[上下文]和[知识图谱]表达的信息回答问题。\n" - "- 若提供的信息相互矛盾,请解决矛盾并提供一个单一、连贯的描述。\n" - "- 避免使用停用词和过于常见的词汇。\n" - "\n" - "## 参考案例\n" - "```\n" - "[上下文]:\n" - "Section 1:\n" - "菲尔・贾伯的大儿子叫雅各布・贾伯。\n" - "Section 2:\n" - "菲尔・贾伯的小儿子叫比尔・贾伯。\n" - "[知识图谱]:\n" - "Entities:\n" - "(菲尔・贾伯#菲尔兹咖啡创始人)\n" - "(菲尔兹咖啡#加利福尼亚州伯克利创立的咖啡品牌)\n" - "(雅各布・贾伯#菲尔・贾伯的儿子)\n" - "(美国多地#菲尔兹咖啡的扩展地区)\n" - "\n" - "Relationships:\n" - "(菲尔・贾伯#创建#菲尔兹咖啡#1978年在加利福尼亚州伯克利创立)\n" - "(菲尔兹咖啡#位于#加利福尼亚州伯克利#菲尔兹咖啡的创立地点)\n" - "(菲尔・贾伯#拥有#雅各布・贾伯#菲尔・贾伯的儿子)\n" - "(雅各布・贾伯#担任#首席执行官#在2005年成为菲尔兹咖啡的首席执行官)\n" - "(菲尔兹咖啡#扩展至#美国多地#菲尔兹咖啡的扩展范围)\n" - "```\n" - "\n" - "----\n" - "\n" - "接下来的[上下文]和[知识图谱]的信息,可以帮助你回答更好地用户的问题。\n" - "\n" - "[上下文]:\n" - "{context}\n" - "\n" - "[知识图谱]:\n" - "{graph}\n" - "\n" -) +HYBRID_SEARCH_PT_CN = """## 角色 +你非常擅长结合提示词模板提供的[上下文]信息与[知识图谱]信息, +准确恰当地回答用户的问题,并保证不会输出与上下文和知识图谱无关的信息。 -HYBRID_SEARCH_PT_EN = ( - "## Role\n" - "You excel at combining the information provided in the [Context] with " - "information from the [KnowledgeGraph] to accurately and appropriately " - "answer user questions, ensuring that you do not output information " - "unrelated to the context and knowledge graph.\n" - "\n" - "## Skills\n" - "### Skill 1: Context Understanding\n" - "- Accurately understand the information provided in the [Context], " - "which may be divided into several sections.\n" - "- Each section in the context will start with [Section] " - "and may be numbered as needed.\n" - "- The context provides a summary description most relevant to the user’s " - "question, and it should be used wisely." - "### Skill 2: Knowledge Graph Understanding\n" - "- Accurately identify entity information in the [Entities:] section and " - "relationship information in the [Relationships:] section " - "of the [KnowledgeGraph]. The general format for entity " - "and relationship information is:\n" - "```" - "* Entity Information Format:\n" - "- (entity_name)\n" - "- (entity_name: entity_description)\n" - "- (entity_name: entity_property_map)\n" - "- (chunk_id: chunk_content)\n" - "- (catalog_id: catalog_name)\n" - "- (document_id: document_name)\n" - "\n" - "* Relationship Information Format:\n" - "- (source_entity_name)-[relationship_name]->(target_entity_name)\n" - "- (source_entity_name)-[relationship_name: relationship_description]->" - "(target_entity_name)\n" - "- (source_entity_name)-[relationship_name: relationship_property_map]->" - "(target_entity_name)\n" - "- (chunk_id)-[Contains]->(entity_name)\n" - "- (catalog_id)-[Contains]->(chunk_id)\n" - "- (catalog_id)-[Contains]->(sub_catalog_id)\n" - "- (document_id)-[Contains]->(chunk_id)\n" - "- (document_id)-[Contains]->(catalog_id)\n" - "```" - "- Correctly associate entity names/IDs in the relationship information " - "with entity information to restore the graph structure." - "- Use the information expressed by the graph structure as detailed " - "context for the user's query to assist in generating better answers.\n" - "\n" - "## Constraints\n" - "- Don't describe your thought process in the answer, provide the answer " - "to the user's question directly without generating irrelevant information." - "- If the [KnowledgeGraph] does not provide information, you should answer " - "the question based on the information provided in the [Context]." - "- Ensure to write in the third person, responding to questions from " - "an objective perspective based on the information combined from the " - "[Context] and the [KnowledgeGraph].\n" - "- If the provided information is contradictory, resolve the " - "contradictions and provide a single, coherent description.\n" - "- Avoid using stop words and overly common vocabulary.\n" - "\n" - "## Reference Example\n" - "```\n" - "[Context]:\n" - "Section 1:\n" - "Phil Schiller's eldest son is Jacob Schiller.\n" - "Section 2:\n" - "Phil Schiller's youngest son is Bill Schiller.\n" - "[KnowledgeGraph]:\n" - "Entities:\n" - "(Phil Jaber#Founder of Philz Coffee)\n" - "(Philz Coffee#Coffee brand founded in Berkeley, California)\n" - "(Jacob Jaber#Son of Phil Jaber)\n" - "(Multiple locations in the USA#Expansion regions of Philz Coffee)\n" - "\n" - "Relationships:\n" - "(Phil Jaber#Created#Philz Coffee" - "#Founded in Berkeley, California in 1978)\n" - "(Philz Coffee#Located in#Berkeley, California" - "#Founding location of Philz Coffee)\n" - "(Phil Jaber#Has#Jacob Jaber#Son of Phil Jaber)\n" - "(Jacob Jaber#Serves as#CEO#Became CEO of Philz Coffee in 2005)\n" - "(Philz Coffee#Expanded to#Multiple locations in the USA" - "#Expansion regions of Philz Coffee)\n" - "```\n" - "\n" - "----\n" - "\n" - "The following information from the [Context] and [KnowledgeGraph] can " - "help you better answer user questions.\n" - "\n" - "[Context]:\n" - "{context}\n" - "\n" - "[KnowledgeGraph]:\n" - "{graph}\n" - "\n" -) +## 技能 +### 技能 1: 上下文理解 +- 准确地理解[上下文]提供的信息,上下文信息可能被拆分为多个章节。 +- 上下文的每个章节内容都会以[Section]开始,并按需进行了编号。 +- 上下文信息提供了与用户问题相关度最高的总结性描述,请合理使用它们。 +### 技能 2: 知识图谱理解 +- 准确地识别[知识图谱]中提供的[Entities:]章节中的实体信息和[Relationships:]章节中的关系信息,实体和关系信息的一般格式为: +``` +* 实体信息格式: +- (实体名) +- (实体名:实体描述) +- (实体名:实体属性表) +- (文本块ID:文档块内容) +- (目录ID:目录名) +- (文档ID:文档名称) + +* 关系信息的格式: +- (来源实体名)-[关系名]->(目标实体名) +- (来源实体名)-[关系名:关系描述]->(目标实体名) +- (来源实体名)-[关系名:关系属性表]->(目标实体名) +- (文本块实体)-[包含]->(实体名) +- (目录ID)-[包含]->(文本块实体) +- (目录ID)-[包含]->(子目录ID) +- (文档ID)-[包含]->(文本块实体) +- (文档ID)-[包含]->(目录ID) +``` +- 正确地将关系信息中的实体名/ID与实体信息关联,还原出图结构。 +- 将图结构所表达的信息作为用户提问的明细上下文,辅助生成更好的答案。 + + +## 约束条件 +- 不要在答案中描述你的思考过程,直接给出用户问题的答案,不要生成无关信息。 +- 若[知识图谱]或者[知识库原文]没有提供信息,此时应根据[上下文]提供的信息回答问题。 +- 确保以第三人称书写,从客观角度结合[上下文]、[知识图谱]和[知识库原文]表达的信息回答问题。 +- 若提供的信息相互矛盾,请解决矛盾并提供一个单一、连贯的描述。 +- 避免使用停用词和过于常见的词汇。 + +## 参考案例 +``` +[上下文]: +Section 1: +菲尔・贾伯的大儿子叫雅各布・贾伯。 +Section 2: +菲尔・贾伯的小儿子叫比尔・贾伯。 + +[知识图谱]: +Entities: +(菲尔・贾伯#菲尔兹咖啡创始人) +(菲尔兹咖啡#加利福尼亚州伯克利创立的咖啡品牌) +(雅各布・贾伯#菲尔・贾伯的儿子) +(美国多地#菲尔兹咖啡的扩展地区) + +Relationships: +(菲尔・贾伯#创建#菲尔兹咖啡#1978年在加利福尼亚州伯克利创立) +(菲尔兹咖啡#位于#加利福尼亚州伯克利#菲尔兹咖啡的创立地点) +(菲尔・贾伯#拥有#雅各布・贾伯#菲尔・贾伯的儿子) +(雅各布・贾伯#担任#首席执行官#在2005年成为菲尔兹咖啡的首席执行官) +(菲尔兹咖啡#扩展至#美国多地#菲尔兹咖啡的扩展范围) + +[知识库原文]: +... +``` + +---- + +接下来的[上下文]、[知识图谱]和[知识库原文]的信息,可以帮助你回答更好地用户的问题。 + +[上下文]: +{context} + +[知识图谱]: +{knowledge_graph} + +[知识库原文] +{knowledge_graph_for_doc} +""" # noqa: E501 + +HYBRID_SEARCH_PT_EN = """## Role +You excel at combining the information provided in the [Context] with +information from the [KnowledgeGraph] to accurately and appropriately +answer user questions, ensuring that you do not output information +unrelated to the context and knowledge graph. + +## Skills +### Skill 1: Context Understanding +- Accurately understand the information provided in the [Context], +which may be divided into several sections. +- Each section in the context will start with [Section] +and may be numbered as needed. +- The context provides a summary description most relevant to the user's +question, and it should be used wisely. +### Skill 2: Knowledge Graph Understanding +- Accurately identify entity information in the [Entities:] section and +relationship information in the [Relationships:] section +of the [KnowledgeGraph]. The general format for entity +and relationship information is: +``` +* Entity Information Format: +- (entity_name) +- (entity_name: entity_description) +- (entity_name: entity_property_map) +- (chunk_id: chunk_content) +- (catalog_id: catalog_name) +- (document_id: document_name) + +* Relationship Information Format: +- (source_entity_name)-[relationship_name]->(target_entity_name) +- (source_entity_name)-[relationship_name: relationship_description]->(target_entity_name) +- (source_entity_name)-[relationship_name: relationship_property_map]->(target_entity_name) +- (chunk_id)-[Contains]->(entity_name) +- (catalog_id)-[Contains]->(chunk_id) +- (catalog_id)-[Contains]->(sub_catalog_id) +- (document_id)-[Contains]->(chunk_id) +- (document_id)-[Contains]->(catalog_id) +``` +- Correctly associate entity names/IDs in the relationship information +with entity information to restore the graph structure. +- Use the information expressed by the graph structure as detailed +context for the user's query to assist in generating better answers. + +## Constraints +- Don't describe your thought process in the answer, provide the answer +to the user's question directly without generating irrelevant information. +- If the [KnowledgeGraph] or [Knowledge base original text] does not provide information, you should answer +the question based on the information provided in the [Context]. +- Ensure to write in the third person, responding to questions from +an objective perspective based on the information combined from the +[Context], the [KnowledgeGraph] and the [Knowledge base original text]. +- If the provided information is contradictory, resolve the +contradictions and provide a single, coherent description. +- Avoid using stop words and overly common vocabulary. + +## Reference Example +``` +[Context]: +Section 1: +Phil Schiller's eldest son is Jacob Schiller. +Section 2: +Phil Schiller's youngest son is Bill Schiller. + +[KnowledgeGraph]: +Entities: +(Phil Jaber#Founder of Philz Coffee) +(Philz Coffee#Coffee brand founded in Berkeley, California) +(Jacob Jaber#Son of Phil Jaber) +(Multiple locations in the USA#Expansion regions of Philz Coffee) + +Relationships: +(Phil Jaber#Created#Philz Coffee#Founded in Berkeley, California in 1978) +(Philz Coffee#Located in#Berkeley, California#Founding location of Philz Coffee) +(Phil Jaber#Has#Jacob Jaber#Son of Phil Jaber) +(Jacob Jaber#Serves as#CEO#Became CEO of Philz Coffee in 2005) +(Philz Coffee#Expanded to#Multiple locations in the USA#Expansion regions of Philz Coffee) + +[Knowledge base original text] +... +``` + +---- + +The following information from the [Context], [KnowledgeGraph] and [Knowledge base original text] +can help you better answer user questions. + +[Context]: +{context} + +[KnowledgeGraph]: +{knowledge_graph} + +[Knowledge base original text] +{knowledge_graph_for_doc} +""" # noqa: E501 diff --git a/dbgpt/storage/knowledge_graph/knowledge_graph.py b/dbgpt/storage/knowledge_graph/knowledge_graph.py index 066e2667d..10d9134aa 100644 --- a/dbgpt/storage/knowledge_graph/knowledge_graph.py +++ b/dbgpt/storage/knowledge_graph/knowledge_graph.py @@ -1,4 +1,5 @@ """Knowledge graph class.""" + import asyncio import logging import os @@ -12,6 +13,8 @@ from dbgpt.storage.graph_store.factory import GraphStoreFactory from dbgpt.storage.graph_store.graph import Graph from dbgpt.storage.knowledge_graph.base import KnowledgeGraphBase, KnowledgeGraphConfig +from dbgpt.storage.knowledge_graph.community.base import GraphStoreAdapter +from dbgpt.storage.knowledge_graph.community.factory import GraphStoreAdapterFactory from dbgpt.storage.vector_store.filters import MetadataFilters logger = logging.getLogger(__name__) @@ -46,9 +49,10 @@ def __init__(self, config: BuiltinKnowledgeGraphConfig): self._model_name = config.model_name self._triplet_extractor = TripletExtractor(self._llm_client, self._model_name) self._keyword_extractor = KeywordExtractor(self._llm_client, self._model_name) - self._graph_store = self.__init_graph_store(config) + self._graph_store: GraphStoreBase = self.__init_graph_store(config) + self._graph_store_apdater: GraphStoreAdapter = self.__init_graph_store_adapter() - def __init_graph_store(self, config) -> GraphStoreBase: + def __init_graph_store(self, config: BuiltinKnowledgeGraphConfig) -> GraphStoreBase: def configure(cfg: GraphStoreConfig): cfg.name = config.name cfg.embedding_fn = config.embedding_fn @@ -56,6 +60,9 @@ def configure(cfg: GraphStoreConfig): graph_store_type = os.getenv("GRAPH_STORE_TYPE") or config.graph_store_type return GraphStoreFactory.create(graph_store_type, configure) + def __init_graph_store_adapter(self): + return GraphStoreAdapterFactory.create(self._graph_store) + def get_config(self) -> BuiltinKnowledgeGraphConfig: """Get the knowledge graph config.""" return self._config @@ -63,10 +70,10 @@ def get_config(self) -> BuiltinKnowledgeGraphConfig: def load_document(self, chunks: List[Chunk]) -> List[str]: """Extract and persist triplets to graph store.""" - async def process_chunk(chunk): + async def process_chunk(chunk: Chunk): triplets = await self._triplet_extractor.extract(chunk.content) for triplet in triplets: - self._graph_store.insert_triplet(*triplet) + self._graph_store_apdater.insert_triplet(*triplet) logger.info(f"load {len(triplets)} triplets from chunk {chunk.chunk_id}") return chunk.chunk_id @@ -89,7 +96,7 @@ async def aload_document(self, chunks: List[Chunk]) -> List[str]: # type: ignor for chunk in chunks: triplets = await self._triplet_extractor.extract(chunk.content) for triplet in triplets: - self._graph_store.insert_triplet(*triplet) + self._graph_store_apdater.insert_triplet(*triplet) logger.info(f"load {len(triplets)} triplets from chunk {chunk.chunk_id}") return [chunk.chunk_id for chunk in chunks] @@ -116,7 +123,8 @@ async def asimilar_search_with_scores( # extract keywords and explore graph store keywords = await self._keyword_extractor.extract(text) - subgraph = self._graph_store.explore(keywords, limit=topk).format() + subgraph = self._graph_store_apdater.explore(keywords, limit=topk).format() + logger.info(f"Search subgraph from {len(keywords)} keywords") if not subgraph: @@ -147,12 +155,12 @@ async def asimilar_search_with_scores( def query_graph(self, limit: Optional[int] = None) -> Graph: """Query graph.""" - return self._graph_store.get_full_graph(limit) + return self._graph_store_apdater.get_full_graph(limit) def truncate(self) -> List[str]: """Truncate knowledge graph.""" logger.info(f"Truncate graph {self._config.name}") - self._graph_store.truncate() + self._graph_store_apdater.truncate() logger.info("Truncate keyword extractor") self._keyword_extractor.truncate() @@ -165,10 +173,15 @@ def truncate(self) -> List[str]: def delete_vector_name(self, index_name: str): """Delete vector name.""" logger.info(f"Drop graph {index_name}") - self._graph_store.drop() + self._graph_store_apdater.drop() logger.info("Drop keyword extractor") self._keyword_extractor.drop() logger.info("Drop triplet extractor") self._triplet_extractor.drop() + + def delete_by_ids(self, ids: str) -> List[str]: + """Delete by ids.""" + self._graph_store_apdater.delete_document(chunk_ids=ids) + return [] diff --git a/dbgpt/storage/metadata/db_manager.py b/dbgpt/storage/metadata/db_manager.py index 663ee779d..427bba685 100644 --- a/dbgpt/storage/metadata/db_manager.py +++ b/dbgpt/storage/metadata/db_manager.py @@ -1,4 +1,5 @@ """The database manager.""" + from __future__ import annotations import logging diff --git a/docs/docs/cookbook/rag/graph_rag_app_develop.md b/docs/docs/cookbook/rag/graph_rag_app_develop.md index a6b72273f..b0b00bf8f 100644 --- a/docs/docs/cookbook/rag/graph_rag_app_develop.md +++ b/docs/docs/cookbook/rag/graph_rag_app_develop.md @@ -10,7 +10,7 @@ You can refer to the python example file `DB-GPT/examples/rag/graph_rag_example. First, you need to install the `dbgpt` library. ```bash -pip install "dbgpt[rag]>=0.6.0" +pip install "dbgpt[graph_rag]>=0.6.1" ```` ### Prepare Graph Database @@ -112,7 +112,9 @@ TUGRAPH_HOST=127.0.0.1 TUGRAPH_PORT=7687 TUGRAPH_USERNAME=admin TUGRAPH_PASSWORD=73@TuGraph -GRAPH_COMMUNITY_SUMMARY_ENABLED=True +ENABLE_GRAPH_COMMUNITY_SUMMARY=True # enable the graph community summary +ENABLE_TRIPLET_GRAPH=True # enable the graph search for the triplets +ENABLE_DOCUMENT_GRAPH=True # enable the graph search for documents and chunks ``` @@ -250,23 +252,23 @@ Performance testing is based on the `gpt-4o-mini` model. #### Indexing Performance -| | DB-GPT | GraphRAG(microsoft) | -|----------|----------|------------------------| -| Document Tokens | 42631 | 42631 | -| Graph Size | 808 nodes, 1170 edges | 779 nodes, 967 edges | -| Prompt Tokens | 452614 | 744990 | -| Completion Tokens | 48325 | 227230 | -| Total Tokens | 500939 | 972220 | +| | DB-GPT | GraphRAG(microsoft) | +| ----------------- | --------------------- | -------------------- | +| Document Tokens | 42631 | 42631 | +| Graph Size | 808 nodes, 1170 edges | 779 nodes, 967 edges | +| Prompt Tokens | 452614 | 744990 | +| Completion Tokens | 48325 | 227230 | +| Total Tokens | 500939 | 972220 | #### Querying Performance **Global Search** -| | DB-GPT | GraphRAG(microsoft) | -|----------|----------|------------------------| -| Time | 8s | 40s | -| Tokens| 7432 | 63317 | +| | DB-GPT | GraphRAG(microsoft) | +| ------ | ------ | ------------------- | +| Time | 8s | 40s | +| Tokens | 7432 | 63317 | **Question** ``` @@ -304,10 +306,10 @@ Performance testing is based on the `gpt-4o-mini` model. **Local Search** -| | DB-GPT | GraphRAG(microsoft) | -|----------|----------|------------------------| -| Time | 15s | 15s | -| Tokens| 9230 | 11619 | +| | DB-GPT | GraphRAG(microsoft) | +| ------ | ------ | ------------------- | +| Time | 15s | 15s | +| Tokens | 9230 | 11619 | **Question** @@ -352,3 +354,28 @@ DB-GPT社区与TuGraph社区的比较 总结 总体而言,DB-GPT社区和TuGraph社区在社区贡献、生态系统和开发者参与等方面各具特色。DB-GPT社区更侧重于AI应用的多样性和组织间的合作,而TuGraph社区则专注于图数据的高效管理和分析。两者的共同点在于都强调了开源和社区合作的重要性,推动了各自领域的技术进步和应用发展。 ``` + +### Latest Updates + +In version 0.6.1 of DB-GPT, we have added a new feature: +- Retrieval of triplets with the **retrieval of document structure** + +We have expanded the definition scope of 'Graph' in GraphRAG: +``` +Knowledge Graph = Triplets Graph + Document Structure Graph +``` + +

+ +

+ +How? + +We decompose standard format files (currently best support for Markdown files) into a directed graph based on their hierarchy and layout information, and store it in a graph database. In this graph: +- Each node represents a chunk of the file +- Each edge represents the structural relationship between different chunks in the original document +- Merge the document structure graph to the triplets graph + +What is the next? + +We aim to construct a more complex Graph that covers more comprehensive information to support more sophisticated retrieval algorithms in our GraphRAG. \ No newline at end of file diff --git a/docs/docs/cookbook/rag/image_graphrag_0_6_1.png b/docs/docs/cookbook/rag/image_graphrag_0_6_1.png new file mode 100644 index 0000000000000000000000000000000000000000..566bf4bd0295d1174ccd6755d64a74d46fcf36b7 GIT binary patch literal 199966 zcmeFZcQ}^q{|9boRd(4VWy{{&5|Ww7-dpzG+{uVSgp^Q-?7dfJl957W?>(~j@4Vco z=kxhI|NV~Rcl?gy`#eX7+jU>pd7bC`e9zbWb$Y6#Abk;=3>ygv>7vZtJIY8%7{cHm zHzo$SqVpxi6bT7e-a+b&C27w zAb{P&WZej(VWP#tyY~!ByeW(=XH*j(pM|*s`~6R3eDe7W=1@ad)=>0-XlHw!#V>F0 zV6om)p6lL@GquO@yEE~QX3N#6NYzp7(bMl=BTdTuHp%~Vl-1hG$fC@bgo2&L-!*|V zsjT4S#P4TPcIfHuO-S=)>$Sh~LgL|Zu{oBc12WQG?#8*>Q9iOzBfTg3 zJze-a^`16Hei*JGru}mQvkbdXg0#%lXz@2Y>THdQNHm%2y9IJc+

gOnAn(DFvUA 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

({R`m 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

u`4gPVrEhUsY;@AJC&Ig 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 z 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 I*2L$309PI2wEzGB literal 0 HcmV?d00001 diff --git a/docs/static/img/chat_knowledge/graph_rag/image_graphrag_0_6_1.png b/docs/static/img/chat_knowledge/graph_rag/image_graphrag_0_6_1.png new file mode 100644 index 0000000000000000000000000000000000000000..566bf4bd0295d1174ccd6755d64a74d46fcf36b7 GIT binary patch literal 199966 zcmeFZcQ}^q{|9boRd(4VWy{{&5|Ww7-dpzG+{uVSgp^Q-?7dfJl957W?>(~j@4Vco z=kxhI|NV~Rcl?gy`#eX7+jU>pd7bC`e9zbWb$Y6#Abk;=3>ygv>7vZtJIY8%7{cHm zHzo$SqVpxi6bT7e-a+b&C27w zAb{P&WZej(VWP#tyY~!ByeW(=XH*j(pM|*s`~6R3eDe7W=1@ad)=>0-XlHw!#V>F0 zV6om)p6lL@GquO@yEE~QX3N#6NYzp7(bMl=BTdTuHp%~Vl-1hG$fC@bgo2&L-!*|V zsjT4S#P4TPcIfHuO-S=)>$Sh~LgL|Zu{oBc12WQG?#8*>Q9iOzBfTg3 zJze-a^`16Hei*JGru}mQvkbdXg0#%lXz@2Y>THdQNHm%2y9IJc+

gOnAn(DFvUA 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

({R`m z7d6C@sV}}Od+Bty(1&`1g*)S4?hATHN`UD>~Md8(F6ri#=U+ol) z+e_weO1$Vqckhci7>oC*e@zmq=slu0-l6V%lp_DGk1elJ4X>S?ktqyTwk%rn zfLu!UL*bv}@gp>9u5cGidhXXn5|+?P#MahS=_}()@mhbX(;<}E?dfRV_n*Y{7R3FQ zTkN=T+lUzAs4qnm^gow5ZNC2t(dxGWG56c})_^gKfE=4~tmf7@N!DrivHoG#1f`P8 zC%$}UXgSB^w;hpp5a%XU+wtZrJ=LZZ>+$RzWky9LjN>2IZoZQ~>h^d45*4%*LmU?0 zqqMv3lO1O@|K2{%t;1FNcuX$6CF@xy-K{=AACyJK?Gi^VsRzkMD zsUg6~{OA!4{(&9C0F8?yLy3DG)$u|(BP|}S;Shs5VY$^OaO+}q$&LG#MbqJp^qX%cuy`?eR`O+&8-q8jw;(1dPd=f7nkRe(#YkaiJ(N6 z?WNhvPfmwkvKS#I8#%JrcsnzoY+k6t*e*8`+T4HmL-be0)0$Ev;((fTe(T?700CTH z6=q%>RMhd&nidnyEA{EFkKpd7=K6#c@!zpa0KGx=1+ti1+_rEij06PSahIM}qD;>( zeD5X}zwu;y|B)+x2vmF+Vd89bvoj*4nYLW?6|=6~yLzin`RA3Fe7)0co?VvzY;%J5 z!CH}=hRGFqtjkj4B(YSFqKYpuCFK%)Z!_hn01T7A0B8+2FZAW`oEU*!q!}P=azMxC zwup)k_SC6=5WpU)yjXnLe(lxAdjn$qKJPy4))WRvr`04gTjL$i)>|Z%>32_Mtwe;0 z=WtB65F}t)X7iR|vSoPXM9KDjtO^9#>m)DP?x=f7R8q!e9USpFx@>n+!7Zjc*K%Z7 zc(YR_e1>;r4>WosG5|X~UL!4t_Y0p;r#7QAHz7>=@=yUjX*8SM`S{}o@CujJ+;6}1 z&m^j(3w)=LsKTHS8RGe_Z#lb>A)6Z}#XFknbQGp>5UPo7XG`uemgwLdoC4FqE`WEvVqeWVE#D z6iRrkfC4D&djYVhX#Vt?BLZ^;K^^FOJd@5yM9NEN_+KGuGKkpV=60^8-xZa@LHS9DGo=s-OpvUDxWTaSS{;32 z;Jqrd%p#+BM@sYDI};HExV%`HAymyujq8ntRoIj_@dprB8NPGyAUJjD{oQtU8ubpx z1g(av(eeA_qOOiL3wLE%I*qe@iKFTB7_U66#-%^~`k|Q9+C)E-f+-&iU0h#@&zHqLp6;D&!?~@X6f3{kR4d`=s5U=sHO?) zI?pD&q&!EWH1IjpL)r7!$R|;%0gtQ(;v={}rGtaGc4Shd8ZVPVAO9{1b9)*Q34&Jm05K~#=6=N+`(|(P*bSY2ZdadDJ z*4BL@aRV7DD4)uTQ^^%{)EQaTXQbV(3tuRk!&1-gRF(~Yel|kP^5#;1qXgx5d#Kh) zVP=6yh%uS;12OPsf3lOiRjUE_QO&Tq8sy4+QvSpXg3J$)O_RrE>oNUaM_PKeFH+XE zxkP{FwqaWg8~$=cp0aknwsnk)2M+^lmC5VebUc`geAnY|7?NVm!J3)y;<%8SBbpf0;nCB zr0Q=8IZIc*CW5WiDgKl0rZ<*=OY@%boyJ8Q#bp(9$4o~-ySX#vpC^)(ez@#{!3n|0 zqG0M`U03%R(j>R##?Qlj&JNS0dFmi>f6H-zQ(c=p^p4?Om!zwAoOD2OeXMlKuERyo z{5zD&&Wyjp)jNc&VeWdiF3U0z4 zaFqXgXj66KoWbBVFHc4B1JtVnj;`%TnU=}}pWE&nCR|G?2%j>|GcyHPX0)j&!0J{? z8uH1kf|EKkiyLm`m6>{v-!!iTac=H{biD!p5|=Y`TDKQ-*mnAF^w3P#Gm{)WV-Ope zAUPgc+O~_B17C8fyNYtDq~>c*p`Mc{)!y6E&CrHX`^YUW+s#Ki?z@zc(;`U0%qo$~ zg}Bt5?He6%o*694LADb=OUmJ4&IuOAS|phQ{Ql2g-ZPSrr8T+lEuOn{eehZW@3pD- z`r1h=`#|LIErbWyPsIl-;17Y@jy@uzQRk-fC}$mrw+2Ox*D0}vVQaeQOE%PTKV&Tn z1cK+dFCrIr0zm7KD1e5rMd@VZhT`Z|uS^6h65;giyJ+8tRYrIE_g=^2SI86Cz0ocy z&Qk;c(|W0@c#Lvj?_RX%$1(wx<3xZr|6EuG&zxp$_npZvQ>Z-7N{H~}c*}ZHMOL8e z>yv21t1;duRMJ*0<@7;s9z9!6-uO-Pt59W`B}8>B>d=i8;cZpbuuOnXgZ=ezh!JtyvlRU}hN)#HR?M zr9yh+TxHVvaA)WxoAQAKgTSBz2%Jq6ii0PQbQbkW9t^q^U1JGQ9<62-I@1Gdc>Xqp zOJ=?_)?I{0mY#jXtFuP>=RwKH0f+X^&)f0W*-k#59Lp&E@*`LF&AKw~1(?Yn$C^&M z0QBT}>xcOo0kr1D*zJ-trR`t2X{YpDGN%&h%=kb#9PVp z8L`>fKW+O%7+iDm7HR}C#Z|g<>MfE zD_cj0%SY)pj;c61(fbc?$rkgOb&)k2bYYJjrk-LwyU(kN-5k>1q@&L3t+uqKXg{A( zC-+KC|IEX0x;zPk0mP9XM2$jT@C7Fn0)lrbJzVXoJQZJ|F+X0YwFwA@<2x1e1oP1v z8Pk_M5bzN%LdP$(`4n@qpH%yGSY#oLavqt9R&Ppgg)=9=ic;RGy@edbLJ9V9@~C}q z(DHjfoV862*G@{(3zxp+Mci1d1$zgo^3RJUDz)#_e0v?!tU?}61<7)}y2-BFkY+Sz zN~TYD(Xbj6C4yE{tv6>oY9D=jbkeqHc?ay18l@f>gmQ7`%zPHq21)g=S0&6p8YYw_ zT8Ce+XK2DhYtqKzouB_);a=SX)I*C*V38tQEz2{{#Ty!vlI2%+{WFrr;-c&qVWSR6 z_g5C!R9G6R@c5PSGoLJi7Gdq&YMS;99w3scT2vToPZcj`T^WpZ{oc%m@?Y$1cdy)?6M|NnwIib-Oc&b@@eoCZpaOBHh~scbaK;LQ`gVl zGk7Z(qI~(0=diEQiNiVd3g3lcMn2$$p5$%D&O zqo-yk>cMC&GMtOehDNzbL#+QuBJCn?u<8D<)$k_`mf(KE)3fwSG=GDca@Gf6&n|4% znQJAo-@nUEDGdhTP3kbE#lLy`hMeo`J`f=SE*m<~clr1lVU#pPL9vBjTUvj-E!~9O z$I?XX6u)i@T^p&_wdX}t$&aA0NEzvgEx(ae<(8qwrfOg+bM}t6Z%{13SQ$)+o>AV%OVRguRYhAXL)HY1beRsyUfz2?VtodCR1EzZTgXO+)P%)#h z{?em7HeWEg^!5`tLqR$Glyk>uZ11br{Q~O$i?^=~tMcu>l*5ry8bm<4IfT+k3rMGQ zi*$#8(nq90T3V12=?+0ky1QFKx&&$FKKOgz`Pa-fpXRF zhDIyB_~9bU;`@oEWz=^YG&U_ML||61QQ>JGNm=Z|*ouoai$)Ru(wxGq#mEem1*#;I zHD-a|g$~_JUnCl8v-l>`rb9Iiy}0EyFycKIp77W|B8|BN6C^30@8tfQR*E$(Y_n>v zmj*E&U?9;XSMAEv*lybLPA3a{x$`;LKd}_`2Arba+3HG#E*=MML_3zvQnua9 zG3v4%WLhtvNl)mK*Ndc8RPIF`wh&_C)O2IbjnMmZ_!~=dCS})m(Qzy+GYhOJ$&wzp zNFwW@L762*VFG$>wab;r_;Ip+Z-ymB{hq0+o$i?wdOFN}01bK=RUHanJ7~H}Q*FZp z2t@rv+}Ewgt-ed-5a_?~SGB0?##*)h?Ee7c&)4oasl+FbI83D1s?7SWA@Ka|L4`O? zWW!w+BPKywHgw}?OJ(|gnp<;<5MTg+P zBxEHCzI9?Nemj@#a3Cr7og3K=R0==L=J~gXmlqm<=u!ULxu_%R83*sX7(io}L@6~X zqK!YLkRDI#jj!Rb9%uOz?Ti*HFS_F|0_r9-vL9l7zcQr5&uY}oIKGa8Dw#ZJ)p!8z zy13de%{N(C!`3+6a{?0djh-VxRg{j8wuKaMO7f3ZT!CYgsRCAscUwO<+1INI+Uq=N zg*!nrzh~Qj;6mak)2EhH56?21&2QXxEZDv;e>&`S#A_2}| zFTvW2=NA5-VAI$`apG9~w8jRi7*0&W1+9q@6@U16h~WOo`8BZ*ZiBQW;N}=w6fM5) z7!ql=Dqb5(lb+~xX3`zY6g8t0ovJkJB`mA{hSA#=hpn6ngi1~|pTDIltisHlY&VnG zBiiPVL{6^aG`u}^Dqr?R1FZn+_0EIht2mm1eG6P-atzA!suo)T0*L{R9Vw*!{pc89 zfypD#p2hTXV^+Tqh_M7rcj0VG>roRu>gKWChER=gM zw4PU9J=j|Krg@Q&uOE~6{6Z*0(1OmRVGqYmGVoH4s%UIcgR5CCpW%2tlwPDOixq+d z3ggYre*sYiv8El$X-K{}qZ<^`hBufO=6MLbuB7Zl5I63Ym7YcM{i*LRs694MuLJ$J zS2T3FtS1N!H^R&Jewe$ul2gyk~sLy3%>zIDvvDz(U}Z4x_5IGxoKQhN2S$3Z8ls-G$-;v{T8 zpR^4FGXD-ylF)13{P56wylAn{K#}cS+YQ8&v^5%nLLi0a*Q|an=!^u1pikOs9!o8s zGw~$pz=WMDt*>e6zh~}vOs`c={sa&_>25yIO}UxAYu}lPs_l|_fya0WD`PrPwz#d1 zNaG{Th*g+&b91)OucN{BpgJT$e^4Dp(b<3717%EqoQuSShUOsg9cM2C1|M1G&>`{VO64V!C;{t$UZ%(;i0VnSU-(z+)(CcM*EA+ z&o4+%jd^8G=4t~#pp5yMo??XaL?5AYQLZ_vo-58&~Xm)jYA?9-SN_?3Q zaD9ssdOq52p{&!mLko+>co~ppf>#4rl6{Dlq?~rMHPR@5W}TIe;u|mN@(mvxwBChw zQ>NQ%U!;;w_^6B)d9XHmUAgWk`JBgCc5yk#G5%IK05STLWiXWUV3jOcHFRRKC4B@} zP*T+<6CVO6U!z@g+n?<>bjJHUI!0LnP-oMOV@(eeJGEb}+&76_FNmO++=S%FK=buya-m6z8Ue@?v zF(APtj6vwr7zt_}#ZM3 zYNh2~K~Vd8f*&f+aO$U=m@N4zwr-=^etrc|kNXmlZL6*UXlB0KBaaS&yW>P=&?rvf zPPmTJ_+%y8L9RWVfr!wQNGsX>V!620fmiX*l{d)x8eY8F*<)ATG}`Tk6+a4Y9DPF_ zb@_S-bT)Ga-K8WE7np98H5;X}B?RHa+7eggU5{wTc?PCzNx&Hs9)iy(aR3@MYBnT( z1+7wZ3Jw8nvwRK2Ej_KJzzCS{2ZaV6R{Y0&On-Dc!b6WhyS}BU`lnP4c8`~r4Q515WYGaZEnZHei00lR=g4V#+bVNvCxzE18}<75@*04P|Yro z9@;kK{RApj;}sR%G)09m#tcQaAfrwl$`gY%oJk;x!*R4F;N(jL5-Jf`_W}UX)87k2=n7OI?+B=?T1N@LSU$_(VHXIxE1!OAa=xa(%%rY@NCi=ljYt0eRGguxW z+~3*%@dwye_SHZme7o+sLgqI7MoS$><@Hj+*H%FHIP0Va*^f{L%+hLZep3`t?CD6=jdR zlbBg0o#Q!oBE8cQgiAxcwBuigVYncD9fH4;>JQSM`V0clxyB(Ddh1swKq|k>N@k65zXWVxJ4L>VCOrFQ8YtpzY*jAP$ zO64iIXrs}-1Y~x}=@n!2CH7LR*6<1m(Y-4Wh_%jo9`zAZlHBTNChYd z$JZ6qZME|Y8a&e$G)KVSc}9*VJDA{6$cP=!e4~$#GXgsDuGkdYTLb-ssegZ|`VlUI zALTauMJdf826P+zVz$f=PJ|z>av?s6{pSGPH`UQmF9msySYq&ATx)dGvq+K%U4M`R)fH=Du}% zp?sW{Y2a@D(O&VLp(dZ%^39}+$Y(DR>;>A-Z-BL%49yXB)ktwO1*V;L6hxBqyXV1( z>UCB@WSRJKG26k94t+VXBLMGnILjd$g7&%hct0G+k$p*VlFedC6a{xtH}vw4NKQfC z{ghuvc!LYek(tM2#`7TfyQf; zKQ;4J^h$Ta1m5IaSi!Qh#3+^JAgZ*owZDq9u7L8xj7uCiHbht@k_}rqK{mIlE2c9^ zE<7yK#C+~%HgIO?MZTN&F|50AuxN?rp{>q9SKpO&uVt?oe1-r>LkbM)SEA*5W0_vq zlo z8PvTxo|=9LF)Y8wEuh62Ft<9dQ@IpsQ?`{kOHp5TeW@^V75DJEvPI^=8PuQ>0VF83 zojb!9Cl#l%0USxI#zA99?fiOwX*~lB^uV+=n)E-yIR#0@^Kwj%a(je-8a#HttTs%T zeE2~$w*YX;u#@sZ%J0SXCD++ugD8a@bgLn;vlDvG;X`*`unoy#_mv!@h8OtsndC

u`4gPVrEhUsY;@AJC&Ig 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 z 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 I*2L$309PI2wEzGB literal 0 HcmV?d00001 diff --git a/tests/intetration_tests/datasource/test_conn_tugraph.py b/tests/intetration_tests/datasource/test_conn_tugraph.py index eafed88a6..f323c48f2 100644 --- a/tests/intetration_tests/datasource/test_conn_tugraph.py +++ b/tests/intetration_tests/datasource/test_conn_tugraph.py @@ -1,4 +1,5 @@ import pytest + from dbgpt.datasource.conn_tugraph import TuGraphConnector # Set database connection parameters. @@ -21,10 +22,10 @@ def connector(): def test_get_table_names(connector): """Test retrieving table names from the graph database.""" - table_names = connector.get_table_names() + vertex_tables, edge_tables = connector.get_table_names() # Verify the quantity of vertex and edge tables. - assert len(table_names["vertex_tables"]) == 5 - assert len(table_names["edge_tables"]) == 8 + assert len(vertex_tables) == 5 + assert len(edge_tables) == 8 def test_get_columns(connector): diff --git a/tests/intetration_tests/graph_store/test_memgraph_store.py b/tests/intetration_tests/graph_store/test_memgraph_store.py index 0bf066f0a..1c2893985 100644 --- a/tests/intetration_tests/graph_store/test_memgraph_store.py +++ b/tests/intetration_tests/graph_store/test_memgraph_store.py @@ -4,6 +4,9 @@ MemoryGraphStore, MemoryGraphStoreConfig, ) +from dbgpt.storage.knowledge_graph.community.memgraph_store_adapter import ( + MemGraphStoreAdapter, +) @pytest.fixture @@ -11,31 +14,37 @@ def graph_store(): yield MemoryGraphStore(MemoryGraphStoreConfig()) -def test_graph_store(graph_store): - graph_store.insert_triplet("A", "0", "A") - graph_store.insert_triplet("A", "1", "A") - graph_store.insert_triplet("A", "2", "B") - graph_store.insert_triplet("B", "3", "C") - graph_store.insert_triplet("B", "4", "D") - graph_store.insert_triplet("C", "5", "D") - graph_store.insert_triplet("B", "6", "E") - graph_store.insert_triplet("F", "7", "E") - graph_store.insert_triplet("E", "8", "F") - - subgraph = graph_store.explore(["A"]) +@pytest.fixture +def graph_store_adapter(graph_store: MemoryGraphStore): + memgraph_store_adapter = MemGraphStoreAdapter(graph_store) + yield memgraph_store_adapter + + +def test_graph_store(graph_store_adapter: MemGraphStoreAdapter): + graph_store_adapter.insert_triplet("A", "0", "A") + graph_store_adapter.insert_triplet("A", "1", "A") + graph_store_adapter.insert_triplet("A", "2", "B") + graph_store_adapter.insert_triplet("B", "3", "C") + graph_store_adapter.insert_triplet("B", "4", "D") + graph_store_adapter.insert_triplet("C", "5", "D") + graph_store_adapter.insert_triplet("B", "6", "E") + graph_store_adapter.insert_triplet("F", "7", "E") + graph_store_adapter.insert_triplet("E", "8", "F") + + subgraph = graph_store_adapter.explore(["A"]) print(f"\n{subgraph.format()}") assert subgraph.edge_count == 9 - graph_store.delete_triplet("A", "0", "A") - graph_store.delete_triplet("B", "4", "D") - subgraph = graph_store.explore(["A"]) + graph_store_adapter.delete_triplet("A", "0", "A") + graph_store_adapter.delete_triplet("B", "4", "D") + subgraph = graph_store_adapter.explore(["A"]) print(f"\n{subgraph.format()}") assert subgraph.edge_count == 7 - triplets = graph_store.get_triplets("B") + triplets = graph_store_adapter.get_triplets("B") print(f"\nTriplets of B: {triplets}") assert len(triplets) == 2 - schema = graph_store.get_schema() + schema = graph_store_adapter.get_schema() print(f"\nSchema: {schema}") assert len(schema) == 86 diff --git a/tests/intetration_tests/graph_store/test_tugraph_store.py b/tests/intetration_tests/graph_store/test_tugraph_store.py index 570869eb5..d02a2ca90 100644 --- a/tests/intetration_tests/graph_store/test_tugraph_store.py +++ b/tests/intetration_tests/graph_store/test_tugraph_store.py @@ -1,43 +1,52 @@ -# test_tugraph_store.py +# test_tugraph_tugraph_store_adapter.py import pytest from dbgpt.storage.graph_store.tugraph_store import TuGraphStore, TuGraphStoreConfig +from dbgpt.storage.knowledge_graph.community.tugraph_store_adapter import ( + TuGraphStoreAdapter, +) @pytest.fixture(scope="module") def store(): - config = TuGraphStoreConfig(name="TestGraph", summary_enabled=False) + config = TuGraphStoreConfig(name="TestGraph", enable_summary=False) store = TuGraphStore(config=config) yield store store.conn.close() -def test_insert_and_get_triplets(store): - store.insert_triplet("A", "0", "A") - store.insert_triplet("A", "1", "A") - store.insert_triplet("A", "2", "B") - store.insert_triplet("B", "3", "C") - store.insert_triplet("B", "4", "D") - store.insert_triplet("C", "5", "D") - store.insert_triplet("B", "6", "E") - store.insert_triplet("F", "7", "E") - store.insert_triplet("E", "8", "F") - triplets = store.get_triplets("A") +@pytest.fixture(scope="module") +def tugraph_store_adapter(store: TuGraphStore): + tugraph_store_adapter = TuGraphStoreAdapter(store) + yield tugraph_store_adapter + + +def test_insert_and_get_triplets(tugraph_store_adapter: TuGraphStoreAdapter): + tugraph_store_adapter.insert_triplet("A", "0", "A") + tugraph_store_adapter.insert_triplet("A", "1", "A") + tugraph_store_adapter.insert_triplet("A", "2", "B") + tugraph_store_adapter.insert_triplet("B", "3", "C") + tugraph_store_adapter.insert_triplet("B", "4", "D") + tugraph_store_adapter.insert_triplet("C", "5", "D") + tugraph_store_adapter.insert_triplet("B", "6", "E") + tugraph_store_adapter.insert_triplet("F", "7", "E") + tugraph_store_adapter.insert_triplet("E", "8", "F") + triplets = tugraph_store_adapter.get_triplets("A") assert len(triplets) == 2 - triplets = store.get_triplets("B") + triplets = tugraph_store_adapter.get_triplets("B") assert len(triplets) == 3 - triplets = store.get_triplets("C") + triplets = tugraph_store_adapter.get_triplets("C") assert len(triplets) == 1 - triplets = store.get_triplets("D") + triplets = tugraph_store_adapter.get_triplets("D") assert len(triplets) == 0 - triplets = store.get_triplets("E") + triplets = tugraph_store_adapter.get_triplets("E") assert len(triplets) == 1 - triplets = store.get_triplets("F") + triplets = tugraph_store_adapter.get_triplets("F") assert len(triplets) == 1 -def test_query(store): +def test_query(store: TuGraphStore): query = "MATCH (n)-[r]->(n1) return n,n1,r limit 3" result = store.query(query) v_c = result.vertex_count @@ -45,18 +54,18 @@ def test_query(store): assert v_c == 3 and e_c == 3 -def test_explore(store): +def test_explore(tugraph_store_adapter: TuGraphStoreAdapter): subs = ["A", "B"] - result = store.explore(subs, depth=2, fan=None, limit=10) + result = tugraph_store_adapter.explore(subs, depth=2, fan=None, limit=10) v_c = result.vertex_count e_c = result.edge_count assert v_c == 5 and e_c == 5 -def test_delete_triplet(store): +def test_delete_triplet(tugraph_store_adapter: TuGraphStoreAdapter): subj = "A" rel = "0" obj = "B" - store.delete_triplet(subj, rel, obj) - triplets = store.get_triplets(subj) + tugraph_store_adapter.delete_triplet(subj, rel, obj) + triplets = tugraph_store_adapter.get_triplets(subj) assert len(triplets) == 0 diff --git a/tests/intetration_tests/graph_store/test_tugraph_store_with_summary.py b/tests/intetration_tests/graph_store/test_tugraph_store_with_summary.py index 0ca3de588..a1e8b31d0 100644 --- a/tests/intetration_tests/graph_store/test_tugraph_store_with_summary.py +++ b/tests/intetration_tests/graph_store/test_tugraph_store_with_summary.py @@ -1,18 +1,27 @@ import pytest +from dbgpt.storage.graph_store.graph import Edge, MemoryGraph, Vertex from dbgpt.storage.graph_store.tugraph_store import TuGraphStore, TuGraphStoreConfig -from dbgpt.storage.graph_store.graph import MemoryGraph, Edge, Vertex +from dbgpt.storage.knowledge_graph.community.tugraph_store_adapter import ( + TuGraphStoreAdapter, +) @pytest.fixture(scope="module") def store(): - config = TuGraphStoreConfig(name="TestSummaryGraph", summary_enabled=True) + config = TuGraphStoreConfig(name="TestSummaryGraph", enable_summary=True) store_instance = TuGraphStore(config=config) yield store_instance store_instance.conn.close() -def test_insert_graph(store): +@pytest.fixture(scope="module") +def graph_store_adapter(store: TuGraphStore): + tugraph_store_adapter = TuGraphStoreAdapter(store) + yield tugraph_store_adapter + + +def test_upsert_graph(tugraph_store_adapter: TuGraphStoreAdapter): graph = MemoryGraph() vertex_list = [ Vertex("A", "A", description="Vertex A", _document_id="Test doc"), @@ -35,22 +44,22 @@ def test_insert_graph(store): graph.upsert_vertex(vertex) for edge in edge_list: graph.append_edge(edge) - store.insert_graph(graph) + tugraph_store_adapter.upsert_graph(graph) -def test_leiden_query(store): +def test_leiden_query(store: TuGraphStore): query = "CALL db.plugin.callPlugin('CPP','leiden','{\"leiden_val\":\"_community_id\"}',60.00,false)" result = store.query(query) assert result.vertex_count == 1 -def test_query_node_and_edge(store): +def test_query_node_and_edge(store: TuGraphStore): query = 'MATCH (n)-[r]->(m) WHERE n._community_id = "0" RETURN n,r,m' result = store.query(query) assert result.vertex_count == 7 and result.edge_count == 6 -def test_stream_query_path(store): +def test_stream_query_path(store: TuGraphStore): query = 'MATCH p=(n)-[r:relation*2]->(m) WHERE n._community_id = "0" RETURN p' result = store.query(query) for v in result.vertices():