diff --git a/app.py b/app.py index 3a01fec..c7f2f73 100644 --- a/app.py +++ b/app.py @@ -103,11 +103,7 @@ def query_select_summarize_stream(results, query, ai, min_similarity: float = 0. context_parts.append(f"[유사도: {sim:.3f}]\n{doc}") context = "\n\n".join(context_parts) else : - print('일반', results.get('documents')) - context_parts = [f'검색된 사용자 수는 {len(results.get('ids'))}'] - docs = [f"[{d[d.find('[이름]'): d.find('[', d.find('[이름]')+1)]} {d[d.find('[부서]'): d.find('[', d.find('[부서]')+1)]}]" for d in results.get('documents')] - context = ",".join(context_parts + docs) - print(context) + context = results # 모델 로드 model, tokenizer = get_qwen_model() @@ -145,7 +141,7 @@ def query_select_summarize_stream(results, query, ai, min_similarity: float = 0. generation_kwargs = dict( **model_inputs, streamer=streamer, - max_new_tokens=600, + max_new_tokens=400, do_sample=True, temperature=0.3, top_p=0.9, @@ -258,19 +254,40 @@ async def set_data(query: Item): 클라이언트로부터 받은 인사 데이터를 자연어 문장으로 변환하여 벡터 DB에 저장합니다. 기존 세션 데이터는 삭제 후 재생성됩니다. """ - # 기존 데이터 삭제 - collection.delete( - where={"sessionId": query.sessionId} - ) - - # 삭제 확인 (디버깅용) - remaining_count = collection.get(where={"sessionId": query.sessionId}) - print(f"남은 데이터 수: {len(remaining_count['ids'])}") - + # # 기존 데이터 삭제 + # collection.delete( + # where={"sessionId": query.sessionId} + # ) + # + # # 삭제 확인 (디버깅용) + # remaining_count = collection.get(where={"sessionId": query.sessionId}) + # print(f"남은 데이터 수: {len(remaining_count['ids'])}") + + depts = [] + users = [] + for n in query.context : + if n['userYn'] == False : + depts.append(n) + else : + users.append(n) + + print(len(depts), len(users)) store_data[query.sessionId] = query.context - init(query.sessionId, query.context) + results = [] + for d in depts : + subStr = f'[부서명] : {d['deptNm']} [상위부서명] : {d['pDeptNm']} [부서장] : {d['chiefDisplayNm']}\n' + inUsers = list(filter(lambda u : u['deptCd'] == d['deptCd'], users )) + reUsers = [] + for iu in inUsers : + reUsers.append(f'** 이름 : {iu['name']} 사번 : {iu['sabun']} 직급 : {iu['gradeNm']} 직위 : {iu['ptsnNm']} **') + subStr += f'[직원수] : {len(inUsers)}\n' + subStr += f'[직원명단] : {', '.join(reUsers)}' + results.append(subStr) + # init(query.sessionId, query.context) + + store_data[query.sessionId] = results return {"status": "success", "message": f"{len(query.context)}건의 데이터가 로드되었습니다."} @@ -279,16 +296,20 @@ def question(sessionId: str, query: str): """ 질의응답 API 엔드포인트 """ - type = query_summarize_simple(query=query) - print(type) - if(type == '99') : - results, keyword = query_select(sessionId, query, False) - print(f'단순질문 AI : {len(results)}') - generate = query_select_summarize_stream(results, query=keyword, ai=True) - # 부서 총직원수 - else : - results, keyword = query_select(sessionId, query, True) - generate = query_select_summarize_stream(results, query=keyword, ai=False) + # type = query_summarize_simple(query=query) + # print(type) + # if(type == '99') : + # results, keyword = query_select(sessionId, query, False) + # print(f'단순질문 AI : {len(results)}') + # generate = query_select_summarize_stream(results, query=keyword, ai=True) + # # 부서 총직원수 + # else : + # results, keyword = query_select(sessionId, query, True) + sessionData = store_data.get(sessionId) + + results = '\n-------------------------------------------\n'.join(sessionData) + print(sessionId, query) + generate = query_select_summarize_stream(results, query, ai=False) return StreamingResponse(generate(), media_type="application/x-ndjson") diff --git a/org.html b/org.html index 0b5d4a1..84bc6cb 100644 --- a/org.html +++ b/org.html @@ -42,7 +42,7 @@
- +
@@ -74,7 +74,7 @@ const xhr = new XMLHttpRequest(); - xhr.open('GET', `http://127.0.0.1:8000/?sessionId=20033011&query=${encodeURIComponent(query)}`); + xhr.open('GET', `http://127.0.0.1:8000/?sessionId=psn14020&query=${encodeURIComponent(query)}`); let seenBytes = 0; let buffer = '';