File size: 2,657 Bytes
ee5d3c7 bbea41a ee5d3c7 bbea41a ee5d3c7 bbea41a ee5d3c7 |
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 |
import pandas as pd
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
from openai import OpenAI
import ast
import gradio as gr
# Inicjalizuj klienta API
client = OpenAI()
# Wczytaj plik CSV
df = pd.read_csv('ally.csv')
# Przekształć stringi z powrotem do list
df['embedding'] = df['embedding'].apply(ast.literal_eval)
# Następnie przekształć listy na tablice numpy
df['embedding'] = df['embedding'].apply(np.array)
def znajdz_najblizsze_teksty(tekst_wejsciowy, df, client, top_n=2):
# Wygeneruj embedding dla tekstu wejściowego
response = client.embeddings.create(input=tekst_wejsciowy, model="text-embedding-3-large")
embedding_wejsciowy = response.data[0].embedding
# Oblicz podobieństwo kosinusowe między embeddingiem wejściowym a wszystkimi innymi embeddingami
df['podobienstwo'] = df['embedding'].apply(lambda x: cosine_similarity([x], [embedding_wejsciowy])[0][0])
# Posortuj DataFrame według podobieństwa i zwróć top_n najbardziej podobnych tekstów
return df.sort_values('podobienstwo', ascending=False).head(top_n)['text']
# Użyj funkcji do znalezienia najbardziej podobnych tekstów
def answer(tekst_wejsciowy, history):
najblizsze_teksty = znajdz_najblizsze_teksty(tekst_wejsciowy, df, client)
kontekst = "\n".join(najblizsze_teksty)
prompt = f"Kontekst: {kontekst}\n Pytanie: {tekst_wejsciowy}"
response = client.chat.completions.create(
model="gpt-4-turbo",
messages=[
{
"role": "system",
"content": "Jesteś asystentką koordynatorów i koordynatorek dostępności. Odpowiadasz uprzejmie i konkretnie. Czasem możesz poflirtować. Do odpowiedzi wykorzystujesz dostarczony kontekst. Odpowiedź sformatuj w Markdown"
},
{
"role": "user",
"content": prompt
}
],
temperature=0.1,
max_tokens=512,
top_p=1,
frequency_penalty=0,
presence_penalty=0)
odp = response.choices[0].message.content
return(odp)
demo = gr.ChatInterface(
fn = answer,
title = "Ally - asystentka koordynatorów dostępności",
description= "Ally jest asystentką, która odpowie na pytania dotyczące dostępności. Dużo się nauczyła i wciąż się uczy, ale może jednak popełniać błędy.",
clear_btn= None,
submit_btn= "Zapytaj",
retry_btn=None,
undo_btn=None,
examples=[
"Jestem zupełnie świeżym koordynatorem dostępności i nie wiem, od czego zacząć.",
"Za co odpowiada koordynator do spraw dostępności?",
"Jakie wymiary powinna mieć kabina windy?",
"Co to jest plan wdrażania dostępności?",
"Czym jest deklaracja dostępności?"
]
).launch() |