前言
之前使用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 sdk
。 Chainlit
需要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 在本地快速部署大型语言模型,可进行定制并创建属于您自己的模型》