# Proiect de Chat Acest proiect de chat arată cum să construiești un Asistent de Chat folosind Modelele GitHub. Iată cum arată proiectul finalizat:
Aplicație de chat
Un pic de context: construirea asistenților de chat folosind AI generativ este o modalitate excelentă de a începe să înveți despre AI. Vei învăța cum să integrezi AI generativ într-o aplicație web pe parcursul acestei lecții. Să începem. ## Conectarea la AI generativ Pentru backend, folosim Modelele GitHub. Este un serviciu excelent care îți permite să utilizezi AI gratuit. Accesează playground-ul său și preia codul corespunzător limbajului de backend ales. Iată cum arată la [GitHub Models Playground](https://github.com/marketplace/models/azure-openai/gpt-4o-mini/playground)
GitHub Models AI Playground
Așa cum am menționat, selectează fila "Code" și runtime-ul ales.
alegerea playground-ului
În acest caz, selectăm Python, ceea ce înseamnă că alegem acest cod: ```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) ``` Să curățăm puțin acest cod pentru a fi reutilizabil: ```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 ``` Cu această funcție `call_llm`, putem acum să luăm un prompt și un prompt de sistem, iar funcția va returna rezultatul. ### Personalizarea Asistentului AI Dacă dorești să personalizezi asistentul AI, poți specifica cum vrei să se comporte, completând promptul de sistem astfel: ```python call_llm("Tell me about you", "You're Albert Einstein, you only know of things in the time you were alive") ``` ## Expunerea printr-un Web API Grozav, am terminat partea de AI, să vedem cum putem integra aceasta într-un Web API. Pentru Web API, alegem să folosim Flask, dar orice framework web ar trebui să fie bun. Iată codul pentru aceasta: ```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) ``` Aici, creăm un API Flask și definim o rută implicită "/" și "/chat". Cea din urmă este destinată utilizării de către frontend pentru a trimite întrebări. Pentru a integra *llm.py*, iată ce trebuie să facem: - Importă funcția `call_llm`: ```python from llm import call_llm from flask import Flask, request ``` - Apeleaz-o din ruta "/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 }) ``` Aici analizăm cererea primită pentru a prelua proprietatea `message` din corpul JSON. Ulterior, apelăm LLM cu acest apel: ```python response = call_llm(message, "You are a helpful assistant") # return the response as JSON return jsonify({ "response": response }) ``` Grozav, acum am făcut ce era necesar. ### Configurarea Cors Trebuie să menționăm că am configurat ceva numit CORS, partajarea resurselor între origini diferite. Asta înseamnă că, deoarece backend-ul și frontend-ul nostru vor rula pe porturi diferite, trebuie să permitem frontend-ului să apeleze backend-ul. Există un fragment de cod în *api.py* care configurează acest lucru: ```python from flask_cors import CORS app = Flask(__name__) CORS(app) # * example.com ``` În prezent, este configurat să permită "*" (toate originile), ceea ce este puțin nesigur. Ar trebui să restricționăm acest lucru odată ce trecem la producție. ## Rulează proiectul Ok, avem *llm.py* și *api.py*, cum putem face să funcționeze cu un backend? Ei bine, sunt două lucruri pe care trebuie să le facem: - Instalează dependențele: ```sh cd backend python -m venv venv source ./venv/bin/activate pip install openai flask flask-cors openai ``` - Pornește API-ul: ```sh python api.py ``` Dacă ești în Codespaces, trebuie să mergi la Ports în partea de jos a editorului, să dai clic dreapta pe el, să selectezi "Port Visibility" și să alegi "Public". ### Lucrează la un frontend Acum că avem un API funcțional, să creăm un frontend pentru acesta. Un frontend minim pe care îl vom îmbunătăți treptat. Într-un folder *frontend*, creează următoarele: ```text backend/ frontend/ index.html app.js styles.css ``` Să începem cu **index.html**: ```html