[LLM] langchain-openai api 응답 json 포멧 지정하기

6eom9eun·2024년 12월 10일

LLM

목록 보기
1/1

.with_structured_output() 메소드는 모델 응답을 구조화된 형식으로 처리할 수 있게 하여 API 개발에서 더 직관적이고 안정적인 구현을 가능하도록 합니다.

.with_structured_output()

.with_structured_output()은 OpenAI 모델이 출력하는 데이터를 특정 형식(Schema)으로 구조화할 수 있도록 도와주는 메소드입니다. 이를 통해 응답 데이터가 예상한 형식을 벗어나지 않도록 강제할 수 있습니다.

  • 명확한 응답 구조: API 응답 데이터의 일관성을 유지할 수 있습니다.
  • 유효성 검사: 미리 정의된 스키마에 따라 데이터를 검증하여 오류를 줄입니다.
  • 코드 간결화: 추가적인 데이터 파싱 및 검증 로직 없이 안정적인 데이터 처리가 가능합니다.

사용 방법

1) 데이터 스키마 정의

  • pydantic 또는 JSON 스키마를 사용하여 출력 형식을 정의합니다.
from pydantic import BaseModel
from typing import List

class AnalyzeResponse(BaseModel):
    sentiment_score: str
    scores: List[str]
    keywords: List[str]

2)모델과 스키마 연결

  • Langchain의 모델 객체에 .with_structured_output 메소드를 사용하여 스키마를 연결합니다.
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model_name="gpt-4",
    temperature=0
).with_structured_output(AnalyzeResponse)

3) 프롬프트와 체인 생성

  • 프롬프트를 작성하고, 이를 기반으로 체인을 생성합니다.
    • 프롬프트 작성은 생략합니다.
from langchain_core.prompts import load_prompt

prompt = load_prompt("./prompts/analyze_prompt.yaml")
chain = prompt | llm

4) 데이터 처리

  • 입력 데이터를 체인에 전달하여 구조화된 응답을 받습니다.
response = chain.invoke({"document": ["OpenAI 정말 대단하네"]})
print(response)
>>
{
    "sentiment_score": "0.6",
    "scores": ["0.9", "0.7", "0.8"],
    "keywords": ["OpenAI", "정말", "대단하네"]
}

주의 사항 및 팁

  • 스키마정의가 올바르지 않으면 예외가 발생합니다.
  • temperature은 출력의 일관성을 높이기 위해 낮은 값을 사용하는 것이 좋습니다.
profile
Dev learnnnnnN.......

0개의 댓글