LlamaIndex.ts功能是否媲美Python版?是否应转用Langchain.js?
转用Langchain.js是完全适配且更优的选择
针对你的场景,转用Langchain.js不仅合适,还能解决当前遇到的核心问题:
- 原生支持Qdrant向量存储:Langchain.js官方提供了
QdrantVectorStore实现,无需自行开发适配逻辑,直接就能把PDF解析后的文本片段通过embedding存入Qdrant。 - 内置GTE/MiniLM embeddings支持:无需额外集成第三方库,直接调用
GTEEmbeddings或MiniLMEmbeddings类就能生成符合要求的向量。 - 自定义LLM接入灵活:Langchain.js对自定义LLM的集成机制成熟,不管你是用本地部署的模型还是自定义API服务,都能快速接入到检索-生成的流程中。
- 资源与文档充足:官方文档详尽,社区案例丰富,遇到问题能找到现成的解决方案,完全不用担心像LlamaIndex.ts那样缺乏支持资源的情况。
核心流程示例代码
// PDF加载、分割、存入Qdrant并执行查询的核心逻辑 import { RecursiveCharacterTextSplitter } from "langchain/text_splitter"; import { PuppeteerPDFLoader } from "langchain/document_loaders/fs/pdf"; import { GTEEmbeddings } from "langchain/embeddings/gte"; import { QdrantVectorStore } from "langchain/vectorstores/qdrant"; // 替换为你的自定义LLM实现类 import { YourCustomLLM } from "./your-custom-llm"; import { RetrievalQAChain } from "langchain/chains"; // 加载并切割PDF文档 const loader = new PuppeteerPDFLoader("./uploaded-document.pdf"); const rawDocs = await loader.load(); const splitter = new RecursiveCharacterTextSplitter({ chunkSize: 1000, chunkOverlap: 200, }); const splitDocs = await splitter.splitDocuments(rawDocs); // 将切割后的文档存入Qdrant const embeddings = new GTEEmbeddings(); const vectorStore = await QdrantVectorStore.fromDocuments( splitDocs, embeddings, { url: "你的Qdrant服务地址", apiKey: "你的Qdrant API密钥", collectionName: "pdf-documents", } ); // 构建检索查询链并执行查询 const customLLM = new YourCustomLLM({ /* 你的LLM配置 */ }); const qaChain = RetrievalQAChain.fromLLM(customLLM, vectorStore.asRetriever()); const queryResult = await qaChain.call({ query: "请查询文档中的XX内容" }); console.log(queryResult.text);
如果之前在LlamaIndex.ts上有少量已完成的代码,迁移成本也很低——Langchain.js的模块划分清晰,对应功能都有直接的替代方案,很快就能完成切换。
内容的提问来源于stack exchange,提问作者Zainul Abideen
相关产品推荐
相关产品推荐

