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

RAG模型可读取PDF但无法处理JSON文件的问题排查与解决

问题原因及解决方法

原因分析

  1. JSON加载后的原始结构(如嵌套键值、紧凑字符串)不利于嵌入模型捕捉语义关联,导致检索时无法匹配查询相关内容。
  2. 固定chunk_size=256的分割方式可能将产品名称与库存数量等关联信息拆分到不同chunk,破坏语义完整性,无法被有效召回。
  3. 嵌入模型对结构化JSON文本的编码效果弱于自然语言(如PDF提取文本),难以建立查询与JSON内容的语义映射。

解决方案

1. 自定义JSON文本转换逻辑

给SimpleDirectoryReader指定JSON文件的处理函数,将结构化JSON转换为扁平化的自然语言格式,强化语义关联:

import json
from llama_index import SimpleDirectoryReader

def parse_json(file_path):
    with open(file_path, 'r', encoding='utf-8') as f:
        data = json.load(f)
    # 根据你的JSON结构调整,示例处理产品库存列表
    content = []
    for product in data.get("products", []):
        content.append(f"产品名称: {product.get('name')}")
        content.append(f"可用数量: {product.get('quantity', product.get('stock'))}")
        content.append("\n")
    return "\n".join(content)

documents = SimpleDirectoryReader(
    "/content/Data/",
    file_extractor={".json": parse_json}
).load_data()

2. 替换为语义感知的Chunk分割器

用基于嵌入模型的语义分割器替代固定长度分割,确保关联内容保留在同一chunk:

from llama_index.node_parser import SemanticSplitterNodeParser

semantic_splitter = SemanticSplitterNodeParser(
    buffer_size=1,
    breakpoint_percentile_threshold=95,
    embed_model=embed_model
)

service_context = ServiceContext.from_defaults(
    llm=llm,
    embed_model=embed_model,
    node_parser=semantic_splitter
)

3. 优化查询与JSON术语匹配

如果JSON中用stock而非查询中的quantity,可直接修改查询为What is the stock of Nokia 3310 available?,或在JSON转换时统一术语(如将stock标注为库存(quantity))。

内容的提问来源于stack exchange,提问作者Lorenzo Cutrupi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 14:02:37