Open3

LangChain.js について

ピン留めされたアイテム
まさぴょん🐱まさぴょん🐱

LangChain.js で、Gemini APIを利用する📝

npm i @langchain/google-genai @langchain/core

yarn add @langchain/google-genai @langchain/core

pnpm add @langchain/google-genai @langchain/core

https://www.npmjs.com/package/@langchain/google-genai

LangChainで使用できるGemini のモデルについて📝

LangChainで使用可能なGoogle Geminiのモデル名は、以下の通りです(2025年5月時点の情報に基づく):

  1. gemini-1.0-pro:安定版のGemini Proモデル。テキスト生成に適しています。
  2. gemini-1.5-pro:より高度な自然言語処理とマルチモーダル機能(テキスト、画像など)を提供。
  3. gemini-1.5-flash:高速応答を重視したモデルで、リアルタイムアプリケーションに最適。
  4. gemini-2.0-flash:最新のGeminiモデルで、高速かつ高性能な処理が可能。
  5. gemini-2.0-flash-exp-image-generation:画像生成や編集に対応した実験的モデル。
  6. gemini-pro-vision:画像とテキストのマルチモーダル処理に特化したモデル(ただし、gemini-1.5シリーズへの移行が進んでいる場合あり)。

注意点

  • モデル名は、LangChainのlangchain-google-genaiパッケージまたはlangchain-google-vertexaiパッケージを通じて指定します。
  • 一部のモデル(例:gemini-2.5-proやgemini-2.5-flash)はプレビュー版として提供される場合があり、モデル名に「-preview-」が含まれることがあります(例:gemini-2.5-pro-preview-03-25)。これらはGoogle AI Studioの公式ドキュメントで確認可能です。
  • モデル名の指定は、例えば以下のように行います:
    from langchain_google_genai import ChatGoogleGenerativeAI
    llm = ChatGoogleGenerativeAI(model="gemini-1.5-pro")
    
  • 最新のモデル名や利用可能なバージョンは、Google AI StudioやGemini APIの公式ドキュメント(https://ai.google.dev/gemini-api/docs)で確認することをおすすめします。

補足

  • Vertex AIを利用する場合、モデル名はgemini-1.5-flash-002gemini-1.5-pro-002のようにバージョン付きで指定されることがあります。
  • モデルによっては、Google Cloud PlatformでVertex AI APIを有効化する必要がある場合があります。
  • 画像編集や生成など特定の機能は、対応モデル(例:gemini-2.0-flash-exp-image-generation)に限定されます。

参考・引用

https://www.npmjs.com/package/@langchain/google-genai

https://python.langchain.com/docs/integrations/chat/google_generative_ai/

https://python.langchain.com/api_reference/google_genai/chat_models/langchain_google_genai.chat_models.ChatGoogleGenerativeAI.html

https://qiita.com/Isaka-code/items/fd897f8745b847e15164

まさぴょん🐱まさぴょん🐱

LangChain.js

yarn add langchain

yarn add @langchain/openai

yarn add @langchain/core

実装してみた Sample

openAiLangChain.ts
import { ChatOpenAI } from "@langchain/openai";
import { ChatPromptTemplate } from "@langchain/core/prompts";
import { StringOutputParser } from "@langchain/core/output_parsers";

// OpenAIのAPIキーを設定します
const apiKey = process.env.NEXT_PUBLIC_OPEN_AI_API_KEY;
// console.log("API Key:", apiKey);

const chatModel = new ChatOpenAI({
  apiKey,
});

// 1. 一番シンプルに ChatModel を呼び出すパターン
export async function testChat() {
  console.log("testChat Call");
  const response = await chatModel.invoke("what is LangSmith?");
  console.log(response);
}

const prompt = ChatPromptTemplate.fromMessages([
  // GPTのペルソナ設定
  [
    "system",
    "あなたは、子供にもわかりやすく、単語の意味をストーリーで教える先生です。",
  ],
  // ユーザーの入力
  ["user", "{input}"],
]);

const chain = prompt.pipe(chatModel);

// 2. Promptを使って ChatModel を Custom するパターン
export async function testChatChain() {
  console.log("testChatChain Call");
  const response = await chain.invoke({
    input: "東京タワーはどこにありますか?",
  });
  console.log(response);
}

const outputParser = new StringOutputParser();

const llmChain = prompt.pipe(chatModel).pipe(outputParser);

// 3. outputParser を使って Responseから、回答のみを取り出すパターン
export async function ChatChainLLM(query: string) {
  const response = await llmChain.invoke({
    input: query,
  });
  console.log(response);
}

https://zenn.dev/optimisuke/articles/d6dcb852e14c81

https://zenn.dev/umi_mori/books/prompt-engineer/viewer/install_langchain_js

まさぴょん🐱まさぴょん🐱

Object String から JSON Stringへの変換 & Parse

AIに作成してもらった回答データが、Object Stringだった際の処理

  1. 主なステップは、改行や余分な空白を削除する。
  2. キーに引用符を追加して有効なJSONにする
  3. JSON.parseでパースしてJS Objectに変換する。
let str = `{
    clearConversationRating: 0,
    smoothRating: 0,
    mannerRating: 0,
    smileRating: 0,
    likeRating: 0,
    feedback: "会話の内容が不明瞭であり、スムーズさやトーン・マナー、笑顔度が不足しているため、相互理解や仲良くなる好感度が低い状況です。改善が必要です。"
}`;

function parseDataString(dataString) {
    // 改行を削除
    dataString = dataString.replace(/\n/g, '');
    // 先頭と末尾の空白を削除
    dataString = dataString.trim();
    // キーに引用符を追加
    dataString = dataString.replace(/([a-zA-Z0-9_]+)\s*:/g, '"$1":');
    // 有効なJSONとしてパース
    let obj = JSON.parse(dataString);
    return obj;
}

let obj = parseDataString(str);
console.log(obj);