ai chatbot
This commit is contained in:
commit
819262d25b
|
|
@ -0,0 +1,2 @@
|
||||||
|
.env
|
||||||
|
__pychache__
|
||||||
Binary file not shown.
|
|
@ -0,0 +1,84 @@
|
||||||
|
import json, asyncio, websockets
|
||||||
|
import semantic_kernel as sk
|
||||||
|
from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion, OpenAITextEmbedding
|
||||||
|
|
||||||
|
api_key, org_id = sk.openai_settings_from_dot_env()
|
||||||
|
EXIT_CHAT = "\n\nExiting chat..."
|
||||||
|
|
||||||
|
async def init_kernel():
|
||||||
|
kernel = sk.Kernel()
|
||||||
|
|
||||||
|
kernel.add_chat_service(
|
||||||
|
"chat-gpt",
|
||||||
|
OpenAIChatCompletion(
|
||||||
|
ai_model_id="gpt-3.5-turbo-1106",
|
||||||
|
api_key=api_key,
|
||||||
|
org_id=org_id
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
kernel.add_text_embedding_generation_service(
|
||||||
|
"ada",
|
||||||
|
OpenAITextEmbedding(
|
||||||
|
ai_model_id="text-embedding-ada-002",
|
||||||
|
api_key=api_key,
|
||||||
|
org_id=org_id
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
kernel.register_memory_store(memory_store=sk.memory.VolatileMemoryStore())
|
||||||
|
kernel.import_plugin(sk.core_plugins.TextMemoryPlugin(), "text_memory")
|
||||||
|
await populate_memory(kernel)
|
||||||
|
|
||||||
|
return kernel
|
||||||
|
|
||||||
|
|
||||||
|
def init_context():
|
||||||
|
context = kernel.create_new_context()
|
||||||
|
context["chat_history"] = ""
|
||||||
|
context[sk.core_plugins.TextMemoryPlugin.COLLECTION_PARAM] = "regulation"
|
||||||
|
context[sk.core_plugins.TextMemoryPlugin.RELEVANCE_PARAM] = "0.8"
|
||||||
|
|
||||||
|
return context
|
||||||
|
|
||||||
|
async def populate_memory(kernel):
|
||||||
|
memories = json.load(open("plugins/mem/trial_regulations.json"))
|
||||||
|
|
||||||
|
for id, text in memories.items():
|
||||||
|
await kernel.memory.save_information(
|
||||||
|
collection="regulations",
|
||||||
|
id=id,
|
||||||
|
text=text
|
||||||
|
)
|
||||||
|
|
||||||
|
async def chat(websocket, kernel, chat_function, context):
|
||||||
|
try:
|
||||||
|
websocket.send("User: ")
|
||||||
|
user_input = websocket.recv()
|
||||||
|
context["user_input"] = user_input
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
websocket.send(EXIT_CHAT)
|
||||||
|
return False
|
||||||
|
|
||||||
|
if user_input == "exit":
|
||||||
|
websocket.send(EXIT_CHAT)
|
||||||
|
return False
|
||||||
|
|
||||||
|
answer = await kernel.run(chat_function, input_vars=context.variables)
|
||||||
|
context["chat_history"] += f"\nUser: {user_input}\nSupport: {answer}\n"
|
||||||
|
websocket.send(f"Support: {answer}")
|
||||||
|
return True
|
||||||
|
|
||||||
|
async def init_chat(websocket, path):
|
||||||
|
kernel = await init_kernel()
|
||||||
|
context = init_context()
|
||||||
|
chat_function = kernel.import_semantic_plugin_from_directory("plugins/", "SupportPlugin")["Chat"]
|
||||||
|
populate_memory(kernel)
|
||||||
|
|
||||||
|
chatting = True
|
||||||
|
while chatting:
|
||||||
|
chatting = await chat(kernel, chat_function, context)
|
||||||
|
|
||||||
|
server = websockets.serve(init_chat, "localhost", 8000)
|
||||||
|
asyncio.get_event_loop().run_until_complete(server)
|
||||||
|
asyncio.get_event_loop().run_forever()
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
SUPPORT HELPS THE USER BY RESPONDING TO QUESTIONS THAT THEY ASK.
|
||||||
|
NO BIAS OR BIGOTRY.
|
||||||
|
BE CONSISE.
|
||||||
|
EXPLAIN CONCEPTS SIMPLY AND CLEARLY.
|
||||||
|
+++++
|
||||||
|
Welcome to support. Please ask any questions you may have.
|
||||||
|
|
||||||
|
Chat:
|
||||||
|
{{$chat_history}}
|
||||||
|
User: {{$user_input}}
|
||||||
|
Support:
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"info1": "asdasdasd",
|
||||||
|
"info2": "asdasdsdas"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
semantic-kernel
|
||||||
|
websockets
|
||||||
Loading…
Reference in New Issue