LLM 사용하기

LLM 사용하기

LLM 기반 애플리케이션을 만들 때 가장 먼저 정하는 것 중 하나가 어떤 LLM을 쓸지예요. LLM마다 강점과 가격대가 다르고, 여러 개를 쓰고 싶을 수도 있죠.

LlamaIndex는 아주 많은 서로 다른 LLM에 단일 인터페이스를 제공해요. LLM을 사용하는 건 적절한 통합 패키지를 설치하는 것만큼 간단할 수 있어요:

pip install llama-index-llms-openai

그리고 한 줄로 호출하면 돼요:

from llama_index.llms.openai import OpenAI


response = OpenAI().complete("William Shakespeare is ")
print(response)

이때 환경에 OPENAI_API_KEY라는 API 키가 필요하다는 점에 유의하세요. 자세한 내용은 스타터 튜토리얼을 참고해요.

complete는 비동기 메서드인 acomplete로도 제공돼요.

stream_complete를 호출하면 스트리밍 응답도 받을 수 있는데, 토큰이 생성될 때마다 이를 내놓는 제너레이터를 반환해요:

handle = OpenAI().stream_complete("William Shakespeare is ")


for token in handle:
    print(token.delta, end="", flush=True)

stream_complete도 비동기 메서드인 astream_complete로 제공돼요.

채팅 인터페이스

LLM 클래스는 더 정교한 상호작용을 가능하게 하는 chat 메서드도 구현해요:

messages = [
    ChatMessage(role="system", content="You are a helpful assistant."),
    ChatMessage(role="user", content="Tell me a joke."),
]
chat_response = llm.chat(messages)

스트리밍 응답(토큰이 생성되면서 내놓아지는)은 stream_chatastream_chat으로 사용할 수 있어요.

동기 (stream_chat):

블로킹 연산이 허용되는 표준 파이썬 스크립트나 노트북에서 사용해요. 제너레이터를 바로 반환해요.

stream_response = llm.stream_chat(messages)


for token in stream_response:
    print(token.delta, end="", flush=True)

비동기 (astream_chat):

FastAPI 같은 비동기 프레임워크를 쓸 때는 메서드 호출을 await하고 반환된 비동기 스트림을 순회해야 해요.

stream_response = await llm.astream_chat(messages)


async for token in stream_response:
    print(token.delta, end="", flush=True)

모델 지정

많은 LLM 통합은 하나 이상의 모델을 제공해요. LLM 생성자에 model 파라미터를 넘겨 모델을 지정할 수 있어요:

llm = OpenAI(model="gpt-4o-mini")
response = llm.complete("Who is Laurie Voss?")
print(response)

멀티모달 LLM

일부 LLM은 멀티모달 채팅 메시지를 지원해요. 텍스트와 다른 양식(이미지, 오디오, 비디오 등)을 섞어 넘길 수 있고 LLM이 처리한다는 뜻이에요.

현재 LlamaIndex는 ChatMessage 안에서 콘텐츠 블록을 사용해 텍스트, 이미지, 오디오를 지원해요.

from llama_index.core.llms import ChatMessage, TextBlock, ImageBlock
from llama_index.llms.openai import OpenAI


llm = OpenAI(model="gpt-4o")


messages = [
    ChatMessage(
        role="user",
        blocks=[
            ImageBlock(path="image.png"),
            TextBlock(text="Describe the image in a few sentences."),
        ],
    )
]


resp = llm.chat(messages)
print(resp.message.content)

도구 호출 (Tool Calling)

일부 LLM(OpenAI, Anthropic, Gemini, Ollama 등)은 API 호출로 직접 도구 호출을 지원해요. 즉, 특별한 프롬프트나 파싱 메커니즘 없이도 도구와 함수를 호출할 수 있다는 뜻이에요.

from llama_index.core.tools import FunctionTool
from llama_index.llms.openai import OpenAI




def generate_song(name: str, artist: str) -> Song:
    """Generates a song with provided name and artist."""
    return {"name": name, "artist": artist}




tool = FunctionTool.from_defaults(fn=generate_song)


llm = OpenAI(model="gpt-4o")
response = llm.predict_and_call(
    [tool],
    "Pick a random song for me",
)
print(str(response))

더 고급 도구 호출에 대한 자세한 내용은 OpenAI 심층 가이드를 참고해요. 도구/함수를 지원하는 모든 LLM(예: Anthropic, Gemini, Ollama)에 같은 접근법이 적용돼요.

도구와 에이전트에 대해 더 배우고 싶다면 도구 가이드를 확인하세요.

이용 가능한 LLM

OpenAI, Anthropic, Mistral, DeepSeek, Hugging Face 등 수십 개의 통합을 지원해요. 전체 목록(로컬 모델 실행 방법 포함)은 LLM 모듈 가이드에서 확인할 수 있어요.

지원하는 LLM 목록과 기능 비교는 LLM 모듈 가이드를 참고하세요.

로컬 LLM 사용

LlamaIndex는 호스팅된 LLM API만 지원하는 게 아니라, Meta의 Llama 3 같은 로컬 모델도 실행할 수 있어요. 예를 들어 Ollama가 설치·실행 중이라면:

from llama_index.llms.ollama import Ollama


llm = Ollama(
    model="llama3.3",
    request_timeout=60.0,
    # Manually set the context window to limit memory usage
    context_window=8000,
)

LLM 모델을 사용·구성하는 더 자세한 내용은 커스텀 LLM How-To를 참고해요.

더 알아보기