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

Windows下无法pip安装jq,Langchain JSONLoader加载聊天历史受阻

问题解决:LangChain JSONLoader在Windows环境下依赖jq无法安装的替代方案

问题背景

基于LangChain开发的文档加载与AI问答功能原本运行正常,添加聊天历史功能后报错,提示需执行pip install jq,但Windows环境下执行该命令失败,报错信息:

Failed to build jq
ERROR: Could not build wheels for jq, which is required to install pyproject.toml-based projects

尝试过winget下载、手动配置jq路径,但LangChain的JSONLoader需要以Python包形式调用jq才能加载聊天历史,无法通过外部工具替代。

相关代码

PHP Laravel后端生成JSON字符串的代码:

$jsonHistory = json_encode($request['chatHistory'], JSON_PRETTY_PRINT);

Python后端核心处理代码:

class Request(BaseModel):
    ai_input: str
    company: str
    chatHistory: str

class AiModel:
    async def get_answer(request: Request):
        txt_loader = DirectoryLoader(f"{request.company}/", glob="**/*.txt", loader_cls=TextLoader)
        pdf_loader = DirectoryLoader(f"{request.company}/", glob="**/*.pdf", loader_cls=PyMuPDFLoader)
        csv_loader = DirectoryLoader(f"{request.company}/", glob="**/*.csv", loader_cls=CSVLoader)
        json_loader = JSONLoader(request.chatHistory, jq_schema='.input[]content')

        loadersList = [txt_loader, pdf_loader, csv_loader, json_loader]
        index = VectorstoreIndexCreator().from_loaders(loadersList)
        llm = ChatOpenAI
        if request.ai_input:
            query = request.ai_input 
            answer = index.query(query, llm=llm)
        return {"answer":answer}

解决方案

方案1:自定义加载器替代JSONLoader

直接解析JSON字符串生成LangChain的Document对象,完全避开jq依赖:

import json
from langchain.schema import Document

class ChatHistoryLoader:
    def __init__(self, json_str: str, content_key: str):
        self.json_str = json_str
        self.content_key = content_key

    def load(self):
        chat_data = json.loads(self.json_str)
        documents = []
        # 对应原jq_schema '.input[]content'的解析逻辑
        for item in chat_data.get('input', []):
            content = item.get(self.content_key, "")
            documents.append(Document(page_content=content))
        return documents

替换原代码中的JSONLoader:

# 替换原来的json_loader
chat_loader = ChatHistoryLoader(request.chatHistory, content_key='content')
loadersList = [txt_loader, pdf_loader, csv_loader, chat_loader]

方案2:使用兼容Windows的jq替代包

安装pyjq替代官方jq包:

pip install pyjq

修改JSONLoader的调用(部分LangChain版本支持指定jq库):

from langchain.document_loaders import JSONLoader
import pyjq

json_loader = JSONLoader(
    request.chatHistory,
    jq_schema='.input[]content',
    jq_lib=pyjq
)

注意:部分LangChain版本可能不支持jq_lib参数,需确认版本兼容性

方案3:将JSON字符串转为临时文件加载

把接收的chatHistory写入临时JSON文件,再用JSONLoader加载文件:

import tempfile
import os

# 创建临时JSON文件
with tempfile.NamedTemporaryFile(mode='w', suffix='.json', delete=False) as f:
    f.write(request.chatHistory)
    temp_file_path = f.name

# 使用JSONLoader加载文件
json_loader = JSONLoader(temp_file_path, jq_schema='.input[]content')

# 加载完成后删除临时文件
os.unlink(temp_file_path)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:52:13