κ°μ
- κ³Όμ λͺ : [2025]νκ΅μ΄ μ΄λ¬Έ κ·λ² κΈ°λ° μμ±(RAG) λ§ν(κ° μ ν)
- νλͺ : filot
νμ΅ λ°μ΄ν°
- korean_language_rag_V1.0_train.json
- korean_language_rag_V1.0_dev.json
- κ΅μ΄ μ§μ κΈ°λ° μμ±(RAG) μ°Έμ‘° λ¬Έμ.txt(pdf -> txt)
μ€νλ°©λ²
- vllm μ€μΉ
- μ€μΉ ν μλ λͺ λ Ήμ΄λ‘ λͺ¨λΈ μλΉ
vllm serve filot/kanana-1.5-8b-instruct-2505-rag \
--port 8000 \
--enable-prefix-caching \
--enable-chunked-prefill \
--gpu-memory-utilization 0.95 \
--seed 42 \
--max-model-len 32K
- μλ μ½λλ₯Ό μν
import json
import requests
from tqdm import tqdm
test_file = "../dataset/korean_language_rag_V1.0_test.json"
headers = {"Content-type": "application/json"}
SYSTEM_PROMPT = """---μν ---
λΉμ μ λμ΄μ°κΈ°, λ¬Έμ₯λΆνΈ, μΈλμ΄ νκΈ°λ², νκΈ λ§μΆ€λ², νμ€μ΄ κ·μ μ λ¬Έκ°μ
λλ€.
---λͺ©ν---
μ§μ κΈ°λ°(Knowledge Base)μ κΈ°λ°μΌλ‘ κ°κ²°ν μλ΅μ μμ±νλ, νμ¬ μ¬μ©μμ μ§λ¬Έμ κ³ λ €νμ¬ μλ΅νμΈμ.
---μ§μ κ·Έλν λ° λ¬Έμ μ‘°κ°(Knowledge Graph and Document Chunks)---
{context_data}
---μλ΅ κ·μΉ---
- νμ€λ‘λ§ λ΅λ³μ νμΈμ.
- μ¬μ©μ μ§λ¬Έμ μΈμ΄μ λ§μΆ°μ μλ΅νμΈμ.
- μ λ΅μ λͺ¨λ₯Ό κ²½μ°μλ λͺ¨λ₯Έλ€κ³ νμΈμ.
- μ§μ κ·Έλν λ° λ¬Έμ μ‘°κ°(Knowledge Graph and Document Chunks)λ§μ μ°Έμ‘°νμ¬ λ΅λ³νμΈμ.
- λΉμ μ΄ μκ³ μλ νκ΅μ΄ λμ΄μ°κΈ°, λ¬Έμ₯λΆνΈ, μΈλμ΄ νκΈ°λ², νκΈ λ§μΆ€λ², νμ€μ΄ κ·μ λ§ νμ©νμΈμ.
{user_prompt}
Response:"""
def make_addtional_user_format(input):
# question typeλ³ instruction μ μ
type_instructions = {
"κ΅μ ν": (
"- [μ§λ¬Έ]μ μ μ½κ³ λ΅λ³μ μμ±νμμ€.\n"
"[μ§μΉ¨]\n"
"1. λ¬Έμ λ₯Ό κ·Έλλ‘ μΆλ ₯νμ§ λ§μμ€.\n"
"2. μ§λ¬Έμ λ¬Έμ₯ λΆνΈκ° κ΄νΈ( )μΈ κ²½μ°, μλ§μ λ¬Έμ₯ λΆνΈλ₯Ό μμ±νμΈμ.\n"
'3. μ£Όμ΄μ§ λ¬Έμ₯μ΄ μ¬λ°λ₯Έμ§ νλ¨νκ³ , νλ¦° κ²½μ° μ¬λ°λ₯΄κ² κ΅μ νμ¬ "~κ° μ³λ€." ννλ‘ λ΅λ³νκ³ , κ·Έ μ΄μ λ₯Ό 300μ μ΄λ΄λ‘ μ€λͺ
νμμ€.\n\n'
"[μμ#1]\n"
'μ§λ¬Έ: λ€μ λ¬Έμ₯μμ μ΄λ¬Έ κ·λ²μ λΆν©νμ§ μλ λΆλΆμ μ°Ύμ κ³ μΉκ³ , κ·Έ μ΄μ λ₯Ό μ€λͺ
νμΈμ.\n"μ€λμ νΌμ¦ λ§μΆκΈ°λ₯Ό ν΄ λ³Ό κ±°μμ."\n'
"λ΅λ³: \"μ€λμ νΌμ¦ λ§μΆκΈ°λ₯Ό ν΄ λ³Ό κ±°μμ.\"κ° μ³λ€. 'μ μ리μ λ§κ² λΆμ΄λ€, μ£Όλ¬Ένλ€, λλ°λ₯΄κ² νλ€, λΉκ΅νλ€' λ±μ λ»μ΄ μλ λ§μ 'λ§μΆλ€'κ° μλ 'λ§μΆλ€'λ‘ μ λλ€.\n\n"
"[μμ#2]\n"
'μ§λ¬Έ: λ€μ λ¬Έμ₯μμ μ΄λ¬Έ κ·λ²μ λΆν©νμ§ μλ λΆλΆμ μ°Ύμ κ³ μΉκ³ , κ·Έ μ΄μ λ₯Ό μ€λͺ
νμΈμ."λ§μ§λ§ νμμμΈ μ
μΉ΄μ€ μμ λ€λ₯Έ μμ£Όλ―Ό λΆμ‘±μΈ λ§κ΅¬μμκ² μ£½μμ λΉν λͺ¨μ΅μ΄μμ."\n'
"λ΅λ³: \"λ§μ§λ§ νμμμΈ μ
μΉ΄μ€ μμ λ€λ₯Έ μμ£Όλ―Ό λΆμ‘±μΈ λ§κ΅¬μμκ² μ£½μμ λΉν λͺ¨μ΅μ΄μμ.\"κ° μ³λ€. '-μμ'λ 'μ΄λ€'λ 'μλλ€'μ μ΄κ° λ€μ λΆλ μ΄λ―Έλ‘, 'μ΄λ€'μ '-μμ'κ° κ²°ν©νλ©΄ 'μ΄μμ'κ° λλ€. 'μ΄μμ'λ μλ§μ λ°μΉ¨μ΄ μμ λ 'μμ'λ‘ μ€μ¬ μ΄λ€. λ°λΌμ 'λͺ¨μ΅'μ 'μ΄μμ'κ° λΆλ κ²½μ° 'λͺ¨μ΅μ΄μμ'λΌκ³ μ¨μΌ νλ€."
),
"μ νν": (
"- [μ§λ¬Έ]μ μ μ½κ³ λ΅λ³μ μμ±νμμ€\n"
"[μ§μΉ¨]\n"
"1. λ¬Έμ λ₯Ό κ·Έλλ‘ μΆλ ₯νμ§ λ§μμ€.\n"
"2. μ€κ΄νΈ(""{}"")μΈ κ²½μ°, μ΄λ¬Έκ·λ²(λ§μΆ€λ², νμ€μ΄ κ·μ , λμ΄μ°κΈ°, λ¬Έμ₯ λΆνΈ, μΈλμ΄ νκΈ°λ²)μ κΈ°λ°νμ¬ μ ννμΈμ.\n"
'3. μ£Όμ΄μ§ λ³΄κΈ°λ€ μ€μμ κ°μ₯ μ μ ν κ²μ μ ννμ¬ "~κ° μ³λ€." ννλ‘ λ΅λ³νκ³ , κ·Έ μ΄μ λ₯Ό 300μ μ΄λ΄λ‘ μ€λͺ
νμμ€.\n\n'
"[μμ#1]\n"
'μ§λ¬Έ: "λλ κ·Έλ₯Ό λ³Έ μ μ΄ μμμ {κΈ°μ΅ν΄λλ€/κΈ°μ΅ν΄ λλ€}." κ°μ΄λ° μ¬λ°λ₯Έ κ²μ μ ννκ³ , κ·Έ μ΄μ λ₯Ό μ€λͺ
νμΈμ.\n'
"λ΅λ³: \"λλ κ·Έλ₯Ό λ³Έ μ μ΄ μμμ κΈ°μ΅ν΄ λλ€.\"κ° μ³λ€. 'κΈ°μ΅ν΄ λλ€'λ 'κΈ°μ΅ν-+-μ+λλ€'μ ꡬμ±μ΄λ€. μ΄μ²λΌ 'λ³Έμ©μΈ+-μ/-μ΄+보쑰 μ©μΈ' ꡬμ±μΈ κ²½μ° λ³Έμ©μΈκ³Ό 보쑰 μ©μΈμ λΆμ¬ μ°λ κ²μ΄ νμ©λμ§λ§, μ΄λ¬ν ꡬμ±μ κ°λλΌλ μλ§μ΄ 3μμ μ΄μμ ν©μ±μ΄λ νμμ΄λΌλ©΄ 보쑰 μ©μΈμ λΆμ¬ μ°λ κ²μ΄ νμ©λμ§ μλλ€. 'κΈ°μ΅νλ€'λ 'κΈ°μ΅'κ³Ό '-νλ€'κ° κ²°ν©ν νμμ΄μ΄λ©° 'κΈ°μ΅ν΄'λ 3μμ μ΄λ€. λ°λΌμ 'κΈ°μ΅ν΄'μ 'λλ€'λ λμ΄ μ¨μΌ νλ€.\n\n"
"[μμ#2]\n"
'μ§λ¬Έ: "{λ€ν/λ ν} " κ°μ΄λ° μ¬λ°λ₯Έ κ²μ μ ννκ³ , κ·Έ μ΄μ λ₯Ό μ€λͺ
νμΈμ."\n'
"λ΅λ³: \"λ€ν\"μ΄ μ³λ€. λ€ν(dumping)μ μμ΄ λ°μμ [ΛdΚmpΙͺΕ]μΌλ‘ [Κ]λ 'μ΄'λ‘ νκΈ°νλ€. λ°λΌμ 'λ€ν'μ΄ μ³λ€."
),
}
# question typeμ λ°λ₯Έ instruction μ ν
instruction = type_instructions.get(input["question_type"], "")
return instruction
with open(test_file, "r") as reader, requests.Session() as session:
test_data = json.load(reader)
for idx, data in tqdm(enumerate(test_data), total=len(test_data)):
query = data["input"]["question"].strip()
system_prompt = SYSTEM_PROMPT.format(
context_data="RAGλ‘ κ²μλ chunks",
user_prompt=make_addtional_user_format(data["input"]),
)
data = {
"messages": [
{"role": "system", "content": system_prompt},
{"role": "user", "content": query},
],
"model": "filot/kanana-1.5-8b-instruct-2505-rag",
"presence_penalty": 0.2,
"frequency_penalty": 0.2,
"repetition_penalty": 1.0,
"temperature": 0.0,
"top_p": 1.0,
"seed": 42,
}
response = session.post(
"http://localhost:8000/v1/chat/completions",
headers=headers,
data=json.dumps(data),
)
answer = response.json()["choices"][0]["message"]["content"].strip()
test_data[idx]["output"] = {"answer": answer}
for idx, data in tqdm(enumerate(test_data), total=len(test_data)):
test_data[idx]["output"]["answer"] = data["output"]["answer"].strip()
- Downloads last month
- 3
Inference Providers NEW
This model isn't deployed by any Inference Provider. π Ask for provider support