프로그래밍 방식으로 파운데이션 모델 추론하기 ( 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='')
{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)