테스트
This commit is contained in:
3
org.html
3
org.html
@@ -42,7 +42,8 @@
|
|||||||
<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="재난관리부 부서장은 누구야?" placeholder="질문을 입력하고 Enter를 누르세요">
|
<input type="text" class="prompt" value="2직급 총 몇명이야?" placeholder="질문을 입력하고 Enter를 누르세요">
|
||||||
|
<!-- <input type="text" class="prompt" value="재난관리부 부서장은 누구야?" placeholder="질문을 입력하고 Enter를 누르세요">-->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
@@ -100,19 +100,31 @@ def get_qwen_model():
|
|||||||
return _model, _tokenizer
|
return _model, _tokenizer
|
||||||
|
|
||||||
|
|
||||||
def query_select(sessionId: str, query: str) :
|
def query_select(sessionId: str, query: str, limit_unlock: bool) :
|
||||||
keywords = extract_keywords_simple(query)
|
keywords = extract_keywords_simple(query)
|
||||||
print(keywords)
|
print(keywords)
|
||||||
filter_list = [{"sessionId": sessionId}]
|
filter_conditions = [{"sessionId": sessionId}]
|
||||||
if keywords['dept'] != '' :
|
if keywords['dept'] != '' :
|
||||||
filter_list.append({"deptCd": keywords['dept']})
|
filter_conditions.append({"deptCd": keywords['dept']})
|
||||||
if keywords['rank'] != '' :
|
if keywords['rank'] != '' :
|
||||||
filter_list.append({"gradeCd": keywords['rank']})
|
filter_conditions.append({"gradeCd": keywords['rank']})
|
||||||
print(filter_list)
|
|
||||||
|
# 2. 조건이 1개보다 많을 때만 $and로 묶기
|
||||||
|
if len(filter_conditions) > -1:
|
||||||
|
where_clause = {"$and": filter_conditions}
|
||||||
|
else:
|
||||||
|
where_clause = filter_conditions[0]
|
||||||
|
print(where_clause)
|
||||||
|
if limit_unlock :
|
||||||
|
results = collection.get(
|
||||||
|
where=where_clause
|
||||||
|
)
|
||||||
|
else :
|
||||||
results = collection.query(
|
results = collection.query(
|
||||||
query_texts=[keywords['keyword']],
|
query_texts=[keywords['keyword']],
|
||||||
where={"$and": filter_list},
|
where=where_clause
|
||||||
)
|
)
|
||||||
|
|
||||||
return results, keywords['keyword']
|
return results, keywords['keyword']
|
||||||
|
|
||||||
|
|
||||||
@@ -125,6 +137,7 @@ def query_select_summarize_stream(results, query, ai, min_similarity: float = 0.
|
|||||||
Generator: 스트리밍 응답 제너레이터
|
Generator: 스트리밍 응답 제너레이터
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
if ai :
|
||||||
if not results['documents'] or not results['documents'][0]:
|
if not results['documents'] or not results['documents'][0]:
|
||||||
def generate_empty():
|
def generate_empty():
|
||||||
yield json.dumps({"kind": "text", "text": "관련 문서를 찾을 수 없습니다."}) + "\n"
|
yield json.dumps({"kind": "text", "text": "관련 문서를 찾을 수 없습니다."}) + "\n"
|
||||||
@@ -144,8 +157,14 @@ def query_select_summarize_stream(results, query, ai, min_similarity: float = 0.
|
|||||||
# 컨텍스트 생성
|
# 컨텍스트 생성
|
||||||
context_parts = []
|
context_parts = []
|
||||||
for i, (doc, sim) in enumerate(filtered_docs):
|
for i, (doc, sim) in enumerate(filtered_docs):
|
||||||
context_parts.append(f"[청크 {i+1} | 유사도: {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 :
|
||||||
|
print('일반')
|
||||||
|
context_parts = []
|
||||||
|
for doc in results.get('documents') :
|
||||||
|
context_parts.append(f"{doc}")
|
||||||
|
context = "\n".join(context_parts)
|
||||||
|
|
||||||
# 모델 로드
|
# 모델 로드
|
||||||
model, tokenizer = get_qwen_model()
|
model, tokenizer = get_qwen_model()
|
||||||
@@ -183,7 +202,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=150,
|
max_new_tokens=3000,
|
||||||
do_sample=True,
|
do_sample=True,
|
||||||
temperature=0.3,
|
temperature=0.3,
|
||||||
top_p=0.9,
|
top_p=0.9,
|
||||||
@@ -196,6 +215,7 @@ def query_select_summarize_stream(results, query, ai, min_similarity: float = 0.
|
|||||||
|
|
||||||
# 제너레이터 함수 정의
|
# 제너레이터 함수 정의
|
||||||
def generate():
|
def generate():
|
||||||
|
|
||||||
for new_text in streamer:
|
for new_text in streamer:
|
||||||
if new_text:
|
if new_text:
|
||||||
yield json.dumps({"kind": "text", "text": new_text}) + "\n"
|
yield json.dumps({"kind": "text", "text": new_text}) + "\n"
|
||||||
@@ -235,8 +255,6 @@ def query_summarize_simple(query: str) :
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
print(f'Messages: {messages}')
|
|
||||||
|
|
||||||
# 토큰화
|
# 토큰화
|
||||||
text = tokenizer.apply_chat_template(
|
text = tokenizer.apply_chat_template(
|
||||||
messages,
|
messages,
|
||||||
@@ -320,12 +338,12 @@ def question(sessionId: str, query: str):
|
|||||||
"""
|
"""
|
||||||
type = query_summarize_simple(query=query)
|
type = query_summarize_simple(query=query)
|
||||||
if(type == '0') :
|
if(type == '0') :
|
||||||
results, keyword = query_select(sessionId, query)
|
results, keyword = query_select(sessionId, query, False)
|
||||||
print('단순질문 AI')
|
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)
|
results, keyword = query_select(sessionId, query, True)
|
||||||
print('단순질문 데이터베이스조회')
|
print(f'개수 데이터베이스조회 : {len(results.get('ids'))}')
|
||||||
generate = query_select_summarize_stream(results, query=keyword, ai=False)
|
generate = query_select_summarize_stream(results, query=keyword, ai=False)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,9 @@ def extract_keywords_simple(query):
|
|||||||
keyword = query.replace(delete_paragraphs(query, code_dept), "").strip()
|
keyword = query.replace(delete_paragraphs(query, code_dept), "").strip()
|
||||||
break
|
break
|
||||||
|
|
||||||
|
if keyword == '':
|
||||||
|
keyword = query
|
||||||
|
|
||||||
# 3. 직급 추출
|
# 3. 직급 추출
|
||||||
for k, v in ranks.items():
|
for k, v in ranks.items():
|
||||||
code_rank = k
|
code_rank = k
|
||||||
|
|||||||
Reference in New Issue
Block a user