LangChain'i Genkit ile kullanma

Kurulum

npm i --save genkitx-langchain

Kullanım

Çoğu LangChain zincirini veya yardımcı programını Genkit akışlarında olduğu gibi kullanabilirsiniz. Aşağıdaki örnekte, naif bir RAG örneği oluşturmak için LangChain retriever'lar, belge yükleyiciler ve zincir yapılar kullanılmaktadır.

import { initializeGenkit } from '@genkit-ai/core';
import { defineFlow, run, startFlowsServer } from '@genkit-ai/flow';
import { GoogleVertexAIEmbeddings } from '@langchain/community/embeddings/googlevertexai';
import { GoogleVertexAI } from '@langchain/community/llms/googlevertexai';
import { StringOutputParser } from '@langchain/core/output_parsers';
import { PromptTemplate } from '@langchain/core/prompts';
import {
  RunnablePassthrough,
  RunnableSequence,
} from '@langchain/core/runnables';
import { GenkitTracer } from 'genkitx-langchain';
import { PDFLoader } from 'langchain/document_loaders/fs/pdf';
import { formatDocumentsAsString } from 'langchain/util/document';
import { MemoryVectorStore } from 'langchain/vectorstores/memory';
import * as z from 'zod';

import config from './genkit.config';

initializeGenkit(config);

const vectorStore = new MemoryVectorStore(new GoogleVertexAIEmbeddings());
const model = new GoogleVertexAI();

export const indexPdf = defineFlow(
  { name: 'indexPdf', inputSchema: z.string(), outputSchema: z.void() },
  async (filePath) => {
    const docs = await run('load-pdf', async () => {
      return await new PDFLoader(filePath).load();
    });
    await run('index', async () => {
      vectorStore.addDocuments(docs);
    });
  }
);

const prompt =
  PromptTemplate.fromTemplate(`Answer the question based only on the following context:
{context}

Question: {question}`);
const retriever = vectorStore.asRetriever();

export const pdfQA = defineFlow(
  { name: 'pdfQA', inputSchema: z.string(), outputSchema: z.string() },
  async (question) => {
    const chain = RunnableSequence.from([
      {
        context: retriever.pipe(formatDocumentsAsString),
        question: new RunnablePassthrough(),
      },
      prompt,
      model,
      new StringOutputParser(),
    ]);

    return await chain.invoke(question, { callbacks: [new GenkitTracer()] });
  }
);

startFlowsServer();

Örnekte, LangChain zincirlerini Genkit gözlemlenebilirlik özellikleriyle kullanmak için genkitx-langchain eklentisi tarafından sağlanan GenkitTracer kullanıldığını unutmayın. Artık, Geliştirici Kullanıcı Arayüzünden veya üretim bölümünden akışı çalıştırdığınızda LangChain zincirlerini tam olarak görebilirsiniz.

Ayrıca LangChain bileşenlerinin, Genkit temel öğeleriyle (modeller, belgeler, retriever'lar vb.) birlikte çalışamayacağını unutmayın.

Değerlendiriciler (Önizleme)

Genkit ile birlikte LangChain değerlendirme araçlarını kullanabilirsiniz. langchain eklentisinden istediğiniz değerlendiricileri yapılandırın, ardından standart değerlendirme sürecini uygulayın:

import { langchain } from 'genkitx-langchain';

configureGenkit({
  plugins: [
    langchain({
      evaluators: {
        judge: geminiPro,
        criteria: ['harmfulness', 'maliciousness'],
      },
    }),
  ],
});