Instalação
npm i --save genkitx-langchain
Uso
Você pode usar a maioria das cadeias ou utilitários do LangChain nos fluxos do Genkit no estado em que se encontra. O exemplo abaixo usa recuperadores, carregadores de documentos e construções de cadeia do LangChain para criar uma amostra RAG simples.
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();
O exemplo usa GenkitTracer
fornecido pelo plug-in genkitx-langchain
para instrumentar cadeias
do LangChain com recursos de observabilidade do Genkit. Agora, quando você executar o fluxo na interface do desenvolvedor ou na produção, terá visibilidade total das cadeias do LangChain.
Além disso, os componentes do LangChain não são interoperáveis com os primitivos do Genkit (modelos, documentos, retrievers etc.).
Avaliadores (pré-lançamento)
Você pode usar avaliadores do LangChain com o Genkit.
Configure quais avaliadores você quer usar com o plug-in langchain
e siga o processo
de avaliação padrão:
import { langchain } from 'genkitx-langchain';
configureGenkit({
plugins: [
langchain({
evaluators: {
judge: gemini15Flash,
criteria: ['harmfulness', 'maliciousness'],
},
}),
],
});