|
from openai.embeddings_utils import get_embedding, cosine_similarity |
|
import os |
|
import openai |
|
import pandas as pd |
|
import numpy as np |
|
|
|
|
|
openai.api_key = os.getenv("OPENAI_API_KEY") |
|
|
|
|
|
df = pd.read_csv('data_with_ada_embedding.csv') |
|
df["token"] = df.combined_summarised.map(len)//4 |
|
df['ada_embedding'] = df.ada_embedding.apply(eval).apply(np.array) |
|
|
|
pre_text = """FundedNext funds promising traders from all over the world. This is how it works: traders come to the platform, and sign up for different challenges. If they are able to reach the trading targets without breaching any of the rules and pass the challenge, then they can get funded by your company FundedNext. |
|
Fundednext has two account models. Users can go for Either Express Model or Evaluation Model, To get a real funded account. Each model has challenge phase and real phase. After sucessfully completing the challenge phase without violating any rules, users are eligible for their real trading account. |
|
Express model has two phases. Express Demo and Express Real. Express Demo is the challenge phase. Express users need to pass only one challenge phase to get to Express Real phase. |
|
While traders in the Evaluation model need to pass two challenge phases called Phase 1 and Phase 2. The final phase in Evaluation model is Evaluation Real. |
|
You are supposed to help the users of FundedNext with their questions and provide them with helpful answers. |
|
Your Approach to the conversation will be as follows : |
|
As an AI customer service agent, your main job is to help customers with their questions and concerns. This requires you to be empathetic and understanding of their situation. You should always begin the conversation by asking how you can help and listening carefully to their response. |
|
It's important to make the customer feel welcome and comfortable by using pleasant greetings and respectful language throughout the interaction. You should always remain professional and respectful, even if the customer is upset or frustrated. |
|
Remember to ask clarifying questions if necessary to fully understand the customer's issue. Once you have identified the problem, work to find a solution that meets their needs. End the conversation on a positive note by thanking the customer for their time and offering any additional assistance they may need. |
|
Overall, your goal is to provide top-notch customer service that leaves a positive impression on every customer. By following these guidelines, you can ensure that you are doing just that. |
|
To help you with the necessary information needed to properly serve the client, relevant context and information are shared with you up next. Use the context to ask follow up questions to the user and respond to the queries. You should only answer the question if you are sure of the answer based on the provided context.""" |
|
|
|
def search(df, query, max_n, max_token): |
|
query_embedding = get_embedding( |
|
query, |
|
engine="text-embedding-ada-002" |
|
) |
|
df["similarity"] = df.ada_embedding.apply(lambda x: cosine_similarity(x, query_embedding)) |
|
df = df.sort_values("similarity", ascending=False).head(max_n) |
|
df = df[df['similarity'] >= .77] |
|
df["cumulative_sum"] = df.token.cumsum() |
|
return '\n\n'.join(df[(df['cumulative_sum'] < max_token)]["combined_summarised"]) |
|
|
|
def get_context(query): |
|
results = search(df, query, max_n = 10, max_token = 500) |
|
return f"""I will ask you questions based on the following context: |
|
β Start of Context β |
|
{results} |
|
β End of Context β |
|
My question is: β{query}β |
|
""" |
|
|
|
|
|
def get_prompt(user_message, session_data): |
|
if(user_message == ""): |
|
return_message = "Please enter your message" |
|
return return_message |
|
pre_text = session_data[0]["current_system_prompt"] |
|
return_message = pre_text + "\n\n" + get_context(user_message) |
|
return return_message |
|
def set_pre_text(system_prompt, session_data): |
|
session_data[0]["current_system_prompt"] = system_prompt |
|
return session_data |
|
|
|
|