프로젝트

[개인 프로젝트] LLM을 활용한 서비스 구축 사례 - 1

cheorish 2025. 3. 11. 18:06

 

 

시작하면서

 

여태 논문을 통해 공부하면서, 과연 나는 딥러닝을 통해서 어떠한 서비스를 만들 수 있을까 많은 시간 고민하며 지내왔습니다.

 

그러면서 최근 "쿠팡", "마켓컬리" 등 온라인커머스 시장을 알게 되고, 그에 따른 시장규모에 대한 간단한 조사를 실시하였습니다.

 

출처 : https://cjmezzomedia.com/data/insight_m_file/insight_m_file_1664.pdf

 

상기 차트를 보면 알 수 있지만, 생각보다 시장 비용이 크게 증가한 것을 알 수 있습니다. 개인적인 추론으로는, 과거에는 짬나는 시간에 가족들과 함께 마트에 가서 장을 보며 물품을 구매하는 '오프라인 구매'가 주류였지만, 코로나 사태 이후로는 소비 심리 자체가 오프라인에서 온라인 구매로 전환되기 시작한 것으로 보입니다.

 

왜 그런것일까요? 

 

 

새벽배송

 

그 원천은 새벽배송이라고 볼 수 있습니다.

 

대표적인 기업으로는 "쿠팡", "컬리", "SSG" 등 굴지의 기업들이 있으며, 이들은 전날 오후 11시 이전에 주문한 상품을 다음 날 새벽(보통 오전 6시에서 7시 사이)에 배송해주는 서비스를 제공합니다.

 

이러한 서비스 덕분에 사람들은 굳이 외출해서 직접 구매해야 한다는 필요성을 느끼지 않게 되었고, 그 결과 산업의 구조 자체가 자연스럽게 변화하게 되었다고 생각합니다.

 

또한 여러 영세 유통 사업자들을 통해 판매 기회를 제공하고, 그 안에서 자연스럽게 가격 경쟁이 이루어지는 구조 덕분에 소규모 온라인 유통업에 종사하는 분들도 점점 늘어나고 있습니다. 이를 보며 저 역시 이러한 흐름에서 영감을 받아 새로운 서비스를 만들어 보면 좋겠다는 생각을 하게 되었습니다.

 

 

오픈마켓 판매자 비율 변화

 

상기 차트를 보면 아시겠지만, 티몬은 예외 사항이라 제외 메이저 유통 플랫폼을 비교해봤을 때 (쿠팡, 네이버쇼핑) 점진적으로 증가하는 것을 확인할 수 있었습니다.

 

그렇기에 저는 이러한 틈새 사이에서 영세 유통업자분들을 위해 자연어 모델을 활용해서 작은 서비스를 제공할 수 있을거란 확신이 있어 이번 프로젝트를 진행하게 되었습니다.

 


상품설명 생성, 검색어를 통해 전략 보고서 작성 

 

 

시작은 언어 모델을 활용해서, 일반 상품명을 입력했을 때 그에 어울리는 상품설명을 생성해주면서(LLM), 또한 서비스를 시작하기 전 필요한 정보를 검색하고 정리해줄 인공지능 비서가 필요할 때(에이전트) 

 

그에 걸맞는 서비스를 구축할 수 있다는 확신을 가지고 프로젝트를 시작하게 되었습니다.

 

참조 아이디어 
가제트AI, ChatGPT(Deep Research), Ollama Agent 

 

모델링까지의 기간은 총 15일 정도 소요 됐으며, 자세하게 어떤 모델을 사용했고 어떻게 조정하고 개선하고, 또한 에이전트는 어떻게 구성하게 되었는지 정리하겠습니다.

 

1. 모델 

선정 모델 

  • KoGPT2
  • Gemma2-Ko-2b 
  • Polyglot-ko-1.3b
  • Qwen2.5-1.5b
  • OPEN-SOLAR-KO-10.7B

구현 과정 

 

모델 트리

├─gemma2-ko-2b
│  ├─inference
│  ├─results
│  │  └─checkpoint-2367
│  └─src
│      └─__pycache__
├─KoGPT2-v1
│  ├─inference
│  ├─output_dir
│  ├─results
│  └─src
│      └─__pycache__
├─Llama2-v1
│  ├─results
│  └─src
│      └─__pycache__
├─Polyglot-ko-1.3b
│  ├─inference
│  ├─merge
│  ├─merged_polyglot
│  ├─results
│  └─src
│      └─__pycache__
├─Qwen2.5-1.5b-v1
│  ├─inference
│  ├─merge
│  ├─merged_qwen
│  ├─results
│  └─src
│      └─__pycache__
├─solar-v1
│  ├─results
│  └─src
│      └─__pycache__

 

기본적으로 메인 훈련을 담당하는 main.py 함수를 시작으로, 모델 훈련, 데이터셋 매핑으로 각각 기능을 구분하여 필요에 따라 모듈을 불러와 훈련을 진행하는 형식으로 진행했습니다.

 

훈련 스펙 

  • RTX 4060 Ti 랩탑, VRAM 8GB

생각보다 좋지 않은 GPU 성능으로 최소 1B이 넘어가는 모델을 훈련하면 최소 훈련시간은 8시간 이상으로 비약적으로 올라가는 현상이 있었습니다.

 

그렇기에, 주어진 환경 내에서 최대의 효율을 보여줄 수 있는 모델을 선택해야 했기에 2B 이하의 모델들을 선택해야 했습니다. 

(SOLAR 모델은 왜 그런진 알 수 없으나 로컬 GPU에서도 훈련시킬 수 있기에 추가했습니다)

 

대표 모델 훈련구조 

 

Polyglot-ko-1.3b 

 

훈련세팅 

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, TrainingArguments
from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training
from transformers import BitsAndBytesConfig
from trl import SFTTrainer

class Train:
    def __init__(self):
        base_model = "EleutherAI/polyglot-ko-1.3b"  # 🔹 원본 모델 사용

        bnb_config = BitsAndBytesConfig(
            load_in_4bit=True,  # ✅ 4-bit 양자화 적용
            bnb_4bit_compute_dtype=torch.float16,  # ✅ bf16이 안 되면 float16 사용
            bnb_4bit_use_double_quant=True,  # ✅ VRAM 절약을 위한 더블 양자화
        )

        # 🔹 GPU 상태 확인
        self.device = "cuda" if torch.cuda.is_available() else "cpu"
        print(f"✅ 현재 사용 중인 디바이스: {self.device}")
        if self.device == "cuda":
            print(f"✅ 사용 가능한 GPU 개수: {torch.cuda.device_count()}")
            print(f"✅ 현재 사용 중인 GPU: {torch.cuda.get_device_name(0)}")

        # 🔹 4-bit 양자화된 모델 로드
        self.model = AutoModelForCausalLM.from_pretrained(
            base_model,
            device_map="auto",
            quantization_config=bnb_config  # ✅ 올바른 설정
        )

        self.tokenizer = AutoTokenizer.from_pretrained(base_model)
        self.tokenizer.pad_token = self.tokenizer.eos_token  # ✅ 패딩 토큰 설정

        # 🔹 LoRA 적용 전, k-bit 최적화
        self.model = prepare_model_for_kbit_training(self.model)

        lora_config = LoraConfig(
            r=8,  # LoRA rank
            lora_alpha=32,  # LoRA alpha
            target_modules=["query_key_value",],  # LoRA 적용할 레이어
            lora_dropout=0.1,
            bias="none",
            task_type="CAUSAL_LM"
        )

        self.model = get_peft_model(self.model, lora_config)
        print("✅ 양자화 된 모델 로드 완료~")

    def model_train(self, epochs,
                    train_batch,
                    vali_batch,
                    train_dataset,
                    eval_dataset,
                    output_dir,
                    learning_rate):

        # 🔹 TrainingArguments 설정 (오타 수정 및 최적화)
        training_args = TrainingArguments(
            output_dir=output_dir,
            num_train_epochs=epochs,
            per_device_train_batch_size=train_batch,
            per_device_eval_batch_size=vali_batch,
            save_steps=500,  # 🔹 500 스텝마다 체크포인트 저장
            save_total_limit=3,
            gradient_accumulation_steps=8,  # ✅ VRAM 최적화 (RTX 4070 환경 고려)
            logging_steps=100,
            evaluation_strategy="steps",  # ✅ `eval_strategy` → `evaluation_strategy`
            learning_rate=learning_rate,
            eval_steps=500,
            logging_dir='./logs',
            fp16=True,  # ✅ RTX 4070은 bf16 미지원 → fp16 사용
            report_to="none",
        )

        trainer = SFTTrainer(
            model=self.model,
            args=training_args,
            train_dataset=train_dataset,  # ✅ Dataset 객체가 들어가야 함
            eval_dataset=eval_dataset,
            tokenizer=self.tokenizer  # ✅ `tokenizers=self.tokenizer` → `tokenizer=self.tokenizer`
        )

        print(f"🔹 Batch Size (Train): {training_args.per_device_train_batch_size}")
        print(f"🔹 Batch Size (Eval): {training_args.per_device_eval_batch_size}")
        print(f"🔹 Num Train Epochs: {training_args.num_train_epochs}")

        trainer.train()

        # 🔹 LoRA Adapter 저장 (bnb 모델은 LoRA만 저장 가능)
        self.model.save_pretrained(output_dir)
        self.tokenizer.save_pretrained(output_dir)

        print(f"✅ Fine-tuned LoRA 모델 저장 완료: {output_dir}")

 

양자화를 실시했으나, 사용할 수 있는 레이어는 "query_key_value"로 한정되어 있는것을 확인했습니다. Polyglot 모델은 과거 GPT-NeoX 모델로 최신 모델들과는 구조가 매우 다른 부분이 있어 일단은 양자화가 가능한 부분을 활용하여 학습을 진행시켰습니다.

 

훈련 데이터셋 매핑 

import pandas as pd
import random
import torch
from transformers import AutoTokenizer
from torch.utils.data import Dataset, DataLoader


class CustomDataset(Dataset):
    def __init__(self, file_path, tokenizer, max_length=512):
        self.data = pd.read_csv(file_path, encoding="utf-8-sig")
        self.eos_token = tokenizer.eos_token
        self.tokenizer = tokenizer.padding_side = 'left'
        self.tokenizer = tokenizer
        self.max_length = max_length


    def __len__(self):
        return len(self.data)

    def __getitem__(self, idx):
        example = self.data.iloc[idx]

        instruction_templates = [
            "주어진 상품명을 기반으로 설명을 작성하세요.",
            "다음 상품에 대한 설명을 작성하세요.",
            "다음과 같은 상품의 특장점을 설명해주세요.",
            "주어진 상품명과 연관된 상세 설명을 생성하세요."
        ]
        instruction = random.choice(instruction_templates)

        prompt = f"{instruction}\n상품명: {example['name']}\n상품 설명: {self.eos_token}"
        response = example["words"]

        encodings = self.tokenizer(
            prompt + response,  # 모델이 정답을 예측할 수 있도록 Response까지 포함
            truncation=True,
            padding="max_length",
            max_length=self.max_length,
            return_tensors="pt"
        )

        input_ids = encodings["input_ids"].squeeze()
        attention_mask = encodings["attention_mask"].squeeze()
        labels = input_ids.clone()
        labels[labels == self.tokenizer.pad_token_id] = -100  # 패딩 제외

        return {
            "input_ids": input_ids,
            "attention_mask": attention_mask,
            "labels": labels,
        }

 

또한 훈련에 맞는 데이터셋을 매핑하였습니다. 

 

메인 훈련 

from src.custom_dataset import CustomDataset
from src.train import Train
import argparse

from torch.utils.data import random_split


def main():
    parser = argparse.ArgumentParser(description='Polyglot1.3b Fine-Tuning')

    parser.add_argument('--model_save_path', type=str, default='./results',
                        help='모델 저장 경로')
    parser.add_argument('--max_length', type=int, default=512,
                        help='시퀀스 최대 길이')
    parser.add_argument('--train_batch', type=int, default=4,
                        help='배치 사이즈')
    parser.add_argument('--vali_batch', type=int, default=4,
                        help='배치 사이즈')
    parser.add_argument('--num_epochs', type=int, default=3,
                        help='에포크 수')
    parser.add_argument('--learning_rate', type=float, default=3e-5,
                        help='학습률')
    parser.add_argument('--dataset_file', type=str, default='../data/train.csv', help='데이터셋 파일 경로')


    args = parser.parse_args()

    trainer = Train()

    dataset = CustomDataset(file_path=args.dataset_file, tokenizer=trainer.tokenizer, max_length=args.max_length)

    dataset_size = len(dataset)
    test_size = int(0.05 * dataset_size)
    train_size = dataset_size - test_size
    train_dataset, eval_dataset = random_split(dataset, [train_size, test_size])

    print(f"max_length : {args.max_length}")

    trainer.model_train(
        epochs=args.num_epochs,
        train_batch=args.train_batch,
        vali_batch=args.vali_batch,
        train_dataset=train_dataset,
        eval_dataset=eval_dataset,
        output_dir=args.model_save_path,
        learning_rate=args.learning_rate
    )


if __name__ == "__main__":
    main()

 

argparse를 통해 하이퍼파라미터를 조정하는 방법을 사용했습니다.

 

기존에는 dataclass, Hydra와 같은 기능들이 있으나, 저는 argparse가 편해서 그냥 썼습니다.

 

이런 굴조로 훈련을 진행하였으니 그렇구나 하고 넘어주시면 감사하겠습니다.

 


 

1-2. 훈련 결과 

 

1. KoGPT2 

상품명: 바닐라아이스크림
설명: 아이스크림은 단순한 맛과 향으로만 승부하는 것이 아니라, 그 안에 담긴 풍부한 영양을 어떻게 섭취할까에 
따라 맛이 천차만별이죠. 그중에서도 바닐라빈은 달콤하고 진한 풍미를 지녔는데요. 과즙이 풍부하고 당도 또한 높
 편이어서 아이스크림에 곁들이는 디저트로 제격이랍니다. 넉넉히 10개입으로 준비하였으니 아쉬움 없이 즐기기   
에도 좋을 거예요. 쌉싸름한 아메리카노와 함께라면 한층 더 근사한 티 타임을 누려 보세요. 잼이나 스프레드는 물이고요, 베이킹 재료로 활용해도 참 잘 어울릴 거예요.

 

2. Gemma2-2b-ko

Action1. 

상품명: 장조림
생성된 설명:
깔끔한 식탁을 완성하는 간식, 장조림이 참 매력적이죠. 갓 구운 돼지고기와 김치를 겹겹이 채어 끓인 탕에 넣은 장조림이에요. 식탁에 놓고 밥을 꺼내어 뚝뚝 밥을 풀어 넣, 계속 가득 채운 맛의 장조림을 드셔 보세요. 넉넉한 양이니, 한 번에 하나씩 꺼내 먹기 좋아요.

Action2. 

상품명: 저당 초코바
생성된 설명:
설탕이 적지 않은 간식이라 걱정을 가질 때, 그릇 하나만 있으면 충분하지요. 깨끗한 감귤의 맛을 풀어낸 꾸라의 저당 초코바를 선택해 보세요. 국내산 감귤로만 빚은 앙증 맞은 맛을 즐길 수 있답니다. 부드러운 초코바 사이에 감귤은 잘 붙어 있어 부담 없이 먹기 좋답니다.

 

3. Polyglot-ko-1.3b

상품명: 저당 초코바

상품 설명: 🍫는 한 개만 먹어도 충분한 영양을 지니고 있지만, 다양하게 활용해보세요. 요거트에 넣어 유산균 발효를 시켜 드시거나, 
시리얼과 함께 즐기면 든든하고 깔끔한 맛을 느낄 수 있답니다. 또 딸기맛이나 블루베리맛 등 색다르게 선택하여 즐겨 보아도 좋아요. 저칼로리 제품이 부담스러울 
땐, 무설탕 🙅♀️ 초코 바를 추천해요. 

적당한 무게감으로 하나씩 먹기에도 알맞아 매일 간편히 즐길 수 있지요. 아이들 간식용이나 간단한 아침 식사로 👌 준비해도  
참 좋아할 거예요! https://bit.ly/3f4BtC2 상품 상세 정보를 확인해주세요. 📢 6개입 / 8,800원. 🎈 12개입 / 16,900원. https://link.coupang.com/re/SHARESDPTNE?pageKey=207030887138&vendorItemId=51887109869&isAddedCart= 글루텐 프리 무설탕 초콜릿바. https://smartstore.naver.com/marubely_lab/category/50002833?cp=1

 

4. Qwen2.5-1.5b

지속된 중국어 출력으로 인해 DROP 

 

5. OPEN-SOLAR-KO-10.7B

이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신 이순신

 

지속적인 같은 말의 반복 이순신 출력으로 인해 토큰 패딩의 문제인건가 싶어 개선을 했지만, 끝끝내 DROP했습니다.

 

최종 선정 모델 

Polyglot-ko-1.3b 

 

선정 이유 : 단조롭게 끝나는 것이 아닌, 없는 URL까지 만들면서 한국어를 조금 더 창의적으로 만드는 것을 보고 선택하게 되었습니다.

 


2. 에이전트 

에이전트를 정의하기 전, 저는 오픈 LLM중에 기존 상품 설명 생성모델에서 나온 값을 가지고 더욱 더 좋은 값을 출력할 수 있지 않을까? 라는 고민을 가지며 접근하였습니다.

 

그 결과 찾게 된 한국어 출력 특화 데이터 

 

엑사원(Exaone3.5) 

 

https://huggingface.co/LGAI-EXAONE/EXAONE-3.5-2.4B-Instruct

 

LGAI-EXAONE/EXAONE-3.5-2.4B-Instruct · Hugging Face

EXAONE-3.5-2.4B-Instruct Introduction We introduce EXAONE 3.5, a collection of instruction-tuned bilingual (English and Korean) generative models ranging from 2.4B to 32B parameters, developed and released by LG AI Research. EXAONE 3.5 language models incl

huggingface.co

 

파이프라인은 

 

모델 출력 → 엑사원에 모델 출력 서빙 → 정제 이후 재출력 

 

적용한 내용

**Supreme 저당 초코바** 🍫

### 수정된 상품 설명:
✨ **Supreme 저당 초코바** 🍫 – 세련된 맛과 균형 잡힌 영양으로 하루를 풍성하게 만드세요! 🥰 다양한 맛 라인업으로 취향에 맞춰 즐길 수 있는 유연성을 제공합니다. 신신
한 과일과의 조화로 아침 식사를 더욱 즐겁게 만들거나, 쫄깃한 식감과 깊은 초콜릿의 풍미를 느끼며 한 손에 잡히는 편리함을 경험해 보세요. 🍓🥩 **무설탕** 옵션은 건건
을 중시하는 여러분을 위한 선택입니다. 적당한 크기로 구성된 포장은 하루 한 개씩 간편하게 즐길 수 있게 설계되었으며, 바쁜 일상이나 가족과 함께하는 시간에 이상적   입니다. 특히 **글루텐 프리**로 알레르기를 걱정하지 않고 안전하게 즐길 수 있어 모든 연령대에게 적합합니다.

**제품 정보:**
- **📐 포장 크기**: 6개입 / 8,800원, 12개입 / 16,900원
- **📌 구매 링크**: [링크](https://link.coupang.com/re/SHARESDPTNE?pageKey=207030887138&vendorItemId=51887109869&isAddedCart=)
- **🌐 상세 페이지**: [상품 상세 페이지](https://smartstore.naver.com/marubely_lab/category/50002833?cp=1) 및 **글루텐 프리 인증** 확인

✨ **Supreme 저당 초코바**로 건강하고 세련된 하루를 완성하세요! ✨

 

위에 나와 있는 링크는 죄다 없는 링크입니다...

 

보시면 아시겠지만 생각보다 출력이 잘나와서 출력 시간 대비 아웃풋이 좋은 것을 알 수 있습니다. 

 

그러므로 이렇게 진행하기로 하였고, 더 나아가서 리포트 작성을 위한 에이전트를 기획하게 되었습니다.

 

2-1. 에이전트 

 

  • Ollama 기반 오픈소스 모델 2가지로 기획 
  • 멀티 에이전트 협업 관계를 쉽게 만들기 위해 마이크로소프트사의 AutoGen을 활용 

어려웠던 점 

 

공식 문서에 소개된 AutoGen의 멀티 에이전트 예시들은 대부분 OpenAI의 GPT 계열 모델을 활용한 사례들이 주를 이루고 있습니다. 하지만 개인적으로 아쉬운 점은, 직접 커스텀 파인튜닝한 모델을 GGUF 확장자로 변환했을 때 이러한 모델들로는 Tool 기능을 제대로 활용하기 어렵다는 부분입니다.

 

여기서 말하는 'Tool'이란, 흔히 'Function Calling'이라고도 불리는 기능으로, 에이전트들이 이를 통해 다양한 외부 작업을 수행할 수 있도록 돕는 핵심 요소입니다. 예를 들어, 웹 기반 검색, 크롤링, 문서 기반 RAG (Retrieval-Augmented Generation) 등과 같은 복잡한 작업들이 모두 Tool 기능을 기반으로 이루어집니다. 따라서 이 부분이 제한된다는 것은 멀티 에이전트 시스템을 직접 확장하거나 고도화하는 데 큰 제약으로 작용할 수밖에 없습니다.

 

그렇기에 제한된 소스를 가지고 어떻게 효율을 내느냐가 이번 프로젝트의 가장 큰 밸류에이션이었는데요, 상기 아키텍처대로 사용자 입력에 따라 Ollama에서 Tool을 제공해주는 모델(Qwen2.5:3b)를 활용해서 특정 내용을 검색한 이후 (Tavily Search)

 

그에 따라 정리한 내용을 한국어 특화 모델 Exaone을 가지고 내용을 정리하여 사용자에게 제공할 수 있도록 설계 하였습니다.

 

생성 내용 

 

겨울철 건강관리에 대해서 정리해줘

--------------------------------------------------------------------------------

Next speaker: researcher

researcher (to chat_manager):


***** Suggested tool call (ollama_func_9023): tavily_search *****
Arguments:
{"max_results": 5, "query": "\uaca8\uc6b8\ucca0 \uac74\uac15 \uad00\ub9ac"}
*****************************************************************

--------------------------------------------------------------------------------

Next speaker: user_proxy


>>>>>>>> EXECUTING FUNCTION tavily_search...
Call ID: ollama_func_9023
Input arguments: {'max_results': 5, 'query': '겨울철 건강 관리'}
user_proxy (to chat_manager):

***** Response from calling tool (ollama_func_9023) *****
URL: https://www.jw-pharma.co.kr/mobile/pharma/ko/board/jwstory_view.jsp?contentsCd=24111510194045524L0P
Content: 겨울철에는 실외 활동이 줄어들기 때문에 운동 부족으로 체중이 증가할 수 있으며, 면역력도 저하될 수 있습니다. 규칙 적인 운동은 체온을 유지하고 혈액

URL: https://health.kdca.go.kr/healthinfo/biz/health/gnrlzHealthInfo/gnrlzHealthInfo/gnrlzHealthInfoView.do?cntnts_sn=2048
Content: ㆍ 특히 겨울철에는 공기 중 수증기 부족과 난방으로 실내가 매우 건조해지기 쉬우므로 적정한 실내습도(40-50%) 유지  및 실내 환기가 매우 중요합니다.

URL: https://www.tylenol.co.kr/symptoms/general-healthcare/winter-healthcare
Content: 1. 실내의 적정온도를 유지하고, 공기를 자주 환기 시켜줍니다. 겨울철 적정 실내온도는 18-20도라고 합니다. · 2. 실내습도를 높여주고, 수분을 충분히 공급해 줍니다. · 3

URL: http://blog.naver.com/mohw2016/220870318990
Content: 하루에 1.5L 이상 물을 마셔서 몸 속의 수분을 충분하게 유지해주세요. 기관지 점막을 부드럽게 해서 감기를 예방하는  것은 물론, 신진대사 촉진에도 도움

*********************************************************

--------------------------------------------------------------------------------

Next speaker: researcher

researcher (to chat_manager):

 glove_search_result = [
    {"title": "겨울철 건강 관리: 체중 증가와 면역력 저하", "link": "https://www.jw-pharma.co.kr/mobile/pharma/ko/board/jwstory_view.jsp?contentsCd=24111510194045524L0P"},
    {"title": "겨울철 건강 관리: 공기 습도 관리", "link": "https://health.kdca.go.kr/healthinfo/biz/health/gnrlzHealthInfo/gnrlzHealthInfo/gnrlzHealthInfoView.do?cntnts_sn=2048"},
    {"title": "겨울철 건강관리: 타이 넬라 제품", "link": "https://www.tylenol.co.kr/symptoms/general-healthcare/winter-healthcare"},
    {"title": "건강진단 센터: 겨울철 수분 보충법", "link": "http://blog.naver.com/mohw2016/220870318990"}
]

glove_search_result

--------------------------------------------------------------------------------

Next speaker: validator

validator (to chat_manager):

## 겨울철 건강관리 가이드

**본문**

겨울철에는 낮은 기온과 건조한 환경으로 인해 건강 관리에 더욱 신경 써야 합니다.

**1. 체중 관리 및 면역력 강화**

* **운동 부족 위험:** 겨울철에는 외출이 줄어들어 실내 활동량이 감소하고 운동 부족으로 체중 증가가 쉽게 발생합니다. (**출 처:** https://www.jw-pharma.co.kr/mobile/pharma/ko/board/jwstory_view.jsp?contentsCd=24111510194045524L0P)
* **규칙적인 운동 필요:** 실내에서도 스트레칭이나 가벼운 유산소 운동을 통해 체온 유지와 면역력 강화에 도움을 줄 수 있습니
 (**출처:** https://health.kdca.go.kr/healthinfo/biz/health/gnrlzHealthInfo/gnrlzHealthInfo/gnrlzHealthInfoView.do?cntn nts_sn=2048)

**2. 습도 관리**

* **건조한 실내 환경 주의:** 난방으로 인해 실내 공기가 건조해져 호흡기 자극이나 피부 건조를 유발할 수 있습니다 (**출처:** https://www.tylenol.co.kr/symptoms/general-healthcare/winter-healthcare)
* **적정 습도 유지:** 실내 습도를 40-50% 사이로 유지하고 자주 환기시켜주는 것이 중요합니다 (**출처:** https://www.tylenol.co.kr/symptoms/general-healthcare/winter-healthcare)

**3. 수분 섭취**

* **충분한 물 섭취:** 겨울철에는 건조한 날씨로 인해 탈수 증상이 발생하기 쉽습니다. 하루에 최소 1.5리터 이상의 물을 마셔  몸 속 수분을 충분히 유지하는 것이 중요합니다 (**출처:** http://blog.naver.com/mohw2016/220870318990)
* **기관지 건강:** 물 섭취는 기관지 점막을 부드럽게 해 감기 예방에도 도움이 됩니다 (**출처:** http://blog.naver.com/mohw2016/220870318990)

**결론**

겨울철 건강 관리는 적절한 운동, 습도 조절, 충분한 수분 섭취를 통해 면역력을 높이고 건강한 겨울을 보낼 수 있도록 합니다.  

**출처**

* https://www.jw-pharma.co.kr/mobile/pharma/ko/board/jwstory_view.jsp?contentsCd=24111510194045524L0P
* https://health.kdca.go.kr/healthinfo/biz/health/gnrlzHealthInfo/gnrlzHealthInfo/gnrlzHealthInfoView.do?cntnts_sn=2048  
* https://www.tylenol.co.kr/symptoms/general-healthcare/winter-healthcare
* http://blog.naver.com/mohw2016/220870318990

--------------------------------------------------------------------------------

Next speaker: validator

validator (to chat_manager):

## 겨울철 건강관리 가이드 (계속)

**4. 영양 균형 유지**

* **영양소 풍부 식단:** 겨울철에는 따뜻한 음료와 풍성한 식단으로 비타민과 미네랄 섭취를 보충해야 합니다. 특히, 비타민 D와아연은 면역력 강화에 중요합니다 (**출처:** 관련 건강 블로그 및 영양학 자료 참조 필요).
* **과일과 채소 섭취 증가:** 겨울철에는 제철 과일과 채소를 적극적으로 섭취하여 비타민과 항산화 물질을 공급받는 것이 좋습 니다 (**출처:** 영양학 전문가 및 건강 정보 사이트 참조 필요).

**5. 개인 맞춤형 관리**

* **알레르기 및 만성 질환 주의:** 알레르기 환자나 만성 질환자는 겨울철에 특별한 주의가 필요합니다. 해당 질환에 대한 전문 가와 상담하고 관리 지침을 따르는 것이 중요합니다 (**출처:** 관련 의학 정보 및 전문가 상담 사이트 참조 필요).
* **스트레스 관리:** 겨울철은 스트레스 요인이 많은 시기이므로 명상, 요가, 취미 활동 등을 통해 스트레스를 관리하는 것이 중합니다 (**출처:** 심리학 및 건강 관련 웹사이트 참조 필요).

**결론**

겨울철 건강 관리는 단순히 외부 환경 조절을 넘어 개인의 건강 상태와 생활 습관에 맞춘 종합적인 접근이 필요합니다. 규칙적인 
운동, 적절한 습도 및 수분 관리, 영양 균형 잡힌 식단, 그리고 스트레스 관리까지 체계적으로 실천하면 건강한 겨울을 보낼 수  있습니다.

**최종 보고서 작성 완료**

--------------------------------------------------------------------------------

Next speaker: validator

validator (to chat_manager):

## 겨울철 건강관리 가이드 (계속)

**6. 예방 접종 및 건강 검진**

* **백신 접종:** 겨울철에는 독감 예방 접종이 필수입니다. 매년 최신형 독감 백신을 접종하여 호흡기 질환으로부터 보호받으세 요 (**출처:** 대한감염병학회, 질병관리청 권장 사항).
* **정기적인 건강 검진:** 겨울철 건강 상태를 점검하기 위해 정기적인 건강 검진을 받는 것이 중요합니다. 특히, 고혈압, 당뇨 병 등 만성 질환자는 정기적인 모니터링이 필요합니다 (**출처:** 지역 보건소, 병원 권장 사항).

**7. 안전한 생활 환경 조성**

* **집 환경 관리:** 집 안의 공기 순환을 위해 창문을 열고 가습기를 적절히 사용하여 습도를 유지합니다. 곰팡이와 먼지가 생기 않도록 청소를 철저히 합니다 (**출처:** 건축 및 청소 관련 전문가 의견).
* **교통 안전:** 겨울철에는 빙판길이나 눈으로 인한 교통사고 위험이 높아집니다. 안전 운전을 위해 장갑 착용과 차량 점검을  잊지 마세요 (**출처:** 교통안전공단 안전 정보).

**8. 사회적 관계 유지**

* **가족 및 친구와의 소통:** 겨울철은 사회적 거리두기가 적용되는 시기이지만, 가족이나 친구와의 전화 통화나 화상 통화 등을통해 정서적 연결을 유지하는 것이 중요합니다 (**출처:** 심리 상담 전문가 및 사회심리학 연구 결과).
* **지역사회 참여:** 지역 사회 활동에 참여하거나 온라인 커뮤니티에 참여하여 정보를 공유하고 상호 지원을 받을 수 있습니다 (**출처:** 지역 사회 프로그램 자료 및 온라인 커뮤니티 가이드라인).

**결론**

겨울철 건강 관리는 개인의 건강뿐만 아니라 사회적 연결과 안전까지 포괄하는 포괄적인 접근이 필요합니다. 위에서 언급한 다양 한 요소들을 종합적으로 고려하고 실천함으로써 건강하고 활기찬 겨울을 보낼 수 있습니다.

**최종 보고서 작성 완료**

이러한 가이드를 통해 겨울철 건강 관리에 대한 종합적인 이해와 실천 방안을 제공하였습니다. 지속적인 관심과 관리가 건강한 겨을 보장하는 핵심이 될 것입니다

 

성능 나쁘지 않습니다.

 

결론 

 

개선점 

  • Openai를 통한 API를 활용해서 조금 더 정밀한 멀티 에이전트를 구축해보는 것도 나쁘지 않을 것 같다는 평론입니다.
  • 조금 더 나은 데이터들을 수집해서 출력 품질을 조금 더 조정할 필요가 있음 

 

추가 기능 

  • 서비스 배포를 위해 백엔드 기능, 프론트 엔드 기능을 더 추가할 예정 
  • 더 나아가서 멀티모달 모델 고려중... (Llama3.2 - vision 한국어 모델이 출시 됐다는 이야기가)

아쉬운점 

  • 한정된 자원을 통해 이어나가야 하는 문제(GPU 자원이 부족해서 사전학습 자체도 엄두를 못냄) 
  • 그렇기에 사전학습보다는, 미세조정에 더욱 포커스를 두는 것이 매우 아쉬움 
  • Openai에 포커스가 맞춰져 있는 현 에이전트 생태계가 조금 아쉽다는...(커스텀 튜닝 된 모델도 툴 콜링이 가능했으면 좋겠다... 우회방법 말고)

최종 모델 저장소 

https://github.com/UICHEOL-HWANG/EcomGen.git

 

GitHub - UICHEOL-HWANG/EcomGen

Contribute to UICHEOL-HWANG/EcomGen development by creating an account on GitHub.

github.com

 

허깅페이스 허브 

 

https://huggingface.co/UICHEOL-HWANG/EcomGen-0.0.1v

 

UICHEOL-HWANG/EcomGen-0.0.1v · Hugging Face

This model is not currently available via any of the supported Inference Providers.

huggingface.co

 

위 프로젝트는 상업적 목적이 아닌 개인 연구용으로 작성하였음을 거짓 없이 말씀드립니다.