테스트

This commit is contained in:
2026-02-01 14:31:01 +09:00
parent b2a8634fde
commit b7efaf0542
2 changed files with 49 additions and 28 deletions

73
app.py
View File

@@ -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_parts.append(f"[유사도: {sim:.3f}]\n{doc}")
context = "\n\n".join(context_parts) context = "\n\n".join(context_parts)
else : else :
print('일반', results.get('documents')) context = results
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)
# 모델 로드 # 모델 로드
model, tokenizer = get_qwen_model() model, tokenizer = get_qwen_model()
@@ -145,7 +141,7 @@ def query_select_summarize_stream(results, query, ai, min_similarity: float = 0.
generation_kwargs = dict( generation_kwargs = dict(
**model_inputs, **model_inputs,
streamer=streamer, streamer=streamer,
max_new_tokens=600, max_new_tokens=400,
do_sample=True, do_sample=True,
temperature=0.3, temperature=0.3,
top_p=0.9, top_p=0.9,
@@ -258,19 +254,40 @@ async def set_data(query: Item):
클라이언트로부터 받은 인사 데이터를 자연어 문장으로 변환하여 벡터 DB에 저장합니다. 클라이언트로부터 받은 인사 데이터를 자연어 문장으로 변환하여 벡터 DB에 저장합니다.
기존 세션 데이터는 삭제 후 재생성됩니다. 기존 세션 데이터는 삭제 후 재생성됩니다.
""" """
# 기존 데이터 삭제 # # 기존 데이터 삭제
collection.delete( # collection.delete(
where={"sessionId": query.sessionId} # where={"sessionId": query.sessionId}
) # )
#
# 삭제 확인 (디버깅용) # # 삭제 확인 (디버깅용)
remaining_count = collection.get(where={"sessionId": query.sessionId}) # remaining_count = collection.get(where={"sessionId": query.sessionId})
print(f"남은 데이터 수: {len(remaining_count['ids'])}") # 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 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)}건의 데이터가 로드되었습니다."} return {"status": "success", "message": f"{len(query.context)}건의 데이터가 로드되었습니다."}
@@ -279,16 +296,20 @@ def question(sessionId: str, query: str):
""" """
질의응답 API 엔드포인트 질의응답 API 엔드포인트
""" """
type = query_summarize_simple(query=query) # type = query_summarize_simple(query=query)
print(type) # print(type)
if(type == '99') : # if(type == '99') :
results, keyword = query_select(sessionId, query, False) # results, keyword = query_select(sessionId, query, False)
print(f'단순질문 AI : {len(results)}') # print(f'단순질문 AI : {len(results)}')
generate = query_select_summarize_stream(results, query=keyword, ai=True) # generate = query_select_summarize_stream(results, query=keyword, ai=True)
# 부서 총직원수 # # 부서 총직원수
else : # else :
results, keyword = query_select(sessionId, query, True) # results, keyword = query_select(sessionId, query, True)
generate = query_select_summarize_stream(results, query=keyword, ai=False) 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") return StreamingResponse(generate(), media_type="application/x-ndjson")

View File

@@ -42,7 +42,7 @@
<div class="container"> <div class="container">
<div class="chat-wrap"> <div class="chat-wrap">
<div class="chat"></div> <div class="chat"></div>
<input type="text" class="prompt" value="2직급 총 몇명이야?" placeholder="질문을 입력하고 Enter를 누르세요"> <input type="text" class="prompt" value="발전처 직원수?" placeholder="질문을 입력하고 Enter를 누르세요">
<!-- <input type="text" class="prompt" value="재난관리부 부서장은 누구야?" placeholder="질문을 입력하고 Enter를 누르세요">--> <!-- <input type="text" class="prompt" value="재난관리부 부서장은 누구야?" placeholder="질문을 입력하고 Enter를 누르세요">-->
</div> </div>
</div> </div>
@@ -74,7 +74,7 @@
const xhr = new XMLHttpRequest(); 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 seenBytes = 0;
let buffer = ''; let buffer = '';