LangChain 에서 LLM 모델에게 이미지 보내기

1. 이미지를 보내는 방법

  • LLM 모델에게 이미지를 보내는 방법은 아래 세 가지입니다.
  • (1) URL 로 이미지 보내기
  • (2) Base64로 인코딩해 보내기
  • (3) LLM 제공자 관리 File ID 로 이미지 보내기

예시 이미지

(1) URL로 이미지 보내기

  • message 를 dictionary 로 구성할 경우의 예시입니다.
  • 이미지를 추가할 경우 typeimage 로, 그리고 url 파라미터를 추가해줍니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from langchain_openai import ChatOpenAI
import os

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

message = {
    "role": "user",
    "content": [
        {"type": "text", "text": "이 사진에 대해 설명하고, 이곳이 어디인지 추측해보세요."},
        {"type": "image", "url": "https://whdrns2013.github.io/assets/images/20260327_001_001.png"},
    ]
}

model.invoke([message])
1
2
3
4
5
6
7
8
# 답변
 사진은  위에 다리가 놓여 있고, 해가 지는 장면을 담고 있습니다.
해가 다리 아래로 지고 있어 강물에 반사가 아름답게 이루어지고 있으며,
도시의 고층 빌딩들이 실루엣으로 보입니다.

이런 풍경은 서울의 한강과 비슷해 보입니다.
특히 고층 빌딩과 강이 같이 보이는 것으로 보아 서울의 여의도나 강변북로 근처일 가능성이 있습니다.
하지만 정확한 장소는 확실히   없습니다.

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

  • message 를 dictionary 로 구성할 경우의 예시입니다.
  • 이미지를 추가할 경우 typeimage 로, 그리고 base64mime_type파라미터를 추가해줍니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from langchain_openai import ChatOpenAI
import os
import base64

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

with open("data/image.jpg", "rb") as f:
    base64_data = base64.b64encode(f.read()).decode()

message = {
    "role": "user",
    "content": [
        {"type": "text", "text": "이 사진에 대해 설명하고, 이곳이 어디인지 추측해보세요."},
        {"type": "image",
         "base64": base64_data,
         "mime_type":"image/jpeg"
        },
    ]
}

model.invoke([message])
1
2
3
4
5
6
7
8
# 답변
 사진은  위에 놓인 다리와 저녁 노을이 지는 장면을 담고 있습니다.
다리 너머로는 고층 건물들이 보이며,
해가 지면서 하늘과  위에 따뜻한 색깔의 노을이 아름답게 펼쳐져 있습니다.

이곳은 도시의 대형 강변 또는 호수에 있는 다리로 보이며,
풍경으로 미루어 보아 서울의 한강 주변일 가능성이 있습니다.
특히 서울에는 여러 다리와 고층 건물들이 있어 이와 유사한 도시 경관을 자주   있습니다.

(3) LLM 제공자 관리 File ID 로 이미지 보내기

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

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

message = {
    "role": "user",
    "content": [
        {"type": "text", "text": "Describe the content of this image."},
        {"type": "image", "file_id": "file-abc123"},
    ]
}

model.invoke([message])

Reference

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

Comments