Next.js の API ルートで RAG のクエリを処理する!LangChain × Pinecone の活用
2025年02月25日 8:46
この記事では、Next.js の API ルートで RAG (Retrieval-Augmented Generation) を処理するために、LangChain と Pinecone をどのように活用するかを解説します。最近のAI技術の進展により、自然言語処理(NLP)の分野ではテキスト生成モデルの性能が大幅に向上しています。RAGはその代表的なアプローチの一つで、データの取得と生成を組み合わせることで高品質なアウトプットをもたらします。
RAGは「Retrieval-Augmented Generation」の略で、まず関連情報をデータベースなどから取得し、その情報を基にコンテンツや回答を生成する手法です。このアプローチにより、補助データの利活用が可能になり、生成されるテキストの信頼性や精度が向上します。
RAGのユニークなメリットは以下の通りです。
LangChainは、自然言語処理を行うための柔軟なフレームワークです。使い勝手がよく、特にAPI開発でその強みを発揮します。
Pineconeはベクトルデータベースで、高速でスケーラブルなデータ検索を実現します。
Next.jsのAPIルートは、サーバレス関数を定義して、フルスタックアプリケーションにおける柔軟なバックエンド機能を提供します。
APIのスケーラビリティは重要です。クラウドのリソースを最適利用し、サーバーレスアーキテクチャによってライフサイクル管理を効率化します。
LangChainを使用するためには、適切な初期設定を行う必要があります。以下の手順でLangChainをセットアップします。
必要なパッケージをインストール
npm install langchain @pinecone-database/pinecone axios dotenv
環境変数を設定
.env.local
に以下のような内容を追加します。
LANGCHAIN_API_KEY=your-langchain-api-key PINECONE_API_KEY=your-pinecone-api-key PINECONE_ENV=your-pinecone-environment PINECONE_INDEX=your-pinecone-index-name
LangChainの設定を行う
Next.js の app/api/rag/route.ts
でLangChainを初期化します。
import { NextRequest, NextResponse } from "next/server"; import { Pinecone } from "@pinecone-database/pinecone"; import { OpenAIEmbeddings, ChatOpenAI } from "@langchain/openai"; import * as admin from "firebase-admin"; import * as fs from "fs"; import * as path from "path"; const serviceAccountPath = path.join(process.cwd(), "service-account-dev.json"); if (!admin.apps.length) { const serviceAccount = JSON.parse(fs.readFileSync(serviceAccountPath, "utf8")); admin.initializeApp({ credential: admin.credential.cert(serviceAccount), }); } const db = admin.firestore(); const pinecone = new Pinecone({ apiKey: process.env.PINECONE_API_KEY }); const pineconeIndex = pinecone.Index(process.env.PINECONE_INDEX); const embeddings = new OpenAIEmbeddings({ openAIApiKey: process.env.LANGCHAIN_API_KEY }); const model = new ChatOpenAI({ model: "gpt-4o", openAIApiKey: process.env.LANGCHAIN_API_KEY });
Pineconeを利用する際のセットアップは以下の通りです。
pinecone create-index --name your-index-name --dimension 1536 --metric cosine
async function insertVector(id, vector, metadata) { await pineconeIndex.upsert({ vectors: [{ id, values: vector, metadata }], }); }
Next.jsのAPIルートでクエリ処理を行います。
src/app/api/rag/route.ts
:
LangChainとPineconeを統合することで、クエリに基づいた適切な情報を取得し、最適な回答を生成できます。
const relevantDocs = await pineconeIndex.query({ vector, topK: 5 });
const response = await model.invoke(`Given the retrieved documents, answer the query:\n${relevantDocs}\nQuery: ${query}`);
Next.jsのAPIルートを活用し、LangChainとPineconeを統合することで、強力なRAGシステムを構築できます。実装のポイントは、適切なデータ検索と高品質なテキスト生成の組み合わせです。
[cv:issue_marketplace_engineer]
診断を受けるとあなたの現在の業務委託単価を算出します。今後副業やフリーランスで単価を交渉する際の参考になります。また次の単価レンジに到達するためのヒントも確認できます。