Penginstalan
npm i --save genkitx-langchain
Penggunaan
Anda dapat menggunakan sebagian besar rantai atau utilitas LangChain dalam alur Genkit sebagaimana adanya. Contoh di bawah ini menggunakan pengambil LangChain, pemuat dokumen, dan konstruksi rantai untuk membuat contoh RAG yang akurat.
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();
Perhatikan bahwa contoh ini menggunakan GenkitTracer
yang disediakan oleh plugin genkitx-langchain
untuk menginstrumentasikan chain LangChain
dengan fitur kemampuan observasi Genkit. Sekarang, saat Anda menjalankan flow dari UI Dev atau dalam produksi,
Anda akan mendapatkan visibilitas penuh ke dalam rantai LangChain.
Perhatikan juga bahwa komponen LangChain tidak dapat dioperasikan dengan primitif Genkit (model, dokumen, retriever, dll.).
Evaluator (Pratinjau)
Anda dapat menggunakan evaluator LangChain dengan Genkit.
Konfigurasikan evaluator mana yang Anda inginkan dari plugin langchain
, lalu ikuti proses
evaluasi standar:
import { langchain } from 'genkitx-langchain';
configureGenkit({
plugins: [
langchain({
evaluators: {
judge: geminiPro,
criteria: ['harmfulness', 'maliciousness'],
},
}),
],
});