>기술 주변기기 >일체 포함 >OpenAI 구조화 된 출력을 시작합니다

OpenAI 구조화 된 출력을 시작합니다

Lisa Kudrow
Lisa Kudrow원래의
2025-03-04 09:37:10414검색

2024 년 8 월에 Openai는 2024 년 8 월 API에서 강력한 새로운 기능 (구조화 된 출력)을 발표했습니다. 이 기능을 사용하면 이름에서 알 수 있듯이 LLMS가 지정한 형식으로 만 응답을 생성 할 수 있습니다. 이 기능을 사용하면 정확한 데이터 형식이 필요한 응용 프로그램을 훨씬 쉽게 구축 할 수 있습니다. 

이 튜토리얼에서는 OpenAi 구조화 된 출력을 시작하고 새로운 구문을 이해하고 주요 응용 프로그램을 탐색하는 방법을 배우게됩니다. 결정 론적 응답, 즉, 일관된 형식의 응답은 데이터 입력, 정보 검색, 질문 답변, 다단계 워크 플로 등과 같은 많은 작업에 중요합니다. 프롬프트가 동일하더라도 LLM이 매우 다른 형식으로 출력을 생성 할 수있는 방법을 경험했을 수 있습니다. 예를 들어 gpt-4o로 구동되는이 간단한 classify_sentiment 함수를 고려하십시오. Getting Started With OpenAI Structured Outputs 출력 :

처음 두 응답이 동일한 단일 단어 형식 이었지만 마지막 응답은 전체 문장입니다. 다른 다운 스트림 응용 프로그램이 위의 코드의 출력에 의존한다면 단일 단어 응답을 기대했을 때 충돌했을 것입니다.

. 우리는이 문제를 일부 신속한 엔지니어링으로 해결할 수 있지만 시간이 많이 걸리고 반복적 인 프로세스입니다. 완벽한 프롬프트가 있더라도 향후 요청에서 응답이 우리의 형식을 준수 할 것이라고 확신 할 수는 없습니다. 물론, 우리는 구조화 된 출력을 사용하지 않는 한 :

출력 :

새로운 함수를 사용하면 classify_sentiment_with_structured_outputs의 경우 응답은 모두 동일한 형식입니다. 이 기능을 강력한 형식으로 강요하는이 기능은 중요하므로 다른 오픈 소스 도구에 대한 수많은 신속한 엔지니어링 또는 의존도를 절약 할 수 있습니다. OpenAI 구조화 된 출력 로 시작하는 것 이 섹션에서는 감정 분석기 기능의 예를 사용하여 구조화 된 출력을 분류합니다. 환경 설정 전제 조건 시작하기 전에 다음과 같은 것을 확인하십시오

Python 3.7 이상 시스템에 설치되었습니다 OpenAi API 키. OpenAI 웹 사이트에 가입하여이를 얻을 수 있습니다.

OpenAi API 설정

# List of hotel reviews
reviews = [
   "The room was clean and the staff was friendly.",
   "The location was terrible and the service was slow.",
   "The food was amazing but the room was too small.",
]
# Classify sentiment for each review and print the results
for review in reviews:
   sentiment = classify_sentiment(review)
   print(f"Review: {review}\nSentiment: {sentiment}\n")
1. Openai Python 패키지 설치 : 터미널을 열고 다음 명령을 실행하여 OpenAi Python 패키지를 최신 버전으로 설치하거나 업데이트하십시오.

2. API 키 설정 : API 키를 환경 변수 또는 코드에서 직접 설정할 수 있습니다. 환경 변수로 설정하려면 실행 :
Review: The room was clean and the staff was friendly.
Sentiment: Positive
Review: The location was terrible and the service was slow.
Sentiment: Negative
Review: The food was amazing but the room was too small.
Sentiment: The sentiment of the review is neutral.

3. 설치 확인 : 설치를 확인하기 위해 간단한 파이썬 스크립트를 작성하십시오.

# List of hotel reviews
reviews = [
   "The room was clean and the staff was friendly.",
   "The location was terrible and the service was slow.",
   "The food was amazing but the room was too small.",
]
# Classify sentiment for each review and print the results
for review in reviews:
   sentiment = classify_sentiment(review)
   print(f"Review: {review}\nSentiment: {sentiment}\n")
모든 것이 올바르게 설정되도록 스크립트를 실행하십시오. 터미널에 모델의 응답이 인쇄되어야합니다.

OpenAI 패키지 외에도 구조화 된 출력에 대한 JSON 스키마를 정의하고 검증하려면 Pydantic 라이브러리가 필요합니다. PIP : 를 사용하여 설치하십시오

이 단계를 사용하면 이제 OpenAI의 구조화 된 출력 기능을 사용하도록 환경이 설정되었습니다. Pydantic을 사용하여 출력 스키마 정의 구조화 된 출력을 사용하려면 Pydantic 모델을 사용하여 예상 출력 구조를 정의해야합니다. Pydantic은 Python 용 데이터 검증 및 설정 관리 라이브러리로 Python 유형 주석을 사용하여 데이터 모델을 정의 할 수 있습니다. 그런 다음이 모델을 사용하여 OpenAi의 모델에 의해 생성 된 출력의 구조를 시행 할 수 있습니다. 여기에 검토 감정 분류기의 형식을 지정하기위한 Pydantic Model 예제입니다.

이 예에서 <:> :

SentimentResponse는 출력의 예상 구조를 정의하는 Pydantic 모델입니다. 모델에는 단일 필드 감정이 있는데, 이는 "양성," "음수"또는 "중립"의 세 가지 문자 값 중 하나만 취할 수 있습니다.
Review: The room was clean and the staff was friendly.
Sentiment: Positive
Review: The location was terrible and the service was slow.
Sentiment: Negative
Review: The food was amazing but the room was too small.
Sentiment: The sentiment of the review is neutral.
OpenAI API 요청의 일부로이 모델을 통과 할 때 출력은 우리가 제공 한 단어 중 하나 일뿐입니다. 방법을 보자 구문 분석 도우미 사용 OpenAI 요청에서 pydantic 스키마를 시행하려면 채팅 완료 API의 response_format 매개 변수로 전달하기 만하면됩니다. 대략적으로 다음은 다음과 같습니다

client.chat.completions.create를 사용하는 대신 indecte.beta.chat.pletions.parse method를 사용하고 있습니다. .parse ()는 채팅 완료의 새로운 메소드입니다. 구조화 된 출력을 위해 특별히 작성된 API. 이제, 구조화 된 출력으로 Reviews Sentiment Classifier를 다시 작성하여 모든 것을 정리해 봅시다. 먼저 필요한 수입을 만들고 Pydantic 모델, 시스템 프롬프트 및 프롬프트 템플릿을 정의합니다.

그런 다음 함수의 중요한 선은 response_format = sentimentResponse입니다. 이는 실제로 구조화 된 출력을 가능하게합니다. 리뷰 중 하나에서 테스트 해 봅시다 : 여기, 결과는 메시지 개체입니다 :

보시다시피, 우리는 감지 응답 클래스의 인스턴스를 얻었습니다. 이것은 우리가 .sentiment 속성을 사용하여 사전 대신 문자열로 정서에 액세스 할 수 있음을 의미합니다.

# List of hotel reviews
reviews = [
   "The room was clean and the staff was friendly.",
   "The location was terrible and the service was slow.",
   "The food was amazing but the room was too small.",
]
# Classify sentiment for each review and print the results
for review in reviews:
   sentiment = classify_sentiment(review)
   print(f"Review: {review}\nSentiment: {sentiment}\n")
복잡한 스키마를 정의하기위한 Pydantic 모델 중첩 경우에 따라 중첩 된 데이터와 관련된보다 복잡한 출력 구조를 정의해야 할 수도 있습니다. Pydantic을 사용하면 모델이 서로 안에 둥지를 틀어 다양한 사용 사례를 처리 할 수있는 복잡한 스키마를 만들 수 있습니다. 이것은 계층 적 데이터를 다루거나 복잡한 출력에 대한 특정 구조를 시행해야 할 때 특히 유용합니다. 이름, 연락처 세부 정보 및 주소 목록을 포함한 자세한 사용자 정보를 추출 해야하는 예를 고려해 봅시다. 각 주소에는 거리, 도시, 주 및 우편 번호 필드가 포함되어야합니다. 이것은 올바른 스키마를 구축하기 위해 둘 이상의 Pydantic 모델이 필요합니다.

1 단계 : Pydantic 모델을 정의하십시오 먼저, 우리는 주소 및 사용자 정보에 대한 Pydantic 모델을 정의합니다.

이 예에서 <:> :

주소는 주소의 구조를 정의하는 피기 틱 모델입니다. userInfo는 사용자 이름, 이메일 및 전화 번호의 필드와 함께 주소 개체 목록을 포함하는 Pydantic 모델입니다.

2 단계 : API 호출에서 중첩 된 Pydantic 모델을 사용하십시오. 다음으로, 우리는이 중첩 된 Pydantic 모델을 사용하여 OpenAI API 호출에서 출력 구조를 시행합니다.

샘플 텍스트는 완전히 읽을 수 없으며 주요 정보 사이에 공간이 부족합니다. 모델이 성공했는지 봅시다. 우리는 JSON 라이브러리를 사용하여 응답을 예측합니다.

보시다시피, 모델은 제공된 스키마를 기반으로 단일 사용자의 정보와 두 개의 별도 주소를 올바르게 캡처했습니다. 간단히 말해, Pydantic 모델을 중첩하여 계층 적 데이터를 처리하고 복잡한 출력에 대한 특정 구조를 시행하는 복잡한 스키마를 정의 할 수 있습니다. 구조화 된 출력으로 호출하는 기능 새로운 언어 모델의 광범위한 기능 중 하나는 기능 호출 (도구 호출이라고도 함)입니다. 이 기능은 언어 모델을 사용자 정의 된 기능에 연결하여 외부 세계에 효과적으로 (모델) 액세스 할 수 있습니다. 몇 가지 일반적인 예는 다음과 같습니다

실시간 데이터 검색 (예 : 날씨, 주가, 스포츠 점수) 계산 또는 데이터 분석 수행 데이터베이스 쿼리 또는 API 이미지 생성 또는 기타 미디어 언어 사이의 텍스트 번역 스마트 홈 장치 또는 IoT 시스템 제어 사용자 정의 비즈니스 로직 또는 워크 플로 실행
Review: The room was clean and the staff was friendly.
Sentiment: Positive
Review: The location was terrible and the service was slow.
Sentiment: Negative
Review: The food was amazing but the room was too small.
Sentiment: The sentiment of the review is neutral.
우리는 기능 호출이 어떻게 작동하는지에 대한 세부 사항을 다루지 않지만 OpenAi 기능 호출 자습서를 읽을 수 있습니다. 알아야 할 중요한 점은 구조화 된 출력을 사용하면 OpenAI 모델로 기능을 사용하는 것이 훨씬 쉬워진다는 것입니다. 과거에는 OpenAI 모델에 전달되는 기능은 복잡한 JSON 스키마를 작성해야하며 모든 기능 매개 변수를 유형 힌트로 요약해야합니다. 예는 다음과 같습니다.

<_> get_current_weather 함수는 두 개의 매개 변수가 있지만 JSON 스키마가 거대하고 수동으로 쓸 수 있도록 오류가 발생합니다.

이것은 Pydantic 모델을 다시 사용하여 구조화 된 출력으로 해결됩니다.
# List of hotel reviews
reviews = [
   "The room was clean and the staff was friendly.",
   "The location was terrible and the service was slow.",
   "The food was amazing but the room was too small.",
]
# Classify sentiment for each review and print the results
for review in reviews:
   sentiment = classify_sentiment(review)
   print(f"Review: {review}\nSentiment: {sentiment}\n")
먼저, 당신은 함수 자체와 그 논리를 씁니다. 그런 다음 예상 입력 매개 변수를 지정하는 Pydantic 모델로 다시 정의합니다. 그런 다음 Pydantic 모델을 호환 JSON 스키마로 변환하려면 pydantic_function_tool을 호출합니다.

요청의 일부로이 도구를 사용하는 방법은 다음과 같습니다.

우리는 Pydantic 모델을 호환 가능한 JSON 형식으로 전달하여 채팅 완료 API의 도구 매개 변수로 전달합니다. 그런 다음 쿼리에 따라 모델은 도구를 호출할지 여부를 결정합니다. 위의 예에서 우리의 쿼리는“도쿄의 날씨는 무엇입니까?”이므로, 우리는 반환 된 메시지 객체의 Tool_calls에서 호출을 볼 수 있습니다. 기억하십시오.이 모델은 get_weather 함수를 호출하지 않고 우리가 제공 한 Pydantic 스키마를 기반으로 인수를 생성합니다.

제공된 인수와 함께 함수를 호출하는 것은 우리에게 달려 있습니다.

모델이 함수에 대한 인수를 생성하고 동시에 호출하려면 AI 에이전트를 찾고 있습니다. 
Review: The room was clean and the staff was friendly.
Sentiment: Positive
Review: The location was terrible and the service was slow.
Sentiment: Negative
Review: The food was amazing but the room was too small.
Sentiment: The sentiment of the review is neutral.
우리는 당신이 관심이 있다면 별도의 Langchain 에이전트 튜토리얼을 가지고 있습니다. OpenAI 구조화 된 출력을 사용할 때 모범 사례 구조화 된 출력을 사용하는 동안 명심해야 할 모범 사례와 권장 사항이 많이 있습니다. 이 섹션에서는 그 중 일부를 간략하게 설명합니다.

Pydantic 모델을 사용하여 출력 스키마를 정의하십시오. 예상 출력 구조를 정의 할 수있는 깨끗하고 유형 안전 방법을 제공하므로

. 가장 정확한 결과를 얻으려면 스키마를 단순하고 구체적으로 유지하십시오.

적절한 데이터 유형 (str, int, float, bool, list, dict)을 사용하여 데이터를 정확하게 표현하십시오. 열거에 대한 문자 유형을 사용하여 필드에 대한 특정 허용 값을 정의합니다. 핸들 모델 거부. 새 .parse () 메소드를 사용하는 경우 메시지 객체에는 거부를 나타내는 새 .refusal 속성이 있습니다.
def classify_sentiment_with_structured_outputs(review):
   """Sentiment classifier with Structured Outputs"""
   ...
# Classify sentiment for each review with Structured Outputs
for review in reviews:
   sentiment = classify_sentiment_with_structured_outputs(review)
   print(f"Review: {review}\nSentiment: {sentiment}\n")

출력 :

Review: The room was clean and the staff was friendly.
Sentiment: {"sentiment":"positive"}
Review: The location was terrible and the service was slow.
Sentiment: {"sentiment":"negative"}
Review: The food was amazing but the room was too small.
Sentiment: {"sentiment":"neutral"}
6. 모델 출력 정밀도를 향상시키기 위해 Pydantic 모델의 각 필드에 대한 명확하고 간결한 설명을 제공하십시오.

이러한 관행은 응용 프로그램에서 구조화 된 출력을 가장 효과적으로 사용하는 데 먼 길을 갈 것입니다.

결론 이 튜토리얼에서는 새로운 OpenAI API 기능 인 구조화 된 출력으로 시작하는 방법을 배웠습니다. 우리는이 기능이 어떻게 언어 모델이 우리가 지정한 형식으로 출력을 생성하도록 강요하는지 보았습니다. 우리는 기능 호출과 함께 사용하는 방법을 배웠고 기능을 최대한 활용하기 위해 모범 사례를 탐색했습니다. 다음은 귀하의 이해를 향상시키기위한 몇 가지 관련 출처입니다

OpenAi API 코스 작업 OpenAi 기초 트랙 Langchain 코스를 사용하여 LLM 애플리케이션 개발 langchain vs. llamaindex : 상세한 비교 최상위 AI 인증

는 ai.get certified를 효과적이고 책임감있게 사용할 수 있음을 보여줍니다. 구조화 된 출력 faqs

구조화 된 출력과 어떻게 작동 하는가?

  • 기능 호출과 함께 구조화 된 출력을 사용할 수 있습니까?
  • 예, 구성된 출력은 기능 매개 변수의 프로세스를 단순화하기 위해 기능을 호출하는 데 사용될 수 있습니다. 출력.

    구조화 된 출력을 사용하는 데있어 어떤 이점이 있습니까?

    혜택은 일관된 응답 형식, 사후 처리에 대한 요구 감소, AI 애플리케이션에서의 개선 된 신뢰성, 기존 시스템과의 더 쉬운 통합이 포함됩니다. 출력?

    강력한 구조화 된 출력은 응답에서 AI의 유연성을 제한 할 수 있으며 출력에서 ​​원하는 세부 수준과 구조를 균형을 맞추기 위해 신중한 스키마 설계가 필요할 수 있습니다.

    위 내용은 OpenAI 구조화 된 출력을 시작합니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.