RAG / app.py
Highthoughts's picture
Initial commit
df5d87b
raw
history blame
3.59 kB
import streamlit as st
from llama_index import VectorStoreIndex, SimpleDirectoryReader, Settings
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.legacy.callbacks import CallbackManager
from llama_index.llms.openai_like import OpenAILike
# Callback manager
callback_manager = CallbackManager()
# API 信息
api_base_url = "https://internlm-chat.intern-ai.org.cn/puyu/api/v1/"
model = "internlm2.5-latest"
api_key = "eyJ0eXBlIjoiSldUIiwiYWxnIjoiSFM1MTIifQ.eyJqdGkiOiI4MDAwNzM0OCIsInJvbCI6IlJPTEVfUkVHSVNURVIiLCJpc3MiOiJPcGVuWExhYiIsImlhdCI6MTczNzczMjUwMCwiY2xpZW50SWQiOiJlYm1ydm9kNnlvMG5semFlazF5cCIsInBob25lIjoiMTk4MjEyMTUyNzEiLCJ1dWlkIjoiZjc2MDM3NTctMTU2Yy00MTM3LWE1YmEtNTk3MDljODRiNDRkIiwiZW1haWwiOiIiLCJleHAiOjE3NTMyODQ1MDB9.4zD9ixAv1JdP_AJLQhNW3tCgzCGquW6eFcbV0XNqmqCZ0pL5A4hIPVA0zeFleg-n04O1IsyIZZ0rmkATZ1V6_A" # 替换为你的真实 API Key
# 初始化 LLM
llm = OpenAILike(
model=model,
api_base=api_base_url,
api_key=api_key,
is_chat_model=True,
callback_manager=callback_manager,
)
# Streamlit 页面配置
st.set_page_config(page_title="Llama Index Demo", page_icon="🦜🔗")
st.title("Llama Index Demo")
# 初始化模型
@st.cache_resource
def init_models():
try:
# 使用 Hugging Face Hub 的公开模型
embed_model = HuggingFaceEmbedding(model_name="sentence-transformers/all-MiniLM-L6-v2")
Settings.embed_model = embed_model
# 初始化 LLM
Settings.llm = llm
# 加载文档数据(可以替换为你自己的数据路径或逻辑)
documents = SimpleDirectoryReader("./data").load_data()
index = VectorStoreIndex.from_documents(documents)
# 创建查询引擎
query_engine = index.as_query_engine()
return query_engine
except Exception as e:
st.error(f"模型初始化失败:{e}")
return None
# 检查是否需要初始化模型
if 'query_engine' not in st.session_state:
st.session_state['query_engine'] = init_models()
# 模型查询函数
def greet2(question):
query_engine = st.session_state['query_engine']
if query_engine:
response = query_engine.query(question)
return response.response # 确保返回的内容是字符串
else:
return "模型初始化失败,请检查环境配置。"
# 清空聊天记录
def clear_chat_history():
st.session_state.messages = [{"role": "assistant", "content": "你好,我是你的助手,有什么我可以帮助你的吗?"}]
# 初始化聊天记录
if "messages" not in st.session_state:
st.session_state.messages = [{"role": "assistant", "content": "你好,我是你的助手,有什么我可以帮助你的吗?"}]
# 显示聊天记录
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.write(message["content"])
# 清空聊天记录按钮
st.sidebar.button('Clear Chat History', on_click=clear_chat_history)
# 用户输入处理
if prompt := st.chat_input("请输入您的问题:"):
st.session_state.messages.append({"role": "user", "content": prompt})
with st.chat_message("user"):
st.write(prompt)
# Assistant 响应
with st.chat_message("assistant"):
with st.spinner("思考中..."):
response = greet2(prompt) # 调用查询函数
if response:
st.write(response)
st.session_state.messages.append({"role": "assistant", "content": response})
else:
st.error("未能生成响应,请检查模型状态。")