File size: 2,198 Bytes
a6ac792 |
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 |
# %%
import gradio as gr
from openai import OpenAI
from langchain_chroma import Chroma
from langchain_huggingface import HuggingFaceEmbeddings
# %%
client=OpenAI()
# %%
embeddings = HuggingFaceEmbeddings(model_name='radlab/polish-sts-v2')
# %%
vector_store = Chroma(
collection_name='baza',
embedding_function=embeddings,
persist_directory='baza'
)
# Funkcja wyszukiwania najbardziej podobnych fragment贸w
def szukaj(query, konwersacja):
query+=konwersacja
context_objects = vector_store.similarity_search(query=query, k=3)
context = "" # Inicjalizacja pustego ci膮gu znak贸w
for context_object in context_objects:
context += context_object.page_content + "\n"
return context
# Funkcja wyci膮gaj膮ca z historii tekst jako wsad do kontekstu
def formatuj_historie_dla_promptu(history):
prompt = ""
for message in history:
role = message["role"]
content = message["content"]
prompt += f"{content}\n"
return prompt
# G艂贸wna funkcja chata
def odp(message, history):
kontekst_konwersacji = formatuj_historie_dla_promptu(history)
Kontekst=szukaj(message, kontekst_konwersacji)
prompt= f"Konwersacja:\n{kontekst_konwersacji}\nKontekst z bazy wiedzy:\n{Kontekst}\nPytanie u偶ytkownika: {message}"
response=client.chat.completions.create(
model='gpt-4o-mini',
temperature=0.2,
messages=[
{'role': 'system',
'content': 'Jeste艣 ekspertem dost臋pno艣ci cyfrowej i masz na imi臋 Jacek. Odpowiadaj kr贸tko na pytania korzystaj膮c z kontekstu i historii konwersacji.'},
{'role': 'user',
'content': prompt}
]
)
history.append({'role': 'user', 'content': message})
history.append({'role': 'assistant', 'content': response.choices[0].message.content})
return '', history
## Interfejs graficzny
with gr.Blocks(title='Jacek AI') as demo:
chatbot = gr.Chatbot(type='messages', label='Jacek AI')
msg = gr.Textbox(autofocus=True, label='Pytaj', show_label=False)
msg.submit(odp, [msg, chatbot], [msg, chatbot])
demo.launch()
# %%
|