File size: 3,742 Bytes
e1f6463 1845736 aabb83e e1f6463 aabb83e e1f6463 aabb83e e1f6463 aabb83e e1f6463 1845736 e1f6463 1845736 e1f6463 1845736 e1f6463 1845736 aabb83e 1845736 e1f6463 1845736 e1f6463 1845736 e1f6463 1845736 e1f6463 1845736 e1f6463 1845736 e1f6463 1845736 e1f6463 1845736 e1f6463 1845736 e1f6463 1845736 e1f6463 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
import os
import streamlit as st
from llama_index.core 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 = CallbackManager()
from configparser import ConfigParser
api_key = os.environ.get('API_KEY')
os.system('git lfs install')
os.system('git clone https://www.modelscope.cn/Ceceliachenen/paraphrase-multilingual-MiniLM-L12-v2.git')
api_base_url = "https://internlm-chat.intern-ai.org.cn/puyu/api/v1/"
model = "internlm2.5-latest"
llm =OpenAILike(model=model, api_base=api_base_url, api_key=api_key, is_chat_model=True,callback_manager=callback_manager)
st.set_page_config(page_title="由llama_index构建的RAG应用demo", page_icon="🦜🔗")
st.title("llama_index_demo")
@st.cache_resource
def init_models():
"""
初始化并缓存模型。
本函数通过加载预训练的嵌入模型和语言模型来初始化设置,并构建查询引擎。
使用缓存装饰器是为了提高效率,避免重复初始化模型。
返回:
query_engine: 用于查询的引擎。
"""
embed_model = HuggingFaceEmbedding(
model_name="./paraphrase-multilingual-MiniLM-L12-v2"
)
Settings.embed_model = embed_model
Settings.llm = llm
documents = SimpleDirectoryReader("./data").load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine()
return query_engine
if 'query_engine' not in st.session_state:
st.session_state['query_engine'] = init_models()
def greet2(question):
"""
使用预设的question参数调用session_state中的query_engine来生成响应。
参数:
question (str): 一个字符串,代表用户的问题或查询。
返回:
response: query_engine对question的响应结果,类型依据具体实现而定。
"""
response = st.session_state['query_engine'].query(question)
return response
if "messages" not in st.session_state.keys():
st.session_state.messages = [{"role": "assistant", "content": "你好,我是你的助手,有什么我可以帮助你的吗?"}]
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.write(message["content"])
def clear_chat_history():
st.session_state.messages = [{"role": "assistant", "content": "你好,我是你的助手,有什么我可以帮助你的吗?"}]
st.sidebar.button('清空聊天历史', on_click=clear_chat_history)
def generate_llama_index_response(prompt_input):
"""
根据输入的提示生成基于llama索引的响应。
此函数的作用是通过特定的提示输入,生成一个相应的响应。它调用了另一个函数greet2,
以完成响应的生成过程。这种封装方式允许在greet2函数中实现复杂的处理逻辑,
同时对外提供一个简单的接口。
参数:
prompt_input (str): 用于生成响应的输入提示。
返回:
str: 由greet2函数生成的响应。
"""
return greet2(prompt_input)
if prompt := st.chat_input():
st.session_state.messages.append({"role": "user", "content": prompt})
with st.chat_message("user"):
st.write(prompt)
if st.session_state.messages[-1]["role"] != "assistant":
with st.chat_message("assistant"):
with st.spinner("Thinking..."):
response = generate_llama_index_response(prompt)
placeholder = st.empty()
placeholder.markdown(response)
message = {"role": "assistant", "content": response}
st.session_state.messages.append(message) |