Chainlit接入DifyAI知识库接口快速实现自定义用户聊天界面

前言

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

快速开始

获取dify的base_url和api_key

Dify官网地址 https://dify.ai/zh

登录Dify后台,在工作室里,选择一个你创建的应用,点击进入。
在这里插入图片描述
点击访问 API,点击API 密匙,创建一个,访问APIKEY. 复制服务器地址,后面需要配置到Chainlit的环境变量中
在这里插入图片描述
复制API密匙,后面需要配置到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

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

import os

import aiohttp
import chainlit as cl
import json

import requests

dify_base_url = os.environ["DIFY_BASE_URL"]
dify_api_key = os.environ["DIFY_API_KEY"]


@cl.on_chat_start
def start_chat():
    cl.user_session.set("message_history", [])


@cl.on_message
async def main(message: cl.Message):
    message_history = cl.user_session.get("message_history")
    message_history = message_history[-8:]
    message_history.append({"role": "user", "content": message.content, "content_type": "text"})
    msg = cl.Message(content="")
    url = f"{dify_base_url}/chat-messages"
    headers = {
        "Authorization": f"Bearer {dify_api_key}",
        "Content-Type": "application/json"
    }
    print(headers)
    data = {
        "inputs": {},
        "query": message.content,
        "user": "tarzan",
        "conversation_id": "",
        "response_mode": "streaming",
        "files": []
    }
    async for delta in fetch_sse(url, headers=headers, data=json.dumps(data)):
        task_id = delta.get("task_id", '')
        cl.user_session.set("task_id",task_id)
        await msg.stream_token(delta.get("answer", ''))
    await msg.send()


# message_history.append({"role": "assistant", "type": "answer", "content": msg.content, "content_type": "text"})


@cl.on_stop
def on_stop():
    print("The user wants to stop the task!")
    task_id = cl.user_session.get("task_id")
    print('task_id-------', task_id)
    if task_id:
        url = f"{dify_base_url}/chat-messages/{task_id}/stop"
        print('url', url)
        headers = {
            "Authorization": f"Bearer {dify_api_key}",
            "Content-Type": "application/json"
        }
        print(headers)
        data = {"user": "tarzan"}
        with requests.post(
                url,
                headers=headers,
                data=data,
        ) as resp:
            print('resp',resp.content)


async def fetch_sse(url, headers, data):
    async with aiohttp.ClientSession() as session:
        async with session.post(url, headers=headers, data=data) as response:
            async for line in response.content:
                if line:  # 过滤掉空行
                    data = line.decode('utf-8').rstrip('\n\r')
                    print(f"Received: {line}")
                    # 检查是否为事件类型行
                    if data.startswith('data:'):
                        data = data.split(':', 1)[1].strip()  # 提取数据内容
                        # 如果数据包含换行符,可能需要进一步处理(这取决于你的具体需求)
                        # 这里我们简单地打印出来
                        # print(f"Received data for event 'conversation.message.delta': {data}")
                        yield json.loads(data)

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

DIFY_BASE_URL="https://api.dify.ai/v1"
DIFY_API_KEY="app-key"
  • 如何是私有化部署,DIFY_BASE_URL替换成你私有化服务器的地址
  • DIFY_API_KEY 替换成你自己的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 可以实现聊天的界面的完全自定义
  • chainlit 可以整理整合开源语音识别、语音播放、文件上传管理等功能
  • 本代码只整合了dify api的对话接口,后续可以接入文件图片上传的接口、历史会话记录等。

相关文章推荐

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

  • 17
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
`Chainlit`是一个用于构建和部署机器学习模型的Python库,它主要针对Jupyter Notebook环境。这个库使得创建、测试和部署复杂的机器学习工作流程变得简单,并提供了一种直观的方式来组织和管理各种任务。 当你尝试运行`chainlit`并收到错误信息“不是内部或外部命令,也不是可运行的程序或批处理文件”,这通常意味着你的Python环境并没有安装或无法找到这个库。解决这个问题的步骤如下: ### 解决方案 #### 1. 安装`chainlit` 如果你的环境中还没有`chainlit`,你可以通过pip安装它。在命令行界面输入以下命令: ```bash pip install chainlit ``` 如果你使用的是虚拟环境,确保先激活了你的虚拟环境再执行上述命令。 #### 2. 检查是否安装成功 安装完成后,你可以通过导入`chainlit`模块来检查是否已正确安装: ```python import chainlit ``` 如果没有任何异常并且能够顺利导入该模块,则说明`chainlit`已经成功安装。 ### 相关问题: 1. **如何验证`chainlit`是否已经被安装?** - 使用 `pip list` 命令查看当前安装的所有Python包列表,查找是否有`chainlit`项。 2. **在特定项目中安装`chainlit`而不是全局安装?** - 创建一个新的虚拟环境并在其中安装`chainlit`,避免影响系统级别的Python安装。可以使用 `conda create -n myenv` 和 `conda activate myenv` 来创建和激活虚拟环境,然后在该环境下执行 `pip install chainlit`。 3. **如何更新到最新版本的`chainlit`?** - 如果需要更新到最新的`chainlit`版本,可以使用 `pip install --upgrade chainlit` 命令。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泰山AI

原创不易,感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值