SergeyO7 commited on
Commit
9088634
·
verified ·
1 Parent(s): 64fd4bf

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +49 -32
app.py CHANGED
@@ -5,7 +5,10 @@ from langchain_core.documents import Document # Updated import
5
  from langchain_huggingface import HuggingFaceEmbeddings # Updated import
6
  from langchain.evaluation import load_evaluator
7
  from langchain_community.vectorstores import Chroma
 
 
8
  from dotenv import load_dotenv
 
9
  import os
10
  import shutil # Added import
11
  import numpy as np
@@ -17,6 +20,15 @@ load_dotenv()
17
 
18
  CHROMA_PATH = "chroma"
19
  DATA_PATH = "" # Update this to your actual data path
 
 
 
 
 
 
 
 
 
20
 
21
  def main():
22
  # Создаем папки при необходимости
@@ -25,43 +37,48 @@ def main():
25
 
26
  generate_data_store()
27
 
28
- # Инициализация модели
29
- embedding_function = HuggingFaceEmbeddings(
 
 
 
 
30
  model_name="sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2",
31
- cache_folder="model_cache",
32
- model_kwargs={'device': 'cpu'}, # Форсируем использование CPU
33
- encode_kwargs={'normalize_embeddings': True}
34
  )
35
-
36
- # Тестирование эмбеддингов
37
- test_embeddings(embedding_function)
38
-
39
- def test_embeddings(embeddings):
40
- # Тест для "управитель"
41
- vector = embeddings.embed_query("управитель")
42
- print(f"Вектор для 'управитель' (первые 5 значений): {vector[:5]}")
43
- print(f"Длина вектора: {len(vector)}")
44
-
45
- # Инициализация эвалуатора
46
- evaluator = load_evaluator(
47
- "pairwise_embedding_distance",
48
- embeddings=embeddings
49
  )
50
 
51
- # Сравнение пар слов
52
- pairs = [
53
- ("управитель", "альмутен"),
54
- ("Сатурн", "Венера")
55
- ]
56
 
57
- for word_a, word_b in pairs:
58
- result = evaluator.evaluate_string_pairs(
59
- prediction=word_a,
60
- prediction_b=word_b
61
- )
62
- print(f"\nСравнение ({word_a}, {word_b}):")
63
- print(f"Расстояние: {result['score']:.4f}")
64
-
 
 
 
 
 
 
 
 
 
 
 
 
65
 
66
  def generate_data_store():
67
  documents = load_documents()
 
5
  from langchain_huggingface import HuggingFaceEmbeddings # Updated import
6
  from langchain.evaluation import load_evaluator
7
  from langchain_community.vectorstores import Chroma
8
+ from langchain_community.llms import HuggingFaceHub
9
+ from langchain.prompts import ChatPromptTemplate
10
  from dotenv import load_dotenv
11
+ import argparse
12
  import os
13
  import shutil # Added import
14
  import numpy as np
 
20
 
21
  CHROMA_PATH = "chroma"
22
  DATA_PATH = "" # Update this to your actual data path
23
+ PROMPT_TEMPLATE = """
24
+ Ответь на вопрос, используя только следующий контекст:
25
+
26
+ {context}
27
+
28
+ ---
29
+
30
+ Ответь на вопрос на основе приведенного контекста: {question}
31
+ """
32
 
33
  def main():
34
  # Создаем папки при необходимости
 
37
 
38
  generate_data_store()
39
 
40
+ help="Что означает Солнце на третьей ступени лестницы?"
41
+ process_query(help)
42
+
43
+ def process_query(query_text: str):
44
+ # Инициализация эмбеддингов
45
+ embeddings = HuggingFaceEmbeddings(
46
  model_name="sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2",
47
+ cache_folder="model_cache"
 
 
48
  )
49
+
50
+ # Загрузка векторной БД
51
+ db = Chroma(
52
+ persist_directory=CHROMA_PATH,
53
+ embedding_function=embeddings
 
 
 
 
 
 
 
 
 
54
  )
55
 
56
+ # Поиск по схожести
57
+ results = db.similarity_search_with_relevance_scores(query_text, k=3)
58
+ if not results or results[0][1] < 0.7:
59
+ print("Не найдено подходящих результатов.")
60
+ return
61
 
62
+ # Формирование контекста
63
+ context_text = "\n\n---\n\n".join([doc.page_content for doc, _ in results])
64
+
65
+ # Создание промпта
66
+ prompt_template = ChatPromptTemplate.from_template(PROMPT_TEMPLATE)
67
+ prompt = prompt_template.format(context=context_text, question=query_text)
68
+
69
+ # Инициализация модели для генерации
70
+ model = HuggingFaceHub(
71
+ repo_id="google/flan-t5-small",
72
+ model_kwargs={"temperature": 0.5, "max_length": 512}
73
+ )
74
+
75
+ # Генерация ответа
76
+ response_text = model.predict(prompt)
77
+
78
+ # Форматирование вывода
79
+ sources = [doc.metadata.get("source", None) for doc, _ in results]
80
+ print(f"Ответ: {response_text}")
81
+ print(f"Источники: {sources}")
82
 
83
  def generate_data_store():
84
  documents = load_documents()