reactjs - Menggunakan NextJS 13 dengan vectorstore yang disyorkan oleh Langchain memberikan Ralat: HNSWLib tidak dipasang
Saya sedang mencipta sebuah aplikasi dengan bantuan Langchain dan OpenAI. Saya memuatkan data saya dengan JSONLoader dan mahu menyimpannya dalam vectorstore, supaya saya boleh mengambilnya mengikut permintaan pengguna untuk menjawab soalan yang spesifik kepada data saya. Dokumen Langchain menerangkan HNSWLib sebagai stor yang mungkin untuk aplikasi Node.js SAHAJA. Mengikut kefahaman saya, NEXT dibina di atas Node.js jadi ia boleh menjalankan JavaScript SS, jadi saya sepatutnya boleh menggunakannya. Saya juga perlu menyebut bahawa JSONLoader juga hanya berfungsi di NodeJS, yang berfungsi dengan sempurna, jadi saya rasa semuanya sudah sedia.
Saya telah membuat laluan API dalam app/api/llm/route.ts mengikut dokumentasi Handlers Laluan baru, dan juga telah memasang pakej hnswlib-node.
import { NextRequest } from 'next/server';
import { OpenAI } from 'langchain/llms/openai';
import { RetrievalQAChain } from 'langchain/chains';
import { JSONLoader } from 'langchain/document_loaders/fs/json';
import { HNSWLib } from 'langchain/vectorstores/hnswlib';
import { OpenAIEmbeddings } from 'langchain/embeddings/openai';
import path from 'path';
// eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars
export const GET = async (req: NextRequest) => {
const apiKey = process.env.NEXT_PUBLIC_OPENAI_API_KEY;
const model = new OpenAI({ openAIApiKey: apiKey, temperature: 0.9, modelName: 'gpt-3.5-turbo' });
// Initialize the LLM to use to answer the question.
const loader = new JSONLoader(path.join(process.cwd(), '/assets/surfspots.json'));
const docs = await loader.load();
// Create a vector store from the documents.
const vectorStore = await HNSWLib.fromDocuments(docs, new OpenAIEmbeddings({ openAIApiKey: apiKey }));
// Create a chain that uses the OpenAI LLM and HNSWLib vector store.
const chain = RetrievalQAChain.fromLLM(model, vectorStore.asRetriever());
const res = await chain.call({
query: 'List me all of the waves I can find in Fuerteventura',
});
console.log({ res });
};
Yang saya panggil di bahagian depan di dalam komponen React sisi klien.
Apabila saya cuba menjalankan kod ini, saya mendapat ralat berikut:
Error: Please install hnswlib-node as a dependency with, e.g. `npm install -S hnswlib-node`
at HNSWLib.imports (webpack-internal:///(sc_server)/./node_modules/langchain/dist/vectorstores/hnswlib.js:184:19)
Saya cuba memasang semula pakej itu, mengeluarkan node_modules dan memasang semula semuanya, mencari jawapan di web, dan sebagainya.
Adakah sesiapa yang pernah bekerja dengan perpustakaan ini atau mempunyai sebarang panduan yang boleh saya pertimbangkan untuk menyahpepijat ini? Terima kasih terlebih dahulu!
Jawapan #1
Selepas mencuba untuk memasang semula, menukar import dan menghapus pakej berdiri sendiri serta mencuba untuk menggunakan dari perpustakaan langchain, saya menemui satu isu di github. Di github langchain/js, terdapat satu perbincangan yang menerangkan isu yang serupa dengan persekitaran yang berbeza, dan ternyata, fail next.config.js memerlukan beberapa persediaan tambahan untuk memastikan ia berfungsi. Terima kasih banyak kepada @manduks.
https://github.com/hwchase17/langchainjs/issues/943#issuecomment-1544928533
Menambahkan baris 6 menyelesaikan masalah itu.
/** @type {import("next").NextConfig} */
module.exports = {
experimental: { appDir: true },
webpack(config) {
config.experiments = { ...config.experiments, topLevelAwait: true };
config.externals = [...config.externals, 'hnswlib-node']; // by adding this line, solved the import
return config;
},
};
