Gemini API를 사용하여 텍스트 생성

Gemini API는 텍스트, 이미지, 동영상, 오디오를 입력으로 제공하면 텍스트 출력을 생성할 수 있습니다.

이 가이드에서는 generateContentstreamGenerateContent 메서드를 사용하여 텍스트를 생성하는 방법을 보여줍니다. Gemini의 비전 및 오디오 기능을 사용하는 방법을 자세히 알아보려면 Vision오디오 가이드를 참고하세요.

시작하기 전에: 프로젝트 및 API 키 설정

Gemini API를 호출하기 전에 프로젝트를 설정하고 API 키를 구성해야 합니다.

텍스트 전용 입력에서 텍스트 생성

Gemini API를 사용하여 텍스트를 생성하는 가장 간단한 방법은 다음 예와 같이 모델에 단일 텍스트 전용 입력을 제공하는 것입니다.

// Make sure to include these imports:
// import { GoogleGenerativeAI } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });

const prompt = "Write a story about a magic backpack.";

const result = await model.generateContent(prompt);
console.log(result.response.text());

이 경우 프롬프트('마법 배낭에 관한 이야기를 작성하세요')에 출력 예시, 시스템 안내 또는 형식 지정 정보가 포함되지 않습니다. 제로샷 접근 방식입니다. 일부 사용 사례의 경우 원샷 또는 몇 번의 샷 프롬프트가 사용자 기대치에 더 부합하는 출력을 생성할 수 있습니다. 경우에 따라 모델이 작업을 이해하거나 특정 가이드라인을 따르는 데 도움이 되는 시스템 안내를 제공할 수도 있습니다.

텍스트 및 이미지 입력에서 텍스트 생성

Gemini API는 텍스트와 미디어 파일을 결합한 멀티모달 입력을 지원합니다. 다음 예는 텍스트 및 이미지 입력에서 텍스트를 생성하는 방법을 보여줍니다.

// Make sure to include these imports:
// import { GoogleGenerativeAI } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });

function fileToGenerativePart(path, mimeType) {
  return {
    inlineData: {
      data: Buffer.from(fs.readFileSync(path)).toString("base64"),
      mimeType,
    },
  };
}

const prompt = "Describe how this product might be manufactured.";
// Note: The only accepted mime types are some image types, image/*.
const imagePart = fileToGenerativePart(
  `${mediaPath}/jetpack.jpg`,
  "image/jpeg",
);

const result = await model.generateContent([prompt, imagePart]);
console.log(result.response.text());

텍스트 전용 프롬프트와 마찬가지로 멀티모달 프롬프트에는 다양한 접근 방식과 개선사항이 포함될 수 있습니다. 이 예의 출력에 따라 프롬프트에 단계를 추가하거나 지침을 더 구체적으로 지정할 수 있습니다. 자세한 내용은 파일 프롬프트 전략을 참고하세요.

텍스트 스트림 생성

기본적으로 모델은 전체 텍스트 생성 프로세스를 완료한 후에 응답을 반환합니다. 전체 결과를 기다리지 않고 대신 스트리밍을 사용하여 부분 결과를 처리하면 더 빠른 상호작용을 실행할 수 있습니다.

다음 예는 streamGenerateContent 메서드로 텍스트 전용 입력 프롬프트에서 텍스트를 생성하는 스트리밍을 구현하는 방법을 보여줍니다.

// Make sure to include these imports:
// import { GoogleGenerativeAI } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });

const prompt = "Write a story about a magic backpack.";

const result = await model.generateContentStream(prompt);

// Print text as it comes in.
for await (const chunk of result.stream) {
  const chunkText = chunk.text();
  process.stdout.write(chunkText);
}

대화형 채팅 빌드

Gemini API를 사용하여 사용자를 위한 양방향 채팅 환경을 빌드할 수 있습니다. API의 채팅 기능을 사용하면 여러 번의 질문과 응답을 수집할 수 있으므로 사용자가 점진적으로 답변을 찾거나 여러 부분으로 구성된 문제와 관련하여 도움을 받을 수 있습니다. 이 기능은 챗봇, 양방향 교사, 고객 지원 어시스턴트와 같이 지속적인 커뮤니케이션이 필요한 애플리케이션에 적합합니다.

다음 코드 예는 기본 채팅 구현을 보여줍니다.

// Make sure to include these imports:
// import { GoogleGenerativeAI } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });
const chat = model.startChat({
  history: [
    {
      role: "user",
      parts: [{ text: "Hello" }],
    },
    {
      role: "model",
      parts: [{ text: "Great to meet you. What would you like to know?" }],
    },
  ],
});
let result = await chat.sendMessage("I have 2 dogs in my house.");
console.log(result.response.text());
result = await chat.sendMessage("How many paws are in my house?");
console.log(result.response.text());

채팅 스트리밍 사용 설정

다음 예와 같이 채팅과 함께 스트리밍을 사용할 수도 있습니다.

// Make sure to include these imports:
// import { GoogleGenerativeAI } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });
const chat = model.startChat({
  history: [
    {
      role: "user",
      parts: [{ text: "Hello" }],
    },
    {
      role: "model",
      parts: [{ text: "Great to meet you. What would you like to know?" }],
    },
  ],
});
let result = await chat.sendMessageStream("I have 2 dogs in my house.");
for await (const chunk of result.stream) {
  const chunkText = chunk.text();
  process.stdout.write(chunkText);
}
result = await chat.sendMessageStream("How many paws are in my house?");
for await (const chunk of result.stream) {
  const chunkText = chunk.text();
  process.stdout.write(chunkText);
}

텍스트 생성 구성

모델로 보내는 모든 프롬프트에는 모델이 응답을 생성하는 방법을 제어하는 매개변수가 포함되어 있습니다. GenerationConfig를 사용하여 이러한 매개변수를 구성할 수 있습니다. 매개변수를 구성하지 않으면 모델은 기본 옵션을 사용하며 이는 모델에 따라 다를 수 있습니다.

다음 예는 사용 가능한 여러 옵션을 구성하는 방법을 보여줍니다.

// Make sure to include these imports:
// import { GoogleGenerativeAI } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
const model = genAI.getGenerativeModel({
  model: "gemini-1.5-flash",
  generationConfig: {
    candidateCount: 1,
    stopSequences: ["x"],
    maxOutputTokens: 20,
    temperature: 1.0,
  },
});

const result = await model.generateContent(
  "Tell me a story about a magic backpack.",
);
console.log(result.response.text());

candidateCount는 반환할 생성된 응답 수를 지정합니다. 현재 이 값은 1로만 설정할 수 있습니다. 설정하지 않으면 기본값은 1입니다.

stopSequences는 출력 생성을 중지하는 문자 시퀀스 집합 (최대 5개)을 지정합니다. 지정된 경우 API는 stop_sequence가 처음 표시될 때 중지됩니다. 중지 시퀀스는 응답에 포함되지 않습니다.

maxOutputTokens는 후보에 포함할 최대 토큰 수를 설정합니다.

temperature는 출력의 무작위성을 제어합니다. 창의적인 대답을 위해서는 더 높은 값을 사용하고 확정적인 대답을 위해서는 더 낮은 값을 사용합니다. 값의 범위는 [0.0, 2.0]입니다.

generateContent에 대한 개별 호출을 구성할 수도 있습니다.

const result = await model.generateContent({
  contents: [
    {
      role: 'user',
      parts: [
        {
          text: prompt,
        }
      ],
    }
  ],
  generationConfig: {
    maxOutputTokens: 1000,
    temperature: 0.1,
  },
});
console.log(result.response.text());

개별 호출에 설정된 값은 모델 생성자의 값을 재정의합니다.

다음 단계

이제 Gemini API의 기본사항을 살펴봤으므로 다음을 시도해 보세요.

  • 시각적 이해: Gemini의 기본 시각적 이해를 사용하여 이미지와 동영상을 처리하는 방법을 알아봅니다.
  • 시스템 안내: 시스템 안내를 사용하면 특정 요구사항 및 사용 사례에 따라 모델의 동작을 조정할 수 있습니다.
  • 오디오 이해: Gemini의 기본 오디오 이해를 사용하여 오디오 파일을 처리하는 방법을 알아보세요.