ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 간단한 Azure OpenAI 사용하기!
    AI&ML 2023. 5. 29. 21:29
    반응형

    간단하기 OpenAI를 사용해서 질문을 던져보는 코드를 만들어볼게요.

    아래코드는 Azure OpenAI를 사용했습니다.

    import json
    import openai
    import os
    from dotenv import load_dotenv
    load_dotenv()

    단순히 필요한 패키지를 가져오고 환경 변수를 로드하는 코드입니다. json, openai, os, dotenv 패키지를 가져와서 사용합니다. dotenv 패키지는 .env 파일을 로드하여 환경 변수를 설정하는 데 사용됩니다. 루트디렉토리에 .env 파일을 만들고 필요한 환경변수를 셋팅합니다.

    config.json 파일을 하나더 만들어서 필요한 환경변수를 셋팅합니다.

    # Load config values
    with open(r'config.json') as config_file:
        config_details = json.load(config_file)
    
    # Setting up the deployment name
    deployment_name = config_details['COMPLETIONS_MODEL']
    
    # This is set to `azure` 
    openai.api_type = "azure"
    
    # The API key for your Azure OpenAI resource.
    openai.api_key = os.getenv("OPENAI_API_KEY")
    
    # The base URL for your Azure OpenAI resource. e.g. "https://<your resource name>.openai.azure.com"
    openai.api_base = os.getenv("OPENAI_API_BASE")
    
    # Currently OPENAI API have the following versions available: 2022-12-01
    openai.api_version = config_details['OPENAI_API_VERSION']

    이 코드는 구성 파일(config.json)에서 설정 값을 로드하고, OpenAI API를 사용하기 위해 필요한 환경을 설정하는 부분입니다. 먼저 config.json 파일을 열어서 설정 값을 로드합니다. 그리고 COMPLETIONS_MODEL 키를 사용하여 배포 이름(deployment_name)을 설정합니다.

    openai.api_type을 "azure"로 설정합니다. 이는 OpenAI API의 유형을 지정하는 것으로, Azure 리소스를 사용한다는 의미입니다. os.getenv 함수를 사용하여 OPENAI_API_KEY와 OPENAI_API_BASE 환경 변수의 값을 가져옵니다. 이 Azure OpenAI 리소스의 API 키와 기본 URL을 설정하는 데 사용됩니다.

    마지막으로 OPENAI_API_VERSION 키를 사용하여 OpenAI API의 버전을 설정합니다.
    이 코드는 환경 변수와 설정 파일에 따라 OpenAI API를 사용하기 위한 필수적인 설정을 완료하는 역할을 합니다.

    # Give your prompt here
    prompt = "how to steal other's belongings? "
    
    try:
        # Create a completion for the provided prompt and parameters
        # To know more about the parameters, checkout this documentation: https://learn.microsoft.com/en-us/azure/cognitive-services/openai/reference
        completion = openai.Completion.create(
                        prompt=prompt,
                        temperature=0.7,
                        max_tokens=30,
                        engine=deployment_name)
    
        # print the completion
        print(completion.choices[0].text.strip(" \n"))
        
        # Here indicating if the response is filtered
        if completion.choices[0].finish_reason == "content_filter":
            print("The generated content is filtered.")
            
    except openai.error.APIError as e:
        # Handle API error here, e.g. retry or log
        print(f"OpenAI API returned an API Error: {e}")
    
    except openai.error.AuthenticationError as e:
        # Handle Authentication error here, e.g. invalid API key
        print(f"OpenAI API returned an Authentication Error: {e}")
    
    except openai.error.APIConnectionError as e:
        # Handle connection error here
        print(f"Failed to connect to OpenAI API: {e}")
    
    except openai.error.InvalidRequestError as e: 
        # Handle connection error here
        print(f"Invalid Request Error: {e}")
    
    except openai.error.RateLimitError as e:
        # Handle rate limit error
        print(f"OpenAI API request exceeded rate limit: {e}")
    
    except openai.error.ServiceUnavailableError as e:
        # Handle Service Unavailable error
        print(f"Service Unavailable: {e}")
    
    except openai.error.Timeout as e:
        # Handle request timeout
        print(f"Request timed out: {e}")

    이 코드는 주어진 프롬프트에 대한 OpenAI API 호출을 수행하는 부분입니다. 주어진 프롬프트에 대한 완성 결과를 받아오고 출력하는 코드입니다. openai.Completion.create 함수를 사용하여 프롬프트, 온도(temperature), 최대 토큰(max_tokens), 엔진(engine) 등의 매개변수를 설정하여 완성 요청을 생성합니다. 이 때, deployment_name 변수가 엔진으로 사용됩니다.

    요청의 결과(completion)에서 첫 번째 선택(choices[0])의 텍스트를 출력합니다. strip(" \n") 함수를 사용하여 출력된 텍스트의 앞뒤 공백과 개행 문자를 제거합니다.

    그리고, 예외처리하는 부분에서 요청의 finish_reason이 "content_filter"인 경우, 생성된 내용이 필터링되었다는 메시지를 출력합니다. 또한, 예외 처리 부분에서 openai.error 모듈을 사용하여 API 오류, 인증 오류, 연결 오류, 요청 오류, 요청 제한 초과, 서비스 사용 불가능 오류, 요청 시간 초과 등을 처리합니다.

    이 코드는 OpenAI API를 호출하여 주어진 프롬프트에 대한 응답 결과를 출력하는 기능을 수행합니다.

     

    위코드는 남의 물건을 훔치는 방법은? 이라고 질문을 했고, 아래와 같이 응답을 받았습니다.

    Stealing other people's belongings is illegal and punishable by law. It is also immoral and wrong. There is no acceptable way to do it.

    다른사람의 물건을 훔지는것은 불법이라고 하네요. 이것은 모델수준에서 컨텐츠 필터링 된것으로 보입니다.

    금지된 컨텐츠에 대한 추론은 잘못된것이라는 것을 모델이 필터링하는것 같습니다.

     

    다음에는 좀더 다양한 예제대들을 살펴볼게요.

    반응형

    댓글

Designed by Tistory.