-
Notifications
You must be signed in to change notification settings - Fork 0
/
chunks_.py
56 lines (41 loc) · 2.73 KB
/
chunks_.py
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
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import FAISS
from langchain.docstore.document import Document
from dotenv import load_dotenv
from openai import OpenAI
client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
import os
# получим переменные окружения из .env
load_dotenv()
# API-key
# задаем system
default_system = "Ты-консультант в компании Simble, ответь на вопрос клиента на основе документа с информацией. Не придумывай ничего от себя, отвечай максимально по документу. Не упоминай Документ с информацией для ответа клиенту. Клиент ничего не должен знать про Документ с информацией для ответа клиенту"
class Chunk():
def __init__(self, path_to_base:str, sep:str=" ", ch_size:int=1024):
# загружаем базу
with open(path_to_base, 'r', encoding='utf-8') as file:
document = file.read()
# создаем список чанков
source_chunks = []
splitter = CharacterTextSplitter(separator=sep, chunk_size=ch_size)
for chunk in splitter.split_text(document):
source_chunks.append(Document(page_content=chunk, metadata={}))
# создаем индексную базу
embeddings = OpenAIEmbeddings()
self.db = FAISS.from_documents(source_chunks, embeddings)
def get_answer(self, system:str = default_system, query:str = None):
'''Функция получения ответа от chatgpt
'''
# релевантные отрезки из базы
docs = self.db.similarity_search(query, k=4)
message_content = '\n'.join([f'{doc.page_content}' for doc in docs])
messages = [
{"role": "system", "content": system},
{"role": "user", "content": f"Ответь на вопрос клиента. Не упоминай документ с информацией для ответа клиенту в ответе. Документ с информацией для ответа клиенту: {message_content}\n\nВопрос клиента: \n{query}"}
]
# получение ответа от chatgpt
completion = client.chat.completions.create(model="gpt-3.5-turbo",
messages=messages,
temperature=0)
return completion.choices[0].message.content