Gemini API を使用してテキストを生成する

Gemini API は、テキスト、画像、動画、音声を入力として指定すると、テキスト出力を生成できます。

このガイドでは、generateContent メソッドと streamGenerateContent メソッドを使用してテキストを生成する方法について説明します。Gemini のビジョン機能と音声機能の使用方法については、ビジョン音声のガイドをご覧ください。

始める前に: プロジェクトと API キーを設定する

Gemini API を呼び出す前に、プロジェクトを設定して API キーを構成する必要があります。

テキストのみの入力からテキストを生成する

Gemini API を使用してテキストを生成する最も簡単な方法は、次の例に示すように、モデルにテキストのみの入力を 1 つ指定することです。

// 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());

この場合、プロンプト(「魔法のバックパックに関する物語を書いてください」)には、出力の例、システムの手順、フォーマット情報は含まれません。これはゼロショット アプローチです。ユースケースによっては、1 ショットまたは少数ショットのプロンプトを使用すると、ユーザーの期待に沿った出力が生成される場合があります。場合によっては、モデルがタスクを理解したり、特定のガイドラインに従ったりできるように、システム指示を提供することもあります。

テキストと画像の入力からテキストを生成する

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 つ)を指定します。指定すると、stop_sequence が最初に出現した時点で API が停止します。停止シーケンスはレスポンスの一部として含まれません。

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 のネイティブ音声認識を使用して音声ファイルを処理する方法を学びます。