Step_3.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import re
  2. import json
  3. from lightrag import LightRAG, QueryParam
  4. from lightrag.utils import always_get_an_event_loop
  5. def extract_queries(file_path):
  6. with open(file_path, "r") as f:
  7. data = f.read()
  8. data = data.replace("**", "")
  9. queries = re.findall(r"- Question \d+: (.+)", data)
  10. return queries
  11. async def process_query(query_text, rag_instance, query_param):
  12. try:
  13. result = await rag_instance.aquery(query_text, param=query_param)
  14. return {"query": query_text, "result": result}, None
  15. except Exception as e:
  16. return None, {"query": query_text, "error": str(e)}
  17. def run_queries_and_save_to_json(
  18. queries, rag_instance, query_param, output_file, error_file
  19. ):
  20. loop = always_get_an_event_loop()
  21. with (
  22. open(output_file, "a", encoding="utf-8") as result_file,
  23. open(error_file, "a", encoding="utf-8") as err_file,
  24. ):
  25. result_file.write("[\n")
  26. first_entry = True
  27. for query_text in queries:
  28. result, error = loop.run_until_complete(
  29. process_query(query_text, rag_instance, query_param)
  30. )
  31. if result:
  32. if not first_entry:
  33. result_file.write(",\n")
  34. json.dump(result, result_file, ensure_ascii=False, indent=4)
  35. first_entry = False
  36. elif error:
  37. json.dump(error, err_file, ensure_ascii=False, indent=4)
  38. err_file.write("\n")
  39. result_file.write("\n]")
  40. if __name__ == "__main__":
  41. cls = "agriculture"
  42. mode = "hybrid"
  43. WORKING_DIR = f"../{cls}"
  44. rag = LightRAG(working_dir=WORKING_DIR)
  45. query_param = QueryParam(mode=mode)
  46. queries = extract_queries(f"../datasets/questions/{cls}_questions.txt")
  47. run_queries_and_save_to_json(
  48. queries, rag, query_param, f"{cls}_result.json", f"{cls}_errors.json"
  49. )