# Chat project Ang proyektong ito ay nagpapakita kung paano bumuo ng Chat Assistant gamit ang GitHub Models. Ganito ang itsura ng natapos na proyekto: ![Chat app](../../../translated_images/screenshot.0a1ee0d123df681b4501eb53ffb267519fcc20aa653eabecef1e7561ddfb1cab.tl.png) Kaunting konteksto, ang paggawa ng Chat assistants gamit ang generative AI ay isang mahusay na paraan upang magsimula sa pag-aaral tungkol sa AI. Ang matututunan mo ay kung paano i-integrate ang generative AI sa isang web app sa buong aralin na ito, simulan na natin. ## Pagkonekta sa generative AI Para sa backend, ginagamit natin ang GitHub Models. Isa itong mahusay na serbisyo na nagbibigay-daan sa iyo na gumamit ng AI nang libre. Pumunta sa playground nito at kunin ang code na tumutugma sa napili mong backend na wika. Ganito ang itsura nito sa [GitHub Models Playground](https://github.com/marketplace/models/azure-openai/gpt-4o-mini/playground) ![GitHub Models AI Playground](../../../translated_images/playground.d2b927122224ff8ff4028fc842176e353c339147d8925455f36c92fb1655c477.tl.png) Tulad ng nabanggit, piliin ang tab na "Code" at ang runtime na napili mo. ![Playground choice](../../../translated_images/playground-choice.1d23ba7d407f47584c9f446c77f0bcf70cae794cc9c8d7849a3cca4a3693e6c4.tl.png) ### Paggamit ng Python Sa kasong ito, pinili natin ang Python, na nangangahulugan na kukunin natin ang code na ito: ```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) ``` Linisin natin ang code na ito nang kaunti upang magamit muli: ```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 ``` Sa pamamagitan ng function na `call_llm`, maaari na nating kunin ang isang prompt at isang system prompt, at ang function ay magbabalik ng resulta. ### I-customize ang AI Assistant Kung nais mong i-customize ang AI assistant, maaari mong tukuyin kung paano mo nais itong kumilos sa pamamagitan ng paglalagay ng system prompt tulad nito: ```python call_llm("Tell me about you", "You're Albert Einstein, you only know of things in the time you were alive") ``` ## I-expose ito sa pamamagitan ng Web API Mahusay, tapos na natin ang bahagi ng AI, tingnan natin kung paano natin ito ma-integrate sa isang Web API. Para sa Web API, pinili natin ang Flask, ngunit anumang web framework ay maaaring gamitin. Tingnan natin ang code para dito: ### Paggamit ng Python ```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) ``` Dito, gumawa tayo ng flask API at nagtakda ng default na ruta "/" at "/chat". Ang huli ay para magamit ng ating frontend upang maipasa ang mga tanong dito. Upang i-integrate ang *llm.py*, narito ang kailangan nating gawin: - I-import ang function na `call_llm`: ```python from llm import call_llm from flask import Flask, request ``` - Tawagin ito mula sa ruta na "/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 }) ``` Dito, ina-parse natin ang papasok na request upang makuha ang property na `message` mula sa JSON body. Pagkatapos, tinatawag natin ang LLM gamit ang tawag na ito: ```python response = call_llm(message, "You are a helpful assistant") # return the response as JSON return jsonify({ "response": response }) ``` Mahusay, natapos na natin ang kailangan. ## I-configure ang Cors Dapat nating banggitin na nag-set up tayo ng isang bagay tulad ng CORS, cross-origin resource sharing. Nangangahulugan ito na dahil ang ating backend at frontend ay tatakbo sa magkaibang ports, kailangan nating payagan ang frontend na tumawag sa backend. ### Paggamit ng Python Mayroong piraso ng code sa *api.py* na nagse-set up nito: ```python from flask_cors import CORS app = Flask(__name__) CORS(app) # * example.com ``` Sa ngayon, naka-set up ito upang payagan ang "*" na nangangahulugang lahat ng origins, ngunit medyo hindi ito ligtas. Dapat natin itong limitahan kapag nasa production na. ## Patakbuhin ang iyong proyekto Upang patakbuhin ang iyong proyekto, kailangan mong simulan muna ang iyong backend at pagkatapos ang iyong frontend. ### Paggamit ng Python Ok, mayroon tayong *llm.py* at *api.py*, paano natin ito mapapagana sa backend? May dalawang bagay na kailangan nating gawin: - I-install ang dependencies: ```sh cd backend python -m venv venv source ./venv/bin/activate pip install openai flask flask-cors openai ``` - Simulan ang API ```sh python api.py ``` Kung nasa Codespaces ka, kailangan mong pumunta sa Ports sa ibabang bahagi ng editor, i-right-click ito at i-click ang "Port Visibility" at piliin ang "Public". ### Gumawa ng frontend Ngayon na mayroon na tayong API na tumatakbo, gumawa tayo ng frontend para dito. Isang pinakasimpleng frontend na ating pagagandahin nang paunti-unti. Sa isang *frontend* folder, gumawa ng sumusunod: ```text backend/ frontend/ index.html app.js styles.css ``` Simulan natin sa **index.html**: ```html