# Proyekto ng Chat Ang proyektong ito ng chat ay nagpapakita kung paano bumuo ng isang 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 napili mong runtime. ![Playground choice](../../../translated_images/playground-choice.1d23ba7d407f47584c9f446c77f0bcf70cae794cc9c8d7849a3cca4a3693e6c4.tl.png) ### Paggamit ng Python Sa kasong ito, pinili natin ang Python, na nangangahulugan na pipiliin 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 isang Web API Mahusay, tapos na natin ang bahagi ng AI, tingnan natin kung paano natin ito maisasama sa isang Web API. Para sa Web API, pinili nating gumamit ng Flask, ngunit anumang web framework ay maaring 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 isang flask API at nagtakda ng default na ruta "/" at "/chat". Ang huli ay nilalayong gamitin ng ating frontend upang maipasa ang mga tanong dito. Upang maisama 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 nito, 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 iba't ibang ports, kailangan nating payagan ang frontend na tumawag sa backend. ### Paggamit ng Python May 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, at 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, kaya mayroon tayong *llm.py* at *api.py*, paano natin ito gagawing gumana sa isang backend? Well, may dalawang bagay na kailangan nating gawin: - I-install ang mga 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 tayong API na tumatakbo, gumawa tayo ng frontend para dito. Isang pinakasimpleng frontend na unti-unti nating pagagandahin. Sa isang *frontend* folder, gumawa ng sumusunod: ```text backend/ frontend/ index.html app.js styles.css ``` Simulan natin sa **index.html**: ```html