IT/AI

[Kanana-o] 한국 최초 옴니 AI, 직접 써봤습니다. (feat. 부산 사투리)

snapcoder 2026. 3. 7. 23:27
728x90
반응형
SMALL

 

안녕하세요.

출처 https://tech.kakao.com/posts/811

 

운이 좋게도 Kanana-o Beta Tester 로 선정되어,

멀티모달 언어 모델을 직접 사용해보고, 간단한 서비스로 구현해본 경험을 공유하고자 합니다.

실제로 사용해보며 느낀 점과 함께, 기능 개발 및 테스트 과정도 정리해보았습니다.

 

 

 

 

사람처럼 보고, 듣고, 말하는 AI의 탄생
출처 https://omni.kanana.ai/

Kanana-o

카카오가 공개한 '카나나-o(Kanana-o)'는

국내 최초로 텍스트, 음성, 이미지를 동시에 이해하고 처리하는 통합 멀티모달(Multimodal)의 옴니 AI 언어모델 입니다.

공식 홈페이지 : https://omni.kanana.ai/

 

Kanana-o

더욱 똑똑하게 답하며, 더욱 풍부한 감정표현을 향한 Kanana-o의 진화 과정

omni.kanana.ai




 

 

 

 

 

 

Kanana-v(Vision) + Kanana-a(Audio) = Kanana-o

출처 https://tech.kakao.com/posts/802

이미지와 음성을 아우르다.

단순히 여러 모델을 연결한 구조라기보다는 Kanana-v(Vision)와 Kanana-a(Audio)를 Model Merging 방식으로 결합해
하나의 LLM backbone 위에서 동작하도록 설계된 통합 멀티모달 모델이라고 소개되고 있습니다.

 

말이 참 어렵습니다. 구조적으로 쉽게 이해해보자면 아래와 같습니다.

Audio Encoder (Whisper) // 사람의 귀처럼 음성을 텍스트 형태로 이해할 수 있는 정보로 바꿔줌
        ↓
Audio Projector                 // 텍스트를 LLM이 이해할 수 있는 형태로 번역기처럼 가공해줌
        ↓
 LLM backbone                 // 사람의 뇌처럼 여러 데이터 보고 문맥 파악, 질문 이해, 결론 도출
        ↑
Vision Encoder                  // 사람의 눈처럼 이미지를 읽어들여서
Vision Projector                 // 이미지를 LLM이 이해할 수 있는 형태로 번역기처럼 가공해줌
        ↓
Voice Token LM                 // 사람의 성대처럼 목소리나 톤, 속도 등의 발화 스타일을 만들어줌
        ↓
TTS (Voicebox + Univnet) // 사람의 입처럼 음성으로 말해줌

 

한줄 요약 :말을 하면 → 귀(Whisper)가 듣고 → 뇌(LLM)가 생각하고 → 필요하면 눈(vision) 정보도 같이 보고 → 합쳐서 이해한 뒤 → 입(TTS)으로 다시 말해주는 모델



 

 

 

 

 

 

당연히 짚고 넘어가야 할

음성 처리 방식

한국어 음성 특화 모델인 만큼, Kanana-o의 음성 구조에서 중요한 부분은 말투가 결정되고 만들어지는 단계입니다.

흥미로운 점은, 텍스트 응답을 먼저 생성한 뒤 -> 음성 토큰으로 변환하는 two-stage 방식이 특징입니다.

음성 → Whisper → 임베딩

LLM 이해

텍스트 응답 생성

Voice Token LM                    // 어떤 말투로 말할지 결정하는 곳 (억양, 톤, 속도, 감정 등)

Token → Mel spectrogram  // 위에서 결정된 성대 진동 패턴을 만드는 단계

Vocoder → 음성

 

 

 

 

 

 

Kanana-v(Vision)의

사진 처리 방식

흥미로운 점은, 이미지를 LLM이 이해할 수 있는 형태로 변환할때 LLM에 바로 넣지 않고,

Vision Encoder → Projector → LLM 구조를 거쳐,

이미지 정보를 LLM이 이해할 수 있는 embedding 형태로 변환하는 방식이 특징입니다.

사진 입력

Vision Encoder (CLIP 기반)     // 이미지 특징 추출

Image Feature Embedding     // 고차원 feature로 표현

C-Abstractor (Projector)          // feature를 LLM이 이해할 수 있는 토큰(Visual Token) 형태로 변환

LLM 입력                                 // 이미지 + 텍스트 context 함께 이해

텍스트 응답 생성                       // 사진 설명, 객체 인식, OCR, 차트 해석 등 수행

 

 

 

 

 

 

둘러 볼 만한

카카오의 차별화 전략

1) 멀티모달 데이터셋 직접 구축

텍스트 입력에서는 정확하고 풍부한 설명을 제공하던 모델이, 동일한 질문을 오디오로 전달하면 답변 품질이 저하될 수도 있다고 합 니다. 모달리티에 따라 답변 품질이 다르다는 것.

 

카카오는 이를 해결하고자

단순한 양의 확보를 넘어, 난이도·도메인 다양성·모달 조합의 균형까지 모두 고려한 구조화된 데이터셋을 직접 설계 구축함으로써,

모달리티에 무관하게 멀티모달 지시 이행 능력 고도화를 진행했다고 합니다.

텍스트로 "~방법 알려줘" => 답변 품질 좋음
VS
음성으로 "~방법 알려줘" => 답변 품질 떨어짐(모달리티별 성능 차이) => 데이터셋 확보 => 멀티모달 지시 이행 능력 개선

 

2) 멀티턴 memory 기반 음성 대화

일반적인 LLM => [질문 → 답변], [질문 → 답변], [질문 → 답변] 학습 => 질문하면 답변하고 끝.
VS
Kanana-o => 하나의 Sequence로 [대화 전체] 학습 => 대화 흐름 유지 + context 기억 + tone 유지.

 

3) 감정 음성 (DPO 학습)

결론부터 말하면, AI가 감정 없이 읽는 음성이 아니라, 사람처럼 감정을 담아서 말하도록 훈련했다는 겁니다.

단순 TTS가 아니라, DPO(Direct Preference Optimization) 방식으로 감정 표현을 학습했다고 합니다.

 

예를들면 아래와 같습니다.

일반 AI => "감사합니다" => 감정이 없음
VS
Kanana-o => "감사합니다;;" => 딱딱 당황 => 이건 별로라는걸 AI에게 계속 가르침 => 부정 톤 학습
Kanana-o => "감사합니다." => 정중 미지근 => 무미건조한걸 AI에게 계속 가르침 => 평범 톤 학습
Kanana-o => "감사합니다~!" => 밝고 긍정적 => 이게 더 좋다는걸 AI에게 계속 가르침 => 긍정 톤 학습

 

 

 

 

 

 

앞으로 기대해도 좋은

미래 성장 로드맵

Kanana-o 모델의 성장은 멈추지 않습니다. 카카오의 다음 목표는 아래와 같습니다.

1. Full-duplex 대화 =>서로 쉼 없이 동시에 말할 수 있고, 남의 말도 끊을 수 있고, 정말 사람처럼.
2. On-device 경량화 => 클라우드 의존 없이, 기기 안에서 바로 실행
3. 음성 외 모든 오디오 생성 => 박수소리, 게임 사운드, 고기 굽는 소리 등 다른 소리도 만들자.
4. Human preference alignment => AI를 취향에 맞게 조정하는 것

 

 

 

 

 

주요 기능

기능 설명
Image Captioning 이미지 설명 생성
Image-based Instruction Following 이미지 + 텍스트/음성 기반 지시 수행
OCR-based Reasoning 이미지 내 텍스트 인식 및 추론
ASR (자동 음성 인식) 한국어/영어 음성 → 텍스트 변환
Speech Translation 음성 → 다국어 번역
Text-to-Speech 텍스트 → 자연스러운 음성 생성
Style-instructed TTS 스타일 지정 음성 합성
Podcast-style Speech 이미지/텍스트 → 팟캐스트 형식 음성
Multiturn Conversation 멀티턴 음성/텍스트 대화
Omnimodal QA 텍스트 + 이미지 + 음성 통합 질의응답

 

위와 같이 다양한 기능을 기반으로, 활용 가능성이 무궁무진 하다고 봅니다.

 

참고 링크 : https://huggingface.co/kakaocorp/Kanana-1.5-o-9.8B-instruct-2602-API_Doc

 

kakaocorp/Kanana-1.5-o-9.8B-instruct-2602-API_Doc · Hugging Face

We’re on a journey to advance and democratize artificial intelligence through open source and open science.

huggingface.co

 

 

여기까지가

Kanana-o 모델에 대한 리뷰였습니다.

다음은 기능 구현 및 Beta 테스트 내용입니다.

 

 

 

 

 

 

 

구현 아이디어: AI 커리어 상담사 '커나나'

저번 PlayMCP 등록 이후,

사람과 얼마나 비슷할까?

 

 

직접 검증 해보고 싶었습니다.

 

 

그래서 AI 채용 상담사 '커나나' 를 만들어보았습니다. (리어 + 카나나 의 합성어)

썸네일 화면

 

서비스에 배포된, Kanana-o 연동 기반 기능들은 아래 같습니다.

  • 명함 · 포트폴리오 이미지를 첨부해 커리어 분석
  • 실시간 음성 대화 기반 커리어 코칭
  • 사투리 페르소나 적용 (서울 / 부산)
  • 화자(Speaker A / B) 선택 기능
  • 모의면접 수준의 자연스러운 멀티턴 대화

 

 

 

 

 

개발 내용

(1) WebSocket 실시간 스트리밍 + 멀티턴 히스토리 관리

WebSocket 기반으로 채팅을 구성했습니다.
스트리밍 응답을 청크 단위로 실시간 전달하기 위해 WebSocket 메시지 버퍼 크기도 별도로 증설했습니다.

// WebSocket 설정 (샘플 코드)
@Configuration
public class WebSocketConfig implements WebSocketConfigurer {
    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(chatHandler, "/ws/chat")
                .setAllowedOrigins("*");
    }
}

 

대화 히스토리는 서버에서 세션 단위로 관리해, 이전 맥락을 유지한 채 연속 질문이 가능합니다.

// 멀티턴 히스토리 관리 (샘플 코드)
List<Message> history = sessionHistory.getOrDefault(sessionId, new ArrayList<>());
history.add(new Message("user", userInput));
history.add(new Message("assistant", assistantReply));
sessionHistory.put(sessionId, history);

(2) 이미지 분석 + SmartKeywordExtractor (멀티모달 활용)

Kanana-o의 멀티모달 기능을 활용해 명함이나 포트폴리오 이미지를 업로드하면,
이미지에서 직무 키워드를 추출해 자동으로 채용공고를 검색하는 흐름을 구현했습니다.

[명함 이미지 업로드]
        ↓
[Kanana-o 이미지 분석 → 직무/기술 키워드 추출]
        ↓
[SmartKeywordExtractor → 검색 쿼리 정규화]
        ↓
[관련 채용공고 목록 인라인 표시]

 

이미지는 Base64로 인코딩해 API에 전달했으며, data URL 포맷도 별도로 처리했습니다.

// 이미지 멀티모달 요청 (샘플 코드)
List<ContentPart> content = List.of(
    new ImageUrlPart(base64DataUrl),
    new TextPart(KEYWORD_EXTRACT_PROMPT)
);
String response = kananaClient.chat(content);
List<String> keywords = smartKeywordExtractor.parse(response);

 

SmartKeywordExtractor는 AI 응답에서 직무명, 기술스택, 경력 수준 등을 파싱해 데이터 검색 키워드를 정규화하는 역할을 담당합니다.


(3) 음성 파이프라인 구축

브라우저에서 수집한 PCM 오디오를 Kanana-o에 전달하기 전에 전처리가 필요했습니다.

불필요한 고주파 대역을 제거하고, 데이터 전송량을 줄여, 실시간 음성 처리 효율 개선을 위해

WAV 변환 후 16kHz로 리샘플링하여 전송하도록 처리했습니다.

- iPhone / iOS Safari 기본 샘플레이트 : 44.1kHz (44100 Hz)

// WAV 변환 + 리샘플링 (샘플 코드)
byte[] resampled = AudioResampler.resample(rawPcm, originalRate, TARGET_RATE_16K);
byte[] wavBytes  = WavConverter.toWav(resampled, TARGET_RATE_16K, CHANNELS, SAMPLE_WIDTH);
String b64Audio  = Base64.getEncoder().encodeToString(wavBytes);

 

응답 음성은 스트리밍으로 수신해 청크 단위로 저장한 뒤 병합하여 재생합니다.

# 음성 청크 수집 및 병합 (샘플 코드)
audio_chunks = []

for chunk in stream_response:
    audio_data = extract_audio(chunk)
    if audio_data:
        save_wav_chunk(audio_data, chunk_index)
        audio_chunks.append(audio_data)

merge_wav_chunks(audio_chunks, output_path="result/output.wav")

(4) 음성 UX — 아이들 타임아웃 & 녹음 충돌 방지

음성 대화 모드에서 UX를 다듬는 데 생각보다 많은 공이 들었습니다.

  • Voice Idle Timeout: 일정 시간 침묵 시 자동으로 녹음 종료 처리
  • 이중 API Key: 쿼터 제한 대응을 위해 두 개의 API 키를 번갈아 사용
  • 녹음 충돌 모달: 녹음 중 재시작 시도 시 경고 다이얼로그 표시
  • 뮤트 기능: 음성 응답 재생 중 음소거 토글
// 아이들 타임아웃 처리 (샘플 코드)
function startIdleTimer() {
    idleTimer = setTimeout(() => {
        if (isRecording) stopRecording();
    }, IDLE_TIMEOUT_MS);
}

(5) 사투리 페르소나 구현

시스템 프롬프트에 방언 가이드를 명시해 서울 표준어 · 부산 사투리 두 가지 페르소나를 구현했습니다.
별도로 TTS 화자(A / B)는 목소리 톤 선택 제공되며, 방언과 화자는 독립적으로 조합할 수 있습니다.

인사말, 에러 메시지, 안내 문구 등도 방언별로 분기 처리해 전체적인 일관성을 유지했습니다.

// 사투리별 인사말 분기 (샘플 코드)
const GREETINGS = {
    seoul: "안녕하세요! 무엇을 도와드릴까요?",
    busan: "어서오이소~ 뭐 도와드릴까예?"
};
# 사투리 페르소나 설정 예시 (샘플 코드)
response = client.chat.completions.create(
    model="kanana-o",
    messages=[
        {"role": "system", "content": DIALECT_SYSTEM_PROMPT},
        {"role": "user",   "content": user_message}
    ],
    modalities=["text", "audio"],
    audio={"voice": "preset_spk_2"},  # 화자 B
    stream=True,
)

 

 

 

 

테스터 분들과 공유하고 싶은

꿀팁

(1) 빠른 시작 — OpenAI SDK 그대로 재활용

Kanana-o는 OpenAI SDK 호환 인터페이스를 제공합니다.
base_urlmodel만 바꾸면 기존 코드를 그대로 쓸 수 있습니다.

client = OpenAI(
    base_url="https://kanana-o-endpoint.example.com/v1",
    api_key="<KANANA_API_KEY>"
)
response = client.chat.completions.create(
    model="kanana-o",
    messages=[{"role": "user", "content": "안녕하세요!"}]
)

(2) 멀티모달 출력 형식 강제 프롬프트

이미지를 함께 전달하면 모델이 지정한 출력 형식을 무시하는 경우가 있습니다.
FORMAT 태그 + Few-shot 예시를 함께 쓰면 준수율이 높아집니다.

이미지를 분석하고, 반드시 아래 [FORMAT] 안의 형식으로만 답하세요.
다른 텍스트는 절대 포함하지 마세요.

[FORMAT]
KEYWORD: <키워드1>, <키워드2>
LEVEL: <junior|mid|senior>
[/FORMAT]

--- 예시 ---
입력: (백엔드 개발자 명함 이미지)
출력:
[FORMAT]
KEYWORD: Java, Spring Boot, AWS
LEVEL: mid
[/FORMAT]

이 부분은 다른 테스터분들의 프롬프트 전략도 궁금한 포인트입니다. 좋은 방법이 있다면 공유해 주세요!


(3) 사투리 시스템 프롬프트 예시

TTS 화자 프리셋뿐만 아니라, 시스템 프롬프트에 방언 규칙과 예시를 구체적으로 명시하면 효과가 더 좋습니다.

당신은 부산 출신 AI 상담사입니다.
반드시 부산 사투리를 사용해 답변하세요.

[방언 규칙]
- ~습니다 → ~습니더
- ~이에요 → ~이라예
- ~인가요? → ~인교?

[예시]
표준어: 무엇을 도와드릴까요?
부산어: 뭐 도와드릴까예?

표준어: 잠시만요.
부산어: 잠깐만예.

(4) 쿼터 소진 방지 테스트 팁

베타 기간 개발 중 쿼터를 아껴쓸 수 있는 방법을 고민해보았습니다.

  • 텍스트 먼저 검증 — 음성 출력은 쿼터 소모가 빠를것으로 예상되어, 로직은 텍스트 모드로 먼저 검증
  • 모달리티별 단독 우선 테스트 — 이미지 / 음성 조합 전에 각각 단독으로 먼저 테스트

(5) 앞으로 해보고 싶은 것들

아직 테스트해보지 못한 기능이 많습니다.

기능 활용 아이디어
Podcast-style Speech 채용 뉴스나 JD를 AI가 팟캐스트 형식으로 읽어주는 기능
감정 표현력 TTS 면접 상황에 따라 긴장감 있는 / 친근한 톤 전환
Audio Multiturn 음성만으로 연속 모의면접 진행
Image-to-Podcast 포트폴리오 이미지를 자동으로 음성 자기소개로 변환

 

 

 

 

 

 

시연 Shorts

서비스의 사용자 경험 시나리오는 아래와 같습니다.

  1. 부산 사투리 프로필로 변경
  2. 화자 선택
  3. 실시간 대화 모드 활성화 후 인사
  4. 커나나가 부산 사투리로 반갑게 응답

 

" 부산 사투리까지 하는 멀티모달 AI 등장... "

20초부터 사투리 음성을 들으실 수 있습니다.

 

Kanana-o의 사투리를 실제로 들어보니 어떠셨나요?

 

사투리를 사용하지 않는 저로서는 이 발음이 정확한 사투리인지, 흉내 낸 발음인지 판단하긴 어려웠습니다.

응답 텍스트에는 "듣겠습니더" 로 표시되어 있었지만, 음성에서는 "듣겠습니다" 에 가깝게 발음된 것처럼 들리기도 했습니다.

 

다만 전반적인 한국어 발화 자체는 매우 자연스럽게 느껴졌습니다.

특히 실제 사람이 말하는 것처럼 말 사이의 호흡이나 템포가 자연스럽게 이어진다는 점이 인상적이었습니다.

서울 사람인 제 기준에서는 사투리 표현도 충분히 신기하고 인상적으로 들렸습니다.

(솔직히 저보다 커나나가 사투리를 더 잘하는 것 같습니다..)

 

 

 

 

 

 

테스트 한계

1. 멀티모달 요청에서 규칙 미준수

명함 이미지와 텍스트를 함께 입력했을 때 Tool Call처럼 활용하기 위해 특정 출력 형식을 명시했지만,

간혹 모델이 해당 형식을 그대로 따르지 않는 경우도 있었습니다.

 

프롬프트 설계를 조금 더 정교하게 다듬어야 할 부분도 있겠지만,

생성형 모델 특성상 출력 형식을 완전히 강제하기는 쉽지 않은 부분이 아닐까 생각했습니다.

 

다른 테스터분께서도 비슷한 경험을 공유해주신 것으로 보아,

향후 모델 측면에서도 점차 개선되지 않을까 기대하고 있습니다.

2. 일일 쿼터 제한

현재 1일 횟수 제한이 있으며, 잔여 쿼터 조회 기능은 아직 지원되지 않아,
개발 사이클 상 더딘 부분이 있지만, 베타 기간인 만큼 이해는 하고 있습니다.

친절하게 도움주시는 관계자분들께 항상 감사드립니다.

출처 https://api-omni.kanana.ai/

 

 

 

앞으로의 목표

  • 명함 · 포트폴리오 이미지 기반 커리어 분석 기능 고도화
  • 멀티턴 모의면접 흐름 구현
  • 출력 형식 준수를 위한 프롬프트 전략 개선
  • 풍부한 감정 표현력 테스트
  • 다중 화자 대화 TTS 심층 테스트

출처 https://omni.kanana.ai/

 

처음 이런 기회를 주신 카카오 관계자분들께 감사드립니다.
앞으로 모델 성능이 개선될수록 더 많은 가능성이 열릴 것 같아 기대됩니다.

 

 

 

 

맺음말

다른 테스터분들은 어떻게 Kanana-o를 활용하고 계신가요?
디스코드 혹은 댓글로 편하게 공유해 주세요!

 

 

 

 

참고문헌

Kanana-o API 명세서, https://huggingface.co/kakaocorp/Kanana-1.5-o-9.8B-instruct-2602-API_Doc

 

kakaocorp/Kanana-1.5-o-9.8B-instruct-2602-API_Doc · Hugging Face

We’re on a journey to advance and democratize artificial intelligence through open source and open science.

huggingface.co

 

Kanana-o 모델 이해를 위한, edwin.ai / james.e 님의 이미지와 음성을 아우르는 카카오의 멀티모달 언어모델 Kanana-o 알아보기

 

이미지와 음성을 아우르는 카카오의 멀티모달 언어모델 Kanana-o 알아보기 - tech.kakao.com

안녕하세요, 카카오의 AI 모델 개발을 담당하는 카나나(Kanana) 조직의 Ed...

tech.kakao.com

 

멀티모달 지시 이행 능력과 멀티턴 대화 이해를 위한, edwin.ai / james.e / jessie.e 님의, 더욱 똑똑하게 답하며, 더욱 풍부한 감정표현을 향한 Kanana-o의 진화 과정

 

더욱 똑똑하게 답하며, 더욱 풍부한 감정표현을 향한 Kanana-o의 진화 과정 - tech.kakao.com

안녕하세요, 카카오의 AI 모델 개발을 담당하는 카나나(Kanana) 조직의 Ed...

tech.kakao.com

 

이미지 처리 방식 이해를 위한, logan.c 님의, 이미지도 찰떡같이 이해하는 카카오의 멀티모달 언어모델 Kanana-v 알아보기

 

이미지도 찰떡같이 이해하는 카카오의 멀티모달 언어모델 Kanana-v 알아보기 - tech.kakao.com

안녕하세요, 카카오의 AI 모델 개발을 담당하는 카나나 알파(Kanana ⍺) 조...

tech.kakao.com

 

AI 모델 라인업, 카카오의 AI 모델, 카나나 모델 패밀리를 소개합니다

 

카카오의 AI 모델, 카나나 모델 패밀리를 소개합니다 - tech.kakao.com

지난 if(kakaoAI)2024에서는 카카오의 독자적인 AI 모델 라인업, Ka...

tech.kakao.com

 

AI 기반 아이디어 발굴 과정에서, hunter.jo 님의 카카오 x 한국정보과학회 AI 에이전트 경진대회

 

(FAQ) 카카오 x 한국정보과학회 AI 에이전트 경진대회 - tech.kakao.com

본 경진대회에 관심을 가져주신 모든 분께 감사드립니다. 참가자들이 AI 에이전트 ...

tech.kakao.com

 

 

 

※ 컨텐츠 내용상 문제의 소지가 있는 경우 말씀주시면 개정하도록 하겠습니다. 감사합니다.

 

728x90
반응형
LIST