LangChain'i Genkit ile Kullanma

Kurulum

npm i --save genkitx-langchain

Kullanım

Genkit akışlarında çoğu LangChain zincirini veya yardımcı programını 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();

Örneğin, LangChain zincirlerini Genkit gözlemlenebilirlik özellikleriyle izlemek için genkitx-langchain eklentisi tarafından sağlanan GenkitTracer'nin kullanıldığını unutmayın. Artık akışı Geliştirici arayüzünden veya üretimden çalıştırdığınızda LangChain zincirleri hakkında tam görünürlük elde edersiniz.

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

Değerlendiriciler (Önizleme)

Genkit ile LangChain değerlendiricilerini kullanabilirsiniz. langchain eklentisinden hangi değerlendirmecileri almak istediğinizi yapılandırın ve standart değerlendirme sürecini uygulayın:

import { langchain } from 'genkitx-langchain';

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