【橘子大模型】使用streamlit来构建自己的聊天机器人(下)

一、简介

我们之前完成了一个简易的聊天机器人,但是还留下了一些问题没有解决,比如如何开启新的会话。如何切换session_id,如何把对话做成流式的输出。这些我们就会在今天来完成。

二、关于新的会话和session_id

from dotenv import load_dotenv
from langchain_ollama import ChatOllama
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_community.chat_message_histories import ElasticsearchChatMessageHistory

from streamlit import streamlit as st

# load env file
load = load_dotenv("./.env")

 # 无密码的elasticsearch配置
es_url = "http://localhost:9200"
# 存储的索引,我们不用预先创建索引,因为说实话我也不知道字段,langchain会创建,并且自动映射字段
index_name = "chat_history"

# init llm
llm = ChatOllama(
    base_url = "http://127.0.0.1:11434",
    model = "huihui_ai/deepseek-r1-abliterated:14b",
    temperature = 0.5,
    num_predict = 10000
)

# 构建ElasticsearchChatMessageHistory
def get_session_history(session_id: str) :
    return  ElasticsearchChatMessageHistory(
        index=index_name,
        session_id=session_id,
        es_url=es_url,
        ensure_ascii=False
    )

session_id = "levi"
st.title("你好,这里是橘子GPT,我是小橘")
st.write("请把您的问题输入,小橘会认真回答的哦。")
# 添加一个输入框,用户自己输入来替代默认的
session_id = st.text_input("请输入一个session_id,否则我们将使用默认值levi",session_id)
# 添加一个按钮,触发按钮开启新的会话,并且删除上下文记录
isClickButton:bool = st.button("点击按钮,开启新的对话")
# query input
user_prompt = st.chat_input("我是小橘,请输入你的问题吧")

if isClickButton:
    # 清除es中存储的上下文记录,这个是物理删除delete_by_query
    get_session_history(session_id).clear()
    # 清除当前会话的上下文
    st.session_state.chat_history = []


# 如果没有就创建,不要每次都建立新的
if 'chat_history' not in st.session_state:
    st.session_state.chat_history = []
# 遍历里面的内容,取出来存进去的每一组role 和 content
for message in st.session_state.chat_history :
    # 通过取出来的信息,构建st.chat_message,不同的角色会有不同的ui样式,这里就是做这个的
    with st.chat_message(message['role']):
        # 把内容展示出来
        st.markdown(message['content'])


template = ChatPromptTemplate.from_messages([
    ('human',
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值