# Chat projekt Tento chat projekt ukazuje, ako vytvoriť Chat Asistenta pomocou GitHub Models. Takto vyzerá hotový projekt:
Chat app
Trochu kontextu: vytváranie chat asistentov pomocou generatívnej AI je skvelý spôsob, ako začať učiť sa o AI. V tejto lekcii sa naučíte, ako integrovať generatívnu AI do webovej aplikácie. Poďme na to. ## Pripojenie ku generatívnej AI Na backend používame GitHub Models. Je to skvelá služba, ktorá vám umožňuje používať AI zadarmo. Prejdite na jej playground a získajte kód, ktorý zodpovedá vášmu zvolenému backend jazyku. Takto to vyzerá na [GitHub Models Playground](https://github.com/marketplace/models/azure-openai/gpt-4o-mini/playground)
GitHub Models AI Playground
Ako sme spomenuli, vyberte kartu "Code" a váš zvolený runtime.
playground choice
V tomto prípade vyberáme Python, čo znamená, že použijeme tento kód: ```python """Run this model in Python > pip install openai """ import os from openai import OpenAI # To authenticate with the model you will need to generate a personal access token (PAT) in your GitHub settings. # Create your PAT token by following instructions here: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens client = OpenAI( base_url="https://models.github.ai/inference", api_key=os.environ["GITHUB_TOKEN"], ) response = client.chat.completions.create( messages=[ { "role": "system", "content": "", }, { "role": "user", "content": "What is the capital of France?", } ], model="openai/gpt-4o-mini", temperature=1, max_tokens=4096, top_p=1 ) print(response.choices[0].message.content) ``` Upravme tento kód tak, aby bol znovu použiteľný: ```python def call_llm(prompt: str, system_message: str): response = client.chat.completions.create( messages=[ { "role": "system", "content": system_message, }, { "role": "user", "content": prompt, } ], model="openai/gpt-4o-mini", temperature=1, max_tokens=4096, top_p=1 ) return response.choices[0].message.content ``` S touto funkciou `call_llm` teraz môžeme zadať prompt a systémový prompt a funkcia nám vráti výsledok. ### Prispôsobenie AI asistenta Ak chcete prispôsobiť AI asistenta, môžete špecifikovať, ako sa má správať, vyplnením systémového promptu takto: ```python call_llm("Tell me about you", "You're Albert Einstein, you only know of things in the time you were alive") ``` ## Zverejnenie cez Web API Skvelé, máme hotovú AI časť, pozrime sa, ako ju môžeme integrovať do Web API. Pre Web API sme sa rozhodli použiť Flask, ale akýkoľvek webový framework by mal byť vhodný. Pozrime sa na kód: ```python # api.py from flask import Flask, request, jsonify from llm import call_llm from flask_cors import CORS app = Flask(__name__) CORS(app) # * example.com @app.route("/", methods=["GET"]) def index(): return "Welcome to this API. Call POST /hello with 'message': 'my message' as JSON payload" @app.route("/hello", methods=["POST"]) def hello(): # get message from request body { "message": "do this taks for me" } data = request.get_json() message = data.get("message", "") response = call_llm(message, "You are a helpful assistant.") return jsonify({ "response": response }) if __name__ == "__main__": app.run(host="0.0.0.0", port=5000) ``` Tu vytvárame Flask API a definujeme predvolenú trasu "/" a "/chat". Tá druhá je určená na použitie naším frontendom na odosielanie otázok. Na integráciu *llm.py* potrebujeme urobiť nasledovné: - Importovať funkciu `call_llm`: ```python from llm import call_llm from flask import Flask, request ``` - Zavolať ju z trasy "/chat": ```python @app.route("/hello", methods=["POST"]) def hello(): # get message from request body { "message": "do this taks for me" } data = request.get_json() message = data.get("message", "") response = call_llm(message, "You are a helpful assistant.") return jsonify({ "response": response }) ``` Tu analyzujeme prichádzajúcu požiadavku, aby sme získali vlastnosť `message` z JSON tela. Následne zavoláme LLM pomocou tohto volania: ```python response = call_llm(message, "You are a helpful assistant") # return the response as JSON return jsonify({ "response": response }) ``` Skvelé, teraz máme hotovo, čo sme potrebovali. ### Nastavenie Cors Mali by sme spomenúť, že sme nastavili niečo ako CORS, zdieľanie zdrojov medzi rôznymi doménami. To znamená, že keďže náš backend a frontend budú bežať na rôznych portoch, musíme povoliť frontendu volať backend. V *api.py* je kód, ktorý to nastavuje: ```python from flask_cors import CORS app = Flask(__name__) CORS(app) # * example.com ``` Momentálne je nastavený na povolenie "*" čo znamená všetky domény, čo je trochu nebezpečné. Mali by sme to obmedziť, keď prejdeme do produkcie. ## Spustenie projektu Dobre, máme *llm.py* a *api.py*, ako to môžeme spustiť s backendom? Potrebujeme urobiť dve veci: - Nainštalovať závislosti: ```sh cd backend python -m venv venv source ./venv/bin/activate pip install openai flask flask-cors openai ``` - Spustiť API ```sh python api.py ``` Ak ste v Codespaces, musíte prejsť na Ports v spodnej časti editora, kliknúť pravým tlačidlom myši na port a vybrať "Port Visibility" a zvoliť "Public". ### Práca na fronte Teraz, keď máme API spustené, vytvorme frontend pre tento projekt. Minimálny frontend, ktorý budeme postupne vylepšovať. V priečinku *frontend* vytvorte nasledovné: ```text backend/ frontend/ index.html app.js styles.css ``` Začnime s **index.html**: ```html