首页 > 其他分享 >Chainlit接入FastGpt接口快速实现自定义用户聊天界面

Chainlit接入FastGpt接口快速实现自定义用户聊天界面

时间:2024-08-21 14:55:32浏览次数:18  
标签:FastGpt 自定义 -- chainlit token Chainlit msg 应用程序

前言

由于fastgpt只提供了一个分享用的网页应用,网页访问地址没法自定义,虽然可以接入NextWeb/ChatGPT web等开源应用。但是如果我们想直接给客户应用,还需要客户去设置配置,里面还有很多我们不想展示给客户的东西怎么办?于是,我使用Chainlit实现了一个无缝快速接入fastgpt实现自定义用户使用界面的应用,代码清晰简单。还可以自定义logo、欢迎语、网站图标等。

快速开始

获取fastgpt的base_url和api_key

登录fastgpt后台,在工作台里,点击自己创建的AI应用,点击发布渠道,点击API访问创建,访问APIKEY.
在这里插入图片描述

  • 复制API_KEYAPI根地址,后面需要配置到Chainlit的环境变量中

chainlit网页搭建

创建一个文件,例如“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_chat_start
async def start_chat1():
    content = "你好,我是泰山AI智能客服,有什么可以帮助您吗?"
    msg = cl.Message(content="")
    for token in content:
        time.sleep(0.2)
        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()
    response = await client.chat.completions.create(
        model="gpt-3.5", # 这里随便写,fastgpt接口最终使用的是你后台配置的模型
        messages=cl.chat_context.to_openai(),
        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()

  • 传入的model,temperature等参数字段均无效,这些字段由编排决定,不会根据 API 参数改变。

  • 不会返回实际消耗Token值,如果需要,可以设置detail=true,并手动计算 responseData 里的tokens值。

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

OPENAI_BASE_URL="https://api.fastgpt.in/api/v1"
OPENAI_API_KEY="fastgpt-key"
  • 配置里替换为自己应用的api根地址api的key
  • api根地址需要加上/v1,私有化部署替换成私有化的 api根地址

执行以下命令安装依赖:

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

运行应用程序

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

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

命令行选项

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

标签:FastGpt,自定义,--,chainlit,token,Chainlit,msg,应用程序
From: https://blog.csdn.net/weixin_40986713/article/details/141390473

相关文章

  • Operators和 自定义控制器(Custom Controllers)的区别
    在Kubernetes中,Operators和自定义控制器(CustomControllers)都是用于扩展Kubernetes的功能和管理自定义资源的工具。虽然它们有很多相似之处,但它们的用途和设计目标有一些重要的区别。自定义控制器(CustomControllers)自定义控制器是Kubernetes的控制器模式的一部分,用于管......
  • 自定义 MySQL Shell 提示符
    MySQLShell中的提示符的样式和格式可以根据使用者的需求进行定制。我们可以配置提示符以显示有关数据库连接和使用的模式的不同或简化信息。本文将展示如何添加视觉提示,让您知道何时连接到生产数据库。设置步骤既然您正在阅读关于自定义MySQLShell的内容,您应该已经安装了它......
  • X-anylabeling如何手动加载(自定义)模型 : 以Segment Anything 为例
    提示:文章目录前言1手动下载模型至软件默认读取路径2加载自定义模型假设你已有模型(.pth),如何进行导出安装导出工具导出你的模型,在标注软件中加载模型打开软件,加载‘自定义’模型。并选择上面提到的配置文件X-anylabeling源码安装过程中遇到的问题GPU环境问题opencv......
  • Windows 上使用 PowerShell 设置防火墙规则和端口转发; Windows 上配置端口转发,将 3389
    在PowerShell中配置Windows防火墙的端口转发涉及几个步骤。首先,你需要确保你有足够的权限来进行这些操作(通常需要管理员权限)。以下是如何在PowerShell中配置端口转发的示例步骤:1. 打开PowerShell以管理员身份运行PowerShell。你可以右键点击PowerShell图标,选择“以管......
  • QTabWidget自定义样式(仿DotNetBar)
    QSS如下,若需要tab栏背景色需要添加ui->tabWidget->setAttribute(Qt::WA_StyledBackground);语句使background-color生效,这个时候qtdesigner中仍然看不到背景色,但是不要担心它是生效的,只需在属性中勾上autofillbackground即可在designer中预览(该属性在QWidget属性组中,实际上勾不勾......
  • Swift中的强大构建块:自定义运算符全解析
    标题:Swift中的强大构建块:自定义运算符全解析在Swift编程语言中,运算符是执行操作的一种快捷方式,它们可以用于简单的数学计算,也可以用于复杂的逻辑处理。Swift不仅提供了丰富的内置运算符,还允许开发者定义自己的运算符,以适应特定的编程需求。本文将深入探讨如何在Swift中实现......
  • .net core 自定义异常信息
    思路:在startup.cs的configservice中配置一下,异常实现 ExceptionFilterAttribute接口 1publicclassExceptionConfig2{3publicstaticvoidConfigureServices(IServiceCollectionservices)4{5//自定义捕捉异常6services.AddCont......
  • IOS 12 自定义用户协议对话框
    实现效果实现逻辑本文使用QMUI里面提供的控制器+自定义控件实现。添加依赖#腾讯开源的UI框架,提供了很多功能,例如:圆角按钮,空心按钮,TextView支持placeholder#https://github.com/QMUI/QMUIDemo_iOS#https://qmuiteam.com/ios/get-startedpod"QMUIKit"还不了解如何使......
  • 5章1节:用R语言进行定量数据的统计描述,文末有众数的自定义函数
    在科研中,很多资料经过整理之后,常常需要进行一系列的统计分析,以说明资料的特征。这种分析方法中,统计描述是最基础且最重要的部分之一。统计描述主要通过统计指标和统计图表来描述数据的分布规律及其数量特征,从而为后续的统计推断提供基础。统计描述不仅在医学科研中应用广泛,在......
  • Vue 自定义指令
    除了核心功能默认内置的指令v-model和v-showvue也允许注册自定义指令。注意,在Vue2.0中,代码复用和抽象的主要形式是组件。然而,有的情况下,你仍然需要对普通Dom元素进行底层操作,这时候就会用到自定义指令。有两种方式定义自定义指令,一:局部定义自定义指令1、局部自定......