| 
									
										
										
										
											2024-10-22 15:16:57 +08:00
										 |  |  | import os | 
					
						
							|  |  |  | import asyncio | 
					
						
							|  |  |  | from lightrag import LightRAG, QueryParam | 
					
						
							| 
									
										
										
										
											2025-01-25 00:11:00 +01:00
										 |  |  | from lightrag.llm.openai import openai_complete_if_cache | 
					
						
							|  |  |  | from lightrag.llm.siliconcloud import siliconcloud_embedding | 
					
						
							| 
									
										
										
										
											2024-10-22 15:16:57 +08:00
										 |  |  | from lightrag.utils import EmbeddingFunc | 
					
						
							|  |  |  | import numpy as np | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | WORKING_DIR = "./dickens" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if not os.path.exists(WORKING_DIR): | 
					
						
							|  |  |  |     os.mkdir(WORKING_DIR) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | async def llm_model_func( | 
					
						
							| 
									
										
										
										
											2024-12-05 14:11:43 +08:00
										 |  |  |     prompt, system_prompt=None, history_messages=[], keyword_extraction=False, **kwargs | 
					
						
							| 
									
										
										
										
											2024-10-22 15:16:57 +08:00
										 |  |  | ) -> str: | 
					
						
							|  |  |  |     return await openai_complete_if_cache( | 
					
						
							|  |  |  |         "Qwen/Qwen2.5-7B-Instruct", | 
					
						
							|  |  |  |         prompt, | 
					
						
							|  |  |  |         system_prompt=system_prompt, | 
					
						
							|  |  |  |         history_messages=history_messages, | 
					
						
							| 
									
										
										
										
											2024-10-23 15:02:28 +08:00
										 |  |  |         api_key=os.getenv("SILICONFLOW_API_KEY"), | 
					
						
							| 
									
										
										
										
											2024-10-22 15:16:57 +08:00
										 |  |  |         base_url="https://api.siliconflow.cn/v1/", | 
					
						
							|  |  |  |         **kwargs, | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | async def embedding_func(texts: list[str]) -> np.ndarray: | 
					
						
							|  |  |  |     return await siliconcloud_embedding( | 
					
						
							|  |  |  |         texts, | 
					
						
							|  |  |  |         model="netease-youdao/bce-embedding-base_v1", | 
					
						
							| 
									
										
										
										
											2024-10-23 15:02:28 +08:00
										 |  |  |         api_key=os.getenv("SILICONFLOW_API_KEY"), | 
					
						
							| 
									
										
										
										
											2024-10-25 13:32:25 +05:30
										 |  |  |         max_token_size=512, | 
					
						
							| 
									
										
										
										
											2024-10-22 15:16:57 +08:00
										 |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # function test | 
					
						
							|  |  |  | async def test_funcs(): | 
					
						
							|  |  |  |     result = await llm_model_func("How are you?") | 
					
						
							|  |  |  |     print("llm_model_func: ", result) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     result = await embedding_func(["How are you?"]) | 
					
						
							|  |  |  |     print("embedding_func: ", result) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | asyncio.run(test_funcs()) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | rag = LightRAG( | 
					
						
							|  |  |  |     working_dir=WORKING_DIR, | 
					
						
							|  |  |  |     llm_model_func=llm_model_func, | 
					
						
							|  |  |  |     embedding_func=EmbeddingFunc( | 
					
						
							|  |  |  |         embedding_dim=768, max_token_size=512, func=embedding_func | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | with open("./book.txt") as f: | 
					
						
							|  |  |  |     rag.insert(f.read()) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Perform naive search | 
					
						
							|  |  |  | print( | 
					
						
							|  |  |  |     rag.query("What are the top themes in this story?", param=QueryParam(mode="naive")) | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Perform local search | 
					
						
							|  |  |  | print( | 
					
						
							|  |  |  |     rag.query("What are the top themes in this story?", param=QueryParam(mode="local")) | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Perform global search | 
					
						
							|  |  |  | print( | 
					
						
							|  |  |  |     rag.query("What are the top themes in this story?", param=QueryParam(mode="global")) | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Perform hybrid search | 
					
						
							|  |  |  | print( | 
					
						
							|  |  |  |     rag.query("What are the top themes in this story?", param=QueryParam(mode="hybrid")) | 
					
						
							|  |  |  | ) |