当前位置: 首页 > news >正文

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

代码写的非常简单:

import logginglogging.basicConfig(level=logging.CRITICAL)import os
from pathlib import Pathimport 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_fileload_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")returnelse: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).namemake_index(file_name)ask(file_name)else:print("No files found")handle_exit()

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

python main.py

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

#原始代码
#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,进行更改

#需要修改的包文件路径如下(假设你是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 zhipuaifrom zhipuai import ZhipuAIclient = ZhipuAI(api_key="你的glm key")
data = client.embeddings.create(input=list_of_text, model = "embedding-2").data#get_embeddings()也需要做同样的修改

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

相关文章:

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

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

如何在Java中处理ParseException异常?

如何在Java中处理ParseException异常? 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在Java编程中,ParseException异常是开发者在处理…...

Java中如何解决BadPaddingException异常?

Java中如何解决BadPaddingException异常? 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在Java编程中,BadPaddingException异常是一个…...

数电大作业-四输入表决器

(PCB和multisim仿真画的有很大问题,没有VCC输入和GND,没学过直接裸画的,之后会好好看视频学习) 应用背景: 四个评委,三个及以上评委同时按下通过按钮时,选手才能通过。否则不通过。…...

ONLYOFFICE 桌面编辑器 8.1重磅来袭:全新功能提升您的办公效率

文章目录 前言ONLYOFFICE 桌面编辑器8.1一、PDF编辑:告别“头痛”时刻二、幻灯片版式:秒变“设计大师”三、无缝切换:办公界的“快速通道”四、语言支持:全球通吃的“翻译官”五、 隐藏“连接到云”板块:摆脱“云”的束…...

网络协议安全:TCP/IP协议栈的安全问题和解决方案

「作者简介」:北京冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础对安全知识体系进行总结与归纳,著作适用于快速入门的 《网络安全自学教程》,内容涵盖Web安全、系统安全等12个知识域的一百多个知识点,持续更新。 这一章节我们需要知道TCP/IP每…...

VERYCLOUD睿鸿股份亮相亚马逊云科技中国峰会2024

5月30日,为期两天的亚马逊云科技中国峰会在上海世博中心圆满落幕。 多位大咖现场分享,生成式AI时代的数据战略,企业级AI应用,最新技术、产品重磅发布,创新行业解决方案 …… 作为亚马逊云科技的生态合作伙伴&#x…...

2-15 基于matlab的蚁群,模拟退火,遗传,神经网络,禁忌搜索等智能优化算法对TSP问题

基于matlab的蚁群,模拟退火,遗传,神经网络,禁忌搜索等智能优化算法对TSP问题。五种优化算法对多个城市路径进行规划,通过优化速度、距离可比较五种方法的优劣。程序已调通,可直接运行。 2-15 蚁群优化算法 …...

kylinos 国产操作系统离线安装firefox 麒麟操作系统安装新版本firefox

1. 火狐地址: 下载 Firefox 浏览器,这里有简体中文及其他 90 多种语言版本供您选择 2. 选择: 3. 下载完之后,上传到离线机器 4. 解压缩: tar -xvjf firefox-127.0.1.tar.bz2 5. 去点击解压后的文件夹,找…...

Python 类对象

Python 类对象 经典迭代器 可迭代对象的定义: 使用内置的iter可以获取迭代器的对象。如果对象实现了能返回迭代器的__iter__方法,那么对象就是可迭代的。序列都可以迭代。实现了__getitem__方法,而且接受从0开始的索引,这种对象也…...

pytest unittest temp path单元测试创建临时文件

参考了这个:Test Files Creating a Temporal Directory in Python Unittests | Simple IT 🤘 Rocks 并使用pathlib做了优化: import tempfile import unittest from pathlib import Pathclass TestExample(unittest.TestCase):def test_exa…...

在线样机生成器,制作精美的电脑手机壁纸图片展示

在线样机生成器,可以制作精美的电脑手机壁纸图片展示。在线样机生成器支持不同的模型如浏览器、手机、笔记本电脑、手表等结合使用,帮助用户快速生成样机展示图片。下面小编就来和大家分享一款免费的在线样机生成器-壁纸样机生成器。 壁纸样机生成器是一…...

FreeRTOS实时操作系统

1.认识实施操作系统 1.1 裸机和实时操作系统 裸机: 早期嵌入式开发没有嵌入式操作系统的概念,直接操作裸机,在裸机上写程序,比如用51单片机基本就没有操作系统的概念。 通常把程序设计为前后台系统,主要分为两部分&a…...

C/S、B/S架构(详解)

一、CS、BS架构定义 CS架构(Client-Server Architecture)是一种分布式计算模型,其中客户端和服务器之间通过网络进行通信。在这种架构中,客户端负责向服务器发送请求,并接收服务器返回的响应。服务器则负责处理客户端的…...

代码随想录算法训练营第六十五天|KM99. 岛屿数量——深搜、KM99. 岛屿数量——广搜、KM100. 岛屿的最大面积

代码随想录算法训练营第六十五天 KM99. 岛屿数量——深搜 题目链接:KM99. 岛屿数量 使用递归深度搜索,将每次遇到的岛屿上下左右记录为已经到过,如果遇到没到过的说明它上下左右不是之间遍历过的岛屿,结果计数1。最后统计计数即…...

Lua 面向对象编程

Lua 面向对象编程 Lua 是一种轻量级的编程语言,通常用于嵌入应用程序中,提供灵活的扩展和定制功能。尽管 Lua 本身是一种过程式语言,但它提供了强大的元机制,允许开发者实现面向对象的编程范式。本文将探讨 Lua 中的面向对象编程(OOP)概念、实现方式以及最佳实践。 面向…...

AI赋能前端:你的Chrome 控制台需要AI(爱)

像会永生那样去学习,像明天就要死亡那样去生活。——圣雄甘地 大家好,我是柒八九。一个专注于前端开发技术/Rust及AI应用知识分享的Coder 此篇文章所涉及到的技术有 AI(Gemini)ChromeDevTool🪜魔法接码平台因为,行文字数所限,有些概念可能会一带而过亦或者提供对应的学习…...

代码随想录-Day38

509. 斐波那契数 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) 0,F(1) 1 F(n) F(n - 1) F(n - 2),其中 …...

CSS阴影优化气泡框样式

<body> <div class"pop">气泡框</div> </body>body{display: flex;justify-content: center;align-items: center;height: 100% } .pop{display: flex;justify-content: center;align-items: center;background: #409eff;width: 150px;heigh…...

强化安全新篇章:韶关石油化工可燃气体报警器年检解析

韶关&#xff0c;这座位于广东省北部的城市&#xff0c;近年来在石油化工行业取得了显著的发展。 随着一批批大型石化企业的进驻和投产&#xff0c;韶关不仅成为了区域性的石化产业基地&#xff0c;也为地方经济带来了强劲的增长动力。 然而&#xff0c;随着石化产业的快速发…...

Grafana Dashboard权限精细化控制实战指南

1. Grafana权限控制基础&#xff1a;从入门到精通 刚接触Grafana时&#xff0c;我一度以为权限管理就是简单的"管理员能改、编辑者能看、查看者只能瞅瞅"。直到有一次&#xff0c;客户要求"开发团队能修改A仪表盘但不能碰B仪表盘&#xff0c;运维团队能看B但不能…...

为什么说程序 = 算法 + 数据结构

什么是程序&#xff1f;理解了算法和数据结构是什么&#xff0c;我们就能更清晰地定义程序&#xff1a;程序是算法和数据结构在特定编程语言中的具体实现。它是一系列指令的集合&#xff0c;这些指令精确地描述了如何操作&#xff08;算法&#xff09;特定组织的数据&#xff0…...

麦橘超然Flux部署避坑指南:常见错误与解决方法

麦橘超然Flux部署避坑指南&#xff1a;常见错误与解决方法 1. 部署前的环境准备 1.1 硬件与驱动检查 在部署麦橘超然Flux图像生成控制台前&#xff0c;确保你的硬件环境满足以下要求&#xff1a; 显卡&#xff1a;NVIDIA显卡&#xff08;RTX 3060及以上&#xff09;&#x…...

造相 Z-Image镜像使用指南:显存监控条预警机制与OOM防护策略

造相 Z-Image镜像使用指南&#xff1a;显存监控条预警机制与OOM防护策略 1. 引言&#xff1a;为什么你的AI绘画服务总崩溃&#xff1f; 如果你用过一些开源的文生图模型&#xff0c;大概率遇到过这种情况&#xff1a;兴致勃勃地输入一段描述&#xff0c;点击生成&#xff0c;…...

双系统安装完整指南——以双Win11为例

一、安装前的准备工作 1. 硬件与系统要求 CPU&#xff1a;支持 Windows 11&#xff08;Intel 8 代 / AMD Ryzen 2000 及以上&#xff09;主板&#xff1a; 支持 UEFI支持 TPM 2.0 磁盘&#xff1a; GPT 分区格式至少 120GB 空闲空间&#xff08;建议每个系统 ≥ 80GB&#xf…...

MCP服务弹性伸缩失效导致预算超支?从冷启动延迟到空闲实例回收的7步精准控费法

第一章&#xff1a;MCP服务弹性伸缩失效的根本归因诊断MCP&#xff08;Microservice Control Plane&#xff09;服务在生产环境中频繁出现弹性伸缩延迟、扩缩容不触发或缩容后 Pod 持续残留等异常现象&#xff0c;其表象背后往往隐藏着多层耦合的系统性缺陷。深入诊断需穿透监控…...

力扣994. 腐烂的橘子

题目&#xff1a;腐烂的橘子https://leetcode.cn/problems/rotting-oranges/description/在给定的 m x n 网格 grid 中&#xff0c;每个单元格可以有以下三个值之一&#xff1a; 0 代表空单元格&#xff1b;1 代表新鲜橘子&#xff1b;2 代表腐烂的橘子。 每分钟&#xff0c;腐…...

专为AI打造的浏览器:内存占用仅为Chrome的1/9、比Chrome快11倍(Docker部署教程,支持飞牛nas等服务器部署)

文章目录 📖 介绍 📖 🏡 演示环境 🏡 📒 轻量级无头浏览器介绍与Docker部署指南 📒 📝 工具介绍 🎯 为什么选择它 🔧 Docker Compose 快速部署 💡 连接进行自动化操作 ⚠️ 注意事项 📊 性能对比 🎯 适用场景 ⚓️ 相关链接 ⚓️ 📖 介绍 📖 在自动…...

绕过RK3588的RGA坑:手把手教你修改YOLOv8分割模型部署代码,用CPU预处理替代硬件加速

RK3588部署YOLOv8分割模型的稳定化实践&#xff1a;从RGA报错到CPU预处理方案优化 当你在RK3588开发板上部署YOLOv8分割模型时&#xff0c;是否遇到过这样的场景&#xff1a;模型转换和交叉编译一切顺利&#xff0c;却在运行时突然弹出"Failed to call RockChipRga interf…...

本地部署音效生成器 Moodist 并实现外部访问

Moodist 是基于 MIT 许可的开源白噪音平台&#xff0c;提供了超过 75 种不同的环境声音&#xff0c;可以帮助用户集中注意力、保持冷静或进入放松状态。它还支持持久化声音选择&#xff0c;用户能够自定义声音预设&#xff0c;分享他们的音频配置给他人&#xff0c;并且集成睡眠…...