LangChain加载SQLite表文本分块报错:TypeError问题求助
解决LangChain分割SQLite文本时的TypeError问题
问题原因
你代码里的错误源于文档对象的metadata格式不符合LangChain要求:LangChain的Document类型要求metadata必须是对象类型,但你直接传入了row.id(一个数字)。文本分割器在处理时会尝试读取metadata.loc属性,由于metadata不是对象,自然会抛出Cannot read properties of undefined (reading 'loc')的错误。
修正后的代码
import { RecursiveCharacterTextSplitter } from "@langchain/textsplitters"; const splitter = new RecursiveCharacterTextSplitter({ chunkSize: 1000, chunkOverlap: 200 }); // 假设表结构为 CREATE TABLE t (id INTEGER PRIMARY KEY, fulltext TEXT); const rows = db.prepare('SELECT id, fulltext FROM t').all(); // 确保外层函数是async,否则无法使用await (async () => { for (const row of rows) { // 修正:metadata是包含id的对象,而非单个值 const docs = [ { metadata: { id: row.id }, pageContent: row.fulltext } ]; const chunks = await splitter.splitDocuments(docs); // 这里可以添加处理分割后chunks的逻辑,比如存储或打印 console.log(`处理ID为${row.id}的文本,分割得到${chunks.length}个块`); } })();
关键注意事项
metadata必须是对象结构,哪怕只需要存储单个字段(比如id),也要将其作为对象的属性传入。splitDocuments是异步方法,必须在async函数中使用await,或者通过.then()处理Promise结果。
内容的提问来源于stack exchange,提问作者punkish
相关产品推荐
相关产品推荐

