首页 > 其他分享 >使用chainlit快速构建类似OPEN AI一样的对话网页

使用chainlit快速构建类似OPEN AI一样的对话网页

时间:2024-07-30 08:59:04浏览次数:16  
标签:cl AI settings chainlit -- token msg OPEN

快速开始

创建一个文件,例如“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~=1.1.306
openai~=1.37.0

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

import base64
import time
from io import BytesIO

import chainlit as cl
from chainlit.element import ElementBased
from chainlit.input_widget import Select, Slider, Switch
from openai import AsyncOpenAI

client = AsyncOpenAI()


@cl.on_settings_update
async def on_settings_update(settings: cl.chat_settings):
    print("settings", settings)
    cl.user_session.set("settings", settings)


@cl.on_chat_start
async def start_chat1():
    settings = await cl.ChatSettings(
        [
            Select(
                id="Model",
                label="Model",
                values=["qwen-turbo", "qwen-plus", "qwen-max", "qwen-vl-v1", "qwen-vl-chat-v1"],
                initial_index=0,
            ),
            Slider(
                id="Temperature",
                label="Temperature",
                initial=1,
                min=0,
                max=2,
                step=0.1,
            ),
            Slider(
                id="MaxTokens",
                label="MaxTokens",
                initial=1000,
                min=1000,
                max=3000,
                step=100,
            ),
            Switch(id="Streaming", label="Stream Tokens", initial=True),
        ]
    ).send()
    cl.user_session.set("settings", settings)
    content = "你好,我是泰山AI智能客服,有什么可以帮助您吗?"
    msg = cl.Message(content="")
    for token in content:
        time.sleep(0.1)
        await msg.stream_token(token)
    await msg.send()


@cl.on_message
async def main(message: cl.Message):
    msg = cl.Message(content="", author="tarzan")
    await msg.send()
    settings = cl.user_session.get("settings")
    print('settings', settings)
    streaming = settings['Streaming']
    response = await client.chat.completions.create(
        model=settings['Model'],
        messages=cl.chat_context.to_openai(),
        temperature=settings['Temperature'],
        max_tokens=int(settings['MaxTokens']),
        stream=streaming
    )
    if streaming:
        async for part in response:
            #print('part', part)
            if token := part.choices[0].delta.content or "":
                await msg.stream_token(token)
    else:
        #print('response', response)
        if token := response.choices[0].message.content or "":
            await msg.stream_token(token)
    await msg.update()

  • 由于国内open ai 的限制使用,代码中使用的oneapi代理的通义千问的api

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

OPENAI_BASE_URL="http://203.176.92.154:3001/v1"
OPENAI_API_KEY=""
  • 由于国内open ai 的限制使用,代码中使用的oneapi代理的通义千问的api
  • OPENAI_BASE_URL是oneapi的代理地址OPENAI_API_KEY是oneapi的令牌

执行以下命令安装依赖:

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

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

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

命令行选项

Chainlit CLI(命令行界面)是一种允许您通过命令行与 Chainlit 系统交互的工具。它提供了几个命令来管理您的 Chainlit 应用程序。

init 命令

该init命令通过创建位于以下位置的配置文件来初始化 Chainlit 项目.chainlit/config.toml

chainlit init

run 命令

该run命令启动 Chainlit 应用程序。

chainlit run [OPTIONS] TARGET

选项:

  • -w, --watch :模块更改时重新加载应用程序。指定此选项后,将启动文件监视程序,对文件的任何更改都会导致服务器重新加载应用程序,从而实现更快的迭代。
  • -h, --headless:阻止应用程序在浏览器中打开。
  • -d, --debug :将日志级别设置为调试。默认日志级别为错误。
  • -c, --ci :以 CI 模式运行。
  • --no-cache :禁用第三方缓存,例如 langchain。
  • --host :指定运行服务器的其他主机。
  • --port :指定运行服务器的不同端口。
  • --root-path :指定运行服务器的子路径。

启动后界面如下:
在这里插入图片描述

相关文章推荐

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

标签:cl,AI,settings,chainlit,--,token,msg,OPEN
From: https://blog.csdn.net/weixin_40986713/article/details/140764448

相关文章

  • 从opencv视频文件夹中读取并提取关键点
    我的文件夹中有一个视频列表(每个视频10秒),我试图循环遍历每个动作视频以提取关键点并将它们保存为json文件。path="pathtovideofolder"forfileinos.listdir(path):cap=cv2.VideoCapture(path+file)whilecap.isOpened():try:ret,frame=cap.......
  • ImportError:无法从“langchain_core.utils”导入名称“pre_init”
    当我想从requirements.txt安装langchain库时,我得到ImportError:cannotimportname'pre_init'from'langchain_core.utils'我尝试使用这些命令从终端安装库:pipinstallgigachainpipinstallgigachatpipinstall-Ulangchain-community并且它正在工作,所以我使......
  • Python OpenCV - 显示坏像素检查测试
    我想找到显示器中存在的每个坏像素。坏像素可能是颜色不正确的像素,或者像素只是黑色。显示屏的尺寸为160x320像素。所以如果显示效果好的话,必须有160*320=51200像素。如果显示器没有51200像素,那就是坏的。另外,我想知道每个坏像素的位置。一旦拍摄的图像太大,我将共享一个......
  • OpenGL3.3_C++_Windows(32)
    demoSSAOSSAO环境光照(AmbientLighting):光的散射,我们通过一个固定的常量作为环境光的模拟,但是这种固定的环境光并不能很好模拟散射,因为环境光不是一成不变的,环境光遮蔽:让(褶皱、孔洞)等变暗的方法近似模拟出间接光照,但是这一技术会带来很大的性能开销,因为它还......
  • 《史上最简单的SpringAI+Llama3.x教程》-05-打破界限,Function Calling在业务场景中的
    什么是FunctionCallingFunctionCalling是一种技术,它允许大型语言模型(如GPT)在生成文本的过程中调用外部函数或服务。这种功能的核心在于,模型本身不直接执行函数,而是生成包含函数名称和执行函数所需参数的JSON,然后由外部系统执行这些函数,并将结果返回给模型以完成对话或......
  • 探索10个流行嵌入库:AI文本嵌入的优势与局限
      每周跟踪AI热点新闻动向和震撼发展想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领域的领跑者。点击订阅,与未来同行!订阅:https://......
  • Ubuntu、centos、openEuler安装docker
    目录1.在Ubuntu上安装Docker1.1更新软件包1.2安装必要的依赖1.3添加Docker的GPG密钥1.4 添加Docker仓库1.5 更新软件包1.6 安装Docker1.7启动并启用Docker服务1.8 验证安装1.9 运行测试容器1.10 非root用户运行Docker2.在CentOS上安......
  • LLM(大语言模型)和AIGC入门学习路线图
    01—学习路线图基础了解目标:理解人工智能、机器学习、深度学习的基本概念。资源:在线课程(如Coursera,edX上的入门课程)、博客文章、YouTube视频。专业知识目标:深入了解大型语言模型(如GPT-4)和人工智能生成内容的工作原理。资源:阅读相关的学术论文、技术......
  • AI造梦师,大模型正在孵化下一个黄金职业
    大模型每次一有突破,我们就会听到它又“摧毁了XX职业”“XX岗位要消失了”,也总能听到一些安慰,说不用担心,“AI会创造一些新职业”。但究竟将创造哪些新职业,答案似乎还比较含糊。有没有一些真实可见的例子呢?几年前,我在某自动驾驶企业参观时,发现了一个新职业:云代驾。操作员坐......
  • Task.waitALL 和Task.WhenALL有什么区别?如何使用
    Task.WaitAll和Task.WhenAll是两个不同的方法,它们都用于等待一组任务完成,但它们之间存在一些重要的区别。Task.WaitAllWaitAll是一个同步方法,它会阻塞当前线程直到所有指定的任务完成。这意味着如果你在一个需要响应用户输入的线程上调用WaitAll,那么这个线程将会停止响应,直......