AI实用指南:5分钟搭建你自己的LLM聊天应用
今天,我们将迅速着手搭建一个高效且富有创意的混元聊天应用,其核心理念可以用一个字来概括——快。在这个快节奏的时代,构建一个基础的LLM(Large Language Model,大型语言模型)聊天应用并不需要耗费太多时间。市面上充斥着各种功能强大的大型语言模型,我们可以根据项目需求灵活选择,而今天的目标并非深入探讨这些模型的技术细节,而是将重点放在如何快速上手。
Streamlit这一强大的工具,它能够让我们以最快速度搭建起一个具备流式打字机效果的聊天应用。对于那些和我一样,对前端代码望而却步的开发者来说,Streamlit无疑是一个福音。
本次实操,我们将不会过多地纠缠于理论知识,而是将重点放在实战操作上。
开始开发
依赖环境
开发之前,请确保你已经配置好了必要的开发环境,以下是你需要准备的一系列环境和工具,以确保开发过程的顺利进行:
Python环境:Python 3.9
腾讯云API服务:从腾讯云控制台开通混元API并且获取腾讯云的SecretID、SecretKey
依赖包安装:
pip install --upgrade tencentcloud-sdk-python
pip install streamlit
如果你对Streamlit还不太熟悉,安装完成后,你可以通过执行streamlit hello或者python -m streamlit hello启动一下入门实例。如果你希望对Streamlit有更深入的了解,我强烈建议你访问其官方文档。官方文档提供了详尽的指南、教程和API参考。
简易流程
首先,请查阅腾讯云官方简易流程,然后,一旦您成功获取相关信息的申请,填入并检查输出是否正常。
import os
from tencentcloud.common import credential
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.cvm.v20170312 import cvm_client, models
try:
# 为了保护密钥安全,建议将密钥设置在环境变量中或者配置文件中,请参考本文凭证管理章节。
# 硬编码密钥到代码中有可能随代码泄露而暴露,有安全隐患,并不推荐。
# cred = credential.Credential("secretId", "secretKey")
cred = credential.Credential(
os.environ.get("TENCENTCLOUD_SECRET_ID"),
os.environ.get("TENCENTCLOUD_SECRET_KEY"))
client = cvm_client.CvmClient(cred, "ap-shanghai")
req = models.DescribeInstancesRequest()
resp = client.DescribeInstances(req)
print(resp.to_json_string())
except TencentCloudSDKException as err:
print(err)
如果输出结果呈现是这样的,这便表明所得信息基本正确的,接下来我们便可顺利进行后续的开发工作。
"TotalCount": 0, "InstanceSet": [], "RequestId": "714808e9-684a-4714-96f1-2a9fe77b6e55"
接下来,让我们深入了解Streamlit是如何构建基础的LLM(大型语言模型)聊天应用的,一起查看一下他们的官方演示代码吧。
import streamlit as st
import random
import time
# Streamed response emulator
def response_generator():
response = random.choice(
[
"Hello there! How can I assist you today?",
"Hi, human! Is there anything I can help you with?",
"Do you need help?",
]
)
for word in response.split():
yield word + " "
time.sleep(0.05)
st.title("Simple chat")
# Initialize chat history
if "messages" not in st.session_state:
st.session_state.messages = []
# Display chat messages from history on app rerun
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.markdown(message["content"])
# Accept user input
if prompt := st.chat_input("What is up?"):
# Add user message to chat history
st.session_state.messages.append({"role": "user", "content": prompt})
# Display user message in chat message container
with st.chat_message("user"):
st.markdown(prompt)
# Display assistant response in chat message container
with st.chat_message("assistant"):
response = st.write_stream(response_generator())
# Add assistant response to chat history
st.session_state.messages.append({"role": "assistant", "content": response})
切记,在运行Streamlit时,不要使用python命令,而应该使用streamlit run [your_script.py],否则可能会持续遇到错误提示。
观察了代码后,可以看出基本框架已经建立好了,接下来的步骤就是替换请求和响应部分。
关于请求和响应的实例,腾讯官方也提供了相关内容。你可以查看以下链接以获取更多信息:
经过5分钟的修改和代码改进,最终成功地实现了可运行的版本。
还是一样的规矩,最终代码如下:
import json
import os
import streamlit as st
import random
import time
from tencentcloud.common import credential
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.hunyuan.v20230901 import hunyuan_client, models
st.title("混元小助手")
os.environ['id'] = '******'
os.environ['key'] = '******'
# 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey
cred = credential.Credential(
os.environ.get("id"),
os.environ.get("key"))
cpf = ClientProfile()
# 预先建立连接可以降低访问延迟
cpf.httpProfile.pre_conn_pool_size = 3
client = hunyuan_client.HunyuanClient(cred, "ap-beijing", cpf)
req = models.ChatStdRequest()
# Streamed response emulator
def response_generator():
# msg = models.Message()
# msg.Role = "user"
# msg.Content = content
req.Messages = []
for m in st.session_state.messages:
msg = models.Message()
msg.Role = m["role"]
msg.Content = m["content"]
req.Messages.append(msg)
resp = client.ChatStd(req)
for event in resp:
data = json.loads(event['data'])
for choice in data['Choices']:
yield choice['Delta']['Content'] + ""
# Initialize chat history
if "messages" not in st.session_state:
st.session_state.messages = []
# Display chat messages from history on app rerun
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.markdown(message["content"])
# Accept user input
if prompt := st.chat_input("有什么需要帮助的?"):
# Add user message to chat history
st.session_state.messages.append({"role": "user", "content": prompt})
# Display user message in chat message container
with st.chat_message("user"):
st.markdown(prompt)
# Display assistant response in chat message container
with st.chat_message("assistant"):
response = st.write_stream(response_generator())
# Add assistant response to chat history
st.session_state.messages.append({"role": "assistant", "content": response})
在这里需要注意一下,当使用streamlit进行流式回答时,你无需手动返回文本数据,只需在方法内部使用yield关键字,并注明本次返回的内容即可。
演示视频看下吧:

总结
本文介绍了如何快速搭建一个基于大型语言模型(LLM)的混元聊天应用。强调了开发速度的重要性,并指出了使用Streamlit这一工具的优势,特别是对于不熟悉前端代码的开发者来说,Streamlit提供了一种快速构建聊天应用的方法。
如果你对开发感兴趣,市面上确实提供了许多大型模型供你选择。即使简单的聊天应用并不具备太多技术性,但你可以利用这些基础框架,不断添加自己所需的任何组件。这需要开拓思维,挖掘创意,让你的应用更加丰富多彩。
AI实用指南:5分钟搭建你自己的LLM聊天应用的更多相关文章
- [Lua游戏AI开发指南] 笔记零 - 框架搭建
一.图书详情 <Lua游戏AI开发指南>,原作名: Learning Game AI Programming with Lua. 豆瓣:https://book.douban.com/su ...
- A Practical Guide to Distributed Scrum - 分布式Scrum的实用指南 - 读书笔记
最近读了这本IBM出的<A Practical Guide to Distributed Scrum>(分布式Scrum的实用指南),书中的章节结构比较清楚,是针对Scrum项目进行,一个 ...
- webdriver实用指南python版本(1)-安装开发环境
webdriver实用指南是本人编写的系列丛书,包括ruby版.python版和java版.在线版是免费的,之前是放在我的github上,但是很多同学总不记得地址,现在转到我的博客上,方便大家阅读. ...
- LAMP-五分钟搭建个人论坛
LAMP-五分钟搭建个人论坛 系统版本:CentOS7 1.##安装lamp及依赖软件wget http://repo.mysql.com/mysql-community-release-el7-5. ...
- Chrome 控制台实用指南【转】
转自伯乐在线. Chrome 控制台实用指南 前言 Chrome浏览器我想是每一个前端er必用工具之一吧,一部分原因是它速度快,体积不大,支持的新特性也比其它浏览器多,还有一部分我想就是因为它的控制台 ...
- 一分钟搭建Vue2.0+Webpack2.0多页面项目
想要自己一步步搭建的比较麻烦,不是很推荐,最少也要使用vue-cli,在其基础上开始搭建,今天我的主题是一分钟搭建,那么常规方法肯定不能满足的, 而我用的方法也很简单,就是使用已经配置完成的demo模 ...
- MSIL实用指南-生成索引器
MSIL实用指南-生成索引器 索引器是一种特殊的属性,它有参数的,也有get和set方法,属性名称一般是"Item",并且方法名称一般名称是"get_Item" ...
- AI应用开发实战 - 从零开始搭建macOS开发环境
AI应用开发实战 - 从零开始搭建macOS开发环境 本视频配套的视频教程请访问:https://www.bilibili.com/video/av24368929/ 建议和反馈,请发送到 https ...
- 5分钟搭建 nginx +php --------------(LNMP)新手专用
5分钟搭建 nginx +php --------------(LNMP)新手专用 2014-11-14 16:48 88876人阅读 评论(2) 收藏 举报 版权声明:本文为博主原创文章,未经博主允 ...
- 乙醇的webdriver实用指南ruby版本
webdriver实用指南是乙醇2013年分享计划的一部分,作为对已逝去的selenium2时代的追忆. 目录如下 启动浏览器 关闭浏览器 浏览器最大化 设置浏览器大小 访问链接 打印当前页面的tit ...
随机推荐
- 问题解决:Ubuntu18.04显示器分辨率不正常
在Ubuntu18.04下出现显示器分辨率不正确的情况,只能选择1024x768的分辨率,没有其它选项,显示器本身可以支持1920x1080的分辨率.经查询,采用cvt, xrandr的方法不成功,显 ...
- Vue中数组变动监听
Vue中数组变动监听 Vue的通过数据劫持的方式实现数据的双向绑定,即使用Object.defineProperty()来实现对属性的劫持,但是Object.defineProperty()中的set ...
- SSIS数据同步系统
缘起: 若干年前,刚到一家3C类的电商公司做DBA,到公司没几天,公司的CEO和研发总监,说现在要做个事情: 把IDC的数据库的数据,要同步一份到仓库,因单量大,仓库经常爆仓,仓库网络不好时,可以直接 ...
- Spring源码阅读系列--全局目录
阅读之前要注意的东西:本文就是主打流水账式的源码阅读,主导的是一个参考,主要内容需要看官自己去源码中验证.全系列文章基于 spring 源码 5.x 版本. 写在开始前的话: 阅读spring 源码实 ...
- 发送HTML模板邮件
概述 为了增强邮件内容展示的样式,可以将普通的文本邮件转换为HTML内容格式. 在Java中,可以通过页面模板技术来实现.具体来说,可以使用Thymeleaf模板. 具体实现 首先,在项目中引入Thy ...
- Maven应用常见问题
在Spring Boot项目中打包指定类为启动类 <build> <plugins> <plugin> <groupId>org.springframe ...
- Vulnhub内网渗透DC-6靶场通关
个人博客 xzajyjs.cn IP DC-6: 192.168.168.4 Kali: 192.168.168.5 信息搜集 arp-scan -l # nmap -sn 192.168.168.0 ...
- day02---虚拟机上网模式
修改虚拟网络编辑器 虚拟软件网络模式介绍 NAT网络模式 特点:虚拟主机和宿主机网络信息 可以不一致 优点:不容易出现局域网中IP地址冲突 缺点:其它宿主机不能直接访问虚拟机 桥接网络模式 特点:虚拟 ...
- 第120篇: DOM编程(常用操作、动态脚本、样式及动态表格)
好家伙,我回来了, 本篇为<JS高级程序设计>第十四章"DOM编程"学习笔记 1.DOM编程 我们知道DOM是HTML文档的编程接口, 我们可以通过HTML代码实现 ...
- 大众点评-CAT监控平台
前言 我们禀着发现问题,解决问题的方针,针对后台诸多的服务,如何实时监控接口性能和访问频率,还要统计大盘信息?CAT作为大众点评开源的系统监控平台项目,下面就介绍一下CAT平台的搭建步骤. CAT作为 ...