Chainlit集成LlamaIndex并使用通义千问模型实现AI知识库检索网页对话应用

前言

之前使用Chainlit集成Langchain并使用通义千问大语言模型的API接口,实现一个基于文档文档的网页对话应用。
可以点击我的上一篇文章《Chainlit集成Langchain并使用通义千问和智谱AI实现AI知识库检索网页对话应用》 查看。 本次将Langchain框架更改为LlamaIndex 框架来实现基于文档问答的机器人。LlamaIndex 在文档加载解析和构建索引的时候,步骤更简单,代码更少,我做了有限的知识检索测试,感觉LlamaIndex知识检索的准确度,比langchain更精准一些,检索速度差不多,没有能感知到的差距,如果你有时间也可以对比一下,两种框架在数据检索方面的孰优孰劣。

LlamaIndex 简介

LlamaIndex是一个数据框架,它主要为基于大语言模型(LLM)的应用程序设计,允许这些应用程序摄取、结构化并访问私有或特定领域的数据。这种框架对于那些希望利用LLM的强大能力来处理自身专属数据集的组织来说尤其有用。由于大多数公开的大语言模型都是在大量的公共数据上训练的,它们缺乏对用户特定数据的理解,而这正是LlamaIndex发挥作用的地方。

LlamaIndex支持Python和TypeScript,使得开发者可以通过使用这些编程语言来集成和操作数据。它不仅提供了一个与LLM交互的自然语言接口,还允许用户安全地将自己的数据注入到LLM中,以增强模型的响应能力和准确性。

LlamaIndex的一些关键特点包括:

  • 上下文增强:LlamaIndex是一个检索增强生成(RAG)系统,意味着它可以使用外部数据来增强模型生成的答案。
  • 易用性:作为一个开发者友好的接口,LlamaIndex简化了将外部数据连接到LLM的过程。
  • 灵活性:支持多种数据源类型,包括API、PDF文件、文档以及SQL数据库。
  • 安全性:确保私有数据的安全接入,不会被泄露给模型训练过程。
  • 可组合性:允许在不同级别定义索引,比如单个文档级别的索引或文档组级别的索引。

总的来说,LlamaIndex旨在帮助开发人员和企业更好地利用现有的数据资源,通过与先进的LLM相结合,创造出更加智能化的应用和服务。

LlamaIndex官方地址 https://docs.llamaindex.ai/en/stable/

快速上手

创建一个文件,例如“chainlit_chat”

mkdir chainlit_chat

进入 chainlit_chat文件夹下,执行命令创建python 虚拟环境空间(需要提前安装好python sdkChainlit 需要python>=3.8。,具体操作,由于文章长度问题就不在叙述,自行百度),命令如下:

python -m venv .venv
  • 这一步是避免python第三方库冲突,省事版可以跳过
  • .venv是创建的虚拟空间文件夹可以自定义

接下来激活你创建虚拟空间,命令如下:

#linux or mac
source .venv/bin/activate
#windows
.venv\Scripts\activate

在项目根目录下创建requirements.txt,内容如下:

chainlit
llama-index-core
llama-index-llms-dashscope
llama-index-embeddings-dashscope

执行以下命令安装依赖:

pip install -r .\requirements.txt
  • 安装后,项目根目录下会多出.chainlit.files文件夹和chainlit.md文件

代码创建

只使用通义千问的DashScope模型服务灵积的接口

在项目根目录下创建.env环境变量,配置如下:

DASHSCOPE_API_KEY="sk-api_key"
  • DASHSCOPE_API_KEY 是阿里dashscope的服务的APIkey,代码中使用DashScope的sdk实现,所以不需要配置base_url。默认就是阿里的base_url。
  • 阿里模型接口地址 https://dashscope.console.aliyun.com/model

在项目根目录下创建app.py文件,代码如下:

import osimport chainlit as cl
from llama_index.core import (Settings,VectorStoreIndex,SimpleDirectoryReader,
)
from llama_index.core.node_parser import SentenceSplitter
from llama_index.core.query_engine.retriever_query_engine import RetrieverQueryEngine
from llama_index.embeddings.dashscope import DashScopeEmbedding, DashScopeTextEmbeddingModels, \DashScopeTextEmbeddingType
from llama_index.llms.dashscope import DashScope, DashScopeGenerationModelsSettings.llm = DashScope(model_name=DashScopeGenerationModels.QWEN_TURBO, api_key=os.environ["DASHSCOPE_API_KEY"]
)
Settings.embed_model = DashScopeEmbedding(model_name=DashScopeTextEmbeddingModels.TEXT_EMBEDDING_V2,text_type=DashScopeTextEmbeddingType.TEXT_TYPE_DOCUMENT,
)
Settings.node_parser = SentenceSplitter(chunk_size=512, chunk_overlap=20)
Settings.num_output = 512
Settings.context_window = 3900@cl.cache
def vector_store_index():documents = SimpleDirectoryReader("./data_file").load_data(show_progress=True)index = VectorStoreIndex.from_documents(documents)index.storage_context.persist()return index@cl.on_chat_start
async def start():query_engine = vector_store_index().as_query_engine(streaming=True, similarity_top_k=3)cl.user_session.set("query_engine", query_engine)await cl.Message(author="Assistant", content="Hello! Im an AI assistant. How may I help you?").send()@cl.on_message
async def main(message: cl.Message):query_engine = cl.user_session.get("query_engine")  # type: RetrieverQueryEnginemsg = cl.Message(content="", author="Assistant")res = await cl.make_async(query_engine.query)(message.content)for token in res.response_gen:await msg.stream_token(token)await msg.send()

在项目根目录下创建data_file文件夹

在这里插入图片描述
将你的文件放到这里,代码中设置的支持,pdf、doc、csv 、txt格式的文件,后续可以根据自己的需求增加更多,langchain带有很多格式文件的加载器,可以自行修改代码。

运行应用程序

要启动 Chainlit 应用程序,请打开终端并导航到包含的目录app.py。然后运行以下命令:

 chainlit run app.py -w   
  • -w标志告知 Chainlit 启用自动重新加载,因此您无需在每次更改应用程序时重新启动服务器。您的聊天机器人 UI 现在应该可以通过http://localhost:8000访问。
  • 自定义端口可以追加--port 80

启动后界面如下:

在这里插入图片描述

相关文章推荐

《Chainlit快速实现AI对话应用的界面定制化教程》
《Chainlit接入FastGpt接口快速实现自定义用户聊天界面》
《使用 Xinference 部署本地模型》
《Fastgpt接入Whisper本地模型实现语音输入》
《Fastgpt部署和接入使用重排模型bge-reranker》
《Fastgpt部署接入 M3E和chatglm2-m3e文本向量模型》
《Fastgpt 无法启动或启动后无法正常使用的讨论(启动失败、用户未注册等问题这里)》
《vllm推理服务兼容openai服务API》
《vLLM模型推理引擎参数大全》
《解决vllm推理框架内在开启多显卡时报错问题》
《Ollama 在本地快速部署大型语言模型,可进行定制并创建属于您自己的模型》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/422821.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hive任务优化参数整理

Hive本身是个基于hdfs的结构化数据管理工具,虽然在后面的发展中允许底层接入其他的数据源,比如第三方数据服务这种基础架构,但是它从立意上来说,它不适合用来做高性能查询引擎,反而在传统离线数据仓库中它有着自身的优…

使用 Elastic 和 LM Studio 的 Herding Llama 3.1

作者:来自 Elastic Charles Davison, Julian Khalifa 最新的 LM Studio 0.3 更新使 Elastic 的安全 AI Assistant 能够更轻松、更快速地与 LM Studio 托管模型一起运行。在这篇博客中,Elastic 和 LM Studio 团队将向你展示如何在几分钟内开始使用。如果你…

校园生活点餐外卖配送到宿舍小程序源码系统 带完整的安装代码包以及搭建部署教程

系统概述 随着移动互联网的普及和校园生活的多元化,学生们对于线上点餐、外卖配送等服务的依赖度越来越高。然而,传统的校园餐饮服务模式往往存在效率低下、覆盖范围有限、信息不透明等问题,难以满足学生多样化的需求。因此,开发…

30万月变现3-6万,你也可以

30万月变现3-6万,你也可以 我相信,这些年我的IP还是吸引了不少的中产阶级关注我,什么叫中产阶级,就是兜里还是能随便掏出大几十大几百万的现金的,这群人,有着自己稳定的职业和收入来源,生活水平…

实例讲解电动汽车换挡控制策略及Simulink模型搭建方法

轻型电动汽车一般采用直驱的方式作为驱动方式,即不经过变速箱进行速比的调节,电机输出轴直接经过主减速器将动力传输至车轮。换挡器的换挡方式一般为VCU接收档位器的换挡请求后,根据整车当前状态判断换挡状态,最后输出当前档位状态…

已经30岁了,想转行从头开始现实吗?什么样的工作算好工作?

我是29岁那年,完成从转行裸辞副业的职业转型。 如果你把职业生涯看成是从现在开始30岁,到你退休那年,中间这么漫长的30年,那么30岁转行完全来得及; 如果你觉得必须在什么年纪,什么时间内必须完成赚到几十…

拯救手残党,一键转换季节天气变化效果图!

一键可转换四季或多种天气效果图 AI现在已经发展到这种程度了吗? 神采PromeAI也是卷起来了 以往通过【草图渲染】功能 就生成转化各种效果图 但这对用户来说还不够 又给大家上线了「场景转换器」功能 一键就能生成想要的各种时节场景的变化 一张效果图可以给…

机器学习之实战篇——MNIST手写数字0~9识别(全连接神经网络模型)

机器学习之实战篇——Mnist手写数字0~9识别(全连接神经网络模型) 文章传送MNIST数据集介绍:实验过程实验环境导入模块导入MNIST数据集创建神经网络模型进行训练,测试,评估模型优化 文章传送 机器学习之监督学习&#…

Qt绘制动态仪表(模仿汽车仪表指针、故障灯)

背景: 项目需要,可能需要做一些仪表显示。此篇除了介绍实现方法,还要说明心路历程。对我而言,重要的是心理,而不是技术。写下来也是自勉。 本人起初心里是比较抵触的,从业20多年了,深知所谓界…

springboot Web基础开发

Spring Boot 是一个用于简化 Spring 应用开发的框架,它通过自动配置和开箱即用的功能,使得创建和部署 Spring 应用变得更为高效。以下是 Spring Boot 基础 Web 开发的一些关键点和实操总结: 1. 项目搭建 使用 Spring Initializr: 访问 Spring…

【Centos】关于容器启动Centos7缺失字符集的问题

最近做一些软件测试和打包,需要频繁的装系统,索性用docker启Centos容器来做,基础镜像做好直接启就好,过程中遇到一个和字符集有关的问题,记录一下,方便遇到同样问题的小伙伴。 问题描述 运行某些python脚本…

Stable Diffusion绘画 | ControlNet应用-Inpaint(局部重绘):更完美的重绘

Inpaint(局部重绘) 相当于小号的AI版PS,不但可以进行局部画面的修改,还可以去除背景中多余的内容,或者是四周画面内容的扩充。 预处理器说明 Inpaint_Global_Harmonious:重绘-全局融合算法,会对整个图片的画面和色调…

达梦CASE_SENSITIVE参数解析

1. 参数含义 标识符大小写敏感,默认值为 Y。 当大小写敏感时,小写的标识符应用双引号括起,否则被转换为大写;当大小写不敏感时,系统不自动转换标识符的大小写,在标识符比较时也不区分大小写。 CASE_SENS…

QtCreator学习(二).在stm32mp1中使用

0.配置编译环境 复制【正点原子】STM32MP157开发板(A盘)-基础资料\05、开发工具\01、交叉编译器st-example-image-qtwayland-openstlinux-weston-stm32mp1-x86_64-toolchain-3.1-snapshot.sh到虚拟机chmod添加可执行文件,./st*运行&#xff…

【JAVA】Tomcat性能优化、安全配置、资源控制以及运行模式超详细

文章目录 一、Tomcat性能优化application.yml配置maxThreads 连接数限制压缩传输AJP禁用 二、JVM方向优化设置并行垃圾回收器查看gc日志文件 三、Tomcat安全配置入侵防范禁用非法HTTP请求方法禁止目录列出防止恶意关闭服务配置HTTPS加密协议HttpOnly标记安全头配置 四、Tomcat资…

【鸿蒙】HarmonyOS NEXT星河入门到实战8-自定义组件-组件通信

目录 1、模块化语法 1.1 模块化基本认知 1.2 默认导出和导入 1.3 按需导出和导入 1.4 全部导入 2、自定义组件 -基础 2.1 自定义组件 - 基本使用 2.2 自定义组件 -通用样式 2.3 自定义组件 -成员函数变量 3、 状态管理 3.1 状态管理概述 3.2 State 自己的状态 3.3…

硬盘格式化后能恢复数据吗?教你如何恢复硬盘数据

在数字时代,硬盘作为存储数据的重要设备,承载着人们大量的工作文件、珍贵照片、重要视频等。然而,由于误操作、病毒感染或系统升级等原因,有时我们不得不对硬盘进行格式化。那么,硬盘格式化后,里面的数据还…

spring综合性利用工具-SpringBootVul-GUI(五)

项目地址 https://github.com/wh1t3zer/SpringBootVul-GUI 0x01简介 本着简单到极致的原则,开发了这么一款半自动化工具(PS:这个工具所包含了20个漏洞,开发不易,有任何问题可提issue) 尽管是一个为懒人量…

【免费刷题】实验室安全第一知识题库分享

道路千万条,实验安全第一条。 嘿,实验室的小伙伴们!是不是还在为实验室安全考试而烦恼?别担心,今天就让我来分享一些实用的题库,帮助你轻松应对考试,同时也更好地保护自己和实验室的安全。 一、…