FlashCode-Lab commited on
Commit
2901b24
·
verified ·
1 Parent(s): 809c3af

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +35 -29
app.py CHANGED
@@ -4,50 +4,56 @@ from langchain_huggingface import HuggingFaceEndpoint, HuggingFaceEmbeddings
4
  from langchain_community.vectorstores import FAISS
5
  from langchain_community.document_loaders import TextLoader
6
  from langchain_text_splitters import CharacterTextSplitter
7
- from langchain.chains.retrieval_qa.base import RetrievalQA
8
 
9
- # 1. 初始化大模型 - 增加具体参数以绕过版本冲突
 
10
  llm = HuggingFaceEndpoint(
11
  repo_id="Qwen/Qwen2.5-7B-Instruct",
12
  huggingfacehub_api_token=os.getenv("HF_TOKEN"),
13
- task="text-generation",
14
- # 强制不使用旧版的 post 属性
15
- client_kwargs={"headers": {"Authorization": f"Bearer {os.getenv('HF_TOKEN')}"}}
16
  )
17
 
18
- # 2. 知识库自动化处理
19
- if not os.path.exists("knowledge.txt") or os.path.getsize("knowledge.txt") == 0:
20
- with open("knowledge.txt", "w", encoding="utf-8") as f:
21
- f.write("私有大脑知识库已激活。")
 
 
 
 
 
 
 
 
 
22
 
23
- loader = TextLoader("knowledge.txt", encoding="utf-8")
24
- docs = CharacterTextSplitter(chunk_size=500, chunk_overlap=50).split_documents(loader.load())
25
- embeddings = HuggingFaceEmbeddings(model_name="BAAI/bge-small-zh-v1.5")
26
- vectorstore = FAISS.from_documents(docs, embeddings)
27
-
28
- # 3. 构建问答链
29
  qa_chain = RetrievalQA.from_chain_type(
30
  llm=llm,
31
- retriever=vectorstore.as_retriever(search_kwargs={"k": 3})
32
  )
33
 
34
- # 4. 修复聊天逻辑
35
- def chat_response(message, history):
36
  try:
37
- # 使用 invoke 进行标准调用
38
- response = qa_chain.invoke({"query": message})
39
- return response["result"]
40
  except Exception as e:
41
- # 针对常见 API 错误的友好提示
42
- if "attribute 'post'" in str(e):
43
- return "正在尝试兼容新版接口,请稍后再试或点击 Settings 重启一次。"
44
- return f"大脑思考中遇到挑战:{str(e)}"
45
 
46
- # 5. 启动界面
47
  demo = gr.ChatInterface(
48
- chat_response,
49
- title="全能私有大脑 v2.2",
50
- description="接口兼容性已修复。如果仍然报错,请点击设置进行 Factory Restart。"
51
  )
52
 
53
  if __name__ == "__main__":
 
4
  from langchain_community.vectorstores import FAISS
5
  from langchain_community.document_loaders import TextLoader
6
  from langchain_text_splitters import CharacterTextSplitter
7
+ from langchain.chains import RetrievalQA
8
 
9
+ # 1. 配置大模型 - 换一种更稳健的连接方式
10
+ # 我们明确指定使用异步/同步通用的传输协议
11
  llm = HuggingFaceEndpoint(
12
  repo_id="Qwen/Qwen2.5-7B-Instruct",
13
  huggingfacehub_api_token=os.getenv("HF_TOKEN"),
14
+ timeout=300,
15
+ task="text-generation" # 明确任务类型
 
16
  )
17
 
18
+ # 2. 知识库加载逻辑
19
+ def load_kb():
20
+ if not os.path.exists("knowledge.txt"):
21
+ with open("knowledge.txt", "w", encoding="utf-8") as f:
22
+ f.write("私有大脑知识库已就绪。")
23
+
24
+ loader = TextLoader("knowledge.txt", encoding="utf-8")
25
+ docs = CharacterTextSplitter(chunk_size=500, chunk_overlap=50).split_documents(loader.load())
26
+
27
+ # 使用中文优化的 Embedding 模型
28
+ embeddings = HuggingFaceEmbeddings(model_name="BAAI/bge-small-zh-v1.5")
29
+ vectorstore = FAISS.from_documents(docs, embeddings)
30
+ return vectorstore
31
 
32
+ # 初始化问答链
33
+ vs = load_kb()
34
+ # 注意:这里我们使用最新的 invoke 接口
 
 
 
35
  qa_chain = RetrievalQA.from_chain_type(
36
  llm=llm,
37
+ retriever=vs.as_retriever(search_kwargs={"k": 3})
38
  )
39
 
40
+ # 3. 聊天处理函数
41
+ def chat_fn(message, history):
42
  try:
43
+ # 使用 invoke 替代旧的直接调用,解决 InferenceClient 兼容性
44
+ result = qa_chain.invoke({"query": message})
45
+ return result["result"]
46
  except Exception as e:
47
+ # 如果 Token 权限有问题,给出清晰提示
48
+ if "401" in str(e):
49
+ return "错误:Token 无效或权限不足,请检查 Settings 里的 HF_TOKEN。"
50
+ return f"大脑响应异常:{str(e)}"
51
 
52
+ # 4. 构建前端界面
53
  demo = gr.ChatInterface(
54
+ chat_fn,
55
+ title="全能私有大脑 v2.5",
56
+ description="针对最新 API 进行了深度优化,现在可以正常调取知识库了。"
57
  )
58
 
59
  if __name__ == "__main__":