LangChain 에서 LLM 모델에게 오디오 보내기

1. 오디오를 보내는 방법

  • LLM 모델에게 오디오를 보내는 방법은 아래 세 가지입니다.
  • (1) Base64로 인코딩해 보내기
  • (2) 오디오 모델로 전사한 텍스트를 보내기
  • (3) LLM 제공자 관리 File ID 로 오디오 보내기

예시 오디오

(1) Base64로 인코딩해 보내기

  • message 를 dictionary 로 구성할 경우의 예시입니다.
  • typeaudio 로, 그리고 base64mime_type파라미터를 추가해줍니다.
  • 단, 오디오를 직접 다루지 못하는 모델들이 있으니, 사용 전 확인이 필요합니다.
  • 따라서, 다음에 소개될 (2)번, 전사 후 텍스트로 처리하는 방법을 권장합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from langchain_openai import ChatOpenAI
import os
from config.secret import secret
import base64

os.environ["OPENAI_API_KEY"] = "MyAPIKey"
model = ChatOpenAI(model="오디오 다루기 가능한 모델")

with open("data/audio/sample/hello_im_rocky.wav", "rb") as f:
    base64_data = base64.b64encode(f.read()).decode()

message = {
    "role": "user",
    "content": [
        {"type": "text", "text": "오디오에서 자기소개를 하는 사람의 이름은?"},
        {"type": "audio",
         "base64": base64_data,
         "mime_type":"audio/wav"
        },
    ]
}

model.invoke([message])
1
2
# 답변
로키입니다.

(2) 음성을 전사한 뒤 텍스트로 다루기

  • message 를 dictionary 로 구성할 경우의 예시입니다.
  • STT 모델을 통해 오디오를 텍스트로 전사한 뒤, 전사된 텍스트를 이용하는 방법입니다.
  • 정확도가 높고, 비용은 낮기 때문에 권장되는 방법입니다.
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
from openai import OpenAI
from langchain_openai import ChatOpenAI
import os
from config.secret import secret

os.environ["OPENAI_API_KEY"] = "MyAPIKey"
model = ChatOpenAI(model="gpt-4o-mini")
client = OpenAI(api_key=secret["apikey"]["openai"])

with open("data/audio/sample/hello_im_rocky.wav", "rb") as f:
    transcript = client.audio.transcriptions.create(
        model = "whisper-1",
        file = f,
        response_format = "text"
    )

message = {
    "role": "user",
    "content": [
        {"type": "text", "text": "주어진 transcription에서 자기소개를 하는 사람의 이름은?"},
        {"type": "text", "text": transcript},
    ]
}

model.invoke([message])
1
2
# 답변
자기소개하는 사람의 이름은 로키입니다.

(3) LLM 제공자 관리 File ID 로 오디오 보내기

  • LLM 제공자(예: OpenAI, Anthropic)가 내부적으로 관리하는 파일의 고유 ID를 참조하는 옵션
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from langchain_openai import ChatOpenAI
import os

os.environ["OPENAI_API_KEY"] = "MyAPIKey"
model = ChatOpenAI(model="gpt-4o")

# From provider-managed File ID
message = {
    "role": "user",
    "content": [
        {"type": "text", "text": "Describe the content of this audio."},
        {"type": "audio", "file_id": "file-abc123"},
    ]
}

model.invoke([message])

Reference

https://docs.langchain.com/oss/javascript/langchain/messages#multimodal

Comments