使用Chainlit接入通义千问快速实现一个多模态的对话应用

开通灵识服务

首先需要到阿里云-模型服务灵积开通账户,获得apiKey
模型服务灵积 https://dashscope.aliyun.com/
进入控制台 ,在API-KEY管理里,创建一个新的API-KEY,然后保存起来,后面会用到。

模型服务灵积服务所有API文档地址 https://help.aliyun.com/zh/dashscope/developer-reference

快速开始

创建项目

创建一个文件,例如“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文件

在项目根目录下创建requirements.txt,内容如下:

chainlit~=1.1.306
openai~=1.37.0

创建app.py文件

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

import base64
from io import BytesIO
from pathlib import Pathimport chainlit as cl
from chainlit.element import ElementBased
from chainlit.input_widget import Select, Slider, Switch
from openai import AsyncOpenAIclient = AsyncOpenAI()def encode_image(image_path):with open(image_path, "rb") as image_file:return base64.b64encode(image_file.read()).decode("utf-8")@cl.on_settings_update
async def on_settings_update(settings: cl.chat_settings):cl.user_session.set("settings", settings)@cl.on_chat_start
async def start_chat():settings = await cl.ChatSettings([Select(id="Model",label="Model",values=["qwen-turbo", "qwen-plus", "qwen-max"],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=content)await msg.send()@cl.on_message
async def on_message(message: cl.Message):settings = cl.user_session.get("settings")print('settings', settings)streaming = settings['Streaming']model = settings['Model']print('elements', message.elements)images = [file for file in message.elements if "image" in file.mime]files = [file for file in message.elements if "application" in file.mime]messages = cl.chat_context.to_openai()if files:model = "qwen-long"files = files[:3]pdfs_content = []for file in files:file_object = await client.files.create(file=Path(file.path), purpose="file-extract")print('file_object', file_object)pdfs_content.append({"role": "system","content": f"fileid://{file_object.id}",})pdfs_content.append({"role": "user", "content": message.content})messages = pdfs_contentif images and model in ["qwen-plus", "qwen-max"]:# Only process the first 3 imagesimages = images[:3]images_content = [{"type": "image_url","image_url": {"url": f"data:{image.mime};base64,{encode_image(image.path)}"},}for image in images]model = "qwen-vl" + model[4:]messages = [{"role": "user","content": [{"type": "text", "text": message.content}, *images_content],}]msg = cl.Message(content="", author="tarzan")await msg.send()print('messages', messages)response = await client.chat.completions.create(model=model,messages=messages,temperature=settings['Temperature'],max_tokens=int(settings['MaxTokens']),stream=streaming)if streaming:async for part in response:if token := part.choices[0].delta.content or "":await msg.stream_token(token)else:if token := response.choices[0].message.content or "":await msg.stream_token(token)await msg.update()
  • 根据qwen的接口文档,文档类的需要用qwen-long模型处理,图片需要用qwen-vl模型处理

创建.env文件

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

OPENAI_BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1"
OPENAI_API_KEY=""
  • 由于国内open ai 的限制使用,代码中使用的灵识服务提供兼容open ai的接口
  • OPENAI_BASE_URL是为固定地址
  • OPENAI_API_KEY是你创建灵识服务的API-KEY

安装依赖

执行以下命令安装依赖:

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

运行应用程序

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

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

使用体验:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

相关文章推荐

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3279944.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

USB 接口小科普

专栏文章目录传送门:返回专栏目录 Hi, 我是你们的老朋友,主要专注于嵌入式软件开发,有兴趣不要忘记点击关注【码思途远】 文章目录 目录 1. 基础概念 2. USB 接口 3. USB 传输标准 3.1 USB 传输速率 3.2 雷电技术 4 USB 总结 Hi&…

MyBatis-Plus知识总结

1. MP前瞻 官网:https://baomidou.com/ 1、MyBatis-Plus是什么:MyBatis-Plus(简称MP)是一个MyBatis的增强工具,它在MyBatis的基础上只做增强不做改变,为简化开发、提供效率而生。并且MP内部提供了丰富的 AP…

企业数据防泄密软件知多少

企业数据防泄密软件是保护企业或组织内部敏感信息不被非法泄露的重要技术工具。加密系统功能多样,通过该系统来监控、管理和保护数据,确保数据在内部网络、终端设备以及互联网上的安全传输和存储。 一、企业数据防泄密软件详解(主要功能&…

arduino程序-程序函数2(led电路及相关函数)(基础知识)

arduino程序-程序函数2(led电路及相关函数)(基础知识) 1-9 程序函数2(led电路及相关函数)点亮LED需要Blink程序PinMode(LED_BUTTIN,OUTPUT)DigitalWrite(LED_BUILTIN,HIGH)第一个参数(13/LED_BUILTIN)第二个…

QT——信号和槽学习笔记

Qt 信号和槽 信号和槽(Signals and Slots)是Qt框架中的核心机制之一,用于对象之间的通信。它们提供了一种非常灵活和类型安全的事件处理系统,允许对象之间在发生特定事件时进行交互,而不需要紧密耦合。这使得代码更易…

App尺寸:5个创新方法,提升界面吸引力

当用户打开应用程序时,应用程序图标是用户认知品牌的第一个门槛,可以直接影响用户对应用程序的第一印象。应用程序图标尺寸直接影响应用程序图标的视觉效果,这也是决定用户是否愿意下载应用程序图标的关键因素。应用程序图标尺寸规范在图标设…

SEO优化 prerender-spa-plugin工具使用 踩坑记录

安装prerender-spa-plugin yarn add prerender-spa-plugin 或 npm install prerender-spa-plugin初始配置 后面记录踩的坑 配置路由 const routes [{path: /,redirect: {path: /HomeView},},{path: /home,redirect: {path: /HomeView},},{ path: /HomeView,component: HomeV…

Linux 用户管理模式

目录 1. 概述 2. 管控级别 3. 用户组管理 4. 用户管理 4.1 创建用户 useradd 4.2 删除用户 userdel ​编辑4.3 查看用户所属组 id 4.4 修改用户所属组 usermod 5. 查看用户/用户组 5.1 查看系统用户 5.2 查看系统用户组 1. 概述 Linux 可以配置多个用户&#xff0c…

C# 调用Webservice接口接受数据测试

1.http://t.csdnimg.cn/96m2g 此链接提供测试代码; 2.http://t.csdnimg.cn/64iCC 此链接提供测试接口; 关于Webservice的基础部分不做赘述,下面贴上我的测试代码(属于动态调用Webservice): 1&#xff…

ros笔记04--从零体验ros2行为通信方式

ros笔记04--从零体验ros2行为通信方式 介绍创建步骤体验官方案例基于python开发行为案例创建action接口创建action sever和client 注意事项说明 介绍 行为是ros2中的一种通信方式,其多被用于一些长时间运行的任务,它包含了目标、反馈、结果三部分。 行为…

Qt Creator使用git管理代码

1.在GitHub中新建仓库,设置好仓库名后,其它的设置默认即可。 2.打开git bash,输入以下命令: git config --global user.name "xxxxx" #设置你的GitHub用户名 git config --global user.email "xxxxxxxxx.…

79.WEB渗透测试-信息收集-框架组件识别利用(3)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:78.WEB渗透测试-信息收集-框架组件识别利用(2)-CSDN博客 struts2…

GPT-4o mini- 开发者的新宠儿

在人工智能的浪潮中,一颗新星正在冉冉升起。OpenAI最新发布的GPT-4o mini模型以其惊人的性能和极具竞争力的价格,正在成为开发者们的新宠儿。作为一名大数据开发者,我深深被这个"迄今为止最具成本效益的小模型"所吸引。让我们一起探索GPT-4o mini的魅力,看看它如何改…

docker(一):Develop faster. Run anywhere.

前言 在进行微服务部署时,首先需要进行部署环境的搭建。目前,Docker 已经成为了微服务部署的主流解决方案之一。Docker 可以帮助我们更快地打包、测试以及部署应用程序,从而缩短从编写到部署运行代码的周期。 在本文中,我们将对…

ITSS:IT服务工程师

证书亮点:适中的费用、较低的难度、广泛的应用范围以及专业的运维认证。 总体评价:性价比良好! 证书名称:ITSS服务工程师 证书有效期:持续3年 培训要求:必须参加培训,否则将无法参与考试 发…

软件-vscode-plantUML-IDEA

文章目录 vscode基础命令 实操1. vscode实现springboot项目搭建 (包括spring data jpa和sqlLite连接) PlantUMLIDEA下载及安装Eval Reset插件配置修改IDEA创建项目的默认目录IDEA配置gitIDEA翻译插件translationIDEA断点调试IDEA全局搜索快捷键不能使用代…

人工智能学习笔记 - 初级篇Ⅱ - 图形可视化 - 第11节: 绘制带填充区域的图表

微信公众号:御风研墨 关注可了解更多。问题或建议,请公众号留言 文章目录 绘制带填充区域的图表应用背景准备工作操作步骤工作原理补充说明最后 绘制带填充区域的图表 应用背景 在数据可视化中,带填充区域的图表可以有效地表示数据范围、趋…

springBoot 3.X整合camunda

camunDa camunDa 是2013年从Activiti5 中分离出来的一个新的工作流引擎。Camunda 官方提供了 Camunda Platform、Camunda Modeler,其中 Camunda Platform 以 Camunda engine 为基础为用户提供可视化界面,Camunda Modeler 是流程文件建模平台&#xff0c…

FMEA在光伏电站安全生产管理中的应用

在绿色能源浪潮席卷全球的今天,光伏电站作为清洁能源的重要支柱,其安全高效运行直接关系到能源供应的稳定与环境的可持续发展。然而,光伏电站的日常运营中潜藏着诸多风险与挑战,如何有效预防事故、保障人员安全及设备稳定运行&…

Aboboo一些操作

常用快捷键⌨ 快捷键/操作方式 功能 鼠标中键/Esc 进入/退出全屏 空格/Tab 暂停/恢复播放 左/右箭头 快退/快进 Ctrl-左/右箭头 30秒快退/快进 Alt-左/右箭头 60秒快退/快进 Ctrl-Alt-左/右箭头 播放速率调节 PageUp/PageDown 上一句/下一句 上下箭头/滚轮 …