ljy5946 commited on
Commit
4e58501
·
verified ·
1 Parent(s): cfe0c91

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +11 -21
app.py CHANGED
@@ -1,33 +1,28 @@
1
  import os
2
  import gradio as gr
3
- import torch # 确保导入 torch,因为 phi-2 模型需要
4
  import logging
5
 
6
- # LangChain 新版导入方式
 
7
  from langchain_chroma import Chroma
8
- from langchain_huggingface import HuggingFaceEmbeddings
9
- # 注意:HuggingFacePipeline 0.2.x 开始推荐从 langchain_huggingface 导入
10
- # 如果遇到问题,也可以尝试从 langchain_community.llms 导入
11
- from langchain_huggingface.llms import HuggingFacePipeline # 或者 from langchain_community.llms import HuggingFacePipeline
12
  from langchain.chains import RetrievalQA
13
 
14
  # Transformers 库
15
  from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline
16
 
17
- logging.basicConfig(level=logging.INFO) # 更好的日志级别
18
 
19
  # 设置路径
20
- # 确保这些路径与您的预下载模型和向量库文件夹名称匹配
21
  VECTOR_STORE_DIR = "./vector_store"
22
- # 将模型名称指向本地预下载的路径
23
  MODEL_NAME = "./hf_models_cache/models--uer--gpt2-chinese-cluecorpussmall"
24
  EMBEDDING_MODEL_NAME = "./hf_models_cache/models--sentence-transformers--paraphrase-multilingual-mpnet-base-v2"
25
 
26
-
27
  # 1. 轻量 LLM(uer/gpt2-chinese-cluecorpussmall)
28
  print("🔧 加载生成模型...")
29
  try:
30
- # 确保 tokenizer 和 model 是从正确的本地路径加载
31
  tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
32
  model = AutoModelForCausalLM.from_pretrained(
33
  MODEL_NAME,
@@ -47,28 +42,25 @@ try:
47
  print("✅ 生成模型加载成功。")
48
  except Exception as e:
49
  logging.error(f"加载生成模型失败: {e}", exc_info=True)
50
- # 如果加载失败,可以考虑在这里退出或者给一个友好的错误提示
51
- llm = None # 确保 llm 为 None,避免后续报错
52
  print("❌ 生成模型加载失败,应用可能无法正常工作。")
53
 
54
-
55
  # 2. 向量库和嵌入模型
56
  print("📚 加载向量库和嵌入模型...")
57
  try:
58
  embeddings = HuggingFaceEmbeddings(
59
- model_name=EMBEDDING_MODEL_NAME # 指向本地预下载的嵌入模型路径
60
  )
61
  vectordb = Chroma(persist_directory=VECTOR_STORE_DIR, embedding_function=embeddings)
62
  print("✅ 向量库加载成功。")
63
  except Exception as e:
64
  logging.error(f"加载向量库失败: {e}", exc_info=True)
65
- vectordb = None # 确保 vectordb 为 None
66
  print("❌ 向量库加载失败,RAG功能将无法使用。")
67
 
68
-
69
  # 3. RAG 问答链
70
  qa_chain = None
71
- if llm and vectordb: # 只有当LLM和向量库都成功加载时才构建RAG链
72
  try:
73
  retriever = vectordb.as_retriever(search_kwargs={"k": 3})
74
  qa_chain = RetrievalQA.from_chain_type(
@@ -82,12 +74,11 @@ if llm and vectordb: # 只有当LLM和向量库都成功加载时才构建RAG链
82
  logging.error(f"构建RAG问答链失败: {e}", exc_info=True)
83
  print("❌ RAG问答链构建失败。")
84
 
85
-
86
  # 4. 业务函数
87
  def qa_fn(query):
88
  if not query.strip():
89
  return "❌ 请输入问题内容。"
90
- if not qa_chain: # 检查 qa_chain 是否已成功构建
91
  return "⚠️ 问答系统未完全加载,请稍后再试或检查日志。"
92
  try:
93
  result = qa_chain({"query": query})
@@ -113,7 +104,6 @@ with gr.Blocks(title="数学知识问答助手", theme=gr.themes.Base()) as demo
113
 
114
  gr.Markdown("---\n模型:uer/gpt2-chinese-cluecorpussmall + Chroma RAG | Powered by Hugging Face Spaces")
115
 
116
-
117
  if __name__ == "__main__":
118
  demo.launch()
119
 
 
1
  import os
2
  import gradio as gr
3
+ import torch
4
  import logging
5
 
6
+ # LangChain 0.1.x 系列的导入方式
7
+ # 注意:HuggingFacePipeline通常在langchain.llms中,或者直接在langchain_community中
8
  from langchain_chroma import Chroma
9
+ from langchain.embeddings import HuggingFaceEmbeddings # <--- 注意这里,从 langchain.embeddings 导入
10
+ from langchain.llms import HuggingFacePipeline # <--- 注意这里,从 langchain.llms 导入
 
 
11
  from langchain.chains import RetrievalQA
12
 
13
  # Transformers 库
14
  from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline
15
 
16
+ logging.basicConfig(level=logging.INFO)
17
 
18
  # 设置路径
 
19
  VECTOR_STORE_DIR = "./vector_store"
 
20
  MODEL_NAME = "./hf_models_cache/models--uer--gpt2-chinese-cluecorpussmall"
21
  EMBEDDING_MODEL_NAME = "./hf_models_cache/models--sentence-transformers--paraphrase-multilingual-mpnet-base-v2"
22
 
 
23
  # 1. 轻量 LLM(uer/gpt2-chinese-cluecorpussmall)
24
  print("🔧 加载生成模型...")
25
  try:
 
26
  tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
27
  model = AutoModelForCausalLM.from_pretrained(
28
  MODEL_NAME,
 
42
  print("✅ 生成模型加载成功。")
43
  except Exception as e:
44
  logging.error(f"加载生成模型失败: {e}", exc_info=True)
45
+ llm = None
 
46
  print("❌ 生成模型加载失败,应用可能无法正常工作。")
47
 
 
48
  # 2. 向量库和嵌入模型
49
  print("📚 加载向量库和嵌入模型...")
50
  try:
51
  embeddings = HuggingFaceEmbeddings(
52
+ model_name=EMBEDDING_MODEL_NAME
53
  )
54
  vectordb = Chroma(persist_directory=VECTOR_STORE_DIR, embedding_function=embeddings)
55
  print("✅ 向量库加载成功。")
56
  except Exception as e:
57
  logging.error(f"加载向量库失败: {e}", exc_info=True)
58
+ vectordb = None
59
  print("❌ 向量库加载失败,RAG功能将无法使用。")
60
 
 
61
  # 3. RAG 问答链
62
  qa_chain = None
63
+ if llm and vectordb:
64
  try:
65
  retriever = vectordb.as_retriever(search_kwargs={"k": 3})
66
  qa_chain = RetrievalQA.from_chain_type(
 
74
  logging.error(f"构建RAG问答链失败: {e}", exc_info=True)
75
  print("❌ RAG问答链构建失败。")
76
 
 
77
  # 4. 业务函数
78
  def qa_fn(query):
79
  if not query.strip():
80
  return "❌ 请输入问题内容。"
81
+ if not qa_chain:
82
  return "⚠️ 问答系统未完全加载,请稍后再试或检查日志。"
83
  try:
84
  result = qa_chain({"query": query})
 
104
 
105
  gr.Markdown("---\n模型:uer/gpt2-chinese-cluecorpussmall + Chroma RAG | Powered by Hugging Face Spaces")
106
 
 
107
  if __name__ == "__main__":
108
  demo.launch()
109