mirror of
https://github.com/infiniflow/ragflow.git
synced 2025-12-08 20:42:30 +08:00
Refactor graphrag to remove redis lock (#5828)
### What problem does this PR solve? Refactor graphrag to remove redis lock ### Type of change - [x] Refactoring
This commit is contained in:
@ -18,22 +18,42 @@ import argparse
|
||||
import json
|
||||
from api import settings
|
||||
import networkx as nx
|
||||
import logging
|
||||
import trio
|
||||
|
||||
from api.db import LLMType
|
||||
from api.db.services.document_service import DocumentService
|
||||
from api.db.services.knowledgebase_service import KnowledgebaseService
|
||||
from api.db.services.llm_service import LLMBundle
|
||||
from api.db.services.user_service import TenantService
|
||||
from graphrag.general.index import Dealer
|
||||
from graphrag.general.index import update_graph
|
||||
from graphrag.light.graph_extractor import GraphExtractor
|
||||
from rag.utils.redis_conn import RedisDistributedLock
|
||||
|
||||
settings.init_settings()
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
def callback(prog=None, msg="Processing..."):
|
||||
logging.info(msg)
|
||||
|
||||
|
||||
async def main():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('-t', '--tenant_id', default=False, help="Tenant ID", action='store', required=True)
|
||||
parser.add_argument('-d', '--doc_id', default=False, help="Document ID", action='store', required=True)
|
||||
parser.add_argument(
|
||||
"-t",
|
||||
"--tenant_id",
|
||||
default=False,
|
||||
help="Tenant ID",
|
||||
action="store",
|
||||
required=True,
|
||||
)
|
||||
parser.add_argument(
|
||||
"-d",
|
||||
"--doc_id",
|
||||
default=False,
|
||||
help="Document ID",
|
||||
action="store",
|
||||
required=True,
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
e, doc = DocumentService.get_by_id(args.doc_id)
|
||||
@ -41,18 +61,36 @@ if __name__ == "__main__":
|
||||
raise LookupError("Document not found.")
|
||||
kb_id = doc.kb_id
|
||||
|
||||
chunks = [d["content_with_weight"] for d in
|
||||
settings.retrievaler.chunk_list(args.doc_id, args.tenant_id, [kb_id], max_count=6,
|
||||
fields=["content_with_weight"])]
|
||||
chunks = [("x", c) for c in chunks]
|
||||
|
||||
RedisDistributedLock.clean_lock(kb_id)
|
||||
chunks = [
|
||||
d["content_with_weight"]
|
||||
for d in settings.retrievaler.chunk_list(
|
||||
args.doc_id,
|
||||
args.tenant_id,
|
||||
[kb_id],
|
||||
max_count=6,
|
||||
fields=["content_with_weight"],
|
||||
)
|
||||
]
|
||||
|
||||
_, tenant = TenantService.get_by_id(args.tenant_id)
|
||||
llm_bdl = LLMBundle(args.tenant_id, LLMType.CHAT, tenant.llm_id)
|
||||
_, kb = KnowledgebaseService.get_by_id(kb_id)
|
||||
embed_bdl = LLMBundle(args.tenant_id, LLMType.EMBEDDING, kb.embd_id)
|
||||
|
||||
dealer = Dealer(GraphExtractor, args.tenant_id, kb_id, llm_bdl, chunks, "English", embed_bdl=embed_bdl)
|
||||
graph, doc_ids = await update_graph(
|
||||
GraphExtractor,
|
||||
args.tenant_id,
|
||||
kb_id,
|
||||
args.doc_id,
|
||||
chunks,
|
||||
"English",
|
||||
llm_bdl,
|
||||
embed_bdl,
|
||||
callback,
|
||||
)
|
||||
|
||||
print(json.dumps(nx.node_link_data(dealer.graph), ensure_ascii=False, indent=2))
|
||||
print(json.dumps(nx.node_link_data(graph), ensure_ascii=False, indent=2))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
trio.run(main)
|
||||
|
||||
Reference in New Issue
Block a user