|
from flask import Flask, request, render_template |
|
from openai import OpenAI as OPENAI |
|
import os |
|
import gradio as gr |
|
import json |
|
|
|
client = OPENAI() |
|
client.api_key = os.environ.get("OPENAI_API_KEY") |
|
|
|
app = Flask(__name__) |
|
|
|
conversation_history=[] |
|
|
|
def handle_input(input_str : str): |
|
global conversation_history |
|
|
|
if len(conversation_history) >=20: |
|
conversation_history = conversation_history[:1] + conversation_history[-10:] |
|
|
|
conversation_history.append({"role": "user", "content": f"{input_str}"}) |
|
|
|
content = " ".join([str(item) for item in conversation_history]) |
|
completion = client.chat.completions.create( |
|
model="gpt-4", |
|
messages=conversation_history, |
|
|
|
|
|
|
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
message = completion.choices[0].message.content |
|
|
|
conversation_history.append({"role": "assistant", "content": f"{message}"}) |
|
|
|
return message |
|
|
|
def initialize(): |
|
f = open('templates/record_types.json') |
|
crm_temlate_json = json.load(f) |
|
|
|
global conversation_history |
|
default_message = (f""" |
|
Microsoft Dynamic CRM için kayıt olusturmada yardımcı bir asistan gibi davranmanı istiyorum. |
|
Senin isin yalnizca CRM kayit olsuturma ve yonetme konusunda yardimci olmak, bu sebeple kullanici |
|
CRM haricinde baska bir konuda konusmak isterse onca kibarca gorevini hatirlatarak istedigi islemi |
|
yapamayacagini belirtiyorsun. Kullanici seninle iletisime gectiginde kendini CRM Asistan Bot olarak |
|
tanitarak nasil yardimci olabilecegini soracaksin. |
|
Kullanicinin yapmak istedigi isleme gore {crm_temlate_json} json verisi icinden 'Contact' yada 'Aktivite' |
|
templatelerine gore kullanicin girmesi gereken input verilerini isteyeceksin. |
|
Kullanıcı seninle iletişime geçtiğinde amaçlarını ögrenip, amaclanan kayit icin ihtiyac olabilecek |
|
alan bilgilerini sirasiyla, adim adim kullanicidan isteyecek ve islemler bittiginda bu bilgileri |
|
json olarak doneceksin. Kullanici kayit olusturman icin onaylamadigi surece |
|
ek bilgi ekleyip eklemek istemedigini soracaksin. Ne olursa olsun kullanicinin belirtmesi gereken bilgileri kendin girmeyeceksin. |
|
Kullanici ek bilgi eklemek isterse sirasiyla o bilgileri isteyerek olusturacagin kayit bilgisine ekleyeceksin. |
|
Ornek: [Kullanici:"Merhaba", Asistan:"Merhaba! Size nasil yardimci olabilirim?", |
|
Kullanici: "Kontakt kaydi olusturmak istiyorum", ...]. Ilk kayit ile baslayalim |
|
""") |
|
|
|
conversation_history.append({"role": "system", "content": f"{default_message}"}) |
|
|
|
completion = client.chat.completions.create( |
|
model="gpt-4", |
|
messages=[{"role": "system", "content": " ".join([str(item) for item in conversation_history])}], |
|
temperature=0.3, |
|
max_tokens=7500, |
|
) |
|
|
|
message = completion.choices[0].message.content |
|
print(message) |
|
|
|
@app.route('/') |
|
def my_form(): |
|
return render_template('my-form.html') |
|
|
|
@app.route('/send_message', methods=['POST']) |
|
def send_message(): |
|
text = request.form['text'] |
|
answer = handle_input(text) |
|
return answer |
|
|
|
|
|
if __name__ == '__main__': |
|
initialize() |
|
app.run() |