|
import numpy as np |
|
import pandas as pd |
|
import logging |
|
from sentence_transformers import SentenceTransformer |
|
|
|
from sklearn.metrics import DistanceMetric |
|
|
|
import warnings |
|
warnings.filterwarnings("ignore") |
|
import gradio as gr |
|
|
|
|
|
|
|
from telegram import Bot |
|
|
|
logging.basicConfig(level=logging.INFO) |
|
logger = logging.getLogger(__name__) |
|
|
|
token = '7370905765:AAHvmlw68cW7RxWzsJE1yxTzgf3xQFiokDo' |
|
chat_id = '7431171535' |
|
pd.set_option('display.max_colwidth', None) |
|
df_resume = pd.read_csv('QA.csv',encoding='latin-1') |
|
|
|
print(df_resume.head()) |
|
model = SentenceTransformer("all-MiniLM-L6-v2") |
|
|
|
|
|
def send_telegram_message(token, chat_id, message): |
|
try: |
|
bot = Bot(token=token) |
|
bot.send_message(chat_id=chat_id, text=message) |
|
logger.info("Message sent successfully.") |
|
except TelegramError as e: |
|
logger.error(f"Failed to send message: {e}") |
|
|
|
|
|
def savevectorstore(): |
|
|
|
embedding_arr = model.encode(df_resume['question']) |
|
print(embedding_arr.shape) |
|
np.save('embeddings.npy', embedding_arr) |
|
|
|
|
|
def rag_chain(question,name): |
|
embedding_arr = np.load('embeddings.npy') |
|
|
|
|
|
|
|
|
|
|
|
query = question |
|
|
|
query_embedding = model.encode(query) |
|
|
|
dist = DistanceMetric.get_metric('euclidean') |
|
|
|
|
|
dist_arr = dist.pairwise(embedding_arr, query_embedding.reshape(1, -1)).flatten() |
|
|
|
idist_arr_sorted = np.argsort(dist_arr) |
|
|
|
|
|
|
|
|
|
que = f"**Most relevant question.**<br><br>{str(df_resume['question'].iloc[idist_arr_sorted[:1]].to_string(index=False)).replace('||','<br>')}" |
|
|
|
ans = f"**Answer ideas.**<br><br>{str(df_resume['answer'].iloc[idist_arr_sorted[:1]].to_string(index=False)).replace('||','<br>')}" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
message = f"{name}\n\n{question}\n\n{ans}" |
|
if not token or not chat_id: |
|
logger.error("Please set the TELEGRAM_BOT_TOKEN and TELEGRAM_CHAT_ID environment variables.") |
|
else: |
|
send_telegram_message(token, chat_id, message) |
|
return que,ans |
|
|
|
|
|
desc = "This is an awesome ML App. I'm really excited to show you" |
|
long_desc = "如果我没有回答你的问题,把问题发给Eric吧。" |
|
search_interface = gr.Interface( |
|
fn=rag_chain, |
|
inputs=[gr.Textbox(label="Question"),gr.Textbox(label="Name")], |
|
outputs=[gr.Markdown(label="Most relevant question"),gr.Markdown(label="Answer ideas")], |
|
title="Ask Eric", |
|
description="Hi,我是数字分身,欢迎提问!", |
|
|
|
article=long_desc |
|
) |
|
|
|
search_interface.launch(share=True,debug=True) |