본문 바로가기

인공지능

Ollama의 혁신적인 구조화된 출력 기능: AI 신뢰성의 미래를 열다

728x90
반응형

Ollama는 이제 구조화된 출력을 지원하여, JSON 스키마로 정의된 특정 형식에 모델의 출력을 제약할 수 있습니다. 이 기능은 모델의 출력이 사전에 정의된 형식에 엄격히 따르도록 보장함으로써 AI 모델의 신뢰성과 일관성을 크게 향상시킵니다. Python 및 JavaScript 라이브러리의 업데이트를 통해 구조화된 출력을 구현하는 것이 그 어느 때보다 쉬워졌습니다.

반응형

구조화된 출력이란 무엇인가요?

구조화된 출력은 개발자가 모델 응답에서 정밀성과 예측 가능성을 달성할 수 있게 합니다. 주요 장점은 다음과 같습니다:

  1. 문서에서 데이터 파싱: 비구조화된 텍스트에서 구조화된 정보를 손쉽게 추출할 수 있습니다.
  2. 이미지 데이터 추출: 이미지의 객체, 색상, 장면을 포함한 상세한 분석 결과를 얻을 수 있습니다.
  3. 구조화된 언어 모델 응답: 모델의 모든 응답이 특정 형식과 일치하도록 보장합니다.
  4. JSON 모드보다 향상된 신뢰성과 일관성: 구조화된 출력은 모호성을 줄이고 더 높은 신뢰도로 결과를 제공합니다.

구조화된 출력 시작하기

라이브러리 업데이트

구조화된 출력을 사용하려면 Ollama 라이브러리를 최신 버전으로 업그레이드하세요:

  • Python:
  • pip install -U ollama
  • JavaScript:
  • npm i ollama

작동 방식

API 요청의 format 매개변수를 사용하여 응답에 기대되는 JSON 스키마를 정의합니다.


구조화된 출력 활용 사례

1. 텍스트에서 데이터 파싱

시나리오: 사용자의 텍스트 입력에서 반려동물 정보를 추출합니다.

Python 구현:

from ollama import chat
from pydantic import BaseModel

class Pet(BaseModel):
    name: str
    animal: str
    age: int
    color: str | None
    favorite_toy: str | None

class PetList(BaseModel):
    pets: list[Pet]

response = chat(
    messages=[
        {
            'role': 'user',
            'content': '''
                저는 두 마리의 반려동물을 키우고 있습니다.
                첫 번째는 5살 된 회색 털을 가진 고양이 Luna이며, 실뭉치를 가지고 노는 것을 좋아합니다.
                두 번째는 2살 된 검은색 고양이 Loki이며, 테니스 공을 좋아합니다.
            '''
        }
    ],
    model='llama3.1',
    format=PetList.model_json_schema(),
)

pets = PetList.model_validate_json(response.message.content)
print(pets)

출력 예시:

{
  "pets": [
    {
      "name": "Luna",
      "animal": "cat",
      "age": 5,
      "color": "grey",
      "favorite_toy": "yarn"
    },
    {
      "name": "Loki",
      "animal": "cat",
      "age": 2,
      "color": "black",
      "favorite_toy": "tennis balls"
    }
  ]
}

2. 이미지 설명 생성

시나리오: 이미지를 분석하고 구조화된 정보를 제공합니다.

Python 구현:

from ollama import chat
from pydantic import BaseModel

class Object(BaseModel):
    name: str
    confidence: float
    attributes: str

class ImageDescription(BaseModel):
    summary: str
    objects: list[Object]
    scene: str
    colors: list[str]
    time_of_day: str
    setting: str

path = 'path/to/image.jpg'

response = chat(
    model='llama3.2-vision',
    format=ImageDescription.model_json_schema(),
    messages=[
        {
            'role': 'user',
            'content': '이 이미지를 분석하고, 보이는 장면과 객체, 색상, 텍스트를 설명해주세요.',
            'images': [path],
        },
    ],
    options={'temperature': 0},
)

image_description = ImageDescription.model_validate_json(response.message.content)
print(image_description)

출력 예시:

{
  "summary": "파란 하늘과 물, 모래 해변 위에 있는 야자수.",
  "objects": [
    {"name": "tree", "confidence": 0.9, "attributes": "palm tree"},
    {"name": "beach", "confidence": 1.0, "attributes": "sand"}
  ],
  "scene": "beach",
  "colors": ["blue", "green", "white"],
  "time_of_day": "Afternoon",
  "setting": "Outdoor"
}

구조화된 출력 활용 팁

  1. Pydantic(Python) 또는 Zod(JavaScript)로 스키마 정의: 명확한 형식을 정의하여 오류를 방지하세요.
  2. 프롬프트에 "JSON으로 반환" 추가: 모델이 요청한 스키마에 맞춰 응답을 생성하도록 유도하세요.
  3. Temperature를 0으로 설정: 결정론적이고 예측 가능한 출력을 보장합니다.

구조화된 출력의 기대 효과

  1. 높아진 신뢰성과 일관성: 응답이 항상 명확한 형식으로 제공되어 오류와 모호성을 줄입니다.
  2. 데이터 처리 간소화: 구조화된 데이터를 직접 활용하여 후속 데이터 처리 과정을 단순화할 수 있습니다.
  3. 시간 절약: 명확한 데이터 출력으로 디버깅 시간과 재작업 시간을 크게 절감합니다.
  4. 더 나은 사용자 경험: 사용자가 원하는 정확한 정보를 제공함으로써 만족도를 향상시킵니다.

728x90

Ollama의 구조화된 출력의 미래 계획

Ollama는 구조화된 출력 기능을 지속적으로 개선하고 있습니다. 다음은 향후 계획입니다:

  • 로짓 노출로 출력 제어 지원: 출력의 정밀도를 세밀하게 조정 가능.
  • 성능 및 정확도 개선: 더 빠르고 정확한 응답 제공.
  • JSON 스키마를 넘어선 형식 지원: 다양한 사용 사례에 대한 호환성 확대.
  • GPU 가속 샘플링: 모델 응답의 효율성 향상.

구조화된 출력을 활용하여 AI 기반 애플리케이션에서 전례 없는 신뢰성과 일관성을 확보하세요. Ollama의 최신 버전을 업그레이드하고 AI 개발의 가능성을 재정의해 보세요.

https://ollama.com/blog/structured-outputs

 

Structured outputs · Ollama Blog

Ollama now supports structured outputs making it possible to constrain a model's output to a specific format defined by a JSON schema. The Ollama Python and JavaScript libraries have been updated to support structured outputs.

ollama.com

728x90
반응형