基于LLamaIndex框架实现RAG基础聊天-界面构建(二)

一、 插件分享:

由于LLamaIndex框架以及接下来的chainlit框架文档均为英文,且专业名词较多,先在这里分享一个Google插件:沉浸式翻译,在Google商店搜索即可,根据安装提示使用,在这里就不多赘述了
在这里插入图片描述


接上次:https://blog.youkuaiyun.com/RX0117/article/details/144970806

二、界面实现:

1.常用的界面模块

  • chainlit,官网:https://docs.chainlit.io/get-started/overview
  • stremlit, 官网:https://streamlit.io/
  • gradio,官网:https://www.gradio.app/

今天我们选择使用chainlit框架实现

2.安装chainlit

pip install chainlit

检查安装是否成功

chainlit hello

如果出现以下报错
在这里插入图片描述主要原因是pydantic的版本问题,安装pydantic为2.9.2版本即可

pip uninstall pydantic
pip install pydantic==2.9.2

再次执行终端命令

chainlit hello

在这里插入图片描述
在这里插入图片描述
一个最基本的页面就显示出来了,我们在终端按住Ctrl+c退出后发现项目内多出来两个文件,.chainlitchainlit.md这两个是chainlit的项目配置文件
在这里插入图片描述

3.界面构建

来到官网,找到搜索框
在这里插入图片描述
我们搜索llama index
在这里插入图片描述
往下翻,找到官网app源码
在这里插入图片描述
我们将main.py以及.chainlit和chainlit.md删除,并创建一个pro文件夹,用于后续文件管理,在pro中创建app.py,将llms.py移入pro中
在这里插入图片描述

官网的app.py代码这里我就复制下来给大家
注:有些地方我们需要删除或更改,暂时不可直接使用
官网app.py代码

import os
import openai
import chainlit as cl

from llama_index.core import (
    Settings,
    StorageContext,
    VectorStoreIndex,
    SimpleDirectoryReader,
    load_index_from_storage,
)
from llama_index.llms.openai import OpenAI
from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.core.query_engine.retriever_query_engine import RetrieverQueryEngine
from llama_index.core.callbacks import CallbackManager
from llama_index.core.service_context import ServiceContext

openai.api_key = os.environ.get("OPENAI_API_KEY")

try:
    # rebuild storage context
    storage_context = StorageContext.from_defaults(persist_dir="./storage")
    # load index
    index = load_index_from_storage(storage_context)
except:
    documents = SimpleDirectoryReader("./data").load_data(show_progress=True)
    index = VectorStoreIndex.from_documents(documents)
    index.storage_context.persist()


@cl.on_chat_start
async def start():
    Settings.llm = OpenAI(
        model="gpt-3.5-turbo", temperature=0.1, max_tokens=1024, streaming=True
    )
    Settings.embed_model = OpenAIEmbedding(model="text-embedding-3-small")
    Settings.context_window = 4096

    service_context = ServiceContext.from_defaults(callback_manager=CallbackManager([cl.LlamaIndexCallbackHandler()]))
    query_engine = index.as_query_engine(streaming=True, similarity_top_k=2, service_context=service_context)
    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: RetrieverQueryEngine

    msg = 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()

由于我们使用的具体配置与官方的不同,需要对app.py进行删减
app.py简化版

import chainlit as cl
from llama_index.core import Settings
from llama_index.core.chat_engine import SimpleChatEngine

from llms import deepseek_llm


@cl.on_chat_start
async def start():
    # 初始化大型语言模型(LLM)设置
    Settings.llm = deepseek_llm()
    # 创建一个简单的聊天引擎实例
    chat_engine = SimpleChatEngine.from_defaults()
    # 将聊天引擎对象存储到用户会话中
    cl.user_session.set('chat_engine', chat_engine)
    # 发送一条欢迎消息
    await cl.Message(
        author="Assistant", content="你好!我是 AI 助⼿。有什么可以帮助你的吗?"
    ).send()

# chainlit消息事件处理函数
@cl.on_message
async def main(message: cl.Message):
    # 从用户会话中获取chat_engine聊天引擎对象
    chat_engine = cl.user_session.get('chat_engine')
    # 初始化一个空的消息对象,内容为空,作者名为"Assistant"
    msg = cl.Message(content='', author="Assistant")
    # 使用chat_engine的stream_chat方法处理接收到的消息内容,并将结果转换为异步响应
    res = await cl.make_async(chat_engine.stream_chat)(message.content)

    # 流式输出界面
    # 遍历生成响应内容。逐个令牌输出
    for token in res.response_gen:
        await msg.stream_token(token)
    await msg.send()

然后我们打开终端在终端使用命令,进入pro文件夹
注:一定要进入pro文件夹

cd pro

再使用运行命令
注:chainlit run 文件名(一定要有文件名后缀) -w

chainlit run app.py -w

启动完成后
我们的pro文件夹下会多出几个文件,其中一些是关于chainlit的配置文件,后续需要使用
在这里插入图片描述
构建好的基本界面
在这里插入图片描述

4.小结

这里简单解释一下app.py中的代码功能
这段代码实现了基于AI的聊天应用,主要包含了两个主要的异步函数:
1.strat()函数:

  • 当聊天开始时执行
  • 初始化语言模型和聊天引擎,并发送欢迎消息给用户
  1. main(message: cl.Message)函数:
  • 处理用户发送的消息
  • 使用聊天引擎生成回复内容并反馈给用户,以流式输出的方式发送给用户。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值