---
license: apache-2.0
language:
- ko
base_model:
- Qwen/Qwen2.5-14B
tags:
- RAG
- Ko-LLM
- QA
datasets:
- kyujinpy/KoCoT_2000
- MarkrAI/KoCommercial-Dataset
- CarrotAI/ko-instruction-dataset
- heegyu/CoT-collection-ko
---
## Introduction
Qwen2.5 14B 모델은 Command r plus 모델을 이용하여 자체 구축한 RAG 특화 데이터셋, CoT 데이터셋, 벤치마크 데이터셋으로 Full fine-tuning 한 모델입니다.
해당 모델은 일반적인 RAG 서비스의 입력데이터에 대해서 정확한 답변과 답변 출처를 생성할 수 있으며 Json 형태로 답변을 출력하는 특징을 가지고 있습니다.
출력 key값은 아래와 같습니다.
1. "related_document"의 값 : 질문과 관련 있는 문서 doc_id, 제목 (key : 문서 번호, Value : 문서 제목)
2. "source" : 질문과 관련있는 문서 doc_id와 답변에 생성한 인용구 구절
3. "answer"의 값 : 출처를 표기하지 않은 3~6문장 설명형 답변
4. "grounded_answer"의 값 : answer과 동일하되 와 기호로 인용 출처를 명시한 답변
## 답변 출력 예시
```
{
"related_document": {
"D0000042284685": "가락몰 전동 삼륜차 화재예방 추진 대책",
"4895": "차세대 고신뢰성 고출력 슈퍼축전기"
},
"source": {
"D0000042284685": "「물류운반장비 충전장치(리튬이온 배터리) ...",
"4895": "슈퍼축전기와 리튬이차전지의 비교 ..."
},
"answer": "가락몰 전동 삼륜차의 리튬이온 배터리와 슈퍼축전기는 메...",
"grounded_answer": "가락몰 전동 삼륜차의 리튬이온 배터리와 슈퍼축전기는 메커니즘, 소재, 수명, 보호회로, 극성, 과전압, 잔존용량측정, 특징 등에서 차이가 있습니다. 리튬이온 배터리는 리튬이온 이동 메커니즘을 가지고 있으며,... "
}
```
## RAG Prompt
```
RAG_PROMPT = """<|im_start|>system\n\n 당신은 대화형 AI로서, 사용자의 질문에 신뢰할 수 있는 정보를 제공하는 것이 주요 역할입니다. 사용자의 요구를 정확히 이해하고, 관련 문서를 분석하여 최적의 답변을 생성해야 합니다. \n당신은 다음과 같은 원칙을 준수해야 합니다:\n1. 항상 사용자의 요청을 최우선으로 고려하며, 명확하고 이해하기 쉬운 답변을 제공합니다.\n2. 제공된 문서를 최대한 활용하여 응답을 구성하되, 추가적인 분석과 논리를 통해 응답의 질을 높입니다.\n3. 응답을 생성할 때는 반드시 주어진 지침을 따르고, 명확한 출처를 제공해야 합니다.\n4. 사용자의 질문이 모호할 경우, 명확성을 확보하기 위해 질문을 재구성하는 방안을 고려할 수 있습니다.\n\n# 사용자 안내문\n## 작업 및 맥락\n당신은 사용자 질문에 대해 관련 문서를 분석하고, 신뢰할 수 있는 정보를 바탕으로 응답을 생성해야 합니다. 단순한 정보 전달을 넘어, 문맥을 고려하여 가장 적절한 형태로 정보를 제공하는 것이 중요합니다.\n\n## 스타일 가이드\njson 형식으로 답변을 출력하세요.[
{{
"related_document" : {{"문서 정보에서 찾은 doc_id"}}
"source" : {{"문서 정보에서 찾은 doc_id" : "해당 문서에서 찾을 수 있는 인용구 구절, 원문 그대로 표기",
"문서 정보에서 찾은 doc_id" : "해당 문서에서 찾을 수 있는 인용구 구절, 원문 그대로 표기"}},
"answer" : "출처를 표기하지 않은 3~6문장 설명형 답변",
"grounded_answer" : "answer과 동일하되 와 기호로 인용 출처를 명시한 답변"
}}
]\n
<|im_end|>\n<|im_start|>user\n {instruction} <|im_end|>\n<|im_start|>assistant\n"""
```
## Quickstart
```
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "Surromind/RAG-Specialized-LLM"
model = AutoModelForCausalLM.from_pretrained(
model_name, torch_dtype="auto", device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_name)
prompt = """ 질문 : NAOG 외에 몽골의 어떤 사람들이 행정자치부 지방행정연수원의 교육 프로그램에 참가해왔지?\n\n doc_id : 44365 / title : 한국 지방인재개발전략 베트남에 전수된다. / content : 한국 지방인재개발전략 베트남에 전수된다.\n□ 베트남 랑선성 지방정부 공무원들이 공무원 인재채용 및 교육 훈련제도 시스템 등 한국의 인적자원개발전략을 배우러 우리나라를 찾았다. \n○ 행정자치부 지방행정연수원(원장 ***, 이하 연수원)은 한국국제 협력단(KOICA)과 공동으로 11월 26일부터 12월 9일까지 2주간 베트남 랑선성 지방정부 공무원 15명을 대상으로『베트남 랑선성 지방정부 공무원 역량강화과정(Capacity Building for Vietnamese Local Government Officials from Lan Son Province』을 운영한다.\n□ 이번 과정은 연수생 대부분이 베트남 랑선성 소속공무원인 만큼 해당 지방정부가 요청한 지방행정, 공무원 채용·교육, 지역경제 활성화 강의 및 현장견학 등의 맞춤형 연수과정으로 설계되었다. \n○ 특히, 베트남 지방정부 공무원들의 리더십과 역량을 강화하기 위해 공무원 인재채용 및 교육훈련제도 시스템에 대한 토론식 세미나 방식으로 Action Plan을 수립하도록 하여 연수생이 랑선성의 인적자원개발 정책수립에 적용할 수 있도록 지원할 예정이다.\n○ 아울러, 연수단은 농업소득증대와 지역경제 활성화 성공사례로 평가 받고 있는 완주군 거점농민가공센터, 지역경제순환센터 등을 방문하여 지역농민이 생산한 농산물이 2차, 3차 식품 가공 과정을 거쳐 안정적으로 판매될 수 있도록 지원하는 농산물 가공 시스템 현장을 살펴 볼 예정이다. \n○ 이외에도 베트남 랑선성에서 관심이 많은 인천경제자유구역청을 견학하여 한국의 경제발전상 등 현장을 둘러보면서 랑선성 지역 경제에 접목할 수 있는 체험의 기회도 가질 예정이다. \n□ 한편, 연수원은 2006년부터 베트남 지방 공무원들을 대상으로 연수과정을 운영한 이후 5개 베트남 과정과 기타 다국 과정을 통하여 총 130명의 연수생을 동창생으로 배출했다.doc_id : 45112 / title : “한국 공기업 혁신사례 배우러 왔어요!” / content : 몽골 NAOG 교수단 및 고위공무원 방한 “한국 공기업 혁신사례 배우러 왔어요!” - 지방행정연수원, 13년째 몽골 맞춤형 교육실시-\n□ 행정자치부 지방행정연수원(원장 최두영, 이하 연수원)은 3월 1일부터 3월 8일까지 『몽골 NAOG* 역량강화과정』을 운영한다. \n○ 이번 과정에는 교수, 고위공무원, 연수관계관 14명이 참가한다. \n* NAOG (국립거버넌스 아카데미, National Academy of Governance) : 공무원은 물론 정치인·민간인 등 몽골의 오피니언 리더들을 교육하는 몽골 최대의 교육기관으로 석․박사학위 수여\n□ 연수원은 몽골 NAOG와 2002년 교류협력 MOU를 체결한 이후, 13개 교육과정(행정개혁, 경제발전 전략, 행정의 투명성 제고 방안 등)을 운영해 158명의 NAOG 교수와 고위 공무원을 동창생으로 배출했고, \n○ 그 이외에도 몽골의 도지사, 군수 등 지방공무원 1,310명을 대상으로 한국 지방행정의 우수사례를 벤치마킹할 수 있는 몽골군수 과정 등 다양한 교육프로그램을 운영해 오고 있다.
"""
messages = [
{
"role": "system",
"content": """당신은 대화형 AI로서, 사용자의 질문에 신뢰할 수 있는 정보를 제공하는 것이 주요 역할입니다. 사용자의 요구를 정확히 이해하고, 관련 문서를 분석하여 최적의 답변을 생성해야 합니다. \n당신은 다음과 같은 원칙을 준수해야 합니다:\n1. 항상 사용자의 요청을 최우선으로 고려하며, 명확하고 이해하기 쉬운 답변을 제공합니다.\n2. 제공된 문서를 최대한 활용하여 응답을 구성하되, 추가적인 분석과 논리를 통해 응답의 질을 높입니다.\n3. 응답을 생성할 때는 반드시 주어진 지침을 따르고, 명확한 출처를 제공해야 합니다.\n4. 사용자의 질문이 모호할 경우, 명확성을 확보하기 위해 질문을 재구성하는 방안을 고려할 수 있습니다.\n\n# 사용자 안내문\n## 작업 및 맥락\n당신은 사용자 질문에 대해 관련 문서를 분석하고, 신뢰할 수 있는 정보를 바탕으로 응답을 생성해야 합니다. 단순한 정보 전달을 넘어, 문맥을 고려하여 가장 적절한 형태로 정보를 제공하는 것이 중요합니다.\n\n## 스타일 가이드\njson 형식으로 답변을 출력하세요.[{"related_document" : {"문서 정보에서 찾은 doc_id"}, "source" : {"문서 정보에서 찾은 doc_id" : "해당 문서에서 찾을 수 있는 인용구 구절, 원문 그대로 표기", "문서 정보에서 찾은 doc_id" : "해당 문서에서 찾을 수 있는 인용구 구절, 원문 그대로 표기"},"answer" : "출처를 표기하지 않은 3~6문장 설명형 답변","grounded_answer" : "answer과 동일하되 와 기호로 인용 출처를 명시한 답변"}]\n""",
},
{"role": "user", "content": prompt},
]
text = tokenizer.apply_chat_template(
messages, tokenize=False, add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
generated_ids = model.generate(**model_inputs, max_new_tokens=512)
generated_ids = [
output_ids[len(input_ids) :]
for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(response)
```