Python 변환의 공통 채팅 완료
GenericChatCompletionRequest와 GenericChatCompletionLanguageModel을 사용하면 모델별 클라이언트를 바꾸지 않고 공통 텍스트 대화를 보낼 수 있습니다. 모델은 변환 입력에서 선택하고 요청에는 메시지와 생성 매개변수를 넣습니다.
저장소와 모델 입력
저장소에 palantir_models를 추가합니다. MODEL_RID에는 접근할 수 있는 모델의 전체 RID를 넣고 출력 데이터셋 경로를 실제 값으로 바꿉니다. 다음은 경량 변환이며 예시 프롬프트에 대해 실제 반환한 completion을 기록합니다. CBAC 환경에서는 출력 데이터셋을 미리 생성합니다.
import pandas as pd
from language_model_service_api.languagemodelservice_api_completion_v3 import (
DialogChatMessage, DialogRole, GenericChatCompletionRequest,
)
from palantir_models.models import GenericChatCompletionLanguageModel
from palantir_models.transforms import GenericChatCompletionLanguageModelInput
from transforms.api import Output, transform
MODEL_RID = "YOUR_FULL_MODEL_RID"
@transform.using(
model=GenericChatCompletionLanguageModelInput(MODEL_RID),
output=Output("/Models/data/text_completion"),
)
def compute(model: GenericChatCompletionLanguageModel, output):
request = GenericChatCompletionRequest(
messages=[
DialogChatMessage(
role=DialogRole.SYSTEM,
content="Answer questions in one sentence.",
),
DialogChatMessage(
role=DialogRole.USER,
content="Why is the sky blue?",
),
],
max_tokens=256,
)
response = model.create_chat_completion(request)
output.write_pandas(pd.DataFrame({"completion": [response.completion]}))
GenericChatCompletionLanguageModelInput이 compute에 GenericChatCompletionLanguageModel을 제공합니다. 같은 입력 클래스와 요청 타입을 @transform(...)의 Spark 변환에서도 사용할 수 있습니다. 다른 클라이언트 종류는 언어 모델 입력 클래스에 있습니다.
GenericChatCompletionRequest
요청, 메시지와 역할 타입은 language_model_service_api.languagemodelservice_api_completion_v3에서 가져옵니다.
| Python 인자 | 자료형 | 필수 여부와 동작 |
|---|---|---|
| messages | list[DialogChatMessage] | 필수입니다. 순서대로 전달할 대화입니다. |
| temperature | float | 선택입니다. 지원하는 모델에서 샘플링 무작위성을 조절합니다. 값 범위와 동작은 선택한 모델에 따라 다릅니다. |
| stop_sequences | list[str] | 선택입니다. 지원하는 모델에서 지정 문자열을 만나면 생성을 멈춥니다. |
| max_tokens | int | 선택입니다. 이번 요청에서 생성할 출력 토큰의 최대 수입니다. 입력 토큰은 포함하지 않으며 모델 한도를 따릅니다. |
선택 인자를 생략할 수 있습니다. 모든 모델에 공통인 기본값이나 지원 값 집합은 없으며 서비스와 모델이 생략한 값의 동작을 정합니다. 필수 messages부터 구성하고 해당 모델이 지원하는 매개변수만 추가합니다.
Python의 stop_sequences와 max_tokens는 직렬화한 요청에서 각각 stopSequences와 maxTokens입니다. 이 요청은 텍스트 메시지와 위 생성 매개변수만 정의하며 이미지 입력, 도구 호출 또는 구조화된 출력 스키마를 정의하지 않습니다.
메시지 역할과 순서
DialogChatMessage의 role은 DialogRole.SYSTEM, DialogRole.USER 또는 DialogRole.ASSISTANT이며 content는 문자열입니다.
대화는 SYSTEM 또는 USER로 시작합니다. SYSTEM을 사용한다면 첫 메시지에만 두고 그다음은 USER로 이어야 합니다. 이후 USER와 ASSISTANT를 번갈아 배치합니다. 예를 들어 SYSTEM, USER, ASSISTANT, USER 순서로 이전 대화와 새 질문을 함께 전달할 수 있습니다. 이전 차례를 모델이 문맥으로 사용하게 하려면 messages에 포함합니다.
GenericChatCompletionResponse
create_chat_completion은 다음 속성을 가진 응답을 반환합니다.
| Python 속성 | 자료형과 의미 |
|---|---|
| completion | str 생성 텍스트입니다. 답변은 이 필드에서 읽습니다. |
| token_usage | TokenUsage 객체이며 입력, 출력 토큰 수와 모델 문맥 창 한도를 제공합니다. |
토큰 사용량의 prompt_tokens는 입력 토큰, completion_tokens는 출력 토큰입니다. 응답의 token_usage.max_tokens는 입력과 출력을 합한 모델 문맥 창 한도이며 요청의 max_tokens 출력 한도와 의미가 다릅니다.
이 응답에는 GptChatCompletionResponse의 choices 목록 대신 completion 필드가 있습니다.
등록 모델과 문제 확인
GenericChatCompletionLanguageModelInput에 모델 RID를 지정합니다. GenericChatCompletionRequest에는 모델 또는 제공자 선택 필드가 없습니다. 등록 모델은 ri.language-model-service..registered-model.<id> 형태의 전체 RID를 사용하며 실제 등록에서 정한 엔드포인트로 요청합니다.
사용자 정의 모델 연결이 예상대로 동작하지 않으면 다음 조건을 확인합니다.
- 입력에 의도한 전체 모델 RID를 넣었고 해당 모델에 접근할 수 있어야 합니다.
- 메시지 역할, 순서와 content가 위 계약을 따라야 합니다.
- temperature, stop_sequences와 max_tokens 각각을 선택한 모델이 지원해야 합니다.
- 생성된 답변은 response.completion에서 읽습니다.
등록 설정과 지원하는 연결 방식은 AIP 모델 등록에서 설명합니다.