You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 01:04:55