사고 모드 사용

사고 모드는 최종 응답을 생성하기 전에 모델에 추론 프로세스를 출력하도록 프롬프트를 표시합니다. 사고 모드는 모델의 함수 호출 정확도를 개선하고 수학, 문제 해결, 기타 복잡한 추론 작업에 적합합니다.

사고 모드가 사용 설정되면 모델 출력이 두 부분으로 나뉩니다.

  1. 사고 과정: 모델이 취하는 내부 추론 또는 계획 단계입니다.
  2. 응답: 사용자를 위해 생성된 최종 답변입니다.

기본 요건

사고 모드는 Gemini Nano V4 이상을 실행하는 기기에서 작동합니다. AICore 지원 기기에서 개발자 프리뷰 프로그램을 통해 사고 모드를 테스트할 수 있습니다.

사고 모드 사용 설정

사고 모드를 사용하려면 generateContentRequest 빌더 함수에서 enableThinking 플래그를 true로 설정하여 선택해야 합니다.

val request = generateContentRequest {
    text("Solve this complex riddle: ...")
    enableThinking = true // Enable thinking mode for Gemini Nano V4
}

사고 액세스

ML Kit SDK는 스트리밍 구현을 사용하는지 아니면 비스트리밍 구현을 사용하는지에 따라 모델의 응답에 앞서 사고에 액세스하는 여러 방법을 제공합니다.

비스트리밍 모드

표준 비스트리밍 호출에서 추론 프로세스는 전체 응답의 일부로 반환됩니다. GenerateContentResponse 객체의 Candidate 객체 목록이 포함된 thoughtProcess 속성을 사용하여 이 프로세스에 액세스할 수 있습니다.

try {
    val response = generativeModel.generateContent(request)
    
    // 1. Access the main response
    val answer = response.candidates.firstOrNull()?.text
    println("Final Answer: $answer")
    
    // 2. Access the separated thought process
    println("Thought Process:")
    response.thoughtProcess.forEach { thoughtCandidate ->
        print(thoughtCandidate.text)
    }
} catch (e: GenAiException) {
    // Handle SDK-specific exceptions
}

스트리밍 모드

실시간 피드백을 지원하기 위해 StreamingCallback 인터페이스가 onNewThought 메서드를 포함하도록 업데이트되었습니다. 이렇게 하면 모델에서 생성될 때 앱이 스트리밍 사고 청크를 처리할 수 있습니다.

val callback = object : StreamingCallback {
    override fun onNewText(additionalText: String) {
        // Called for regular response chunks
        print(additionalText)
    }

    override fun onNewThought(additionalThought: String) {
        // Called for thought chunks before final text arrives
        // Update a separate reasoning UI or status indicator
        print("[Thinking: $additionalThought]")
    }
}

try {
    generativeModel.generateContent(request, callback)
} catch (e: GenAiException) {
    // Handle exception
}

권장사항

사고 모드를 사용할 때 참조할 만한 가이드라인은 다음과 같습니다.

  • UI 표시기: 추론 단계를 생성하는 데 시간이 걸릴 수 있으므로 스트리밍 모드에서 사고 또는 '사고' 표시기를 표시하면 모델이 활성 상태임을 사용자에게 보여주어 인지된 성능을 크게 개선할 수 있습니다.
  • 선택적 구현: 최종 사용자에게 원시 추론을 노출하지 않으려면 thoughtProcess 필드를 무시하거나 onNewThought 구현을 생략하면 됩니다. onNewThought 메서드에는 이전 버전과의 호환성을 보장하는 데 도움이 되는 기본 빈 구현이 있습니다.

자세한 도움말은 Gemma의 사고 모드를 참고하세요. 현재 AICore에서는 다중 턴 대화가 지원되지 않습니다.