streamlit+langchain打造AI聊天

张宇哥哥 2024-09-09 11:31:01 阅读 53

文章目录

1.编程环境2.框架介绍2.1.streamlit简单介绍2.2.langchain简单介绍

3.通义大模型3.1.阿里云百炼生成应用得到API KEY

4.下载相关包5.创建python项目5.1通过pyCharm创建项目5.2utils工具包代码5.3main包代码

1.编程环境

编程语言:python 3.12

IDEA:PyCharm 2023.2.3

项目管理工具:Anaconda Navigator 2.6

操作系统:window 10

2.框架介绍

2.1.streamlit简单介绍

只用 <code>Python 也能做出很漂亮的网站?Streamlit 说可以。

在这里插入图片描述

<code>Streamlit 官方介绍:能在几分钟内把 Python 脚本变成可分享的网站。只需使用纯 Python ,无需前端经验。甚至,你只需要懂 markdown ,然后按照一定规则去做也能搞个网页出来。它还支持免费部署,感动到落泪。

官方网站:https://streamlit.io/

2.2.langchain简单介绍

用于将外部数据和LLM大语言模型相结合,让LLM能够基于外部数据知识的基础上进行智能问答,这就是LangChain开源框架搭建的基于AI大模型下的AI应用开发新范式。

LangChain定义了一套基于大模型之上的应用开发框架,倡议各大模型能够按照框架定义进行相关实现,其也在不断完善其在大模型上的支持的能力,它的更新迭代很快,新的内容在不断出现。

下图描述了LangChain的业务架构,内部核心业务包括六个部分:Prompts、Models、Chains、Memory、Retriever、Agent

在这里插入图片描述

官网地址:https://www.langchain.com/

3.通义大模型

由上面第2.2章所描述我们这里LLM大模型使用的是阿里通义系列。

3.1.阿里云百炼生成应用得到API KEY

申请地址:https://bailian.console.aliyun.com/#/app-center

使用通义系列中最强大的千问-max,特别注意创建应用需要登录阿里云并充值1块钱,调用接口是需要费用😅。

在这里插入图片描述

4.下载相关包

首先你的电脑需要有 <code>python 环境。打开项目管理工具Anaconda下载以下开发包

安装streamlit

使用下面这条命令就可以安装 streamlit

pip install streamlit -i https://pypi.tuna.tsinghua.edu.cn/simple

安装 streamlit 成功后可以使用下面这条命令看看能不能运行起来。

streamlit hello

安装langchain

pip install langchain -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install langchain_community -i https://pypi.tuna.tsinghua.edu.cn/simple

5.创建python项目

5.1通过pyCharm创建项目

在这里插入图片描述

5.2utils工具包代码

<code># 1. 导入相关包

from langchain_community.llms import Tongyi

from langchain.chains import ConversationChain

from langchain.prompts import ChatPromptTemplate,MessagesPlaceholder

from langchain.memory import ConversationBufferMemory

# 2. 定义一个函数,用于发起请求,返回结果

def get_response(prompt, memory, api_key):

# 3. 创建模型对象

llm = Tongyi(

model = 'qwen-max',

dashscope_api_key = api_key

)

# 4. 创建chains链

# prompt = ChatPromptTemplate.from_messages([

# ("system", "你是一个乐于助人的AI小助手,请帮助用户回答问题"),

# MessagesPlaceholder(variable_name="history"),code>

# ("human", "{input}")

# ])

chains = ConversationChain(llm=llm, memory=memory)

# 5. 发起请求,返回结果

response = chains.invoke({ "input": prompt})

# 6. response记忆体,很多之前会话,本次会员包含在一个response的key中

return response['response']

# 7. 测试,测试结束后,终止

if __name__ == '__main__':

prompt = "世界上最高的山峰是哪一座?"

memory = ConversationBufferMemory(return_messages=True)

api_key = '请输入你申请的通义灵码API KEY'

result = get_response(prompt, memory, api_key)

print(result)

5.3main包代码

# 1. 导入相关包,如streamlit包

import streamlit as st

from langchain.memory import ConversationBufferMemory

from utils import get_response

# 2. 设置左侧边栏

with st.sidebar:

# 显示文本

api_key = st.text_input("请输入Tongyi账号的API KEY:", type="password")code>

st.markdown("[获取Tongyi账号的API KEY](https://bailian.console.aliyun.com/?apiKey=1#/api-key)")

# 3. 主界面主标题

st.title("通义聊天机器人")

# 5. 会话保持:用于存储会话记录

if "memory" not in st.session_state:

st.session_state['memory'] = ConversationBufferMemory()

st.session_state['messages'] = [{ 'role':'ai', 'content':'你好,我是通义聊天机器人,有什么可以帮助你的么?'}]

# 6. 编写一个循环结构,用于打印会话记录

for message in st.session_state['messages']:

with st.chat_message(message['role']):

st.markdown(message['content'])

# 4. 创建一个聊天窗口

prompt = st.chat_input("请输入您要咨询的问题:")

# 7. 如果文本框有数据,继续向下执行

if prompt:

# 8. 如果没有api_key,则提示用户输入api_key

if not api_key:

st.warning("请输入Tongyi的API KEY")

st.stop()

# 9. 代表不仅有prompt还有api_key,继续往下,把用户信息显示在主窗体

st.session_state['messages'].append({ 'role':'human', 'content':prompt})

st.chat_message("human").markdown(prompt)

# 10. 向utils工具箱发起请求,返回响应

with st.spinner("AI小助手正在思考中..."):

content = get_response(prompt, st.session_state['memory'], api_key)

st.session_state['messages'].append({ 'role':'ai', 'content':content})

st.chat_message("ai").markdown(content)

在cmd中输入 streamlit run main.py 即可展示网页

在这里插入图片描述

在这里插入图片描述



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。