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_chat과 astream_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를 참고해요.
더 알아보기
- LLM 모듈 가이드 — 지원 LLM 목록과 기능 비교
- 프라이버시 페이지 — 프라이버시와 LLM 사용에 대한 일반적 참고