| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- RDBMS
- python기초
- RNN
- SQL
- 데이터 시각화
- 기초
- 트랜스포머
- Transformer
- dementional reduction
- TTS
- UMAP
- 머신러닝
- 생성형 인공지능
- 힙정렬
- 에이전트
- 데이터엔지니어
- ASR
- 정보처리기사
- CLIP
- 랭그래프
- 자연어처리
- 객체지향
- CNN
- 알고리즘
- 소프트웨어 개발
- python 기초
- LangGraph
- 캐글
- Python
- 딥러닝
- Today
- Total
수달이네 기술 블로그
어떻게 하면 LLM이 내가 원하는 역할을 잘 수행할까? 본문
이번 프로젝트에서 STT→LLM(에이전트)→TTS 구조의 AI진행자를 설계하고, 관련하여 개발하는데에 있어서 해당 LLM이 ‘진행자스러움’이 부족함을 뼈저리게 깨닳았다.
어떻게 해야 이 한계를 극복하고, LLM이 더 Role에 집중할 수 있도록 만들 수 있을까?
1. 프롬프트 엔지니어링(여유로운 전체적인 구조 설계)
프롬프트 엔지니어링은 LLM의 추론 과정을 설계한다. 이 부분은 LLM이 작동함에 있어 큰 영향을 끼친다.
현재 우리 프로젝트의 프롬프트 엔지니어링은 기본적으로 다음과 같이 진행된다,.
SYSTEM_PROMPT = """
AI의 역할을 설명.
AI가 지켜야할 내용을 설명:
1. 진행 스타일:
- 관련 스타일 을 설명
- 지켜야할 내용을 설명
2. 대화 연결 로직:
- AI가 대화 어떻게 답해야할지 로직을 설명
- "예시"와 같이 이야기하세요 등.
3. 개입 타이밍:
- ~말 이후 발화하세요.
- ~상황에서 이야기하세요
"""
그러나 위와 같은 프롬프트 엔지니어링에선 한계가 명확했다.
- 진행자스럽지 못한 발화: AI는 단순 LLM처럼 길고 장황하게 설명할 뿐이며, 전혀 진행하지 못했다.
- 개입 타이밍의 의미: 사실상 LLM은 대화를 받고, 받은 내용에 대해 바로 결과를 출력하므로 의미 없는 부분이 되었다.
- 너무 긴 발화: 내용이 너무 길고, 호응만 요구하는 경우에도 호응하지 못했다.
- 질문이 들어가야할 타이밍에 빠르게 음성이 나가지 못했다.
위와 같은 한계점에서 바뀌어야 할 것은.
- 개입 타이밍은 시스템 적으로 제어하고, TTS로의 전환까지 완료된 내용을 태그와 함께 저장하고, 에이전트로 적절한 타이밍에 출력한다.
- 답이 필요 없는 부분이나, 사람이 대화를 이어나가야 하는 부분에선 호응하도록 프롬프트를 조정한다.
- AI의 질문이나 답이 필요한 부분에서 짧고, 지루하지 않도록 길이를 조정하도록 프롬프트를 설계한다.
- 위와 같은 조정이 잘 적용되도록 하는 로직이 추가적으로 필요하다.
여기서, 1~3번은 프롬프트, 알고리즘 구조의 수정으로 할 수 있는데 반해, 4번에서 내가 해야할 내용이 명확했다.
프롬프트 상에서의 제어
- Chain-of-Thought 강제 및 구조화
- 답변 출력 전에 생각하는 단계를 추가적으로 집어넣는 방식을 넣는다.
4. 자기 비판: - 답변을 출력하기 전에 다음 단계로 생각해 보시오.: 1) 사용자의 의도 분석, 2) 관련 지식 검색 전략 수립, 3) 제약 검토, 4) 최종 답변 구성 - 가상 인터페이스 설계
- 명확한 JSON구조의 답변을 요구하여 LLM이 스스로 답변을 평가하도록 의무화 한다.
# 출력 규칙 모든 답변은 반드시 다음 JSON 형식을 따라야 한다. { "persona_alignment": "작성한 답변이 해당 역할에 얼마나 부합하는지 점수(0-10)", "reasoning": "왜 이 답변이 최선인지에 대한 논리", "final_answer": "사용자에게 전달할 실제 답변" } - 프롬프트 구조적 레이아웃 설계
- 정보의 우선순위를 명확히 배분하는 구조적 레이아웃을 사용한다.
System: 에이전트의 존재 이유 Context: 현재 필요한 데이터 Intruction: 구체적 수행 명령 Constraints: 절대로 해선 안 될 행동이나 반드시 포함할 말투와 어조. - few-shot
- 프롬프트에 예시를 주는 방식을 사용한다.
사용자가 질문을 했을때: (나쁜 예시)"이렇게하지마" - (좋은 예시)"이렇게 해" 사용자가 말을 하고 있을때: (나쁜 예시)"이렇게 호응하지마" - (좋은 예시)"이렇게 호응해봐"
2. 하네스 엔지니어링(딱딱하지만 안정성)
랭그래프 등을 이용하여 실행 인프라를 직접 설계함으로써 신뢰성과 성능을 극대화 하도록 유도한다.
- 실행 루프: 모델이 답변할 뿐 아니라, 루프를 통해 알아서 판단하도록 한다.
- 도구 레지스트리: 에이전트가 사용할 수 있는 도구를 명확하게 전달한다.
- 컨텍스트 관리자: 에이전트의 기억력을 관리한다. (불필요한 정보 삭제, 핵심 정보만 요약)
- 상태 저장소: 에이전트가 긴 작업을 할 때 현재 상태를 저장해 오류 발생 시 복구하도록 유도
- 라이프 사이클 훅: 작업 완료, 오류, 피드백 등의 이벤트가 일어날 때 시스템이 개입함
- 평가 인터페이스: 에이전트의 출력을 규칙에 따라 실시간으로 검증하는 장치
위와 같은 6개의 하네스 구성요소를 통해 안정성을 높인다.
그러나 프롬프트엔지니어링에 비해 유연상이 줄어들 가능성이 있다.
- 또한 구조를 강제로 포매팅하는 방식으로 하네스엔지니어링을 하면, 필요할 때 원하는 내용이 나올 수 있을 것이다.
3. LoRA적용(어투와 대화 내용)
LLM이 프롬프트 엔지니어링에 적응을 하지 못하거나, 자연스러운 진행을 하지 못했을 때 LLM에 아예 진행방법을 보여주어 좋은 진행 모델에 대해 설명하도록 해 보는 방법도 있다.
그렇다고 전체 LLM모델을 재학습하거나, 전체를 Fine-tuning하지 않고, 작은 가중치 층을 덧붙이는 방법으로 특정 말투와 논리 체계를 학습하는 방식을 채용하는 것이다.
실제로 위와 같은 방식은 효과가 있는데,
- 진행자들 특유의 구어체와 언어의 소화 LLM이 말을 할 때, 어딘가 어색한 말투와 상황에 맞지 않는 말투가 어색할 수 있다. 이런 부분을 일부 학습시켜 가중치를 반영해준다.
- 분위기 메이킹할 만한 내용 단순 딱딱한 정보 뿐아니라 가벼운 잡담, 기술토크 등 팟캐스트의 분위기를 살려 답한다.
데이터셋
LoRA학습을 위해서 데이터셋을 구성해야한다. 이를 위해서 팟캐스트의 대본을 정제해서 학습시킬 필요가 있는데.
[게스트의 답변 혹은 질문] → [진행자의 반응과 답변 그리고 추가 질문 등] 과 같은 Pair를 이루는 데이터를 모아야한다.
이를 위해 모아야할 데이터는
- 공감/리액션: 게스트 의견에 동의하거나 놀라움을 표하는 리액션 데이터
- 논리적 요약: 긴 이야기를 짧고 명확하게 정리하는 내용
- 아이스브레이킹/분위기 전환: 분위기를 전환하고, 다음 내용으로 넘기는 내용
- 질의 응답: 단순한 질문을 답하는 내용
등을 모아서 구축해야한다.
그러나 이미 있는 데이터 중엔 그런 데이터가 부족해 보인다. 예를 들어
- 위 데이터셋에는 토론자와 사회자의 대화 내용이 잘 담겨있고, 구어체, 등의 데이터가 다양한 카테고리로 연결되어있다.
- 음성 데이터도 포함되어 STT 파인튜닝시에도 활용할 수 있어보인다.
- 위 데이터셋에는 인터뷰를 진행하는 사회자의 질문, 답변자의 질문이 담겨있다.
- 그러나 사회자의 호응은 좀 부족하고, 단지 인터뷰 특유의 질문이 많은 데이터.
그러나 실제 우리가 원하는 팟캐스트 관련 LLM 데이터는 부족했따.
따라서 STT혹은 수동으로 팟캐스트 대화 내용을 따 학습 데이터를 구축하는 방법이 필요할 듯 보인다.
4. 멀티 에이전트 협업
기본적으로 현재 하나의 에이전트가 음성을 받고, 해당 음성에 대해 처리하고, 출력결과를 말해주는 방식을 채택하고 있는데, 추가적으로 감독을 하는 AI를 생성한다.
- 출력된 내용을 검사하고, 매겨진 점수가 너무 낮으면 다시 출력하고, 적당하면 출력 한다 또한, 더 개선하도록 개선사항을 직접 말해주는 Actor-Critic구조를 사용한다.
위와 같이 두개의 에이전트를 사용할거면, 확실히 시간이 오래들기 때문에, 구조를 설계하는데 있어서 더 집중이 필요해보인다.
'프로젝트' 카테고리의 다른 글
| 7. Whisper Finetuning 1 (Feature Extractor & Tokenizer) (1) | 2026.04.18 |
|---|---|
| 6. Whisper - ASR모델의 구조 (0) | 2026.04.17 |
| 5. 스트리밍 시스템에서의 청킹 + 발화 세그멘테이션 (0) | 2026.04.16 |
| 4. VAD(Voice Activity Detection) (0) | 2026.04.15 |
| 3. ASR파이프라인 구현(파이프라인 설계 + 오디오 개념) (0) | 2026.04.14 |