# Pokalbių projektas Šis pokalbių projektas parodo, kaip sukurti Pokalbių Asistentą naudojant GitHub Models. Štai kaip atrodo baigtas projektas:
Pokalbių programa
Šiek tiek konteksto: kurti pokalbių asistentus naudojant generatyvinį AI yra puikus būdas pradėti mokytis apie dirbtinį intelektą. Šioje pamokoje išmoksite integruoti generatyvinį AI į internetinę programą. Pradėkime. ## Prisijungimas prie generatyvinio AI Backend dalyje naudojame GitHub Models. Tai puiki paslauga, leidžianti nemokamai naudoti AI. Eikite į jos „playground“ ir paimkite kodą, atitinkantį jūsų pasirinktą backend kalbą. Štai kaip tai atrodo [GitHub Models Playground](https://github.com/marketplace/models/azure-openai/gpt-4o-mini/playground)
GitHub Models AI Playground
Kaip minėjome, pasirinkite „Code“ skirtuką ir savo pasirinktą vykdymo aplinką.
playground pasirinkimas
Šiuo atveju pasirenkame Python, tai reiškia, kad naudosime šį kodą: ```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) ``` Šiek tiek patvarkykime šį kodą, kad jis būtų patogesnis naudoti: ```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 ``` Su šia funkcija `call_llm` dabar galime pateikti užklausą ir sistemos užklausą, o funkcija grąžins rezultatą. ### AI asistento pritaikymas Jei norite pritaikyti AI asistentą, galite nurodyti, kaip jis turėtų elgtis, užpildydami sistemos užklausą, pavyzdžiui: ```python call_llm("Tell me about you", "You're Albert Einstein, you only know of things in the time you were alive") ``` ## API sukūrimas Puiku, AI dalis baigta, pažiūrėkime, kaip ją integruoti į internetinę API. API daliai pasirinkome Flask, bet tinka bet kuris interneto karkasas. Štai kodas: ```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) ``` Čia sukuriame Flask API ir apibrėžiame numatytąjį maršrutą „/“ ir „/chat“. Pastarasis skirtas mūsų frontendui perduoti klausimus. Norėdami integruoti *llm.py*, turime atlikti šiuos veiksmus: - Importuoti funkciją `call_llm`: ```python from llm import call_llm from flask import Flask, request ``` - Iškviesti ją iš „/chat“ maršruto: ```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 }) ``` Čia analizuojame gaunamą užklausą, kad gautume `message` savybę iš JSON kūno. Po to iškviečiame LLM su šiuo skambučiu: ```python response = call_llm(message, "You are a helpful assistant") # return the response as JSON return jsonify({ "response": response }) ``` Puiku, dabar turime viską, ko reikia. ### Cors konfigūravimas Reikėtų paminėti, kad nustatėme kažką panašaus į CORS (kryžminio kilmės išteklių dalijimąsi). Tai reiškia, kad kadangi mūsų backend ir frontend veiks skirtinguose portuose, turime leisti frontendui prisijungti prie backend. Štai kodas *api.py*, kuris tai nustato: ```python from flask_cors import CORS app = Flask(__name__) CORS(app) # * example.com ``` Šiuo metu nustatyta leisti „*“, tai yra visoms kilmėms, ir tai nėra labai saugu. Turėtume tai apriboti, kai pereisime į gamybą. ## Projekto paleidimas Gerai, turime *llm.py* ir *api.py*. Kaip tai paleisti su backend? Štai ką reikia padaryti: - Įdiegti priklausomybes: ```sh cd backend python -m venv venv source ./venv/bin/activate pip install openai flask flask-cors openai ``` - Paleisti API: ```sh python api.py ``` Jei naudojate Codespaces, turite eiti į „Ports“ redaktoriaus apačioje, dešiniuoju pelės mygtuku spustelėti ir pasirinkti „Port Visibility“ bei pasirinkti „Public“. ### Darbas su frontend Dabar, kai API veikia, sukurkime frontend. Minimalus frontend, kurį tobulinsime palaipsniui. Kataloge *frontend* sukurkite šiuos failus: ```text backend/ frontend/ index.html app.js styles.css ``` Pradėkime nuo **index.html**: ```html