프로그래밍 방식으로 파운데이션 모델 추론하기 ( Python )

Python 라이브러리를 사용하여 IBM watsonx.ai 에서 프로그래밍 방식으로 기초 모델을 프롬프트할 수 있습니다.

중단 예정: 2.3.1 부터 텍스트 생성 API는 사용 중단 예정이며, 향후 제거될 예정입니다.

Prompt Lab 에서 프롬프트를 생성한 후, 해당 프롬프트를 노트북으로 저장하고 나중에 편집할 수 있습니다. 생성된 노트북을 시작점으로 삼는 것은 자격 증명 및 프로젝트 ID를 가져오는 등 초기 설정 단계를 자동으로 처리해 주기 때문에 유용합니다.

또는 watsonx.ai 에서 새로 생성한 노트북에서 파운데이션 모델을 직접 사용할 수도 있습니다.

자세한 내용은 Python 라이브러리의 watsonx.ai 를 ModelInference 클래스 참조하십시오.

샘플 노트북

watsonx.ai에서 사용 가능한 다양한 기초 모델을 프롬프트하는 샘플 노트북을 찾으려면 Python 샘플 노트북을 참조하십시오.

기초 모델 프롬프트

기초 모델을 프롬프트하기 전에 watsonx.ai에서 추론에 사용할 수 있는 기초 모델의 목록을 가져오십시오. 자세한 정보는 사용 가능한 기초 모델에 대한 정보 가져오기를 참조하십시오.

다음 샘플 코드는 각 메소드에서 생성되는 출력 유형을 비교할 수 있도록 다른 메소드를 사용하여 flan-t5-xxl-11b 모델을 프롬프트하는 방법을 보여줍니다.

텍스트 스트림을 생성하는 방법을 보여주는 예제에만 프롬프트를 위한 모델 매개변수가 포함되어 있지만 모든 메소드에 대한 매개변수를 지정할 수 있습니다. 이 validate=False 매개변수는 모델 ID가 유효한지, 그리고 사용 가능한 파운데이션 모델을 참조하는지 확인하는 단계를 건너뛰어 요청 속도를 높여줍니다.

기초 모델을 프롬프트하기 위한 샘플 Python 코드

import json
from ibm_watsonx_ai import APIClient
from ibm_watsonx_ai.foundation_models import ModelInference
from ibm_watsonx_ai.metanames import GenTextParamsMetaNames as GenParams
from ibm_watsonx_ai.foundation_models.utils.enums import DecodingMethods

my_credentials = Credentials(
    username="jdoe",
    api_key= {my-API-key},
    url="https://cpd-cpd-instance.apps.example.com",
    instance_id="openshift",
    version="5.1"
)

client = APIClient(my_credentials)

gen_parms = {
    GenParams.DECODING_METHOD: DecodingMethods.SAMPLE,
    GenParams.MAX_NEW_TOKENS: 100
}
model_id = client.foundation_models.TextModels.FLAN_T5_XXL
project_id = {my-project-ID}
space_id = None
verify = False

model = ModelInference(
  model_id=model_id,
  credentials=my_credentials,
  params=gen_parms,
  project_id=project_id,
  space_id=space_id,
  verify=verify,
)

prompt_txt = "In today's sales meeting, we "
gen_parms_override = gen_parms = {
    GenParams.DECODING_METHOD: DecodingMethods.SAMPLE,
    GenParams.MAX_NEW_TOKENS: 50
}
# GENERATE

generated_response = model.generate(prompt=prompt_txt, params=gen_parms_override)

print("Output from generate() method:")
print(json.dumps(generated_response, indent=2))

# GENERATE TEXT

generated_text_response = model.generate_text(prompt=prompt_txt, params=gen_parms_override)

print("Output from generate_text() method:")
print(generated_text_response)

# GENERATE STREAM

gen_stream_params = {
  GenParams.DECODING_METHOD: DecodingMethods.GREEDY,
  GenParams.TEMPERATURE: 0.5,
  GenParams.MIN_NEW_TOKENS: 10,
  GenParams.MAX_NEW_TOKENS: 20
}

print("Output from generate_text_stream() method:")
stream_response = model.generate_text_stream(prompt=prompt_txt, params=gen_stream_params)

for chunk in stream_response:
  print(chunk, end='')
참고:URL 및 와 {my-project-ID}{my-API-key} 변수를 https://cpd-cpd-instance.apps.example.com 해당 배포 환경에 맞는 유효한 값으로 대체하십시오.

generate () 메소드의 출력:

{
  "model_id": "google/flan-t5-xxl",
  "created_at": "2023-07-27T03:40:17.575Z",
  "results": [
    {
      "generated_text": "will discuss the new product line.",
      "generated_token_count": 8,
      "input_token_count": 10,
      "stop_reason": "EOS_TOKEN"
    }
  ],
  ...
}

generate_text () 메소드의 출력:

will discuss the new product line.

generate_text_stream () 메소드의 출력:

will discuss the new product line. Let's start with marketing plans

유해한 컨텐츠 제거

기초 모델에 프롬프트를 제출하면 기본적으로 증오, 남용 및 욕설 (HAP) 필터 및 PII (Personally Identifiable Information) 필터가 사용 안함으로 설정됩니다. API에서 moderations 필드를 사용하여 이를 사용으로 설정하고 HAP 필터의 민감도를 지정할 수 있습니다.

필터 작동 방법에 대한 자세한 정보는 모델 입력 및 출력에서 유해한 언어 제거를 참조하십시오.

Python 라이브러리를 사용할 때 기본 설정이 적용된 가드레일 필터를 사용하려면, 요청에 다음 매개변수를 포함하십시오:

response = model.generate(prompt,guardrails=True)

다음 코드 예제는 필터를 활성화하고 구성하는 방법을 보여줍니다:

guardrails_hap_params = {
  GenTextModerationsMetaNames.INPUT: False,
  GenTextModerationsMetaNames.THRESHOLD: 0.45
}
guardrails_pii_params = {
  GenTextModerationsMetaNames.INPUT: False,
  GenTextModerationsMetaNames.OUTPUT: True,
  GenTextModerationsMetaNames.MASK: {"remove_entity_value": True}
}

response = model.generate(prompt,
  guardrails=True,
  guardrails_hap_params=guardrails_hap_params,
  guardrails_pii_params=guardrails_pii_params)