From 1fb751656003113a20effc184cfd17c7d2e3830b Mon Sep 17 00:00:00 2001 From: HuangHai <10402852@qq.com> Date: Wed, 16 Jul 2025 19:38:40 +0800 Subject: [PATCH 1/3] 'commit' --- dsLightRag/Start.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/dsLightRag/Start.py b/dsLightRag/Start.py index ce729699..ae3394a0 100644 --- a/dsLightRag/Start.py +++ b/dsLightRag/Start.py @@ -1,4 +1,5 @@ import json +import logging import os.path import shutil import subprocess @@ -21,7 +22,7 @@ from Util.PostgreSQLUtil import init_postgres_pool # 想更详细地控制日志输出 logger = logging.getLogger('lightrag') -logger.setLevel(logging.INFO) +logger.setLevel(logging.DEBUG) handler = logging.StreamHandler() handler.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')) logger.addHandler(handler) @@ -55,11 +56,12 @@ async def rag(request: fastapi.Request): output_model = data.get("output_model", "txt") if output_model == "txt": - user_prompt = "1、资料中提供化学反应方程式的,一定要严格按提供的Latex公式输出,绝对不允许对Latex公式进行修改 !" - user_prompt = user_prompt + "\n 2、如果资料中提供了图片的,一定要严格按照原文提供图片输出,绝对不能省略或不输出!" - user_prompt = user_prompt + "\n 3、知识库中存在的问题,严格按知识库中的内容回答,不允许扩展!" - user_prompt = user_prompt + "\n 4、如果问题与提供的知识库内容不符,则明确告诉未在知识库范围内提到!" - user_prompt = user_prompt + "\n 5、发现输出内容中包含Latex公式的,一定要检查是不是包含了$$或$的包含符号,不能让Latex无包含符号出现!" + user_prompt = "1、如果资料中提供了图片的,一定要严格按照原文提供图片输出,绝对不能省略或不输出!" + user_prompt = user_prompt + "\n 2、不要提供引用信息!" + user_prompt = user_prompt + "\n 3、提供给你的材料中,与问题完全相关的需要完整保留!" + user_prompt = user_prompt + "\n 4、提供给你的材料中,与问题不完全相关的一定不要输出!" + user_prompt = user_prompt + "\n 5、资料中提供化学反应方程式的,一定要严格按提供的Latex公式输出,绝对不允许对Latex公式进行修改 !" + user_prompt = user_prompt + "\n 6、发现输出内容中包含Latex公式的,一定要检查是不是包含了$$或$的包含符号,不能让Latex无包含符号出现!" elif output_model == 'html': user_prompt = """ 我需要一个专业的交互式数据可视化,数据资料我将提供,你也可以根据自己了解的信息进行补充, From 4153990b5ee3c1745ead5f55af5c4987cc22081a Mon Sep 17 00:00:00 2001 From: HuangHai <10402852@qq.com> Date: Wed, 16 Jul 2025 20:17:15 +0800 Subject: [PATCH 2/3] 'commit' --- dsLightRag/Start.py | 21 ++++++++++++++++----- dsLightRag/static/ShiJi.html | 8 ++++---- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/dsLightRag/Start.py b/dsLightRag/Start.py index ae3394a0..48dd6608 100644 --- a/dsLightRag/Start.py +++ b/dsLightRag/Start.py @@ -6,6 +6,7 @@ import subprocess import tempfile import urllib import uuid +import asyncio from io import BytesIO from urllib import request @@ -20,6 +21,9 @@ from starlette.staticfiles import StaticFiles from Util.LightRagUtil import * from Util.PostgreSQLUtil import init_postgres_pool +rag_instances = {} +rag_lock = asyncio.Lock() + # 想更详细地控制日志输出 logger = logging.getLogger('lightrag') logger.setLevel(logging.DEBUG) @@ -30,6 +34,9 @@ logger.addHandler(handler) async def lifespan(app: FastAPI): yield + # 在应用关闭时清理rag实例 + for rag in rag_instances.values(): + await rag.finalize_storages() app = FastAPI(lifespan=lifespan) @@ -109,7 +116,11 @@ async def rag(request: fastapi.Request): async def generate_response_stream(query: str): try: logger.info("workspace=" + workspace) - rag = await initialize_pg_rag(WORKING_DIR=WORKING_DIR, workspace=workspace) + # 使用锁确保线程安全 + async with rag_lock: + if workspace not in rag_instances: + rag_instances[workspace] = await initialize_pg_rag(WORKING_DIR=WORKING_DIR, workspace=workspace) + rag = rag_instances[workspace] resp = await rag.aquery( query=query, param=QueryParam(mode="hybrid", stream=True, user_prompt=user_prompt)) @@ -121,10 +132,8 @@ async def rag(request: fastapi.Request): except Exception as e: yield f"data: {json.dumps({'error': str(e)})}\n\n" finally: - # 发送流结束标记 - yield "data: [DONE]\n\n" - # 清理资源 - await rag.finalize_storages() + # 发送流结束标记 + yield "data: [DONE]\n\n" return EventSourceResponse(generate_response_stream(query=query)) @@ -396,3 +405,5 @@ async def get_articles(page: int = 1, limit: int = 10): if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=8000) + + diff --git a/dsLightRag/static/ShiJi.html b/dsLightRag/static/ShiJi.html index bc9cdcd1..7b5ee34f 100644 --- a/dsLightRag/static/ShiJi.html +++ b/dsLightRag/static/ShiJi.html @@ -198,7 +198,9 @@
“皇帝”称号的由来
- +
+ 什么是龙相? +
@@ -216,9 +218,7 @@
刘邦最终成功是因为什么?
-
- 什么是龙相? -
+
From 66c0614648a1e8f5f7b9274bdb7218f082104b24 Mon Sep 17 00:00:00 2001 From: HuangHai <10402852@qq.com> Date: Wed, 16 Jul 2025 20:21:41 +0800 Subject: [PATCH 3/3] 'commit' --- dsLightRag/Start.py | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/dsLightRag/Start.py b/dsLightRag/Start.py index 48dd6608..dadd8cbd 100644 --- a/dsLightRag/Start.py +++ b/dsLightRag/Start.py @@ -1,14 +1,11 @@ +import asyncio import json -import logging import os.path -import shutil import subprocess import tempfile import urllib import uuid -import asyncio from io import BytesIO -from urllib import request import fastapi import uvicorn @@ -58,7 +55,6 @@ async def rag(request: fastapi.Request): logger.info("工作空间:" + workspace) # 查询的问题 query = data.get("query") - # 用户提示词 output_model = data.get("output_model", "txt") @@ -109,10 +105,7 @@ async def rag(request: fastapi.Request): """ # 使用PG库后,这个是没有用的,但目前的项目代码要求必传,就写一个吧。 - WORKING_DIR = 'WorkingPath/' + workspace - if not os.path.exists(WORKING_DIR): - os.makedirs(WORKING_DIR) - + WORKING_DIR = './output/' async def generate_response_stream(query: str): try: logger.info("workspace=" + workspace)