Spaces:
Running
on
Zero
Running
on
Zero
import os | |
from http import HTTPStatus | |
from fastapi.responses import StreamingResponse | |
from fastapi import FastAPI, Request | |
from typing import List | |
from threading import Thread | |
import spaces | |
import torch | |
import uvicorn | |
import time | |
import numpy as np | |
import subprocess | |
import importlib.metadata | |
# ๋ชจ๋ ์ค์น ๋ช ๋ น | |
subprocess.run(["pip", "install", "transformers==4.44.2"], check=True) | |
subprocess.run(["pip", "install", "accelerate==0.34.2"], check=True) | |
subprocess.run(["pip", "install", "peft==0.12.0"], check=True) | |
subprocess.run(["pip", "install", "FlagEmbedding==1.2.11"], check=True) | |
subprocess.run(["pip", "install", "numpy==2.1.0"], check=True) | |
# ์ค์น๋ ๋ชจ๋๋ค์ ํ์ฌ ๋ฒ์ ์ถ๋ ฅ | |
modules = ['transformers', 'accelerate', 'peft', 'FlagEmbedding'] | |
for module in modules: | |
try: | |
version = importlib.metadata.version(module) | |
print(f"{module} version: {version}") | |
except importlib.metadata.PackageNotFoundError: | |
print(f"{module} is not installed") | |
#fmt: off | |
from transformers import AutoModelForCausalLM, AutoTokenizer, TextIteratorStreamer | |
from FlagEmbedding import BGEM3FlagModel | |
# 3. Initalize FastAPI App | |
app = FastAPI() | |
# 4. Initialize CUDA tensor | |
zero = torch.Tensor([0]).cuda() | |
# 5. Initialize LLM Model | |
llm_model_name = "Qwen/Qwen2-7B-Instruct" | |
llm_model = AutoModelForCausalLM.from_pretrained( | |
llm_model_name, | |
torch_dtype="auto", | |
device_map="auto" | |
) | |
llm_tokenizer = AutoTokenizer.from_pretrained(llm_model_name) | |
# 6. Initialize Embedding Model | |
embedding_model_name = "BAAI/bge-m3" | |
embedding_model = BGEM3FlagModel(embedding_model_name, use_fp16=True) | |
# Util Functions | |
# 1๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ๋ฐฐ์น ๋จ์ ์๋ | |
def qa_2_str(QA: List) -> str: | |
result = "" | |
if len(QA) > 1: | |
for idx, message in enumerate(QA[:-1]): | |
if idx % 2 == 0: # Q | |
result += f"User: {message}\n" | |
else: # A | |
result += f"Assistant: {message}\n" | |
result = result.rstrip() | |
return result | |
def make_prompt(messages, rag_text, character_type): | |
system_prompt = "You are a helpful assistant." | |
if character_type == 0: | |
first_example = "ํ์ฑํ๊ถ์์ ๊ณต์ ํ์ฌ๋ ์ฐํ๋ฅผ ์ฌ๋ ๊ณณ์ ๋๋จํ์ด์ผ. ์ด๋ฆ์ ์ค๊ตญ์ ์ ๋ฐฉ์ด ์ฐํ๋ฅผ ์ด์๋ ๋จ๊ถ์์ ๋ฐ์จ ๊ฑฐ๊ณ , ์ ์กฐ๋ ์ฌ๊ธฐ์ ๋ฐฑ์ฑ๋ค์ ์ํ ์์น๋ ๋ฌด๊ณผ ์ํ ๊ฐ์ ์ค์ํ ํ์ฌ๋ฅผ ์ด์์ด." | |
second_example = "์ ๋ฆฌ์๊ถค๋ ์กฐ์ ์์กฐ ์๊ถค ์ค ํ๋์ธ๋ฐ, ํนํ ์ ์กฐ ์๋์ ํ๊ธ๋ก ์์ฑ๋ ๊ฑธ๋ก ์ ๋ช ํด. ์ค์ํ ์ฌ๊ฑด๋ค์ ๊ธฐ๋กํ ๋ฌธ์๋ค์ด๊ณ , 2007๋ ์ ์ ๋ค์ค์ฝ ์ธ๊ณ๊ธฐ๋ก๋ฌธํ์ ์ฐ์ผ๋ก ๋ฑ์ฌ๋์ด. ํ์ฑ ์ถ์ฑ์ ๊ธฐ๋กํ 'ํ์ฑ์ฑ์ญ์๊ถค', ์ ์กฐ ์ด๋จธ๋ ํ๊ฐ์ฐ์ ๊ธฐ๋กํ '์ํ์๋ฌ์ ๋ฆฌ์๊ถค', ๊ทธ๋ฆฌ๊ณ ์ ์กฐ ์๋ฒ์ง ๋ฌ์๋ฅผ ์ฎ๊ธด ๋ด์ฉ์ ๋ด์ 'ํ๋ฅญ์์๊ถค' ๊ฐ์ ์ค์ํ ์ฌ๊ฑด๋ค์ด ํ๊ธ๋ก ์ ๋ฆฌ๋์ด ์์ด. ์ญ์ฌ์ ์ผ๋ก ๋๊ฒ ์ค์ํ ์๋ฃ์ผ." | |
context_example = "์์ ํ์ฑ์ ์ ์กฐ์ ์ ์น์ ยท๋ฌธํ์ ๋น์ ์ ๋ด์์ ์ง์ด์ง ์ฑ๊ณฝ ๋์์ผ. ๋จ์ํ ๊ตฐ์ฌ์ ๋ฐฉ์ด๋ง์ ์ํ ๊ฒ ์๋๋ผ, ์์ ๊ณผ ๋ฌธํ์ ์ค์ฌ์ง ์ญํ ๊น์ง ํ๋ค๋ ์ ์ด ์ธ์์ ์ด์ง. ๊ทธ๋ฆฌ๊ณ ์ด ํ์ฑ์ ์ ์กฐ์ ๊ฐํ์ ์ธ ํต์น ์ฒ ํ๊ณผ ํจ์ฌ์ด ์ ๋๋ฌ๋๋ ๊ณณ์ด๊ธฐ๋ ํด. ์๋ฒ์ง์ธ ์ฌ๋์ธ์์ ๋ฌ์, ํ๋ฅญ์์ ์ค์ฌ์ผ๋ก ๊ฑด์ค๋ ๊ฒ๋ ๊ทธ ๋๋ฌธ์ด๊ณ . ํนํ 1795๋ ์ ํ๊ฒฝ๊ถ ํ์จ์ ํ๊ฐ์ ๊ธฐ๋ ํด์ ์ ์กฐ๊ฐ ๋๊ท๋ชจ ์ง์ฐฌ์ฐ๊ณผ ์๋ฌ์ํ์ ์ด์๋๋ฐ, ์ด๊ฑด ํ์ฑ์์ ์์ฒญ ์ค์ํ ํ์ฌ๋ก ๊ธฐ๋ก๋๊ณ ์์ด. ๋จ์ํ ๊ฐ์กฑ ํ์ฌ๋ผ๊ธฐ๋ณด๋ค๋ ์์ค์ ๊ถ์๋ฅผ ๋์ด๊ณ , ๋ฐฑ์ฑ๊ณผ ์ํตํ๋ ์ค์ํ ์ ์น์ ํ๋ณด์๋ ๊ฑฐ์ง. ์ด ๋ชจ๋ ๊ณผ์ ์ด ์๊ถค์ ์์ฃผ ์์ธํ๊ฒ ๊ธฐ๋ก๋์ด ์์ด, ๊ทธ๋งํผ ์ค์ํ ์๊ฐ์ด์๋ค๋ ๋ป์ด์ผ." | |
elif character_type == 1: | |
first_example = "ํ์ฑํ๊ถ์์ ๊ณต์ ํ์ฌ๋ ์ฐํ๊ฐ ์ด๋ฆฌ๋ ๊ณณ์ ๋ฐ๋ก ๋๋จํ์ด์ผ!!! ์ด๋ฆ๋ ๋ฉ์ง์ง? ์ค๊ตญ ์ ๋ฐฉ์ด ์ฐํ๋ฅผ ์ด์๋ ๋จ๊ถ์์ ๋ฐ์จ ๊ฑฐ๋!!! ์ ์กฐ๋ ์ฌ๊ธฐ์ ๋ฐฑ์ฑ๋ค์ ์ํ ์์น๋ ๋ฌด๊ณผ ์ํ ๊ฐ์ ์์ฒญ ์ค์ํ ํ์ฌ๋ฅผ ํ๋ค๊ณ ! ์ง์ง ์ญ์ฌ๊ฐ ์ด์ ์จ์ฌ๋ ์ฅ์์ง!" | |
second_example = "์ ๋ฆฌ์๊ถค๋ ์กฐ์ ์์กฐ์ ๊ถ์ ๊ธฐ๋ก ์ค ํ๋์ธ๋ฐ, ์ง์ง ์ค์ํ ์ฌ๊ฑด๋ค์ด ๋ค ๋ค์ด ์์ด!!!! ํนํ ์ ์กฐ ์๋์ ํ๊ธ๋ก ์์ฑ๋ ๊ฑธ๋ก ์ ๋ช ํ๋ฐ, 2007๋ ์ ์ ๋ค์ค์ฝ ์ธ๊ณ๊ธฐ๋ก๋ฌธํ์ ์ฐ์ผ๋ก๋ ๋ฑ์ฌ๋์ด!!! ํ์ฑ ์ถ์ฑ ๊ณผ์ ์ ๋ด์ 'ํ์ฑ์ฑ์ญ์๊ถค', ์ ์กฐ ์ด๋จธ๋ ํ๊ฐ์ฐ์ ๊ธฐ๋กํ '์ํ์๋ฌ์ ๋ฆฌ์๊ถค', ๊ทธ๋ฆฌ๊ณ ์ ์กฐ ์๋ฒ์ง ๋ฌ์๋ฅผ ์ฎ๊ธด 'ํ๋ฅญ์์๊ถค' ๊ฐ์ ํต์ฌ ๋ด์ฉ๋ค์ด ํ๊ธ๋ก ์ ๋ฆฌ๋ผ ์์ด์, ์ง์ง ์ญ์ฌ์ ์ผ๋ก ์์ฒญ๋ ๊ฐ์น๋ฅผ ๊ฐ์ง ๋ฌธ์์ผ!" | |
context_example = "์์ ํ์ฑ์ ์ ์กฐ๊ฐ ์ง์ง ๋ฉ์ง๊ฒ ์ค๊ณํ ์ฑ๊ณฝ ๋์์ผ!!! ๊ตฐ์ฌ์ ๋ฐฉ์ด๋ฟ๋ง ์๋๋ผ ์์ ๊ณผ ๋ฌธํ์ ์ค์ฌ์ง๋ก์๋ ์์ ์ค์ํ ์ญํ ์ ํ์ด!! ์ ์กฐ๊ฐ ๊ฐํ์ ์ธ ํต์น๋ฅผ ํผ์น๋ฉด์, ์๋ฒ์ง ์ฌ๋์ธ์๋ฅผ ํฅํ ํจ์ฌ๋ ๊ฐ๋ ๋ด์์ ๋ง๋ ๊ณณ์ด์ง. ๊ทธ๋์ ํ๋ฅญ์์ ์ค์ฌ์ผ๋ก ํ์ฑ์ด ๊ฑด์ค๋ ๊ฑฐ์ผ!! ๊ทธ๋ฆฌ๊ณ 1795๋ ์ ์ ์กฐ๊ฐ ์ด๋จธ๋ ํ๊ฒฝ๊ถ ํ์จ์ ํ๊ฐ์ ๊ธฐ๋ ํด์ ์์ฒญ๋ ์์น๋ฅผ ์ด์๋๋ฐ, ๊ทธ๊ฒ ๋ฐ๋ก ์ง์ฐฌ์ฐ์ด๋ ์๋ฌ์ํ์ด์ผ!!! ์ด๊ฑด ๋จ์ํ ๊ฐ์กฑ๋ผ๋ฆฌ ์ถํํ๋ ๊ฒ ์๋๋ผ, ์์ค ๊ถ์๋ฅผ ์ธ์ฐ๊ณ ๋ฐฑ์ฑ๋ค๊ณผ ์ํตํ๋ ์ค์ํ ์ ์น์ ํ๋ณด์์ด. ๊ทธ ๋ชจ๋ ๊ณผ์ ์ด ์๊ถค์ ์์ธํ ๊ธฐ๋ก๋์ด ์์ด์ ๊ทธ๋์ ์ญ์ฌ๋ฅผ ์ง๊ธ๋ ์์ํ๊ฒ ์ ์ ์๋ ๊ฑฐ์ง!!!" | |
else: | |
first_example = "ํ , ํ์ฑํ๊ถ์์ ๊ณต์ ํ์ฌ๋ ์ฐํ๊ฐ ์ด๋ฆฌ๋ ๊ณณ์ ๋ฐ๋ก... ๋๋จํ์ด๋ผ๋ค. ๊ทธ ์ด๋ฆ, ์ค๊ตญ ์ ๋ฐฉ์ด ๋จ๊ถ์์ ์ฐํ๋ฅผ ๋ฒ ํ์๋ค๋ ์ ์ค์์ ์ ๋ํ์ง. ์ ์กฐ ๋์๊ป์๋ ์ด๊ณณ์์ ๋ฐฑ์ฑ๋ค์ ์ํ ์์น์ ๋ฌด๊ณผ ์ํ ๊ฐ์ ์ค์ํ ํ์ฌ๋ค์ ์ด์๋จ๋ค. ๋ง์น ๊ทธ๋ ์ ํ๊ฒฝ์ด ๋์์ ํผ์ณ์ง๋ ๊ฒ ๊ฐ์ง ์์๊ฐ...?" | |
second_example = "์ ๋ฆฌ์๊ถค๋ผ... ์ด๊ฒ์ ์กฐ์ ์์กฐ ๊ถ์ ๊ธฐ๋ก ์ค ํ๋์ด์, ์๊ถค์ ํ ๋ถ๋ถ์ด์ง. ์กฐ์ ์ ์ค์ํ ์ฌ๊ฑด๋ค์ด ์ด ์์ ๋ด๊ฒจ ์๋๋ฐ, ํนํ ์ ์กฐ ์๋์ ํ๊ธ๋ก ์์ฑ๋ ๋ฌธ์๋ก ์ด๋ฆ์ ๋จ์ณค๋ค๋ค. 2007๋ ์ ์ ๋ค์ค์ฝ ์ธ๊ณ๊ธฐ๋ก๋ฌธํ์ ์ฐ์ผ๋ก ๋ฑ์ฌ๋ ๊ฒ๋ ์ฐ์ฐ์ด ์๋์ง. ํ์ฑ ์ถ์ฑ์ ๊ธฐ๋กํ 'ํ์ฑ์ฑ์ญ์๊ถค', ์ ์กฐ ์ด๋จธ๋์ ํ๊ฐ์ฐ์ ๋ด์ '์ํ์๋ฌ์ ๋ฆฌ์๊ถค', ๊ทธ๋ฆฌ๊ณ ์ ์กฐ ์๋ฒ์ง ๋ฌ์๋ฅผ ์ฎ๊ธด 'ํ๋ฅญ์์๊ถค'... ์ด ๋ชจ๋ ์ฌ๊ฑด๋ค์ด ํ๊ธ๋ก ์ ๋ฆฌ๋์ด ์์ด. ๋ง์น ๋น์์ ์จ๊ฒฐ์ด ์ง๊ธ๋ ๋๊ปด์ง๋ ๋ฏํ์ง ์์๊ฐ?" | |
context_example = "์์ ํ์ฑ์ ๋จ์ํ ์ฑ๊ณฝ์ด ์๋์ง... ์ ์กฐ ๋์๊ป์ ๊ทธ ์์ ๋ด์ ๋น์ ์ ์ค๋ก ๊น๊ณ ๋ ๋๋ค๋ค. ๊ตฐ์ฌ์ ๋ฐฉ์ด๋ ๋ฌผ๋ก , ์์ ๊ณผ ๋ฌธํ๋ฅผ ์์ฐ๋ฅด๋ ์ค์ฌ์ง๋ก์ ๊ทธ ์ญํ ์ ๋คํ์ง. ์ด ํ์ฑ์ ์ ์กฐ์ ๊ฐํ์ ํต์น ์ฒ ํ, ๊ทธ๋ฆฌ๊ณ ์๋ฒ์ง ์ฌ๋์ธ์๋ฅผ ํฅํ ๊ทธ ์ง๊ทนํ ํจ์ฌ์ ๊ทธ๋๋ก ํ๊ณ ์์ด. ํ๋ฅญ์์ ์ค์ฌ์ผ๋ก ํ ์ด ๋์์ ์ค๊ณ๊ฐ ๊ทธ ์ฆ๊ฑฐ๋ผ๋ค. ๊ทธ๋ฆฌ๊ณ , 1795๋ ... ์ ์กฐ๋ ์ด๋จธ๋ ํ๊ฒฝ๊ถ ํ์จ์ ํ๊ฐ์ ๋ง์ ์ฑ๋ํ ์ง์ฐฌ์ฐ๊ณผ ์๋ฌ์ํ์ ์ด์์ง. ๋จ์ํ ๊ฐ์กฑ์ ๊ธฐ๋ ์ผ์ด ์๋์๋ค. ์ด ํ์ฌ๋ ์์ค์ ๊ถ์๋ฅผ ๋์ฑ ๊ตณ๊ฑดํ ํ๊ณ , ๋ฐฑ์ฑ๊ณผ ์ํตํ๋ ์ค์ํ ์ ์น์ ์๋ฏธ๋ฅผ ๊ฐ์ก๋ ๊ฒ์ด์ผ. ๊ทธ ๋ชจ๋ ๊ณผ์ ์ด ์๊ถค์ ์์ธํ ๊ธฐ๋ก๋์ด ์์ผ๋, ๋ง์น ๋น์์ ์จ๊ฒฐ์ด ์ง๊ธ๋ ์ด ๋ ์ ๋จ์์๋ ๋ฏํ๊ตฌ๋..." | |
task_prompt = """[์ง๋ฌธ]์ ๋ํ ๋ต๋ณ์ ์์ฑํด์ผํด. | |
[๊ธ]๊ณผ [์ด์ ๋ํ ๋งฅ๋ฝ]์ ๋ด์ฉ์ ์ฐธ๊ณ ํ์ฌ [์ง๋ฌธ]์ ๋ง๋ ์ ์ ํ ๋ต๋ณ์ ์์ฑํ๊ณ ์ด๊ฒ์ ๋งํฌ๋ฅผ ์ ํ [๋งํฌ๋ฐ์] ๊น์ง ํ ๋จ๊ณ ํ ๋จ๊ณ ์ถ๋ ฅํด์ค. | |
[์ด์ ๋ํ ๋งฅ๋ฝ]์ด ์๋ค๋ฉด ๋ํ๊ฐ ์ฒ์ ์์๋ ๊ฒ์ด๋ผ, Single Turn ๋ต๋ณํ๋ฏ ๋ต๋ณํ๋ฉด ๋ผ.""" | |
few_shot_prompt = f"""์์ 1 | |
[๊ธ] | |
๋ด์๋น์ ํ์ฑํ๊ถ์์ ๊ฐ์ฅ ์์์ด ๋์ ๊ฑด๋ฌผ์ด๋ค. ์กฐ์ ์ ์กฐ 13๋ (1789)์ ๊ณ ์ ์๋ น์ด ๋๋์ผ์ ์ดํผ๋ ๋ํ์ผ๋ก ์ง์๋ค. ์ฒ์ ์ด๋ฆ์ ์ฅ๋จํ์ด์์ผ๋ 1795๋ ํ๊ฒฝ๊ถ ํ์จ์ ํ๊ฐ์ฐ์ ๊ณ๊ธฐ๋ก ๋ด์๋น์ผ๋ก ์ด๋ฆ์ ๋ฐ๊พธ์๋ค. ๊ถ๊ถ์์๋ ๋๋น๋ ์์์ด ๋จธ๋ฌด๋ ๊ฑด๋ฌผ์ ๋ชฉ์จ ์ ์๋ ๊ธธ ์ฅ ์๋ฅผ ๋ถ์ด๋ ์ ํต์ด ์์ด, ํ๊ฒฝ๊ถ ํ์จ์ ์ฅ์๋ฅผ ๊ธฐ์ํ๋ฉฐ ์ด๋ฆ์ ๋ฐ๊พผ ๊ฒ์ด๋ค. | |
๋๋จํ์ ํ์ฑํ๊ถ์์ ๊ณต์ ํ์ฌ๋ ์ฐํ๋ฅผ ์ด ๋ ์ฌ์ฉํ๋ ๊ฑด๋ฌผ์ด๋ค. ์ค๊ตญ ํ๋๋ผ๋ฅผ ์ธ์ด ์ ๋ฐฉ์ด ๋ถํ๋ค ๋๋ถ์ ๋๋ผ๋ฅผ ์ธ์ธ ์ ์์์์ ๊ฐ์ฌํ๋ฉฐ ๋์์ ๋จ๊ถ์์ ์ฐํ๋ฅผ ๋ฒ ํ์๋ค๋ ์ด์ผ๊ธฐ๋ฅผ ๋ณธ๋ ์ ์ด๋ฆ์ ์ง์๋ค. ์ ์กฐ๋ 1795๋ ์๋ฌ์ํ ๋น์ ๋๋จํ์์ ์์์ ๋ฐฑ์ฑ๋ค์ ์ํด ์์น๋ฅผ ๋ฒ ํ๊ณ , ๋ฌด๊ณผ ์ํ์ ์น๋ฅด๊ณ ์์ ๋ด๋ฆฌ๋ ๋ฑ ๋ค์ํ ํ์ฌ๋ฅผ ์ด์๋ค. | |
๋๋จํ ๊ฑด๋ฌผ์ ๋ฒฝ์ด ์๋ ๊ฐ๋ฐฉ๋ ๊ตฌ์กฐ๋ก ๋ง์ ์ฌ๋์ ์์ฉํ ์ ์๋ค. ์ฐํ๋ฅผ ๋ฒ ํธ๋ ๊ฑด๋ฌผ๋ต๊ฒ ๊ฑด๋ฌผ ์์๋ ๋์ ์๋๋ฅผ ๋์ด ๊ฒฉ์์ ๋์๋ค. ์๋๋ก ์ค๋ฅด๋ ๊ณ๋จ ์ ์์๋ ๊ตฌ๋ฆ๋ฌด๋ฌ๊ฐ ์๊ฒจ์ ธ ์๋ค. ๋๋จํ์ ๊ถ๊ถ ์ ๊ฐ๊ณผ ๋น๊ตํด๋ ์์์ด ์๋ ์๋ฆ๋ค์ด ๊ฑด๋ฌผ๋ก ์ํ์ด ์ ๋จ์ ์๋ค. ์ผ์ ๊ฐ์ ๊ธฐ์๋ ์์๊ตฐ์ฒญ์ผ๋ก ์ฌ์ฉ๋์๊ณ , ์ ํ๊ตญ๋ฏผํ๊ต ๊ต๋ฌด์ค๋ก๋ ์ฌ์ฉ๋์๋ค. | |
[์ง๋ฌธ] ํ์ฑํ๊ถ์์ ๊ณต์ ํ์ฌ๋ ์ฐํ๋ฅผ ์ด ๋ ์ฌ์ฉํ๋ ๊ฑด๋ฌผ์? | |
[๋ต๋ณ] ํ์ฑํ๊ถ์์ ๊ณต์ ํ์ฌ๋ ์ฐํ๋ฅผ ์ด ๋ ์ฌ์ฉํ๋ ๊ฑด๋ฌผ์ ๋๋จํ์ ๋๋ค. | |
[๋งํฌ๋ฐ์] {first_example} | |
์์ 2 | |
[์ด์ ๋ํ ๋งฅ๋ฝ] | |
User: ์์ ํ์ฑ์ ๋ํด ์ค๋ช ํด์ค | |
Assistant: {context_example} | |
[๊ธ] | |
ใํ์ฑ์ฑ์ญ์๊ถคใ๋ ์ ์กฐ๊ฐ ๊ตฌ์ํ ์ ๋์์ธ ํ์ฑ ์ฑ์ญ ์กฐ์ฑ ์ ๊ณผ์ ์ ๊ธฐ๋กํ ์ข ํฉ ๋ณด๊ณ ์์ ๋๋ค. ํ์ฑ์ ์ ์กฐ๊ฐ ์์๋ํธ๋ถ ๊ด์์ ๋ฏผ๊ฐ๋ฅผ ํ๋ฌ์ฐ์ผ๋ก ์ฎ๊ฒจ ์๋กญ๊ฒ ์กฐ์ฑํ ์ ๋์๋ก, 1794๋ (์ ์กฐ 18) 1์์ ๊ณต์ฌ๋ฅผ ์์ํ์ฌ 1796๋ (์ ์กฐ 20) 9์๊น์ง 32๊ฐ์ ๋ง์ ์์ฑํ์์ต๋๋ค. ๊ณต์ฌ ๊ธฐ๊ฐ์ ์๋ 10๋ ์ ๊ณํํ์ง๋ง ์ ์กฐ์ ๊ฐ๋ณํ ๊ด์ฌ๊ณผ ์กฐ์ ์ ์ ๊ทน์ ์ธ ์ญํ , ๋ง๋ํ ์๊ธ ํฌ์ , ์น๋ฐํ ์ค๊ณ, ๊ทผ๋์ ์ธ ๊ณต๋ฒ ๋ฑ ๋น์ ๊ตญ๊ฐ์ ์ญ๋์ด ์ด๋์๋์ด ๊ณต์ฌ ๊ธฐ๊ฐ์ด ํฌ๊ฒ ๋จ์ถ๋์์ต๋๋ค. ใํ์ฑ์ฑ์ญ์๊ถคใ์๋ ์ด๋ฌํ ๊ณต์ฌ์ ๊ณํ, ์ด์ ๊ณผ์ , ์ฐธ์ฌ์, ์์ ๊ฒฝ๋น, ์์ฌ, ๊ณต๋ฒ, ๋๋ฉด ๋ฑ ํ์ฑ ์ถ์ฑ์ ์ ๋ชจ๊ฐ ๊ธฐ๋ก๋์ด ์์ต๋๋ค. ํนํ ๏ฝข๋์ค๏ฝฃ์๋ ๊ฑด์ถ ๋๋ฉด์ ์ฐ์์ํฌ ๋งํผ ์ฑ๊ณฝ๊ณผ ๋ถ์ ๊ฑด๋ฌผ์ด ์์ธํ๊ฒ ๊ทธ๋ ค์ ธ ์์ด, ์ผ์ ๊ฐ์ ๊ณผ ํ๊ตญ์ ์์ผ๋ก ํผ์๋ ํ์ฑ์ ์ค์ ๋ชจ์ต ๊ทธ๋๋ก ๋ณต์ํ๋ ๋ฐ ์ค์ํ ์๋ฃ๊ฐ ๋์์ต๋๋ค. ์กฐ์ ์์กฐ ์๊ถค๋ 2007๋ ์ผ๊ด๋ก ์ธ๊ณ๊ธฐ๋ก์ ์ฐ์ ๋ฑ์ฌ๋์๊ณ , ใํ์ฑ์ฑ์ญ์๊ถคใ๋ 2016๋ ๋ณด๋ฌผ(์ ์ง์ ๋ฒํธ ๋ณด๋ฌผ ์ 1901-7ํธ)๋ก ์ง์ ๋์์ต๋๋ค. | |
์ง๋ 2007๋ ์ ๋ค์ค์ฝ ์ธ๊ณ๊ธฐ๋ก๋ฌธํ์ ์ฐ์ผ๋ก ๋ฑ์ฌ๋ ์กฐ์ ์์กฐ ์๊ถค ์ค ์ ์กฐ์๋ ํ๊ธ๋ก ์์ฑ๋ <์ ๋ฆฌ์๊ถค> 25๊ถ์ด ํ๋์ค์์ ๋ฐ๊ฒฌ๋๋ค. ๋๋ถ์ด๋ฏผ์ฃผ๋น ์๋ฏผ์ ์์(์ค์ฐ)์ 4์ผ โ์ง๋๋ฌ 27์ผ ํ๋์ค ๊ตญ๋ฆฝํ๋ฆฌ๋์์ธ์ดํ์๊ณผ ํ๋์ค ๊ตญ๋ฆฝ๋์๊ด์์ ๊ฐ๊ฐ 24๊ถ๊ณผ 1๊ถ์ ํ๊ธ <์ ๋ฆฌ์๊ถค>๋ฅผ ํ์ธํ๋คโ๊ณ ๋งํ๋ค. ์ด๋ค ์ ๋ฆฌ์๊ถค๋ ์ ์กฐ์ ์ด๋จธ๋์ธ ํ๊ฒฝ๊ถ ํ์จ์ ํ๊ฐ์ฐ์ ๊ธฐ๋กํ <์ํ์๋ฌ์ ๋ฆฌ์๊ถค>์ ํ์ฑ ์ถ์ฑ๊ณผ์ ์ ๊ธฐ๋กํ <ํ์ฑ์ฑ์ญ์๊ถค>, ์ ์กฐ์ ์๋ฒ์ง์ธ ์ฌ๋์ธ์์ ๋ฌ์๋ฅผ ํ์ฐ๋ฆ์ผ๋ก ์ฎ๊ธด <ํ๋ฅญ์์๊ถค>์ ๋ด์ฉ ์ค ํต์ฌ ์ฌ์์ ํ๊ธ๋ก ์ ๋ฆฌํด ๋์ ๊ฒ์ด๋ค. | |
[์ง๋ฌธ] ์ ๋ฆฌ์๊ถค๊ฐ ๋ญ์ผ? | |
[๋ต๋ณ] ์ ๋ฆฌ์๊ถค๋ ์กฐ์ ์์กฐ์ ๊ถ์ ๊ธฐ๋ก ์ค ํ๋๋ก, ์กฐ์ ์์กฐ ์๊ถค์ ์ผ๋ถ๋ถ์ ๋๋ค. ์ด ๋ฌธ์๋ ์กฐ์ ์์กฐ์ ์ฌ๋ฌ ์ค์ํ ์ฌ๊ฑด์ ๊ธฐ๋กํ๊ณ ์์ผ๋ฉฐ, ํนํ ์ ์กฐ ์๋์ ํ๊ธ๋ก ์์ฑ๋ ๋ฌธ์๋ก ์ ๋ช ํฉ๋๋ค. 2007๋ ์๋ ์ ๋ค์ค์ฝ ์ธ๊ณ๊ธฐ๋ก๋ฌธํ์ ์ฐ์ผ๋ก ๋ฑ์ฌ๋์์ต๋๋ค. ์ด ์ค์๋ ํ์ฑ ์ถ์ฑ๊ณผ์ ์ ๊ธฐ๋กํ 'ํ์ฑ์ฑ์ญ์๊ถค', ์ ์กฐ์ ์ด๋จธ๋์ ํ๊ฐ์ฐ์ ๊ธฐ๋กํ '์ํ์๋ฌ์ ๋ฆฌ์๊ถค', ๊ทธ๋ฆฌ๊ณ ์ ์กฐ์ ์๋ฒ์ง์ ๋ฌ์๋ฅผ ํ์ฐ๋ฆ์ผ๋ก ์ฎ๊ธด ๊ฒ์ ๊ธฐ๋กํ 'ํ๋ฅญ์์๊ถค'์ ๋ด์ฉ ์ค ํต์ฌ ์ฌ์์ ํ๊ธ๋ก ์ ๋ฆฌํ ๋ด์ฉ๋ค์ด ํฌํจ๋์ด ์์ต๋๋ค. | |
[๋งํฌ๋ฐ์] {second_example} | |
์์ 3 | |
[๊ธ] | |
๋๋ถ๊ณต์ฌ๋์ ํ์ฑ ๋๋ถ์ชฝ์ ์ธ์ด ๋ง๋ฃจ๋ก ์ฃผ๋ณ์ ๊ฐ์ํ๊ณ ๊ณต๊ฒฉํ๋ ์์ค์ด๋ค. ๊ณต์ฌ๋์ ์์ด ๋น ๋๋๋ผ๋ ๋ป์ผ๋ก, ์ฐ๋ฆฌ๋๋ผ ์ฑ๊ณฝ ์ค ํ์ฑ์์๋ง ๋ณผ ์ ์๋ค. ๋ณดํต ๋๋๋ ์ฑ๊ณฝ๊ณผ ๋จ์ด์ง ๋์ ๊ณณ์ ์ธ์ ์ ์ ๊ฐ์ํ๋ ์์ค์ด๋, ๋๋ถ๊ณต์ฌ๋์ ์ฑ๋ฒฝ ์์ชฝ์ ์ค์นํ๋ค. ์ธ๋ฒฝ์๋ ๋ฐ์ ๊ฐ์ํ๊ณ ํํฌ๋ก ๊ณต๊ฒฉํ ์ ์๋ ๊ตฌ๋ฉ์ ๊ณณ๊ณณ์ ๋ซ์๋ค. ๋๋ถ๊ณต์ฌ๋์ 3์ธต์ผ๋ก ์ด๋ฃจ์ด์ง ์ํตํ์ ๋ฒฝ๋ ๊ฑด๋ฌผ๋ก์ ์ถ์ ๋ฌธ์์ ํต๋ก๋ฅผ ๋ฐ๋ผ ๋น๊ธ๋น๊ธ ์ฌ๋ผ๊ฐ๋ฉด ๊ผญ๋๊ธฐ ๋ง๋ฃจ์ ์ด๋ฅด๋ ๊ตฌ์กฐ๋ค. ์ด ๋ชจ์ต์ ๋น๋์ โ์๋ผ๊ฐโ์ด๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค. ์ ์กฐ 21๋ (1797) ์ ์, ์ข์์ ์ฑ์ ๊ณต์ ๋๋ถ๊ณต์ฌ๋์ ์ฌ๋ผ๊ฐ ๋ณธ ๋ค โ์ธต๊ณ๊ฐ ๊ตฌ๋ถ๊ตฌ๋ถํ๊ฒ ๋ ์์ด ๊ธฐ์ดํ๊ณ ๋ ๊ต๋ฌํ๋ค.โ๋ฉฐ ๊ฐํํ๋ค. | |
ํ๊ตญ์ ์ ๋ฑ์ ๊ฒช์ผ๋ฉฐ ์ ๋ฐ ์ด์ ๋ฌด๋์ก์๋๋ฐ 1976๋ ์ ๋ณต์ํด ๋ชจ์ต์ ๋์ฐพ์๋ค. ์๋ถ๊ณต์ฌ๋์ ํ์ฑ ์๋ถ์ชฝ์ ์ธ์ด ๋ง๋ฃจ๋ก ์ฃผ๋ณ์ ๊ฐ์ํ๊ณ ๊ณต๊ฒฉํ๋ ์์ค์ด๋ค. ๊ณต์ฌ๋์ ์์ด ๋น ๋๋๋ผ๋ ๋ป์ผ๋ก, ์ฐ๋ฆฌ๋๋ผ ์ฑ๊ณฝ ์ค ํ์ฑ์์๋ง ๋ณผ ์ ์๋ค. ๋ณดํต ๋๋ๅขฉ่บ๋ ์ฑ๊ณฝ๊ณผ ๋จ์ด์ง ๋์ ๊ณณ์ ์ธ์ ์ ์ ๊ฐ์ํ๋ ์์ค์ด๋, ์๋ถ๊ณต์ฌ๋์ ์๋ถ์ชฝ ์ฑ๋ฒฝ์ด ๊บพ์ด๋ ์์น์ ์ค์นํ๋ค. ์น์ฑ ์์ ๋ฒฝ๋๋ก 3์ธต์ ๋ง๋ฃจ๋ฅผ ์ธ์ฐ๊ณ ๊ผญ๋๊ธฐ์๋ ๋จ์ธต์ ๋๊ฐ์ ์ฌ๋ ค ๊ตฐ์ฌ๋ค์ด ๊ฐ์ํ ์ ์๋๋ก ํ๊ณ , ์ธ๋ฒฝ์๋ ํํฌ๋ฅผ ์ ์ ์๋ ๊ตฌ๋ฉ์ ๋ซ์ด ๊ณต๊ฒฉ ๊ธฐ๋ฅ๊น์ง ๊ฐ์ถ์๋ค. ์กฐ์ ์ ์กฐ 21๋ (1797) ์ ์, ์์ฑ๋ ํ์ฑ์ ๋๋ฌ๋ณด๋ ์ ์กฐ๋ ์๋ถ๊ณต์ฌ๋ ์์ ๋ฉ์ถฐ โ์ฐ๋ฆฌ๋๋ผ ์ฑ๊ณฝ์์ ์ฒ์ ์ง์ ๊ฒ์ด๋ ๋ง์๊ป ๊ตฌ๊ฒฝํ๋ผ.โ๋ฉฐ ๋งค์ฐ ๋ง์กฑ์ค๋ฌ์ ํ๋ค. ํ์ฑ์๋ ๋ชจ๋ ์ธ ๊ณณ์ ๊ณต์ฌ๋์ ์ธ์ ๋๋ฐ ์๋ถ๊ณต์ฌ๋๋ง์ด ์ถ์ฑ ๋น์ ๋ชจ์ต ๊ทธ๋๋ก ๋จ์ ์๋ค. | |
[์ง๋ฌธ] ์ฉ์ธ์์ ๋ํด ์ค๋ช ํด์ค | |
[๋ต๋ณ] X""" | |
context_prompt = qa_2_str(messages) | |
question_prompt = f"""๋ฌธ์ | |
[๊ธ] | |
{rag_text} | |
[์ง๋ฌธ] {messages[-1]} | |
([๊ธ]๊ณผ ๊ด๋ จ ์๊ฑฐ๋ ์ ์ ์๋ ์ง๋ฌธ์ X ๋ผ๊ณ ๋ง ์ถ๋ ฅํ ๊ฒ, X๊ฐ ์๋๋ผ๋ฉด [๋ต๋ณ] ๊ณผ [๋งํฌ๋ฐ์]์ ๋ชจ๋ ์ถ๋ ฅํ ๊ฒ, 200์ ๋ด์ธ๋ก ๋ต๋ณํ ๊ฒ, ํนํ ๋งํฌ ๋ฐ์์ด ์ ์๋๋๋ฐ, ํ์คํ๊ฒ ์ฃผ์ด์ง ๋งํฌ๋ฅผ ๋งค์ฐ ๊ฐํ๊ฒ ์ ๋๋ก ๋ฐ์ํ๊ณ ๋ฐ๋ง ๋ํ์ฒด์ธ๊ฑฐ ๋ช ์ฌํด!) | |
[๋ต๋ณ]๊ณผ [๋งํฌ๋ฐ์]์ ๊ฐ๊ฐ ์์ฑํด๋ณด์. | |
""" | |
if len(context_prompt) == 0: | |
user_prompt = f"""{task_prompt} | |
{few_shot_prompt} | |
{question_prompt} | |
""" | |
else: | |
user_prompt = f"""{task_prompt} | |
{few_shot_prompt} | |
{context_prompt} | |
{question_prompt} | |
""" | |
print(user_prompt) | |
prompt = [ | |
{"role": "system", "content": system_prompt}, | |
{"role": "user", "content": user_prompt}, | |
] | |
return prompt | |
def make_gen(QA, candidates, top_k, character_type): | |
start_time = time.time() | |
# Make For Rag Prompt | |
rag_prompt = qa_2_str(QA) | |
# Do RAG | |
query_embeddings = embedding_model.encode([rag_prompt], | |
batch_size=1, | |
max_length=8192, | |
)["dense_vecs"] | |
key_embeddings = embedding_model.encode(candidates)["dense_vecs"] | |
similarity = query_embeddings @ key_embeddings.T | |
similarity = similarity.squeeze(0) | |
rag_result = "" | |
top_k_indices = np.argsort(similarity)[-top_k:] | |
for idx in top_k_indices: | |
rag_result += (candidates[idx] + "/n") | |
rag_result = rag_result.rstrip() | |
# Make For LLM Prompt | |
final_prompt = make_prompt(QA, rag_result, character_type) | |
# Use LLM | |
streamer = TextIteratorStreamer(llm_tokenizer, skip_special_tokens=True) | |
final_prompt = llm_tokenizer.apply_chat_template(final_prompt, tokenize=False, add_generation_prompt = True) | |
inputs = llm_tokenizer(final_prompt, return_tensors="pt").to(zero.device) | |
llm_model.to(zero.device) | |
generation_kwargs = dict( | |
inputs=inputs.input_ids, | |
streamer = streamer, | |
max_new_tokens=512 | |
) | |
thread = Thread(target=llm_model.generate, kwargs=generation_kwargs) | |
thread.start() | |
is_start = False | |
for idx, new_text in enumerate(streamer): | |
if idx >= len(inputs): | |
if is_start: | |
yield new_text | |
if not is_start and "[๋งํฌ๋ฐ์]" in new_text: | |
is_start = True | |
# yield new_text | |
is_start = False | |
elapsed_time = time.time() - start_time | |
print(f"time:{elapsed_time}") | |
async def root_endpoint(request: Request): | |
data = await request.json() | |
QA = data.get("QA") | |
candidates = data.get("candidates") | |
top_k = data.get("top_k") | |
character_type = data.get("character_type") | |
return StreamingResponse(gen_stream(QA, candidates, top_k, character_type), media_type="text/event-stream") | |
async def gen_stream(QA, candidates, top_k, character_type): | |
for value in make_gen(QA, candidates, top_k, character_type): | |
yield value | |
if __name__ == "__main__": | |
uvicorn.run(app, host="0.0.0.0", port=7860) |