streamlit的langchain检索数据库基本代码(无语言模型)

 

 见面运行图

# 左侧超参数调节组件
# st表示streamlit
import streamlit as st
import torch
from langchain_core.messages import AIMessage, HumanMessage
import knowlege_base as kb

doc_path = "beautiful bible.md"
embedding_model_path = r"bge-large-zh"
persist_path = 'chroma/'
llm_model_path = "ggml-model-q4_0.gguf"
question = "什么是肤质?"


st.set_page_config(page_title='Qwen-Chatbot')  # 页面标题
st.header('Qwen-Powered Chatbot :robot_face:')  # 标题头

# 设置max_length、top_p和temperature,在侧边栏设置滑动条
max_length = st.sidebar.slider("max_length", 0, 32768, 8192, step=1)  # sidebar是侧边栏 slider是滑动条 0是最小值 32768是最大值 8192是初始值
top_p = st.sidebar.slider("top_p", 0.0, 1.0, 0.8, step=0.01)
temperature = st.sidebar.slider("temperature", 0.0, 1.0, 0.6, step=0.01)

# st.session_state 是 Streamlit 提供的一个内置对象,用于在应用的整个生命周期内持久保存状态信息
# 初始化history
st.session_state.history = []
# 清理会话历史按钮
buttonClean = st.sidebar.button("清理会话历史", key="clean")  # 侧边栏中定义了一个按钮,该按钮的文本标签是“清理会话历史” key用于区分多个按钮,
if buttonClean:  # 如果被点击了
    st.session_state.history = []  # history 清空
    st.session_state.past_key_values = None  # 表示清除之前保存的某项关键信息或历史状态。
    if torch.cuda.is_available():
        torch.cuda.empty_cache()  # 清空 CUDA 显存中的缓存。
    st.rerun()  # 调用此方法将重新运行应用程序


if 'messages' not in st.session_state:  # 检查 st.session_state 中是否存在名为 'messages' 的键
    st.session_state['messages'] = []
messages = st.session_state.get('messages', [])  # 获取messages
print(messages)
for message in messages:  # 遍历每一条信息
    if isinstance(message, AIMessage):  # 检查变量 message 是否是一个名为 AIMessage 的类的实例。
        with st.chat_message('assistant'):  # 创建一个聊天消息框,
            st.markdown(message.content)  # 消息内容以 Markdown 格式显示。
    elif isinstance(message, HumanMessage):
        with st.chat_message('user'):  # 创建一个user的聊天消息框,
            st.markdown(message.content)

if user_input := st.chat_input("Enter your question here"):  # chat_input创建聊天输入框->user_input
    st.session_state.messages.append(HumanMessage(content=user_input))  # 输入内容作为一个HM对象实例被添加到st.session_state.messages列表中
    st.chat_message("user").markdown(user_input)  # 显示用户刚刚输入的问题,标记为用户消息
    with st.chat_message("assistant"):  # 下面的代码生成llm的回答->assistant
        db = kb.init(user_input)
        similar_docs = db.retrievers()  # 根据回答检索出的知识文本 所以类似的文本都结合起来
        # context = "\n".join([document.page_content for document in similar_docs])
        context = str(similar_docs[0].page_content)
        # query_llm = LLMChain(llm=llm, prompt=prompt)  # , memory=memory)
        # response = query_llm.run({"context": context, "question": user_input})
        # response = response.replace("$", "\$")  # 字符串中所有的 $ 符号,并将其替换为 \$
        st.markdown(context)
    st.session_state.messages.append(AIMessage(content=context))

# new_answer = llm_chain.run(
#     context=context,
#     question=question,
#     max_length=max_length,
#     top_p=top_p,
#     temperature=temperature
# )

文件结构

把这句话去掉,就是一个界面了,无输出的界面 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值