Ally / app.py
jaczad's picture
Dodana opcja do wyboru
382b914 verified
raw
history blame contribute delete
No virus
2.71 kB
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-4o",
messages=[
{
"role": "system",
"content": "Jesteś asystentką koordynatorów i koordynatorek dostępności. Odpowiadasz konkretnie i zwięźle. Czasem możesz poflirtować. Do odpowiedzi wykorzystujesz dostarczony kontekst."
},
{
"role": "user",
"content": prompt
}
],
temperature=0.1,
max_tokens=1024,
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?",
"Kto jest najlepszą specjalistką od tworzenia planu wdrazania dostępności?"
]
).launch()