今天,我们将迅速着手搭建一个高效且富有创意的混元聊天应用,其核心理念可以用一个字来概括——快。在这个快节奏的时代,构建一个基础的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],否则可能会持续遇到错误提示。

观察了代码后,可以看出基本框架已经建立好了,接下来的步骤就是替换请求和响应部分。

关于请求和响应的实例,腾讯官方也提供了相关内容。你可以查看以下链接以获取更多信息:

https://github.com/TencentCloud/tencentcloud-sdk-python/blob/master/examples/hunyuan/v20230901/chat_std.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聊天应用的更多相关文章

  1. [Lua游戏AI开发指南] 笔记零 - 框架搭建

    一.图书详情 <Lua游戏AI开发指南>,原作名: Learning Game AI Programming with Lua. 豆瓣:https://book.douban.com/su ...

  2. A Practical Guide to Distributed Scrum - 分布式Scrum的实用指南 - 读书笔记

    最近读了这本IBM出的<A Practical Guide to Distributed Scrum>(分布式Scrum的实用指南),书中的章节结构比较清楚,是针对Scrum项目进行,一个 ...

  3. webdriver实用指南python版本(1)-安装开发环境

    webdriver实用指南是本人编写的系列丛书,包括ruby版.python版和java版.在线版是免费的,之前是放在我的github上,但是很多同学总不记得地址,现在转到我的博客上,方便大家阅读. ...

  4. LAMP-五分钟搭建个人论坛

    LAMP-五分钟搭建个人论坛 系统版本:CentOS7 1.##安装lamp及依赖软件wget http://repo.mysql.com/mysql-community-release-el7-5. ...

  5. Chrome 控制台实用指南【转】

    转自伯乐在线. Chrome 控制台实用指南 前言 Chrome浏览器我想是每一个前端er必用工具之一吧,一部分原因是它速度快,体积不大,支持的新特性也比其它浏览器多,还有一部分我想就是因为它的控制台 ...

  6. 一分钟搭建Vue2.0+Webpack2.0多页面项目

    想要自己一步步搭建的比较麻烦,不是很推荐,最少也要使用vue-cli,在其基础上开始搭建,今天我的主题是一分钟搭建,那么常规方法肯定不能满足的, 而我用的方法也很简单,就是使用已经配置完成的demo模 ...

  7. MSIL实用指南-生成索引器

    MSIL实用指南-生成索引器 索引器是一种特殊的属性,它有参数的,也有get和set方法,属性名称一般是"Item",并且方法名称一般名称是"get_Item" ...

  8. AI应用开发实战 - 从零开始搭建macOS开发环境

    AI应用开发实战 - 从零开始搭建macOS开发环境 本视频配套的视频教程请访问:https://www.bilibili.com/video/av24368929/ 建议和反馈,请发送到 https ...

  9. 5分钟搭建 nginx +php --------------(LNMP)新手专用

    5分钟搭建 nginx +php --------------(LNMP)新手专用 2014-11-14 16:48 88876人阅读 评论(2) 收藏 举报 版权声明:本文为博主原创文章,未经博主允 ...

  10. 乙醇的webdriver实用指南ruby版本

    webdriver实用指南是乙醇2013年分享计划的一部分,作为对已逝去的selenium2时代的追忆. 目录如下 启动浏览器 关闭浏览器 浏览器最大化 设置浏览器大小 访问链接 打印当前页面的tit ...

随机推荐

  1. Shell 特殊符号(变量)用法小结

    Shell | 特殊变量   $n 基本语法: $n (功能描述:n 为数字,$0 代表该脚本名称,$1-$9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10}) 例如: ...

  2. 计算机算法设计与分析(第5版)PDF

    <计算机算法设计与分析(第5版)>是2018年电子工业出版社出版的图书,作者是王晓东. 整本书的结构是:先介绍算法设计策略思想,然后从解决经典算法问题来学习,通过实践的方式去学习算法. 网 ...

  3. Context与Reducer

    Context与Reducer Context是React提供的一种跨组件的通信方案,useContext与useReducer是在React 16.8之后提供的Hooks API,我们可以通过use ...

  4. Table布局

    Table布局 <table>最常用的也是最正确的使用方法是制作表格,由于其对占据的空间有着划分的作用,便可以使用<table>来布局. 实例 实现一个简单的布局,将表格的bo ...

  5. 解决springboot整合freemarker页面跳转404

    问题说明 spring boot 2.1.5集成freemarker时跳转报404! 集成过程说明 pom.xml <dependency> <groupId>org.free ...

  6. docker启动nginx https自签名证书配置

    启动测试应用时, 有时需要自己配置证书签名: 1 使用系统自带openssl openssl req \ > -x509 \ > -nodes \ > -days 365 \ > ...

  7. win10 wsl 运行后没有反应

    wsl 运行一段时间后执行没有反应, 需要重启LxssManager 管理员模式打开 powshell 找到pid, 结束pid >tasklist /svc /fi "service ...

  8. 【Android逆向】Frida 无脑暴力破解看雪test2.apk

    1. 安装apk到手机 adb install -t test2.apk apk下载位置: https://www.kanxue.com/work-task_read-800625.htm 2. 题目 ...

  9. Kotlin 协程五 —— 在Android 中使用 Kotlin 协程

    目录 一.Android MVVM 结构 二.添加依赖 三.在后台线程中执行 3.1 协程解决了什么问题 3.2 保证主线程安全 3.3 withContext 的性能 四.结构化并发 4.1 追踪协 ...

  10. Oracle触发器联合唯一约束

    Oracle支持可为空字端的唯一约束呢?下面就是用触发器作出的限制语句,仅供参考: CREATE OR REPLACE TRIGGER Tg_Completion_Test BEFORE INSERT ...