OpenAI项目爆改GLM——以基于llama_index的pdf阅读助手

最近在做大模型agent构建,看了许多不错的开源项目,但是clone下来就是一整个不能用,因为github上开源的项目基本都是基于openai做的。而如果想要转成国内大模型backbone,需要修改的地方挺多的。

现在以一个简单的pdf reader agent为例来做一下相关的解读

原始项目地址:GitHub - gabacode/chatPDF: Load a PDF file and ask questions via llama_index and GPT

代码写的非常简单:

python 复制代码
import logging

logging.basicConfig(level=logging.CRITICAL)

import os
from pathlib import Path

import openai
from dotenv import load_dotenv
from langchain.chat_models import ChatOpenAI
from llama_index import GPTVectorStoreIndex, LLMPredictor, ServiceContext, StorageContext, download_loader, load_index_from_storage
from utils import CACHE, FILES, models, cls, handle_save, handle_exit, initialize, select_file

load_dotenv()
#openai.api_key = os.environ["OPENAI_API_KEY"]
history = []

llm_predictor = LLMPredictor(llm=ChatOpenAI(temperature=0.618, model_name=models["gpt-3"], max_tokens=256))

service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor, chunk_size_limit=1024)


def make_index(file):
    cls()
    print("👀 Loading...")

    PDFReader = download_loader("PDFReader")
    loader = PDFReader()
    documents = loader.load_data(file=Path(FILES) / file)

    if os.path.exists(Path(CACHE) / file):
        print("📚 Index found in cache")
        return
    else:
        print("📚 Index not found in cache, creating it...")
        index = GPTVectorStoreIndex.from_documents(documents, service_context=service_context)
        index.storage_context.persist(persist_dir=Path(CACHE) / file)


def chat(file_name, index):
    while True:
        prompt = input("\n😎 Prompt: ")
        if prompt == "exit":
            handle_exit()
        elif prompt == "save":
            handle_save(str(file_name), history)

        query_engine = index.as_query_engine(response_mode="compact")

        response = query_engine.query(prompt)
        print("\n👻 Response: " + str(response))
        history.append({"user": prompt, "response": str(response)})


def ask(file_name):
    try:
        print("👀 Loading...")
        storage_context = StorageContext.from_defaults(persist_dir=Path(CACHE) / file_name)
        index = load_index_from_storage(storage_context, service_context=service_context)
        cls()
        print("✅ Ready! Let's start the conversation")
        print("ℹ️ Press Ctrl+C to exit")
        chat(file_name, index)
    except KeyboardInterrupt:
        handle_exit()


if __name__ == "__main__":
    initialize()
    file = select_file()
    if file:
        file_name = Path(file).name
        make_index(file_name)
        ask(file_name)
    else:
        print("No files found")
        handle_exit()

假设你的环境已经配置好了,即通过以下代码进入

python 复制代码
python main.py

现在进行更改,首先是llm predictor,这个构建直接是chatopenai的配置,我们可以做如下更改

python 复制代码
#原始代码
#llm_predictor = LLMPredictor(llm=ChatOpenAI(temperature=0.618, model_name=models["gpt-3"], max_tokens=256))

#替换为如下
llm = ChatOpenAI(
    temperature=0.95,
    model="glm-4",
    openai_api_key="你的key",
    #这个是glm的调用地址
    openai_api_base="https://open.bigmodel.cn/api/paas/v4/"
)

llm_predictor = LLMPredictor(llm)

运行后,可以继续运行,但是到选择pdf后会报错,大致错误意思是try超过范围,调试后发现应该是调用的向量模型网络不通。安装的是llama_index内置的embedding模型是调用openai,进行更改

python 复制代码
#需要修改的包文件路径如下(假设你是anaconda)
#/opt/anaconda3/envs/chatpdf/lib/python3.9/site-packages/llama_index/embeddings/openai.py


#需要修改的是get_embeddings()和get_embedding()
#get_embeddings()是批量查询返回向量
#get_embedding()是单独的查询返回向量

# def get_embeddings():
# ... 
#     data = openai.Embedding.create(input=list_of_text, model=engine, **kwargs).data 这是原始调用,是openai的
# ...

#更改为如下,当然你需要注意你的缩紧
#!pip install zhipuai

from zhipuai import ZhipuAI

client = ZhipuAI(api_key="你的glm key")
data = client.embeddings.create(input=list_of_text, model = "embedding-2").data


#get_embeddings()也需要做同样的修改

现在测试一下,可能会跳出因为禁用词不能进行正常对话,但是后面通过更改pdf后可以完成项目拉通!

相关推荐
冴羽7 分钟前
10 个 Nano Banana Pro 专业级生图技巧
前端·人工智能·aigc
晨非辰16 分钟前
算法闯关日记 Episode :解锁链表「环形」迷局与「相交」奥秘
数据结构·c++·人工智能·后端·python·深度学习·神经网络
老蒋新思维17 分钟前
创客匠人 2025 峰会深度解析:AI 赋能垂直领域,创始人 IP 变现的差异化路径
大数据·网络·人工智能·网络协议·tcp/ip·重构·知识付费
沛沛老爹18 分钟前
AI入门之LangChain Agent工具链组合设计:从理论到产业落地的AI智能体架构指南
人工智能·架构·langchain·agent·ai入门
摘星编程21 分钟前
解构CANN图编译技术:打造高吞吐、低延迟的实时AI质检系统
人工智能
8个贝壳1 小时前
开发者福音!一键聚合GPT-5.1、Claude 4.5:我的高性价比AI模型中转站实战分享
人工智能
被制作时长两年半的个人练习生1 小时前
如何调试llama.cpp及判断是否支持RVV
linux·服务器·llama
liliangcsdn1 小时前
如何从二项分布中抽取样本 - binomial
大数据·人工智能
北京耐用通信1 小时前
耐达讯自动化Profibus光纤转换器为您的水处理系统装上“光纤高速路”,数据从此畅通无阻!
网络·人工智能·科技·网络协议·自动化·信息与通信
老蒋新思维1 小时前
创客匠人 2025 峰会深度解析:AI 激活创始人 IP 变现的核心价值
网络·人工智能·网络协议·tcp/ip·创始人ip·创客匠人·知识变现