MedLM

MedLM은 의료 산업에 맞게 미세 조정된 기반 모델의 제품군입니다. Med-PaLM 2는 MedLM을 기반으로 Google 연구팀에서 개발된 텍스트 기반 모델 중 하나이며, 미국 의사 면허 시험(USMLE) 양식의 질문에 답할 수 있는 전문 응시자 수준에 도달한 최초의 AI 시스템이었습니다. 이러한 모델의 개발은 의학적 질문에 대한 답변과 요약본 작성과 같은 특정 고객 요구에 따라 이뤄졌습니다.

MedLM 모델 카드

MedLM 모델 카드에는 MedLM의 사용 목적, 데이터 개요, 안전 정보와 같은 모델 세부정보가 요약되어 있습니다. 다음 링크를 클릭하여 MedLM 모델 카드의 PDF 버전을 다운로드합니다.

MedLM 모델 카드 다운로드

사용 사례

  • 질의 응답: 의료와 관련된 질문에 대한 임시 답변을 텍스트로 제공합니다.
  • 요약: 원본 텍스트에서 관련 정보를 통합하는 방문 후 요약 또는 기록 및 물리적 검사 메모와 같은 짧은 버전의 문서를 작성합니다.

텍스트 프롬프트 설계에 대한 자세한 내용은 텍스트 프롬프트 설계를 참조하세요.

HTTP 요청

MedLM-medium(medlm-medium):

POST https://us-central1-aiplatform.googleapis.com/v1/projects/{PROJECT_ID}/locations/us-central1/publishers/google/models/medlm-medium:predict

MedLM-large(medlm-large):

POST https://us-central1-aiplatform.googleapis.com/v1/projects/{PROJECT_ID}/locations/us-central1/publishers/google/models/medlm-large:predict

자세한 내용은 predict 메서드를 참조하세요.

모델 버전

MedLM은 다음 모델을 제공합니다.

  • MedLM-medium(medlm-medium)
  • MedLM-large(medlm-large)

다음 표에는 사용 가능한 정식 모델 버전이 포함되어 있습니다.

medlm-medium 모델 출시일
medlm-medium 2023년 12월 13일
medlm-large 모델 출시일
medlm-large 2023년 12월 13일

MedLM-medium 및 MedLM-large는 엔드포인트가 구분되어 있으며 사용 사례에 있어서 추가적인 유연성을 고객들에게 제공합니다. MedLM-medium은 고객들에게 더 나은 처리량을 제공하며 보다 최신 데이터를 포함합니다. MedLM-large는 이전 단계의 모델과 동일합니다. 두 모델 모두 제품 수명 주기에 따라 계속 업데이트될 예정입니다. 이 페이지에서 "MedLM"은 두 모델을 모두 의미합니다.

자세한 내용은 모델 버전 및 수명 주기를 참조하세요.

MedLM 안전 필터 및 속성

MedLM API를 통해 처리된 콘텐츠는 "유해한 카테고리"와 민감하다고 간주될 수 있는 주제가 포함된 안전 속성 목록에 대해 평가됩니다. "저는 언어 모델일 뿐이기 때문에 그것에 대해서는 도와드릴 수 없습니다"와 같은 폴백 응답이 표시되면 프롬프트 또는 응답으로 안전 필터가 트리거되었다는 의미입니다.

안전 기준점

Vertex AI Studio를 사용할 때는 조정 가능한 안전 필터 기준점을 사용해서 유해할 수 있는 응답이 표시될 가능성을 확인할 수 있습니다. 모델 응답은 괴롭힘, 증오심 표현, 위험한 콘텐츠 또는 음란물을 포함할 확률에 따라 차단됩니다. 안전 필터 설정은 Vertex AI Studio의 프롬프트 필드 오른쪽에 있습니다. block most, block some, block few 등 3가지 옵션 중에서 선택할 수 있습니다.

콘솔 이미지

신뢰도 및 심각도 기준점 테스트

Google의 안전 필터를 테스트하고 비즈니스에 맞는 신뢰도 기준을 정의할 수 있습니다. 이러한 기준점을 사용하면 Google의 사용 정책 또는 서비스 약관을 위반하는 콘텐츠를 감지하고 적절한 조치를 취할 수 있습니다.

신뢰도 점수는 예측일 뿐이므로 신뢰성 또는 정확성 점수를 의존해서는 안 됩니다. Google은 비즈니스 결정을 위해 이러한 점수를 해석하거나 사용할 책임이 없습니다.

이 기술을 안전하고 책임감 있게 사용하려면 또한 내장된 기술적 보호 장치 외에도 사용 사례, 사용자, 비즈니스 컨텍스트에 따라 기타 위험 요소를 고려하는 것이 중요합니다.

다음 조치를 취하는 것이 좋습니다.

  1. 애플리케이션의 보안 위험을 평가합니다.
  2. 안전 위험을 완화할 수 있는 조정을 고려합니다.
  3. 사용 사례에 적합한 안전 테스트를 수행합니다.
  4. 사용자 피드백을 요청하고 콘텐츠를 모니터링합니다.

자세한 내용은 책임감 있는 AI에 대한 Google 권장사항을 참조하세요.

요청 본문

{
  "instances": [
    {
      "content": string
    }
  ],
  "parameters": {
    "temperature": number,
    "maxOutputTokens": integer,
    "topK": integer,
    "topP": number
  }
}

medlm-mediummedlm-large 모델에 다음 매개변수를 사용합니다. 자세한 내용은 텍스트 프롬프트 설계를 참조하세요.

매개변수 설명 사용 가능한 값

content

모델 응답을 생성하는 텍스트 입력입니다. 프롬프트에 프리앰블, 질문, 제안, 안내, 예시가 포함될 수 있습니다. 텍스트

temperature

온도(temperature)는 응답 생성 중 샘플링에 사용되며 topPtopK가 적용될 때 발생합니다. 온도(temperature)는 토큰 선택의 무작위성 수준을 제어합니다. 온도(temperature)가 낮을수록 자유롭거나 창의적인 답변과 거리가 먼 응답이 필요한 프롬프트에 적합하고, 온도(temperature)가 높을수록 보다 다양하거나 창의적인 결과로 이어질 수 있습니다. 온도(temperature)가 0이면 확률이 가장 높은 토큰이 항상 선택됩니다. 이 경우 특정 프롬프트에 대한 응답은 대부분 확정적이지만 여전히 약간의 변형이 가능합니다.

모델이 너무 일반적이거나, 너무 짧은 응답을 반환하거나 모델이 대체 응답을 제공할 경우에는 온도(temperature)를 높여보세요.

0.0–1.0

Default: 0.2

maxOutputTokens

응답에서 생성될 수 있는 토큰의 최대 개수입니다. 토큰은 약 4자(영문 기준)입니다. 토큰 100개는 단어 약 60~80개에 해당합니다.

응답이 짧을수록 낮은 값을 지정하고 잠재적으로 응답이 길면 높은 값을 지정합니다.

medlm-medium의 경우 1–8192

medlm-large의 경우 1–1024

topK

Top-K는 모델이 출력용 토큰을 선택하는 방식을 변경합니다. Top-K가 1이면 선택된 토큰이 모델의 어휘에 포함된 모든 토큰 중에서 가장 확률이 높다는 의미입니다(그리디 디코딩이라고도 함). 반면에 Top-K가 3이면 온도(temperature)를 사용하여 가장 확률이 높은 3개 토큰 중에서 다음 토큰이 선택된다는 의미입니다.

각 토큰 선택 단계에서 확률이 가장 높은 Top-K 토큰이 샘플링됩니다. 그런 다음 Top-P를 기준으로 토큰을 추가로 필터링하고 온도(temperature) 샘플링을 사용하여 최종 토큰을 선택합니다.

임의성이 낮은 응답에 낮은 값을 지정하고 임의성이 높은 응답에 높은 값을 지정합니다.

1–40

Default: 40

topP

Top-P는 모델이 출력용 토큰을 선택하는 방식을 변경합니다. 토큰은 확률의 합이 Top-P 값과 같아질 때까지 확률이 가장 높은 것부터(Top-K 참조) 가장 낮은 것까지 선택됩니다. 예를 들어 토큰 A, B, C의 확률이 0.3, 0.2, 0.1이고 Top-P 값이 0.5이면 모델이 온도(temperature)를 사용해서 다음 토큰으로 A 또는 B를 선택하고 C는 후보에서 제외합니다.

임의성이 낮은 응답에 낮은 값을 지정하고 임의성이 높은 응답에 높은 값을 지정합니다.

0.0–1.0

Default: 0.8

샘플 요청

MedLM API를 사용할 때는 프롬프트 엔지니어링을 사용하는 것이 중요합니다. 예를 들어 각 프롬프트의 시작 지점에서 적절한 태스크별 지침을 제공하는 것이 좋습니다. 자세한 내용은 프롬프트 설계 소개를 참조하세요.

REST

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: 프로젝트 ID
  • MEDLM_MODEL: MedLM 모델(medlm-medium 또는 medlm-large)

HTTP 메서드 및 URL:

POST https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/MEDLM_MODEL:predict

JSON 요청 본문:

{
  "instances": [
    {
      "content": "Question: What causes you to get ringworm?"
    }
  ],
  "parameters": {
    "temperature": 0,
    "maxOutputTokens": 256,
    "topK": 40,
    "topP": 0.95
  }
}

요청을 보내려면 다음 옵션 중 하나를 선택합니다.

curl

요청 본문을 request.json 파일에 저장합니다. 터미널에서 다음 명령어를 실행하여 현재 디렉터리에 이 파일을 만들거나 덮어씁니다.

cat > request.json << 'EOF'
{
  "instances": [
    {
      "content": "Question: What causes you to get ringworm?"
    }
  ],
  "parameters": {
    "temperature": 0,
    "maxOutputTokens": 256,
    "topK": 40,
    "topP": 0.95
  }
}
EOF

그런 후 다음 명령어를 실행하여 REST 요청을 전송합니다.

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/MEDLM_MODEL:predict"

PowerShell

요청 본문을 request.json 파일에 저장합니다. 터미널에서 다음 명령어를 실행하여 현재 디렉터리에 이 파일을 만들거나 덮어씁니다.

@'
{
  "instances": [
    {
      "content": "Question: What causes you to get ringworm?"
    }
  ],
  "parameters": {
    "temperature": 0,
    "maxOutputTokens": 256,
    "topK": 40,
    "topP": 0.95
  }
}
'@  | Out-File -FilePath request.json -Encoding utf8

그런 후 다음 명령어를 실행하여 REST 요청을 전송합니다.

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/MEDLM_MODEL:predict" | Select-Object -Expand Content
 

응답 본문

{
  "predictions": [
    {
      "content": string,
      "citationMetadata": {
        "citations": [
          {
            "startIndex": integer,
            "endIndex": integer,
            "url": string,
            "title": string,
            "license": string,
            "publicationDate": string
          }
        ]
      },
      "logprobs": {
        "tokenLogProbs": [ float ],
        "tokens": [ string ],
        "topLogProbs": [ { map<string, float> } ]
      },
      "safetyAttributes": {
        "categories": [ string ],
        "blocked": boolean,
        "scores": [ float ],
        "errors": [ int ]
      }
    }
  ],
  "metadata": {
    "tokenMetadata": {
      "input_token_count": {
        "total_tokens": integer,
        "total_billable_characters": integer
      },
      "output_token_count": {
        "total_tokens": integer,
        "total_billable_characters": integer
      }
    }
  }
}
응답 요소 설명
content 입력 텍스트에서 생성된 결과입니다.
categories 생성된 콘텐츠와 연결된 안전 속성 범주의 표시 이름입니다. 순서는 점수와 일치합니다.
scores 각 카테고리의 신뢰도 점수입니다. 값이 높을수록 신뢰도가 높습니다.
blocked 모델의 입력 또는 출력이 차단되었는지를 나타내는 플래그입니다.
errors 입력 또는 출력이 차단된 이유를 식별하는 오류 코드입니다. 오류 코드 목록은 안전 필터 및 속성을 참조하세요.
startIndex 인용이 시작되는 예측 출력의 인덱스입니다(포함). 0보다 크거나 같고 end_index보다 작아야 합니다.
endIndex 인용이 끝나는 예측 출력의 인덱스입니다(제외). start_index보다 크고 len(output)보다 작아야 합니다.
url 이 인용과 연결된 URL입니다. 제공된 경우 이 URL이 해당 인용의 소스 웹페이지로 연결됩니다. 가능한 URL에는 뉴스 웹사이트, GitHub 저장소 등이 포함됩니다.
title 이 인용과 연결된 제목입니다. 제공된 경우 이 인용의 소스 제목을 나타냅니다. 가능한 제목에는 뉴스 제목, 도서 제목 등이 포함됩니다.
license 인용과 연결된 라이선스입니다. 제공된 경우 이 인용의 소스에 대한 라이선스를 나타냅니다. 가능한 라이선스에는 MIT 라이선스와 같은 코드 라이선스가 포함됩니다.
publicationDate 이 인용과 연결된 게시 날짜입니다. 제공된 경우 이 인용의 소스가 게시된 날짜를 나타냅니다. 가능한 형식은 YYYY, YYYY-MM, YYYY-MM-DD입니다.
input_token_count 입력 토큰의 수입니다. 모든 프롬프트, 프리픽스, 서픽스 간의 총 토큰 수입니다.
output_token_count 출력 토큰의 수입니다. 모든 예측에서 content의 총 토큰 수입니다.
tokens 샘플링된 토큰입니다.
tokenLogProbs 샘플링된 토큰의 로그 확률입니다.
topLogProb 각 단계에서 확률이 가장 높은 후보 토큰과 해당하는 로그 확률입니다.
logprobs `logprobs` 매개변수 결과입니다. `candidates`에 1:1 매핑됩니다.

샘플 응답

{
  "predictions": [
    {
      "citationMetadata": {
        "citations": []
      },
      "content": "\n\nAnswer and Explanation:\nRingworm is a fungal infection of the skin that is caused by a type of fungus called dermatophyte. Dermatophytes can live on the skin, hair, and nails, and they can be spread from person to person through direct contact or through contact with contaminated objects.\n\nRingworm can cause a variety of symptoms, including:\n\n* A red, itchy rash\n* A raised, circular border\n* Blisters or scales\n* Hair loss\n\nRingworm is most commonly treated with antifungal medications, which can be applied to the skin or taken by mouth. In some cases, surgery may be necessary to remove infected hair or nails.",
      "safetyAttributes": {
        "scores": [
          1
        ],
        "blocked": false,
        "categories": [
          "Health"
        ]
      }
    }
  ],
  "metadata": {
    "tokenMetadata": {
      "outputTokenCount": {
        "totalTokens": 140,
        "totalBillableCharacters": 508
      },
      "inputTokenCount": {
        "totalTokens": 10,
        "totalBillableCharacters": 36
      }
    }
  }
}

생성형 AI 모델에서 응답 스트리밍

매개변수는 API에 대한 스트리밍 요청 또는 비스트리밍 요청에 대해 모두 동일합니다.

REST API를 사용하여 샘플 코드 요청 및 응답을 보려면 REST API 사용 예시를 참조하세요.

Python용 Vertex AI SDK를 사용하여 샘플 코드 요청 및 응답을 보려면 Python용 Vertex AI SDK 사용 예시를 참조하세요.