|
|
<!--
|
|
|
CO_OP_TRANSLATOR_METADATA:
|
|
|
{
|
|
|
"original_hash": "46d665af66e51524598af34a42b9b663",
|
|
|
"translation_date": "2025-10-22T15:28:09+00:00",
|
|
|
"source_file": "9-chat-project/README.md",
|
|
|
"language_code": "tl"
|
|
|
}
|
|
|
-->
|
|
|
# Gumawa ng Chat Assistant gamit ang AI
|
|
|
|
|
|
Naalala mo ba sa Star Trek kung paano nakikipag-usap ang crew sa computer ng barko, nagtatanong ng mga kumplikadong tanong at nakakatanggap ng mga makabuluhang sagot? Ang tila isang purong science fiction noong 1960s ay ngayon ay kaya mo nang gawin gamit ang mga teknolohiyang web na alam mo na.
|
|
|
|
|
|
Sa araling ito, gagawa tayo ng AI chat assistant gamit ang HTML, CSS, JavaScript, at ilang backend integration. Matutuklasan mo kung paano ang parehong mga kasanayan na natutunan mo ay maaaring kumonekta sa mga makapangyarihang serbisyo ng AI na nakakaunawa ng konteksto at bumubuo ng makabuluhang mga sagot.
|
|
|
|
|
|
Isipin ang AI na parang may access ka sa isang napakalaking library na hindi lang naghahanap ng impormasyon kundi nagbubuo rin ng malinaw na mga sagot na naaayon sa iyong mga tanong. Sa halip na maghanap sa libu-libong pahina, makakakuha ka ng direktang sagot na may konteksto.
|
|
|
|
|
|
Ang integration ay nangyayari sa pamamagitan ng mga pamilyar na teknolohiyang web na nagtutulungan. Ang HTML ang gumagawa ng chat interface, ang CSS ang nag-aayos ng disenyo, ang JavaScript ang namamahala sa mga interaksyon ng user, at ang backend API ang nagkokonekta sa lahat ng ito sa mga serbisyo ng AI. Katulad ito ng kung paano nagtutulungan ang iba't ibang seksyon ng orchestra upang makabuo ng isang sinfonya.
|
|
|
|
|
|
Sa esensya, gumagawa tayo ng tulay sa pagitan ng natural na komunikasyon ng tao at pagproseso ng makina. Matutunan mo ang parehong teknikal na implementasyon ng AI service integration at ang mga disenyo na nagpapadali sa pakikipag-ugnayan.
|
|
|
|
|
|
Sa pagtatapos ng araling ito, ang AI integration ay magiging mas pamilyar sa iyo, parang isa pang API na kaya mong gamitin. Maiintindihan mo ang mga pundasyong pattern na nagpapagana sa mga aplikasyon tulad ng ChatGPT at Claude, gamit ang parehong mga prinsipyo ng web development na natutunan mo.
|
|
|
|
|
|
Ganito ang magiging hitsura ng iyong natapos na proyekto:
|
|
|
|
|
|

|
|
|
|
|
|
## Pag-unawa sa AI: Mula sa Misteryo patungo sa Mastery
|
|
|
|
|
|
Bago sumabak sa code, unawain muna natin kung ano ang ating ginagawa. Kung nakagamit ka na ng mga API dati, alam mo ang pangunahing pattern: magpadala ng request, tumanggap ng response.
|
|
|
|
|
|
Ang mga AI API ay sumusunod sa parehong istruktura, ngunit sa halip na kumuha ng pre-stored na data mula sa database, bumubuo sila ng mga bagong sagot batay sa mga pattern na natutunan mula sa napakalaking dami ng teksto. Isipin ito na parang pagkakaiba ng sistema ng katalogo ng library at isang librarian na marunong mag-synthesize ng impormasyon mula sa maraming mapagkukunan.
|
|
|
|
|
|
### Ano ba Talaga ang "Generative AI"?
|
|
|
|
|
|
Isipin kung paano ang Rosetta Stone ay nagbigay-daan sa mga iskolar na maunawaan ang mga hieroglyphics ng Egypt sa pamamagitan ng paghahanap ng mga pattern sa pagitan ng mga kilala at hindi kilalang wika. Ganito rin ang ginagawa ng mga AI model – hinahanap nila ang mga pattern sa napakalaking dami ng teksto upang maunawaan kung paano gumagana ang wika, at ginagamit ang mga pattern na ito upang bumuo ng angkop na mga sagot sa mga bagong tanong.
|
|
|
|
|
|
**Hayaan kong ipaliwanag ito sa isang simpleng paghahambing:**
|
|
|
- **Tradisyunal na database**: Parang humihingi ng birth certificate – palaging pareho ang dokumento na makukuha mo
|
|
|
- **Search engine**: Parang humihingi sa librarian na maghanap ng mga libro tungkol sa pusa – ipapakita nila kung ano ang available
|
|
|
- **Generative AI**: Parang nagtatanong sa isang matalinong kaibigan tungkol sa pusa – sasabihin nila ang mga kawili-wiling bagay sa kanilang sariling mga salita, naaayon sa gusto mong malaman
|
|
|
|
|
|
```mermaid
|
|
|
graph LR
|
|
|
A[Your Question] --> B[AI Model]
|
|
|
B --> C[Pattern Recognition]
|
|
|
C --> D[Content Generation]
|
|
|
D --> E[Contextual Response]
|
|
|
|
|
|
F[Training Data<br/>Books, Articles, Web] --> B
|
|
|
```
|
|
|
|
|
|
### Paano Natututo ang AI Models (Simpleng Bersyon)
|
|
|
|
|
|
Ang mga AI model ay natututo sa pamamagitan ng exposure sa napakalaking dataset na naglalaman ng teksto mula sa mga libro, artikulo, at usapan. Sa prosesong ito, natutukoy nila ang mga pattern sa:
|
|
|
- Paano binubuo ang mga ideya sa nakasulat na komunikasyon
|
|
|
- Aling mga salita ang karaniwang magkasama
|
|
|
- Paano karaniwang dumadaloy ang mga usapan
|
|
|
- Mga pagkakaiba sa konteksto sa pagitan ng pormal at impormal na komunikasyon
|
|
|
|
|
|
**Katulad ito ng kung paano binibigyang-kahulugan ng mga archaeologist ang mga sinaunang wika**: sinusuri nila ang libu-libong halimbawa upang maunawaan ang grammar, bokabularyo, at konteksto ng kultura, hanggang sa kaya na nilang bigyang-kahulugan ang mga bagong teksto gamit ang mga natutunang pattern.
|
|
|
|
|
|
### Bakit GitHub Models?
|
|
|
|
|
|
Ginagamit natin ang GitHub Models para sa isang praktikal na dahilan – nagbibigay ito ng access sa enterprise-level AI nang hindi kinakailangang mag-set up ng sarili nating AI infrastructure (na, maniwala ka, hindi mo gugustuhing gawin ngayon!). Isipin ito na parang paggamit ng weather API sa halip na subukang hulaan ang panahon sa pamamagitan ng pag-set up ng mga weather station sa lahat ng lugar.
|
|
|
|
|
|
Ito ay "AI-as-a-Service," at ang pinakamagandang bahagi? Libre itong simulan, kaya maaari kang mag-eksperimento nang hindi nag-aalala tungkol sa malaking gastos.
|
|
|
|
|
|
```mermaid
|
|
|
graph LR
|
|
|
A[Frontend Chat UI] --> B[Your Backend API]
|
|
|
B --> C[GitHub Models API]
|
|
|
C --> D[AI Model Processing]
|
|
|
D --> C
|
|
|
C --> B
|
|
|
B --> A
|
|
|
```
|
|
|
|
|
|
Gagamitin natin ang GitHub Models para sa ating backend integration, na nagbibigay ng access sa mga propesyonal na AI capabilities sa pamamagitan ng isang developer-friendly interface. Ang [GitHub Models Playground](https://github.com/marketplace/models/azure-openai/gpt-4o-mini/playground) ay nagsisilbing testing environment kung saan maaari kang mag-eksperimento sa iba't ibang AI models at maunawaan ang kanilang kakayahan bago ito i-implement sa code.
|
|
|
|
|
|

|
|
|
|
|
|
**Narito kung bakit kapaki-pakinabang ang playground:**
|
|
|
- **Subukan** ang iba't ibang AI models tulad ng GPT-4o-mini, Claude, at iba pa (lahat libre!)
|
|
|
- **I-test** ang iyong mga ideya at prompts bago ka magsulat ng code
|
|
|
- **Kumuha** ng ready-to-use code snippets sa iyong paboritong programming language
|
|
|
- **I-tweak** ang mga setting tulad ng creativity level at response length upang makita kung paano ito nakakaapekto sa output
|
|
|
|
|
|
Kapag nakapaglaro ka na nang kaunti, i-click lang ang "Code" tab at piliin ang iyong programming language upang makuha ang implementation code na kakailanganin mo.
|
|
|
|
|
|

|
|
|
|
|
|
## Pag-set Up ng Python Backend Integration
|
|
|
|
|
|
Ngayon, i-implement natin ang AI integration gamit ang Python. Ang Python ay mahusay para sa AI applications dahil sa simpleng syntax nito at makapangyarihang mga library. Magsisimula tayo sa code mula sa GitHub Models playground at pagkatapos ay i-refactor ito sa isang reusable, production-ready function.
|
|
|
|
|
|
### Pag-unawa sa Base Implementation
|
|
|
|
|
|
Kapag kinuha mo ang Python code mula sa playground, makakakuha ka ng ganito. Huwag mag-alala kung mukhang marami ito sa simula – talakayin natin ito nang paisa-isa:
|
|
|
|
|
|
```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"],
|
|
|
)
|
|
|
|
|
|
```python
|
|
|
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)
|
|
|
```
|
|
|
|
|
|
**Narito ang nangyayari sa code na ito:**
|
|
|
- **Nag-i-import** tayo ng mga tools na kailangan: `os` para sa pagbabasa ng environment variables at `OpenAI` para sa pakikipag-usap sa AI
|
|
|
- **Inaayos** natin ang OpenAI client upang ituro sa GitHub's AI servers sa halip na direktang OpenAI
|
|
|
- **Nag-aauthenticate** gamit ang isang espesyal na GitHub token (higit pa tungkol dito mamaya!)
|
|
|
- **Istruktura** natin ang usapan gamit ang iba't ibang "roles" – isipin ito na parang pag-set ng eksena para sa isang play
|
|
|
- **Nagpapadala** tayo ng request sa AI na may ilang fine-tuning parameters
|
|
|
- **Kinukuha** natin ang aktwal na response text mula sa lahat ng data na bumalik
|
|
|
|
|
|
### Pag-unawa sa Message Roles: Ang AI Conversation Framework
|
|
|
|
|
|
Ang mga usapan sa AI ay gumagamit ng isang partikular na istruktura na may iba't ibang "roles" na may natatanging layunin:
|
|
|
|
|
|
```python
|
|
|
messages=[
|
|
|
{
|
|
|
"role": "system",
|
|
|
"content": "You are a helpful assistant who explains things simply."
|
|
|
},
|
|
|
{
|
|
|
"role": "user",
|
|
|
"content": "What is machine learning?"
|
|
|
}
|
|
|
]
|
|
|
```
|
|
|
|
|
|
**Isipin ito na parang pagdidirekta ng isang play:**
|
|
|
- **System role**: Parang stage directions para sa isang aktor – sinasabi nito sa AI kung paano kumilos, anong personalidad ang dapat mayroon, at kung paano sumagot
|
|
|
- **User role**: Ang aktwal na tanong o mensahe mula sa taong gumagamit ng iyong aplikasyon
|
|
|
- **Assistant role**: Ang sagot ng AI (hindi mo ito ipinapadala, ngunit lumalabas ito sa history ng usapan)
|
|
|
|
|
|
**Real-world analogy**: Isipin na ipinakikilala mo ang isang kaibigan sa isang tao sa party:
|
|
|
- **System message**: "Ito ang kaibigan kong si Sarah, isa siyang doktor na mahusay magpaliwanag ng mga konsepto sa medisina sa simpleng paraan"
|
|
|
- **User message**: "Paano gumagana ang mga bakuna?"
|
|
|
- **Assistant response**: Sumagot si Sarah bilang isang magiliw na doktor, hindi bilang abogado o chef
|
|
|
|
|
|
### Pag-unawa sa AI Parameters: Fine-Tuning Response Behavior
|
|
|
|
|
|
Ang mga numerical parameters sa AI API calls ay kumokontrol kung paano bumubuo ng mga sagot ang model. Ang mga setting na ito ay nagbibigay-daan sa iyo na i-adjust ang ugali ng AI para sa iba't ibang use cases:
|
|
|
|
|
|
#### Temperature (0.0 hanggang 2.0): Ang Creativity Dial
|
|
|
|
|
|
**Ano ang ginagawa nito**: Kinokontrol kung gaano ka-creative o predictable ang mga sagot ng AI.
|
|
|
|
|
|
**Isipin ito na parang antas ng improvisation ng isang jazz musician:**
|
|
|
- **Temperature = 0.1**: Tumutugtog ng eksaktong parehong melody sa bawat pagkakataon (sobrang predictable)
|
|
|
- **Temperature = 0.7**: Nagdadagdag ng ilang tasteful na variation habang nananatiling pamilyar (balanced creativity)
|
|
|
- **Temperature = 1.5**: Buong experimental jazz na may mga hindi inaasahang liko (sobrang unpredictable)
|
|
|
|
|
|
```python
|
|
|
# Very predictable responses (good for factual questions)
|
|
|
response = client.chat.completions.create(
|
|
|
messages=[{"role": "user", "content": "What is 2+2?"}],
|
|
|
temperature=0.1 # Will almost always say "4"
|
|
|
)
|
|
|
|
|
|
# Creative responses (good for brainstorming)
|
|
|
response = client.chat.completions.create(
|
|
|
messages=[{"role": "user", "content": "Write a creative story opening"}],
|
|
|
temperature=1.2 # Will generate unique, unexpected stories
|
|
|
)
|
|
|
```
|
|
|
|
|
|
#### Max Tokens (1 hanggang 4096+): Ang Response Length Controller
|
|
|
|
|
|
**Ano ang ginagawa nito**: Naglalagay ng limitasyon sa haba ng sagot ng AI.
|
|
|
|
|
|
**Isipin ang tokens na halos katumbas ng mga salita** (mga 1 token = 0.75 na salita sa Ingles):
|
|
|
- **max_tokens=50**: Maikli at direkta (parang text message)
|
|
|
- **max_tokens=500**: Isang magandang talata o dalawa
|
|
|
- **max_tokens=2000**: Isang detalyadong paliwanag na may mga halimbawa
|
|
|
|
|
|
```python
|
|
|
# Short, concise answers
|
|
|
response = client.chat.completions.create(
|
|
|
messages=[{"role": "user", "content": "Explain JavaScript"}],
|
|
|
max_tokens=100 # Forces a brief explanation
|
|
|
)
|
|
|
|
|
|
# Detailed, comprehensive answers
|
|
|
response = client.chat.completions.create(
|
|
|
messages=[{"role": "user", "content": "Explain JavaScript"}],
|
|
|
max_tokens=1500 # Allows for detailed explanations with examples
|
|
|
)
|
|
|
```
|
|
|
|
|
|
#### Top_p (0.0 hanggang 1.0): Ang Focus Parameter
|
|
|
|
|
|
**Ano ang ginagawa nito**: Kinokontrol kung gaano ka-focus ang AI sa mga pinaka-malamang na sagot.
|
|
|
|
|
|
**Isipin ang AI na may napakalaking bokabularyo, niraranggo batay sa kung gaano ka-malamang ang bawat salita:**
|
|
|
- **top_p=0.1**: Tanging isinasaalang-alang ang top 10% na pinaka-malamang na mga salita (sobrang focus)
|
|
|
- **top_p=0.9**: Isinasaalang-alang ang 90% ng mga posibleng salita (mas creative)
|
|
|
- **top_p=1.0**: Isinasaalang-alang ang lahat (maximum variety)
|
|
|
|
|
|
**Halimbawa**: Kung tatanungin mo "Ang langit ay karaniwang..."
|
|
|
- **Mababang top_p**: Halos tiyak na sasabihin "asul"
|
|
|
- **Mataas na top_p**: Maaaring sabihin "asul", "maulap", "malawak", "nagbabago", "maganda", atbp.
|
|
|
|
|
|
### Pagsasama-sama: Mga Kombinasyon ng Parameter para sa Iba't ibang Use Cases
|
|
|
|
|
|
```python
|
|
|
# For factual, consistent answers (like a documentation bot)
|
|
|
factual_params = {
|
|
|
"temperature": 0.2,
|
|
|
"max_tokens": 300,
|
|
|
"top_p": 0.3
|
|
|
}
|
|
|
|
|
|
# For creative writing assistance
|
|
|
creative_params = {
|
|
|
"temperature": 1.1,
|
|
|
"max_tokens": 1000,
|
|
|
"top_p": 0.9
|
|
|
}
|
|
|
|
|
|
# For conversational, helpful responses (balanced)
|
|
|
conversational_params = {
|
|
|
"temperature": 0.7,
|
|
|
"max_tokens": 500,
|
|
|
"top_p": 0.8
|
|
|
}
|
|
|
```
|
|
|
|
|
|
**Pag-unawa kung bakit mahalaga ang mga parameter na ito**: Ang iba't ibang aplikasyon ay nangangailangan ng iba't ibang uri ng sagot. Ang customer service bot ay dapat na consistent at factual (mababang temperature), habang ang creative writing assistant ay dapat na imaginative at varied (mataas na temperature). Ang pag-unawa sa mga parameter na ito ay nagbibigay sa iyo ng kontrol sa personalidad at istilo ng sagot ng iyong AI.
|
|
|
```
|
|
|
|
|
|
**Here's what's happening in this code:**
|
|
|
- **We import** the tools we need: `os` for reading environment variables and `OpenAI` for talking to the AI
|
|
|
- **We set up** the OpenAI client to point to GitHub's AI servers instead of OpenAI directly
|
|
|
- **We authenticate** using a special GitHub token (more on that in a minute!)
|
|
|
- **We structure** our conversation with different "roles" – think of it like setting the scene for a play
|
|
|
- **We send** our request to the AI with some fine-tuning parameters
|
|
|
- **We extract** the actual response text from all the data that comes back
|
|
|
|
|
|
> 🔐 **Security Note**: Never hardcode API keys in your source code! Always use environment variables to store sensitive credentials like your `GITHUB_TOKEN`.
|
|
|
|
|
|
### Creating a Reusable AI Function
|
|
|
|
|
|
Let's refactor this code into a clean, reusable function that we can easily integrate into our web application:
|
|
|
|
|
|
```python
|
|
|
import asyncio
|
|
|
from openai import AsyncOpenAI
|
|
|
|
|
|
# Use AsyncOpenAI for better performance
|
|
|
client = AsyncOpenAI(
|
|
|
base_url="https://models.github.ai/inference",
|
|
|
api_key=os.environ["GITHUB_TOKEN"],
|
|
|
)
|
|
|
|
|
|
async def call_llm_async(prompt: str, system_message: str = "You are a helpful assistant."):
|
|
|
"""
|
|
|
Sends a prompt to the AI model asynchronously and returns the response.
|
|
|
|
|
|
Args:
|
|
|
prompt: The user's question or message
|
|
|
system_message: Instructions that define the AI's behavior and personality
|
|
|
|
|
|
Returns:
|
|
|
str: The AI's response to the prompt
|
|
|
"""
|
|
|
try:
|
|
|
response = await 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
|
|
|
except Exception as e:
|
|
|
logger.error(f"AI API error: {str(e)}")
|
|
|
return "I'm sorry, I'm having trouble processing your request right now."
|
|
|
|
|
|
# Backward compatibility function for synchronous calls
|
|
|
def call_llm(prompt: str, system_message: str = "You are a helpful assistant."):
|
|
|
"""Synchronous wrapper for async AI calls."""
|
|
|
return asyncio.run(call_llm_async(prompt, system_message))
|
|
|
```
|
|
|
|
|
|
**Pag-unawa sa pinahusay na function na ito:**
|
|
|
- **Tumatanggap** ng dalawang parameter: ang prompt ng user at isang optional na system message
|
|
|
- **Nagbibigay** ng default na system message para sa pangkalahatang assistant behavior
|
|
|
- **Gumagamit** ng tamang Python type hints para sa mas mahusay na dokumentasyon ng code
|
|
|
- **Nagbabalik** ng response content lamang, na ginagawang madali itong gamitin sa ating web API
|
|
|
- **Pinapanatili** ang parehong model parameters para sa consistent na AI behavior
|
|
|
|
|
|
### Ang Magic ng System Prompts: Pag-program ng AI Personality
|
|
|
|
|
|
Kung ang mga parameter ang kumokontrol kung paano mag-isip ang AI, ang system prompts ang kumokontrol kung sino ang iniisip ng AI na siya. Isa ito sa mga pinakakapanapanabik na bahagi ng pagtatrabaho sa AI – parang binibigyan mo ang AI ng kumpletong personalidad, antas ng expertise, at istilo ng komunikasyon.
|
|
|
|
|
|
**Isipin ang system prompts na parang pag-cast ng iba't ibang aktor para sa iba't ibang role**: Sa halip na magkaroon ng isang generic na assistant, maaari kang lumikha ng mga espesyal na eksperto para sa iba't ibang sitwasyon. Kailangan mo ba ng pasensyosong guro? Isang creative brainstorming partner? Isang no-nonsense na business advisor? Palitan lang ang system prompt!
|
|
|
|
|
|
#### Bakit Napakalakas ng System Prompts
|
|
|
|
|
|
Narito ang kamangha-manghang bahagi: Ang mga AI model ay na-train sa napakaraming usapan kung saan ang mga tao ay nag-a-adopt ng iba't ibang role at antas ng expertise. Kapag binigyan mo ang AI ng isang partikular na role, parang pinipindot mo ang isang switch na nag-a-activate sa lahat ng natutunang pattern.
|
|
|
|
|
|
**Parang method acting para sa AI**: Sabihin sa isang aktor "ikaw ay isang matalinong propesor" at panoorin kung paano nila awtomatikong ina-adjust ang kanilang postura, bokabularyo, at kilos. Ang AI ay gumagawa ng isang bagay na kahanga-hanga na katulad nito gamit ang mga pattern ng wika.
|
|
|
|
|
|
#### Paggawa ng Epektibong System Prompts: Ang Art at Science
|
|
|
|
|
|
**Ang anatomy ng isang mahusay na system prompt:**
|
|
|
1. **Role/Identity**: Sino ang AI?
|
|
|
2. **Expertise**: Ano ang alam nila?
|
|
|
3. **Communication style**: Paano sila magsalita?
|
|
|
4. **Specific instructions**: Ano ang dapat nilang pagtuunan?
|
|
|
|
|
|
```python
|
|
|
# ❌ Vague system prompt
|
|
|
"You are helpful."
|
|
|
|
|
|
# ✅ Detailed, effective system prompt
|
|
|
"You are Dr. Sarah Chen, a senior software engineer with 15 years of experience at major tech companies. You explain programming concepts using real-world analogies and always provide practical examples. You're patient with beginners and enthusiastic about helping them understand complex topics."
|
|
|
```
|
|
|
|
|
|
#### Mga Halimbawa ng System Prompt na may Konteksto
|
|
|
|
|
|
Tingnan natin kung paano ang iba't ibang system prompts ay lumilikha ng ganap na magkakaibang personalidad ng AI:
|
|
|
|
|
|
```python
|
|
|
# Example 1: The Patient Teacher
|
|
|
teacher_prompt = """
|
|
|
You are an experienced programming instructor who has taught thousands of students.
|
|
|
You break down complex concepts into simple steps, use analogies from everyday life,
|
|
|
and always check if the student understands before moving on. You're encouraging
|
|
|
and never make students feel bad for not knowing something.
|
|
|
"""
|
|
|
|
|
|
# Example 2: The Creative Collaborator
|
|
|
creative_prompt = """
|
|
|
You are a creative writing partner who loves brainstorming wild ideas. You're
|
|
|
enthusiastic, imaginative, and always build on the user's ideas rather than
|
|
|
replacing them. You ask thought-provoking questions to spark creativity and
|
|
|
offer unexpected perspectives that make stories more interesting.
|
|
|
"""
|
|
|
|
|
|
# Example 3: The Strategic Business Advisor
|
|
|
business_prompt = """
|
|
|
You are a strategic business consultant with an MBA and 20 years of experience
|
|
|
helping startups scale. You think in frameworks, provide structured advice,
|
|
|
and always consider both short-term tactics and long-term strategy. You ask
|
|
|
probing questions to understand the full business context before giving advice.
|
|
|
"""
|
|
|
```
|
|
|
|
|
|
#### Pagkakita ng System Prompts sa Aksyon
|
|
|
|
|
|
Subukan natin ang parehong tanong gamit ang iba't ibang system prompts upang makita ang dramatikong pagkakaiba:
|
|
|
|
|
|
**Tanong**: "Paano ko hahawakan ang user authentication sa aking web app?"
|
|
|
|
|
|
```python
|
|
|
# With teacher prompt:
|
|
|
teacher_response = call_llm(
|
|
|
"How do I handle user authentication in my web app?",
|
|
|
teacher_prompt
|
|
|
)
|
|
|
# Typical response: "Great question! Let's break authentication down into simple steps.
|
|
|
# Think of it like a nightclub bouncer checking IDs..."
|
|
|
|
|
|
# With business prompt:
|
|
|
business_response = call_llm(
|
|
|
"How do I handle user authentication in my web app?",
|
|
|
business_prompt
|
|
|
)
|
|
|
# Typical response: "From a strategic perspective, authentication is crucial for user
|
|
|
# trust and regulatory compliance. Let me outline a framework considering security,
|
|
|
# user experience, and scalability..."
|
|
|
```
|
|
|
|
|
|
#### Advanced System Prompt Techniques
|
|
|
|
|
|
**1. Context Setting**: Bigyan ang AI ng background information
|
|
|
```python
|
|
|
system_prompt = """
|
|
|
You are helping a junior developer who just started their first job at a startup.
|
|
|
They know basic HTML/CSS/JavaScript but are new to backend development and databases.
|
|
|
Be encouraging and explain things step-by-step without being condescending.
|
|
|
"""
|
|
|
```
|
|
|
|
|
|
**2. Output Formatting**: Sabihin sa AI kung paano istrukturahin ang mga sagot
|
|
|
```python
|
|
|
system_prompt = """
|
|
|
You are a technical mentor. Always structure your responses as:
|
|
|
1. Quick Answer (1-2 sentences)
|
|
|
2. Detailed Explanation
|
|
|
3. Code Example
|
|
|
4. Common Pitfalls to Avoid
|
|
|
5. Next Steps for Learning
|
|
|
"""
|
|
|
```
|
|
|
|
|
|
**3. Constraint Setting**: Tukuyin kung ano ang hindi dapat gawin ng AI
|
|
|
```python
|
|
|
system_prompt = """
|
|
|
You are a coding tutor focused on teaching best practices. Never write complete
|
|
|
solutions for the user - instead, guide them with hints and questions so they
|
|
|
learn by doing. Always explain the 'why' behind coding decisions.
|
|
|
"""
|
|
|
```
|
|
|
|
|
|
#### Bakit Mahalaga Ito para sa Iyong Chat Assistant
|
|
|
|
|
|
Ang pag-unawa sa system prompts ay nagbibigay sa iyo ng kamangha-manghang kapangyarihan upang lumikha ng mga espesyal na AI assistants:
|
|
|
- **Customer service bot**: Matulungin, pasensyoso, may alam sa mga polisiya
|
|
|
- **Learning tutor**: Nakaka-encourage, step-by-step, sinusuri ang pag-unawa
|
|
|
- **Creative partner**: Imaginative, nagbuo ng mga ideya, nagtatanong ng "paano kung?"
|
|
|
- **Technical expert**: Precise, detalyado, may kamalayan sa seguridad
|
|
|
|
|
|
**Ang pangunahing insight**: Hindi ka lang tumatawag sa isang AI API – lumilikha ka ng custom na AI personality na nagsisilbi sa iyong partikular na use case. Ito ang nagpaparamdam sa mga modernong AI application na tailored at kapaki-pakinabang sa halip na generic.
|
|
|
|
|
|
## Pagbuo ng Web API gamit ang FastAPI: Ang Iyong High-Performance AI Communication Hub
|
|
|
|
|
|
Ngayon, gawin natin ang backend na kumokonekta sa iyong frontend sa mga AI services. Gagamit tayo ng FastAPI, isang modernong Python framework na mahusay sa paggawa ng mga API para sa AI applications.
|
|
|
|
|
|
Ang FastAPI ay nag-aalok ng ilang mga benepisyo para sa ganitong uri ng proyekto: built-in async support para sa paghawak ng sabay-sabay na mga request, automatic API documentation generation, at mahusay na performance. Ang iyong FastAPI server ay nagsisilbing tagapamagitan na tumatanggap ng mga request mula sa frontend, nakikipag-usap sa mga AI services, at nagbabalik ng mga formatted na sagot.
|
|
|
|
|
|
### Bakit FastAPI para sa AI Applications?
|
|
|
|
|
|
Maaaring iniisip mo: "Hindi ba pwedeng direktang tumawag sa AI mula sa aking frontend JavaScript?" o "Bakit FastAPI sa halip na Flask o Django?" Magandang tanong!
|
|
|
**Narito kung bakit perpekto ang FastAPI para sa ginagawa natin:**
|
|
|
- **Async by default**: Kayang mag-handle ng maraming AI requests nang sabay-sabay nang hindi natatambakan
|
|
|
- **Automatic docs**: Bisitahin ang `/docs` para sa maganda at interactive na API documentation page nang libre
|
|
|
- **Built-in validation**: Nahuhuli ang mga error bago pa ito magdulot ng problema
|
|
|
- **Napakabilis**: Isa sa pinakamabilis na Python frameworks
|
|
|
- **Modern Python**: Ginagamit ang pinakabagong features ng Python
|
|
|
|
|
|
**At narito kung bakit kailangan natin ng backend:**
|
|
|
|
|
|
**Seguridad**: Ang iyong AI API key ay parang password – kung ilalagay mo ito sa frontend JavaScript, maaaring makita ito ng sinuman na tumingin sa source code ng iyong website at gamitin ang iyong AI credits. Ang backend ang nagtatago ng mga sensitibong credentials.
|
|
|
|
|
|
**Rate Limiting & Control**: Sa backend, makokontrol mo kung gaano kadalas maaaring mag-request ang mga user, mag-implement ng user authentication, at magdagdag ng logging para sa pagsubaybay sa paggamit.
|
|
|
|
|
|
**Data Processing**: Maaaring gusto mong i-save ang mga pag-uusap, i-filter ang hindi angkop na content, o pagsamahin ang iba't ibang AI services. Sa backend ginagawa ang ganitong logic.
|
|
|
|
|
|
**Ang arkitektura ay kahalintulad ng client-server model:**
|
|
|
- **Frontend**: Layer para sa user interface at interaksyon
|
|
|
- **Backend API**: Layer para sa pagproseso ng request at routing
|
|
|
- **AI Service**: Panlabas na computation at response generation
|
|
|
- **Environment Variables**: Secure na storage para sa configuration at credentials
|
|
|
|
|
|
### Pag-unawa sa Request-Response Flow
|
|
|
|
|
|
Sundan natin ang nangyayari kapag nagpadala ng mensahe ang isang user:
|
|
|
|
|
|
```mermaid
|
|
|
sequenceDiagram
|
|
|
participant User as 👤 User
|
|
|
participant Frontend as 🌐 Frontend
|
|
|
participant API as 🔧 FastAPI Server
|
|
|
participant AI as 🤖 AI Service
|
|
|
|
|
|
User->>Frontend: Types "Hello AI!"
|
|
|
Frontend->>API: POST /hello {"message": "Hello AI!"}
|
|
|
Note over API: Validates request<br/>Adds system prompt
|
|
|
API->>AI: Sends formatted request
|
|
|
AI->>API: Returns AI response
|
|
|
Note over API: Processes response<br/>Logs conversation
|
|
|
API->>Frontend: {"response": "Hello! How can I help?"}
|
|
|
Frontend->>User: Displays AI message
|
|
|
```
|
|
|
|
|
|
**Pag-unawa sa bawat hakbang:**
|
|
|
1. **User interaction**: Nagta-type ang tao sa chat interface
|
|
|
2. **Frontend processing**: Kinukuha ng JavaScript ang input at inaayos ito bilang JSON
|
|
|
3. **API validation**: Awtomatikong sine-check ng FastAPI ang request gamit ang Pydantic models
|
|
|
4. **AI integration**: Idinadagdag ng backend ang context (system prompt) at tinatawag ang AI service
|
|
|
5. **Response handling**: Tinatanggap ng API ang AI response at maaaring baguhin ito kung kinakailangan
|
|
|
6. **Frontend display**: Ipinapakita ng JavaScript ang response sa chat interface
|
|
|
|
|
|
### Pag-unawa sa API Architecture
|
|
|
|
|
|
```mermaid
|
|
|
sequenceDiagram
|
|
|
participant Frontend
|
|
|
participant FastAPI
|
|
|
participant AI Function
|
|
|
participant GitHub Models
|
|
|
|
|
|
Frontend->>FastAPI: POST /hello {"message": "Hello AI!"}
|
|
|
FastAPI->>AI Function: call_llm(message, system_prompt)
|
|
|
AI Function->>GitHub Models: API request
|
|
|
GitHub Models->>AI Function: AI response
|
|
|
AI Function->>FastAPI: response text
|
|
|
FastAPI->>Frontend: {"response": "Hello! How can I help?"}
|
|
|
```
|
|
|
|
|
|
### Paglikha ng FastAPI Application
|
|
|
|
|
|
Gawin natin ang API step by step. Gumawa ng file na tinatawag na `api.py` gamit ang sumusunod na FastAPI code:
|
|
|
|
|
|
```python
|
|
|
# api.py
|
|
|
from fastapi import FastAPI, HTTPException
|
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
|
from pydantic import BaseModel
|
|
|
from llm import call_llm
|
|
|
import logging
|
|
|
|
|
|
# Configure logging
|
|
|
logging.basicConfig(level=logging.INFO)
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
# Create FastAPI application
|
|
|
app = FastAPI(
|
|
|
title="AI Chat API",
|
|
|
description="A high-performance API for AI-powered chat applications",
|
|
|
version="1.0.0"
|
|
|
)
|
|
|
|
|
|
# Configure CORS
|
|
|
app.add_middleware(
|
|
|
CORSMiddleware,
|
|
|
allow_origins=["*"], # Configure appropriately for production
|
|
|
allow_credentials=True,
|
|
|
allow_methods=["*"],
|
|
|
allow_headers=["*"],
|
|
|
)
|
|
|
|
|
|
# Pydantic models for request/response validation
|
|
|
class ChatMessage(BaseModel):
|
|
|
message: str
|
|
|
|
|
|
class ChatResponse(BaseModel):
|
|
|
response: str
|
|
|
|
|
|
@app.get("/")
|
|
|
async def root():
|
|
|
"""Root endpoint providing API information."""
|
|
|
return {
|
|
|
"message": "Welcome to the AI Chat API",
|
|
|
"docs": "/docs",
|
|
|
"health": "/health"
|
|
|
}
|
|
|
|
|
|
@app.get("/health")
|
|
|
async def health_check():
|
|
|
"""Health check endpoint."""
|
|
|
return {"status": "healthy", "service": "ai-chat-api"}
|
|
|
|
|
|
@app.post("/hello", response_model=ChatResponse)
|
|
|
async def chat_endpoint(chat_message: ChatMessage):
|
|
|
"""Main chat endpoint that processes messages and returns AI responses."""
|
|
|
try:
|
|
|
# Extract and validate message
|
|
|
message = chat_message.message.strip()
|
|
|
if not message:
|
|
|
raise HTTPException(status_code=400, detail="Message cannot be empty")
|
|
|
|
|
|
logger.info(f"Processing message: {message[:50]}...")
|
|
|
|
|
|
# Call AI service (note: call_llm should be made async for better performance)
|
|
|
ai_response = await call_llm_async(message, "You are a helpful and friendly assistant.")
|
|
|
|
|
|
logger.info("AI response generated successfully")
|
|
|
return ChatResponse(response=ai_response)
|
|
|
|
|
|
except HTTPException:
|
|
|
raise
|
|
|
except Exception as e:
|
|
|
logger.error(f"Error processing chat message: {str(e)}")
|
|
|
raise HTTPException(status_code=500, detail="Internal server error")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
import uvicorn
|
|
|
uvicorn.run(app, host="0.0.0.0", port=5000, reload=True)
|
|
|
```
|
|
|
|
|
|
**Pag-unawa sa FastAPI implementation:**
|
|
|
- **Imports** FastAPI para sa modernong web framework functionality at Pydantic para sa data validation
|
|
|
- **Nagbibigay** ng awtomatikong API documentation (makikita sa `/docs` kapag tumatakbo ang server)
|
|
|
- **Nag-enable** ng CORS middleware para payagan ang frontend requests mula sa iba't ibang origins
|
|
|
- **Nagde-define** ng Pydantic models para sa awtomatikong request/response validation at documentation
|
|
|
- **Gumagamit** ng async endpoints para sa mas mahusay na performance sa sabay-sabay na requests
|
|
|
- **Nag-iimplement** ng tamang HTTP status codes at error handling gamit ang HTTPException
|
|
|
- **Naglalaman** ng structured logging para sa monitoring at debugging
|
|
|
- **Nagbibigay** ng health check endpoint para sa pagsubaybay sa status ng serbisyo
|
|
|
|
|
|
**Mga pangunahing bentahe ng FastAPI kumpara sa tradisyunal na frameworks:**
|
|
|
- **Awtomatikong validation**: Tinitiyak ng Pydantic models ang integridad ng data bago ito iproseso
|
|
|
- **Interactive docs**: Bisitahin ang `/docs` para sa auto-generated, testable API documentation
|
|
|
- **Type safety**: Ang Python type hints ay nakakaiwas sa runtime errors at nagpapabuti sa kalidad ng code
|
|
|
- **Async support**: Kayang mag-handle ng maraming AI requests nang sabay-sabay
|
|
|
- **Performance**: Mas mabilis ang request processing para sa real-time applications
|
|
|
|
|
|
### Pag-unawa sa CORS: Ang Security Guard ng Web
|
|
|
|
|
|
Ang CORS (Cross-Origin Resource Sharing) ay parang security guard sa isang gusali na nagche-check kung pinapayagan ang mga bisita na pumasok. Alamin natin kung bakit ito mahalaga at paano ito nakakaapekto sa iyong application.
|
|
|
|
|
|
#### Ano ang CORS at Bakit Ito Umiiral?
|
|
|
|
|
|
**Ang Problema**: Isipin kung ang anumang website ay maaaring mag-request sa website ng iyong bangko nang walang pahintulot mo. Isang malaking security issue iyon! Pinipigilan ito ng mga browser sa pamamagitan ng "Same-Origin Policy."
|
|
|
|
|
|
**Same-Origin Policy**: Pinapayagan lamang ng mga browser ang mga web page na mag-request sa parehong domain, port, at protocol kung saan sila na-load.
|
|
|
|
|
|
**Real-world analogy**: Parang security sa apartment building – ang mga residente (same origin) lang ang maaaring pumasok sa gusali nang default. Kung gusto mong papasukin ang kaibigan (different origin), kailangan mong sabihin sa security na okay lang.
|
|
|
|
|
|
#### CORS sa Iyong Development Environment
|
|
|
|
|
|
Sa development, ang iyong frontend at backend ay tumatakbo sa iba't ibang ports:
|
|
|
- Frontend: `http://localhost:3000` (o file:// kung direktang binuksan ang HTML)
|
|
|
- Backend: `http://localhost:5000`
|
|
|
|
|
|
Ang mga ito ay itinuturing na "different origins" kahit na nasa parehong computer!
|
|
|
|
|
|
```python
|
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
|
|
|
|
app = FastAPI(__name__)
|
|
|
CORS(app) # This tells browsers: "It's okay for other origins to make requests to this API"
|
|
|
```
|
|
|
|
|
|
**Ano ang ginagawa ng CORS configuration sa praktika:**
|
|
|
- **Nagdadagdag** ng espesyal na HTTP headers sa API responses na nagsasabi sa mga browser "pinapayagan ang cross-origin request na ito"
|
|
|
- **Nagha-handle** ng "preflight" requests (minsan sine-check ng mga browser ang permissions bago magpadala ng aktwal na request)
|
|
|
- **Pinipigilan** ang nakakainis na "blocked by CORS policy" error sa iyong browser console
|
|
|
|
|
|
#### CORS Security: Development vs Production
|
|
|
|
|
|
```python
|
|
|
# 🚨 Development: Allows ALL origins (convenient but insecure)
|
|
|
CORS(app)
|
|
|
|
|
|
# ✅ Production: Only allow your specific frontend domain
|
|
|
CORS(app, origins=["https://yourdomain.com", "https://www.yourdomain.com"])
|
|
|
|
|
|
# 🔒 Advanced: Different origins for different environments
|
|
|
if app.debug: # Development mode
|
|
|
CORS(app, origins=["http://localhost:3000", "http://127.0.0.1:3000"])
|
|
|
else: # Production mode
|
|
|
CORS(app, origins=["https://yourdomain.com"])
|
|
|
```
|
|
|
|
|
|
**Bakit ito mahalaga**: Sa development, ang `CORS(app)` ay parang iniwan mong bukas ang pintuan – maginhawa pero hindi secure. Sa production, gusto mong tukuyin kung aling mga website lang ang maaaring makipag-usap sa iyong API.
|
|
|
|
|
|
#### Karaniwang CORS Scenarios at Solusyon
|
|
|
|
|
|
| Scenario | Problema | Solusyon |
|
|
|
|----------|----------|----------|
|
|
|
| **Local Development** | Hindi maabot ng frontend ang backend | Magdagdag ng CORSMiddleware sa FastAPI |
|
|
|
| **GitHub Pages + Heroku** | Hindi maabot ng deployed frontend ang API | Idagdag ang URL ng GitHub Pages sa CORS origins |
|
|
|
| **Custom Domain** | CORS errors sa production | I-update ang CORS origins para tumugma sa iyong domain |
|
|
|
| **Mobile App** | Hindi maabot ng app ang web API | Idagdag ang domain ng iyong app o gamitin ang `*` nang maingat |
|
|
|
|
|
|
**Pro tip**: Maaari mong i-check ang CORS headers sa Developer Tools ng iyong browser sa ilalim ng Network tab. Hanapin ang headers tulad ng `Access-Control-Allow-Origin` sa response.
|
|
|
|
|
|
### Error Handling at Validation
|
|
|
|
|
|
Pansinin kung paano ang API natin ay may tamang error handling:
|
|
|
|
|
|
```python
|
|
|
# Validate that we received a message
|
|
|
if not message:
|
|
|
return jsonify({"error": "Message field is required"}), 400
|
|
|
```
|
|
|
|
|
|
**Mga pangunahing prinsipyo ng validation:**
|
|
|
- **Sine-check** ang mga kinakailangang field bago iproseso ang requests
|
|
|
- **Nagbabalik** ng makabuluhang error messages sa JSON format
|
|
|
- **Gumagamit** ng tamang HTTP status codes (400 para sa bad requests)
|
|
|
- **Nagbibigay** ng malinaw na feedback para matulungan ang mga frontend developers na mag-debug ng issues
|
|
|
|
|
|
## Pag-setup at Pagpapatakbo ng Iyong Backend
|
|
|
|
|
|
Ngayon na mayroon na tayong AI integration at FastAPI server, simulan na natin ang lahat. Ang proseso ng setup ay kinabibilangan ng pag-install ng Python dependencies, pag-configure ng environment variables, at pagsisimula ng development server.
|
|
|
|
|
|
### Python Environment Setup
|
|
|
|
|
|
I-setup natin ang iyong Python development environment. Ang virtual environments ay parang compartmentalized approach ng Manhattan Project – bawat proyekto ay may sariling isolated space na may partikular na tools at dependencies, na pumipigil sa conflicts sa pagitan ng iba't ibang proyekto.
|
|
|
|
|
|
```bash
|
|
|
# Navigate to your backend directory
|
|
|
cd backend
|
|
|
|
|
|
# Create a virtual environment (like creating a clean room for your project)
|
|
|
python -m venv venv
|
|
|
|
|
|
# Activate it (Linux/Mac)
|
|
|
source ./venv/bin/activate
|
|
|
|
|
|
# On Windows, use:
|
|
|
# venv\Scripts\activate
|
|
|
|
|
|
# Install the good stuff
|
|
|
pip install openai fastapi uvicorn python-dotenv
|
|
|
```
|
|
|
|
|
|
**Ano ang ginawa natin:**
|
|
|
- **Gumawa** ng sarili nating Python bubble kung saan maaari tayong mag-install ng packages nang hindi naaapektuhan ang iba
|
|
|
- **In-activate** ito para malaman ng terminal na gamitin ang partikular na environment na ito
|
|
|
- **Nag-install** ng essentials: OpenAI para sa AI magic, FastAPI para sa web API, Uvicorn para sa pag-run nito, at python-dotenv para sa secure secrets management
|
|
|
|
|
|
**Mga pangunahing dependencies na ipinaliwanag:**
|
|
|
- **FastAPI**: Modernong, mabilis na web framework na may awtomatikong API documentation
|
|
|
- **Uvicorn**: Napakabilis na ASGI server na nagpapatakbo ng FastAPI applications
|
|
|
- **OpenAI**: Opisyal na library para sa GitHub Models at OpenAI API integration
|
|
|
- **python-dotenv**: Secure na pag-load ng environment variables mula sa .env files
|
|
|
|
|
|
### Environment Configuration: Panatilihing Ligtas ang Mga Sekreto
|
|
|
|
|
|
Bago natin simulan ang API, pag-usapan natin ang isa sa pinakamahalagang aral sa web development: paano panatilihing talagang sikreto ang iyong mga sekreto. Ang environment variables ay parang secure vault na ang iyong application lang ang may access.
|
|
|
|
|
|
#### Ano ang Environment Variables?
|
|
|
|
|
|
**Isipin ang environment variables na parang safety deposit box** – inilalagay mo ang mahalagang bagay doon, at ikaw (at ang iyong app) lang ang may susi para makuha ito. Sa halip na isulat ang sensitibong impormasyon nang direkta sa iyong code (kung saan makikita ito ng kahit sino), itinatago mo ito nang ligtas sa environment.
|
|
|
|
|
|
**Narito ang pagkakaiba:**
|
|
|
- **Maling paraan**: Isinusulat ang password sa sticky note at inilalagay ito sa monitor
|
|
|
- **Tamang paraan**: Itinatago ang password sa secure password manager na ikaw lang ang may access
|
|
|
|
|
|
#### Bakit Mahalaga ang Environment Variables
|
|
|
|
|
|
```python
|
|
|
# 🚨 NEVER DO THIS - API key visible to everyone
|
|
|
client = OpenAI(
|
|
|
api_key="ghp_1234567890abcdef...", # Anyone can steal this!
|
|
|
base_url="https://models.github.ai/inference"
|
|
|
)
|
|
|
|
|
|
# ✅ DO THIS - API key stored securely
|
|
|
client = OpenAI(
|
|
|
api_key=os.environ["GITHUB_TOKEN"], # Only your app can access this
|
|
|
base_url="https://models.github.ai/inference"
|
|
|
)
|
|
|
```
|
|
|
|
|
|
**Ano ang nangyayari kapag hardcoded ang mga sekreto:**
|
|
|
1. **Version control exposure**: Makikita ng sinuman na may access sa iyong Git repository ang iyong API key
|
|
|
2. **Public repositories**: Kung i-push mo sa GitHub, makikita ng buong internet ang iyong key
|
|
|
3. **Team sharing**: Ang ibang developers na nagtatrabaho sa iyong proyekto ay magkakaroon ng access sa iyong personal API key
|
|
|
4. **Security breaches**: Kung may magnakaw ng iyong API key, magagamit nila ang iyong AI credits
|
|
|
|
|
|
#### Pag-setup ng Iyong Environment File
|
|
|
|
|
|
Gumawa ng `.env` file sa iyong backend directory. Ang file na ito ang nagtatago ng iyong mga sekreto nang lokal:
|
|
|
|
|
|
```bash
|
|
|
# .env file - This should NEVER be committed to Git
|
|
|
GITHUB_TOKEN=your_github_personal_access_token_here
|
|
|
FASTAPI_DEBUG=True
|
|
|
ENVIRONMENT=development
|
|
|
```
|
|
|
|
|
|
**Pag-unawa sa .env file:**
|
|
|
- **Isang sekreto kada linya** sa `KEY=value` format
|
|
|
- **Walang spaces** sa paligid ng equals sign
|
|
|
- **Hindi kailangan ng quotes** sa paligid ng values (karaniwan)
|
|
|
- **Comments** nagsisimula sa `#`
|
|
|
|
|
|
#### Paglikha ng Iyong GitHub Personal Access Token
|
|
|
|
|
|
Ang iyong GitHub token ay parang espesyal na password na nagbibigay ng pahintulot sa iyong application na gamitin ang GitHub's AI services:
|
|
|
|
|
|
**Step-by-step token creation:**
|
|
|
1. **Pumunta sa GitHub Settings** → Developer settings → Personal access tokens → Tokens (classic)
|
|
|
2. **I-click ang "Generate new token (classic)"**
|
|
|
3. **Itakda ang expiration** (30 araw para sa testing, mas mahaba para sa production)
|
|
|
4. **Piliin ang scopes**: I-check ang "repo" at iba pang permissions na kailangan mo
|
|
|
5. **I-generate ang token** at kopyahin ito kaagad (hindi mo na ito makikita ulit!)
|
|
|
6. **I-paste sa iyong .env file**
|
|
|
|
|
|
```bash
|
|
|
# Example of what your token looks like (this is fake!)
|
|
|
GITHUB_TOKEN=ghp_1A2B3C4D5E6F7G8H9I0J1K2L3M4N5O6P7Q8R
|
|
|
```
|
|
|
|
|
|
#### Pag-load ng Environment Variables sa Python
|
|
|
|
|
|
```python
|
|
|
import os
|
|
|
from dotenv import load_dotenv
|
|
|
|
|
|
# Load environment variables from .env file
|
|
|
load_dotenv()
|
|
|
|
|
|
# Now you can access them securely
|
|
|
api_key = os.environ.get("GITHUB_TOKEN")
|
|
|
if not api_key:
|
|
|
raise ValueError("GITHUB_TOKEN not found in environment variables!")
|
|
|
|
|
|
client = OpenAI(
|
|
|
api_key=api_key,
|
|
|
base_url="https://models.github.ai/inference"
|
|
|
)
|
|
|
```
|
|
|
|
|
|
**Ano ang ginagawa ng code na ito:**
|
|
|
- **Naglo-load** ng iyong .env file at ginagawang available ang variables sa Python
|
|
|
- **Sine-check** kung umiiral ang kinakailangang token (magandang error handling!)
|
|
|
- **Nag-raise** ng malinaw na error kung nawawala ang token
|
|
|
- **Ginagamit** ang token nang ligtas nang hindi ito inilalantad sa code
|
|
|
|
|
|
#### Git Security: Ang .gitignore File
|
|
|
|
|
|
Ang iyong `.gitignore` file ang nagsasabi sa Git kung aling mga file ang hindi kailanman dapat i-track o i-upload:
|
|
|
|
|
|
```bash
|
|
|
# .gitignore - Add these lines
|
|
|
.env
|
|
|
*.env
|
|
|
.env.local
|
|
|
.env.production
|
|
|
__pycache__/
|
|
|
venv/
|
|
|
.vscode/
|
|
|
```
|
|
|
|
|
|
**Bakit ito mahalaga**: Kapag idinagdag mo ang `.env` sa `.gitignore`, i-ignore ito ng Git, na pumipigil sa iyo na aksidenteng ma-upload ang iyong mga sekreto sa GitHub.
|
|
|
|
|
|
#### Iba't Ibang Environments, Iba't Ibang Sekreto
|
|
|
|
|
|
Ang mga propesyonal na application ay gumagamit ng iba't ibang API keys para sa iba't ibang environments:
|
|
|
|
|
|
```bash
|
|
|
# .env.development
|
|
|
GITHUB_TOKEN=your_development_token
|
|
|
DEBUG=True
|
|
|
|
|
|
# .env.production
|
|
|
GITHUB_TOKEN=your_production_token
|
|
|
DEBUG=False
|
|
|
```
|
|
|
|
|
|
**Bakit ito mahalaga**: Ayaw mong maapektuhan ng iyong development experiments ang iyong production AI usage quota, at gusto mo ng iba't ibang security levels para sa iba't ibang environments.
|
|
|
|
|
|
### Pagsisimula ng Iyong Development Server: Pagpapagana ng Iyong FastAPI
|
|
|
|
|
|
Ngayon na ang exciting na bahagi – simulan ang iyong FastAPI development server at makita ang iyong AI integration na gumagana! Ang FastAPI ay gumagamit ng Uvicorn, isang napakabilis na ASGI server na partikular na dinisenyo para sa async Python applications.
|
|
|
|
|
|
#### Pag-unawa sa FastAPI Server Startup Process
|
|
|
|
|
|
```bash
|
|
|
# Method 1: Direct Python execution (includes auto-reload)
|
|
|
python api.py
|
|
|
|
|
|
# Method 2: Using Uvicorn directly (more control)
|
|
|
uvicorn api:app --host 0.0.0.0 --port 5000 --reload
|
|
|
```
|
|
|
|
|
|
Kapag pinatakbo mo ang command na ito, narito ang nangyayari sa likod ng eksena:
|
|
|
|
|
|
**1. I-load ng Python ang iyong FastAPI application**:
|
|
|
- Ini-import ang lahat ng kinakailangang libraries (FastAPI, Pydantic, OpenAI, atbp.)
|
|
|
- I-load ang environment variables mula sa iyong `.env` file
|
|
|
- Gumagawa ng FastAPI application instance na may awtomatikong documentation
|
|
|
|
|
|
**2. I-configure ng Uvicorn ang ASGI server**:
|
|
|
- Nagbi-bind sa port 5000 na may async request handling capabilities
|
|
|
- Nagse-set up ng request routing na may awtomatikong validation
|
|
|
- Nag-enable ng hot reload para sa development (nagre-restart kapag may file changes)
|
|
|
- Gumagawa ng interactive API documentation
|
|
|
|
|
|
**3. Nagsisimulang makinig ang server**:
|
|
|
- Makikita mo sa terminal: `INFO: Uvicorn running on http://0.0.0.0:5000`
|
|
|
- Kayang mag-handle ng maraming sabay-sabay na AI requests ang server
|
|
|
- Handa na ang iyong API na may awtomatikong docs sa `http://localhost:5000/docs`
|
|
|
|
|
|
#### Ano ang Dapat Mong Makita Kapag Gumagana ang Lahat
|
|
|
|
|
|
```bash
|
|
|
$ python api.py
|
|
|
INFO: Will watch for changes in these directories: ['/your/project/path']
|
|
|
INFO: Uvicorn running on http://0.0.0.0:5000 (Press CTRL+C to quit)
|
|
|
INFO: Started reloader process [12345] using WatchFiles
|
|
|
INFO: Started server process [12346]
|
|
|
INFO: Waiting for application startup.
|
|
|
INFO: Application startup complete.
|
|
|
```
|
|
|
|
|
|
**Pag-unawa sa FastAPI output:**
|
|
|
- **Magmo-monitor ng changes**: Auto-reload enabled para sa development
|
|
|
- **Uvicorn running**: Aktibo ang high-performance ASGI server
|
|
|
- **Nagsimula ang reloader process**: File watcher para sa awtomatikong restarts
|
|
|
- **Application startup complete**: Matagumpay na na-initialize ang FastAPI app
|
|
|
- **Interactive docs available**: Bisitahin ang `/docs` para sa awtomatikong API documentation
|
|
|
|
|
|
#### Pagsubok sa Iyong FastAPI: Maraming Makapangyarihang Paraan
|
|
|
|
|
|
Nagbibigay ang FastAPI ng ilang maginhawang paraan para subukan ang iyong API, kabilang ang awtomatikong interactive documentation:
|
|
|
|
|
|
**Paraan 1: Interactive API Documentation (Inirerekomenda)**
|
|
|
1. Buksan ang iyong browser at pumunta sa `http://localhost:5000/docs`
|
|
|
2. Makikita mo ang Swagger UI na may lahat ng iyong endpoints na documented
|
|
|
3. I-click ang `/hello` → "Try it out" → Maglagay ng test message → "Execute"
|
|
|
4. Makikita ang response direkta sa browser na may tamang formatting
|
|
|
|
|
|
**Paraan 2: Basic Browser Test**
|
|
|
1. Pumunta sa `http://localhost:5000` para sa root endpoint
|
|
|
2. Pumunta sa `http://localhost:5000/health` para i-check ang server health
|
|
|
3. Kinukumpirma nito na tumatakbo nang maayos ang iyong FastAPI server
|
|
|
|
|
|
**Paraan 3: Command Line Test (Advanced)**
|
|
|
```bash
|
|
|
# Test with curl (if available)
|
|
|
curl -X POST http://localhost:5000/hello \
|
|
|
-H "Content-Type: application/json" \
|
|
|
-d '{"message": "Hello AI!"}'
|
|
|
|
|
|
# Expected response:
|
|
|
# {"response": "Hello! I'm your AI assistant. How can I help you today?"}
|
|
|
```
|
|
|
|
|
|
**Paraan 4: Python Test Script**
|
|
|
#### Pag-aayos ng Karaniwang Problema sa Startup
|
|
|
|
|
|
| Mensahe ng Error | Ano ang Kahulugan | Paano Ayusin |
|
|
|
|-------------------|-------------------|-------------|
|
|
|
| `ModuleNotFoundError: No module named 'fastapi'` | Hindi naka-install ang FastAPI | Patakbuhin ang `pip install fastapi uvicorn` sa iyong virtual environment |
|
|
|
| `ModuleNotFoundError: No module named 'uvicorn'` | Hindi naka-install ang ASGI server | Patakbuhin ang `pip install uvicorn` sa iyong virtual environment |
|
|
|
| `KeyError: 'GITHUB_TOKEN'` | Hindi natagpuan ang environment variable | Suriin ang iyong `.env` file at ang tawag sa `load_dotenv()` |
|
|
|
| `Address already in use` | Abala ang Port 5000 | Patayin ang ibang proseso na gumagamit ng port 5000 o palitan ang port |
|
|
|
| `ValidationError` | Hindi tugma ang request data sa Pydantic model | Suriin kung ang format ng iyong request ay tumutugma sa inaasahang schema |
|
|
|
| `HTTPException 422` | Hindi maiproseso ang entity | Nabigo ang request validation, suriin ang `/docs` para sa tamang format |
|
|
|
| `OpenAI API error` | Nabigo ang authentication ng AI service | Siguraduhing tama ang iyong GitHub token at may tamang mga pahintulot |
|
|
|
|
|
|
#### Mga Pinakamahusay na Praktika sa Pag-develop
|
|
|
|
|
|
**Hot Reloading**: Ang FastAPI kasama ang Uvicorn ay nagbibigay ng awtomatikong pag-reload kapag nag-save ka ng mga pagbabago sa iyong Python files. Nangangahulugan ito na maaari mong baguhin ang iyong code at agad na subukan nang hindi mano-manong nire-restart.
|
|
|
|
|
|
**Pag-log para sa Pag-develop**: Magdagdag ng logging upang maunawaan ang nangyayari:
|
|
|
|
|
|
**Bakit nakakatulong ang logging**: Sa panahon ng pag-develop, makikita mo nang eksakto kung anong mga request ang pumapasok, kung ano ang tugon ng AI, at kung saan nagkakaroon ng mga error. Mas mabilis ang debugging dahil dito.
|
|
|
|
|
|
### Pag-configure para sa GitHub Codespaces: Madaling Pag-develop sa Cloud
|
|
|
|
|
|
Ang GitHub Codespaces ay parang pagkakaroon ng makapangyarihang development computer sa cloud na maaari mong ma-access mula sa anumang browser. Kung nagtatrabaho ka sa Codespaces, may ilang karagdagang hakbang upang gawing accessible ang iyong backend sa iyong frontend.
|
|
|
|
|
|
#### Pag-unawa sa Networking ng Codespaces
|
|
|
|
|
|
Sa lokal na development environment, lahat ay tumatakbo sa parehong computer:
|
|
|
- Backend: `http://localhost:5000`
|
|
|
- Frontend: `http://localhost:3000` (o file://)
|
|
|
|
|
|
Sa Codespaces, ang iyong development environment ay tumatakbo sa mga server ng GitHub, kaya ang "localhost" ay may ibang kahulugan. Awtomatikong lumilikha ang GitHub ng mga pampublikong URL para sa iyong mga serbisyo, ngunit kailangan mong i-configure ang mga ito nang maayos.
|
|
|
|
|
|
#### Hakbang-hakbang na Configuration ng Codespaces
|
|
|
|
|
|
**1. Simulan ang iyong backend server**:
|
|
|
Makikita mo ang pamilyar na FastAPI/Uvicorn startup message, ngunit mapapansin mong ito ay tumatakbo sa loob ng Codespace environment.
|
|
|
|
|
|
**2. I-configure ang visibility ng port**:
|
|
|
- Hanapin ang "Ports" tab sa ibabang panel ng VS Code
|
|
|
- Hanapin ang port 5000 sa listahan
|
|
|
- I-right-click ang port 5000
|
|
|
- Piliin ang "Port Visibility" → "Public"
|
|
|
|
|
|
**Bakit gawing pampubliko?** Sa default, ang mga port ng Codespace ay pribado (accessible lamang sa iyo). Ang paggawa nito bilang pampubliko ay magpapahintulot sa iyong frontend (na tumatakbo sa browser) na makipag-ugnayan sa iyong backend.
|
|
|
|
|
|
**3. Kunin ang iyong pampublikong URL**:
|
|
|
Pagkatapos gawing pampubliko ang port, makakakita ka ng URL tulad ng:
|
|
|
**4. I-update ang configuration ng iyong frontend**:
|
|
|
|
|
|
#### Pag-unawa sa mga URL ng Codespace
|
|
|
|
|
|
Ang mga URL ng Codespace ay sumusunod sa isang predictable na pattern:
|
|
|
**Pag-unawa sa istruktura**:
|
|
|
- `codespace-name`: Isang natatanging identifier para sa iyong Codespace (karaniwang kasama ang iyong username)
|
|
|
- `port`: Ang numero ng port kung saan tumatakbo ang iyong serbisyo (5000 para sa aming FastAPI app)
|
|
|
- `app.github.dev`: Domain ng GitHub para sa mga application ng Codespace
|
|
|
|
|
|
#### Pagsubok sa Iyong Setup ng Codespace
|
|
|
|
|
|
**1. Subukan ang backend nang direkta**:
|
|
|
Buksan ang iyong pampublikong URL sa isang bagong tab ng browser. Makikita mo:
|
|
|
**2. Subukan gamit ang browser developer tools**:
|
|
|
|
|
|
#### Codespaces vs Lokal na Pag-develop
|
|
|
|
|
|
| Aspeto | Lokal na Pag-develop | GitHub Codespaces |
|
|
|
|--------|-----------------------|-------------------|
|
|
|
| **Oras ng Setup** | Mas matagal (install Python, dependencies) | Agad (pre-configured environment) |
|
|
|
| **URL Access** | `http://localhost:5000` | `https://xyz-5000.app.github.dev` |
|
|
|
| **Configuration ng Port** | Awtomatiko | Manu-mano (gawing pampubliko ang mga port) |
|
|
|
| **File Persistence** | Lokal na makina | GitHub repository |
|
|
|
| **Collaborative** | Mahirap ibahagi ang environment | Madaling ibahagi ang link ng Codespace |
|
|
|
| **Internet Dependency** | Para lamang sa AI API calls | Kinakailangan para sa lahat |
|
|
|
|
|
|
#### Mga Tip sa Pag-develop gamit ang Codespaces
|
|
|
|
|
|
**Environment Variables sa Codespaces**:
|
|
|
Ang iyong `.env` file ay gumagana nang pareho sa Codespaces, ngunit maaari ka ring mag-set ng environment variables nang direkta sa Codespace.
|
|
|
|
|
|
**Pamamahala ng Port**:
|
|
|
- Awtomatikong nadedetect ng Codespaces kapag ang iyong application ay nagsimulang makinig sa isang port
|
|
|
- Maaari kang mag-forward ng maraming port nang sabay-sabay (kapaki-pakinabang kung magdadagdag ka ng database sa hinaharap)
|
|
|
- Ang mga port ay nananatiling accessible hangga't tumatakbo ang iyong Codespace
|
|
|
|
|
|
**Workflow ng Pag-develop**:
|
|
|
1. Gumawa ng mga pagbabago sa code sa VS Code
|
|
|
2. Awtomatikong nagre-reload ang FastAPI (salamat sa reload mode ng Uvicorn)
|
|
|
3. Agad na subukan ang mga pagbabago sa pamamagitan ng pampublikong URL
|
|
|
4. I-commit at i-push kapag handa na
|
|
|
|
|
|
> 💡 **Pro Tip**: I-bookmark ang iyong Codespace backend URL sa panahon ng pag-develop. Dahil ang mga pangalan ng Codespace ay stable, hindi magbabago ang URL hangga't ginagamit mo ang parehong Codespace.
|
|
|
|
|
|
## Paglikha ng Frontend Chat Interface: Kung Saan Nagkikita ang Tao at AI
|
|
|
|
|
|
Ngayon ay gagawa tayo ng user interface – ang bahagi na tumutukoy kung paano nakikipag-ugnayan ang mga tao sa iyong AI assistant. Tulad ng disenyo ng orihinal na interface ng iPhone, magpo-focus tayo sa paggawa ng kumplikadong teknolohiya na intuitive at natural gamitin.
|
|
|
|
|
|
### Pag-unawa sa Modernong Arkitektura ng Frontend
|
|
|
|
|
|
Ang ating chat interface ay magiging tinatawag na "Single Page Application" o SPA. Sa halip na ang lumang paraan kung saan bawat click ay naglo-load ng bagong pahina, ang ating app ay nag-a-update nang maayos at instant:
|
|
|
|
|
|
**Lumang websites**: Parang nagbabasa ng pisikal na libro – nag-flip ka sa ganap na bagong mga pahina
|
|
|
**Ang ating chat app**: Parang gumagamit ng iyong telepono – lahat ay dumadaloy at nag-a-update nang seamless
|
|
|
|
|
|
### Ang Tatlong Haligi ng Frontend Development
|
|
|
|
|
|
Ang bawat frontend application – mula sa simpleng websites hanggang sa mga kumplikadong apps tulad ng Discord o Slack – ay binubuo ng tatlong pangunahing teknolohiya. Isipin ang mga ito bilang pundasyon ng lahat ng nakikita at nakikipag-ugnayan sa web:
|
|
|
|
|
|
**HTML (Istruktura)**: Ito ang iyong pundasyon
|
|
|
- Nagpapasya kung anong mga elemento ang umiiral (mga button, text areas, containers)
|
|
|
- Nagbibigay ng kahulugan sa content (ito ay header, ito ay form, atbp.)
|
|
|
- Lumilikha ng pangunahing istruktura na binubuo ng lahat ng iba pa
|
|
|
|
|
|
**CSS (Presentasyon)**: Ito ang iyong interior designer
|
|
|
- Ginagawang maganda ang lahat (kulay, font, layout)
|
|
|
- Nag-a-adjust sa iba't ibang screen sizes (telepono vs laptop vs tablet)
|
|
|
- Lumilikha ng smooth animations at visual feedback
|
|
|
|
|
|
**JavaScript (Pag-uugali)**: Ito ang iyong utak
|
|
|
- Tumutugon sa ginagawa ng mga user (clicks, typing, scrolling)
|
|
|
- Nakikipag-usap sa iyong backend at nag-a-update ng pahina
|
|
|
- Ginagawang interactive at dynamic ang lahat
|
|
|
|
|
|
**Isipin ito tulad ng architectural design:**
|
|
|
- **HTML**: Ang structural blueprint (nagde-define ng spaces at relationships)
|
|
|
- **CSS**: Ang aesthetic at environmental design (visual style at user experience)
|
|
|
- **JavaScript**: Ang mechanical systems (functionality at interactivity)
|
|
|
|
|
|
### Bakit Mahalaga ang Modernong Arkitektura ng JavaScript
|
|
|
|
|
|
Ang ating chat application ay gagamit ng modernong JavaScript patterns na makikita mo sa mga propesyonal na application. Ang pag-unawa sa mga konseptong ito ay makakatulong sa iyo habang lumalago ka bilang developer:
|
|
|
|
|
|
**Class-Based Architecture**: I-oorganisa natin ang ating code sa mga klase, na parang gumagawa ng blueprint para sa mga object
|
|
|
**Async/Await**: Modernong paraan ng pag-handle ng mga operasyon na tumatagal ng oras (tulad ng API calls)
|
|
|
**Event-Driven Programming**: Ang ating app ay tumutugon sa mga aksyon ng user (clicks, key presses) sa halip na tumakbo sa loop
|
|
|
**DOM Manipulation**: Dinamikong pag-update ng content ng webpage base sa mga interaksyon ng user at mga tugon ng API
|
|
|
|
|
|
### Setup ng Istruktura ng Proyekto
|
|
|
|
|
|
Gumawa ng frontend directory na may ganitong organisadong istruktura:
|
|
|
|
|
|
**Pag-unawa sa arkitektura:**
|
|
|
- **Pinaghihiwalay** ang mga concern sa pagitan ng istruktura (HTML), pag-uugali (JavaScript), at presentasyon (CSS)
|
|
|
- **Pinapanatili** ang simpleng file structure na madaling i-navigate at i-modify
|
|
|
- **Sumusunod** sa mga pinakamahusay na praktika sa web development para sa organisasyon at maintainability
|
|
|
|
|
|
### Paggawa ng HTML Foundation: Semantic Structure para sa Accessibility
|
|
|
|
|
|
Simulan natin sa HTML structure. Ang modernong web development ay nagbibigay-diin sa "semantic HTML" – paggamit ng mga HTML element na malinaw na naglalarawan ng kanilang layunin, hindi lamang ang kanilang hitsura. Ginagawa nitong accessible ang iyong application sa screen readers, search engines, at iba pang tools.
|
|
|
|
|
|
**Bakit mahalaga ang semantic HTML**: Isipin ang pag-describe ng iyong chat app sa isang tao sa telepono. Sasabihin mo "may header na may title, isang pangunahing lugar kung saan lumalabas ang mga conversation, at isang form sa ibaba para sa pag-type ng mga mensahe." Ang semantic HTML ay gumagamit ng mga element na tumutugma sa natural na deskripsyon na ito.
|
|
|
|
|
|
Gumawa ng `index.html` na may ganitong maingat na structured markup:
|
|
|
|
|
|
**Pag-unawa sa bawat HTML element at ang layunin nito:**
|
|
|
|
|
|
#### Istruktura ng Dokumento
|
|
|
- **`<!DOCTYPE html>`**: Sinasabi sa browser na ito ay modernong HTML5
|
|
|
- **`<html lang="en">`**: Nagsasaad ng wika ng pahina para sa screen readers at translation tools
|
|
|
- **`<meta charset="UTF-8">`**: Tinitiyak ang tamang character encoding para sa international text
|
|
|
- **`<meta name="viewport"...>`**: Ginagawang mobile-responsive ang pahina sa pamamagitan ng pag-control sa zoom at scale
|
|
|
|
|
|
#### Semantic Elements
|
|
|
- **`<header>`**: Malinaw na tinutukoy ang top section na may title at description
|
|
|
- **`<main>`**: Itinalaga ang pangunahing content area (kung saan nagaganap ang mga conversation)
|
|
|
- **`<form>`**: Semantically tama para sa user input, nagbibigay-daan sa tamang keyboard navigation
|
|
|
|
|
|
#### Mga Feature ng Accessibility
|
|
|
- **`role="log"`**: Sinasabi sa screen readers na ang area na ito ay naglalaman ng chronological log ng mga mensahe
|
|
|
- **`aria-live="polite"`**: Ina-announce ang mga bagong mensahe sa screen readers nang hindi ini-interrupt
|
|
|
- **`aria-label`**: Nagbibigay ng descriptive labels para sa mga form controls
|
|
|
- **`required`**: Ang browser ay nagva-validate na ang mga user ay maglalagay ng mensahe bago mag-send
|
|
|
|
|
|
#### CSS at JavaScript Integration
|
|
|
- **`class` attributes**: Nagbibigay ng styling hooks para sa CSS (hal., `chat-container`, `input-group`)
|
|
|
- **`id` attributes**: Pinapayagan ang JavaScript na hanapin at manipulahin ang mga partikular na elemento
|
|
|
- **Script placement**: Ang JavaScript file ay na-load sa dulo para ma-load muna ang HTML
|
|
|
|
|
|
**Bakit gumagana ang istrukturang ito:**
|
|
|
- **Logical flow**: Header → Main content → Input form ay tumutugma sa natural na reading order
|
|
|
- **Keyboard accessible**: Ang mga user ay maaaring mag-tab sa lahat ng interactive elements
|
|
|
- **Screen reader friendly**: Malinaw na landmarks at deskripsyon para sa visually impaired users
|
|
|
- **Mobile responsive**: Ang viewport meta tag ay nagbibigay-daan sa responsive design
|
|
|
- **Progressive enhancement**: Gumagana kahit na ang CSS o JavaScript ay nabigo mag-load
|
|
|
|
|
|
### Pagdaragdag ng Interactive JavaScript: Modernong Logic ng Web Application
|
|
|
|
|
|
Ngayon ay gagawin natin ang JavaScript na magbibigay-buhay sa ating chat interface. Gagamit tayo ng modernong JavaScript patterns na makikita sa propesyonal na web development, kabilang ang ES6 classes, async/await, at event-driven programming.
|
|
|
|
|
|
#### Pag-unawa sa Modernong Arkitektura ng JavaScript
|
|
|
|
|
|
Sa halip na magsulat ng procedural code (isang serye ng mga function na tumatakbo nang sunod-sunod), gagawa tayo ng **class-based architecture**. Isipin ang isang class bilang blueprint para sa paggawa ng mga object – tulad ng kung paano ang blueprint ng arkitekto ay maaaring gamitin upang magtayo ng maraming bahay.
|
|
|
|
|
|
**Bakit gumamit ng mga klase para sa mga web application?**
|
|
|
- **Organisasyon**: Ang lahat ng kaugnay na functionality ay naka-group
|
|
|
- **Reusability**: Maaari kang gumawa ng maraming chat instances sa parehong pahina
|
|
|
- **Maintainability**: Mas madaling i-debug at i-modify ang mga partikular na feature
|
|
|
- **Propesyonal na standard**: Ang pattern na ito ay ginagamit sa mga framework tulad ng React, Vue, at Angular
|
|
|
|
|
|
Gumawa ng `app.js` na may modernong, maayos na structured JavaScript:
|
|
|
|
|
|
#### Pag-unawa sa Bawat Konsepto ng JavaScript
|
|
|
|
|
|
**ES6 Class Structure**:
|
|
|
**Async/Await Pattern**:
|
|
|
**Event-Driven Programming**:
|
|
|
Sa halip na patuloy na suriin kung may nangyari, "nakikinig" tayo sa mga event:
|
|
|
**DOM Manipulation**:
|
|
|
|
|
|
#### Seguridad at Mga Pinakamahusay na Praktika
|
|
|
|
|
|
**XSS Prevention**:
|
|
|
**Bakit mahalaga ito**: Kung ang isang user ay nag-type ng `<script>alert('hack')</script>`, tinitiyak ng function na ito na magdi-display ito bilang text sa halip na mag-execute bilang code.
|
|
|
|
|
|
**Error Handling**:
|
|
|
**Mga Pagsasaalang-alang sa User Experience**:
|
|
|
- **Optimistic UI**: Agad na idagdag ang mensahe ng user, huwag maghintay para sa tugon ng server
|
|
|
- **Loading states**: I-disable ang mga button at ipakita ang "Sending..." habang naghihintay
|
|
|
- **Auto-scroll**: Panatilihing nakikita ang pinakabagong mga mensahe
|
|
|
- **Input validation**: Huwag mag-send ng mga empty messages
|
|
|
- **Keyboard shortcuts**: Ang Enter key ay nagse-send ng mga mensahe (tulad ng tunay na chat apps)
|
|
|
|
|
|
#### Pag-unawa sa Daloy ng Application
|
|
|
|
|
|
1. **Naglo-load ang pahina** → Nag-fire ang `DOMContentLoaded` event → Naka-create ang `new ChatApp()`
|
|
|
2. **Tumakbo ang constructor** → Nakakuha ng mga DOM element references → Naka-setup ang mga event listeners
|
|
|
3. **Nagta-type ang user ng mensahe** → Pinindot ang Enter o kinlick ang Send → Tumakbo ang `handleSubmit`
|
|
|
4. **Tumakbo ang `handleSubmit`** → Na-validate ang input → Nagpakita ng loading state → Tumawag sa API
|
|
|
5. **Tumugon ang API** → Idagdag ang AI message sa chat → I-enable muli ang interface
|
|
|
6. **Handa para sa susunod na mensahe** → Maaaring magpatuloy ang user sa pag-chat
|
|
|
Ang arkitektura na ito ay madaling i-scale – madali mong maidaragdag ang mga tampok tulad ng pag-edit ng mensahe, pag-upload ng file, o maraming thread ng pag-uusap nang hindi binabago ang pangunahing istruktura.
|
|
|
|
|
|
### Pag-istilo ng Iyong Chat Interface
|
|
|
|
|
|
Ngayon, gagawa tayo ng modernong, kaakit-akit na chat interface gamit ang CSS. Ang magandang disenyo ay nagpaparamdam na propesyonal ang iyong aplikasyon at nagpapabuti sa kabuuang karanasan ng gumagamit. Gagamit tayo ng mga modernong tampok ng CSS tulad ng Flexbox, CSS Grid, at custom properties para sa isang responsive at accessible na disenyo.
|
|
|
|
|
|
Gumawa ng `styles.css` gamit ang mga komprehensibong estilo:
|
|
|
|
|
|
```css
|
|
|
/* styles.css - Modern chat interface styling */
|
|
|
|
|
|
:root {
|
|
|
--primary-color: #2563eb;
|
|
|
--secondary-color: #f1f5f9;
|
|
|
--user-color: #3b82f6;
|
|
|
--assistant-color: #6b7280;
|
|
|
--error-color: #ef4444;
|
|
|
--text-primary: #1e293b;
|
|
|
--text-secondary: #64748b;
|
|
|
--border-radius: 12px;
|
|
|
--shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
|
|
|
}
|
|
|
|
|
|
* {
|
|
|
margin: 0;
|
|
|
padding: 0;
|
|
|
box-sizing: border-box;
|
|
|
}
|
|
|
|
|
|
body {
|
|
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
|
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
|
min-height: 100vh;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
padding: 20px;
|
|
|
}
|
|
|
|
|
|
.chat-container {
|
|
|
width: 100%;
|
|
|
max-width: 800px;
|
|
|
height: 600px;
|
|
|
background: white;
|
|
|
border-radius: var(--border-radius);
|
|
|
box-shadow: var(--shadow);
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
overflow: hidden;
|
|
|
}
|
|
|
|
|
|
.chat-header {
|
|
|
background: var(--primary-color);
|
|
|
color: white;
|
|
|
padding: 20px;
|
|
|
text-align: center;
|
|
|
}
|
|
|
|
|
|
.chat-header h1 {
|
|
|
font-size: 1.5rem;
|
|
|
margin-bottom: 5px;
|
|
|
}
|
|
|
|
|
|
.chat-header p {
|
|
|
opacity: 0.9;
|
|
|
font-size: 0.9rem;
|
|
|
}
|
|
|
|
|
|
.chat-messages {
|
|
|
flex: 1;
|
|
|
padding: 20px;
|
|
|
overflow-y: auto;
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
gap: 15px;
|
|
|
background: var(--secondary-color);
|
|
|
}
|
|
|
|
|
|
.message {
|
|
|
display: flex;
|
|
|
max-width: 80%;
|
|
|
animation: slideIn 0.3s ease-out;
|
|
|
}
|
|
|
|
|
|
.message.user {
|
|
|
align-self: flex-end;
|
|
|
}
|
|
|
|
|
|
.message.user .message-content {
|
|
|
background: var(--user-color);
|
|
|
color: white;
|
|
|
border-radius: var(--border-radius) var(--border-radius) 4px var(--border-radius);
|
|
|
}
|
|
|
|
|
|
.message.assistant {
|
|
|
align-self: flex-start;
|
|
|
}
|
|
|
|
|
|
.message.assistant .message-content {
|
|
|
background: white;
|
|
|
color: var(--text-primary);
|
|
|
border-radius: var(--border-radius) var(--border-radius) var(--border-radius) 4px;
|
|
|
border: 1px solid #e2e8f0;
|
|
|
}
|
|
|
|
|
|
.message.error .message-content {
|
|
|
background: var(--error-color);
|
|
|
color: white;
|
|
|
border-radius: var(--border-radius);
|
|
|
}
|
|
|
|
|
|
.message-content {
|
|
|
padding: 12px 16px;
|
|
|
box-shadow: var(--shadow);
|
|
|
position: relative;
|
|
|
}
|
|
|
|
|
|
.message-text {
|
|
|
display: block;
|
|
|
line-height: 1.5;
|
|
|
word-wrap: break-word;
|
|
|
}
|
|
|
|
|
|
.message-time {
|
|
|
display: block;
|
|
|
font-size: 0.75rem;
|
|
|
opacity: 0.7;
|
|
|
margin-top: 5px;
|
|
|
}
|
|
|
|
|
|
.chat-form {
|
|
|
padding: 20px;
|
|
|
border-top: 1px solid #e2e8f0;
|
|
|
background: white;
|
|
|
}
|
|
|
|
|
|
.input-group {
|
|
|
display: flex;
|
|
|
gap: 10px;
|
|
|
align-items: center;
|
|
|
}
|
|
|
|
|
|
#messageInput {
|
|
|
flex: 1;
|
|
|
padding: 12px 16px;
|
|
|
border: 2px solid #e2e8f0;
|
|
|
border-radius: var(--border-radius);
|
|
|
font-size: 1rem;
|
|
|
outline: none;
|
|
|
transition: border-color 0.2s ease;
|
|
|
}
|
|
|
|
|
|
#messageInput:focus {
|
|
|
border-color: var(--primary-color);
|
|
|
}
|
|
|
|
|
|
#messageInput:disabled {
|
|
|
background: #f8fafc;
|
|
|
opacity: 0.6;
|
|
|
cursor: not-allowed;
|
|
|
}
|
|
|
|
|
|
#sendBtn {
|
|
|
padding: 12px 24px;
|
|
|
background: var(--primary-color);
|
|
|
color: white;
|
|
|
border: none;
|
|
|
border-radius: var(--border-radius);
|
|
|
font-size: 1rem;
|
|
|
font-weight: 600;
|
|
|
cursor: pointer;
|
|
|
transition: background-color 0.2s ease;
|
|
|
min-width: 80px;
|
|
|
}
|
|
|
|
|
|
#sendBtn:hover:not(:disabled) {
|
|
|
background: #1d4ed8;
|
|
|
}
|
|
|
|
|
|
#sendBtn:disabled {
|
|
|
background: #94a3b8;
|
|
|
cursor: not-allowed;
|
|
|
}
|
|
|
|
|
|
@keyframes slideIn {
|
|
|
from {
|
|
|
opacity: 0;
|
|
|
transform: translateY(10px);
|
|
|
}
|
|
|
to {
|
|
|
opacity: 1;
|
|
|
transform: translateY(0);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/* Responsive design for mobile devices */
|
|
|
@media (max-width: 768px) {
|
|
|
body {
|
|
|
padding: 10px;
|
|
|
}
|
|
|
|
|
|
.chat-container {
|
|
|
height: calc(100vh - 20px);
|
|
|
border-radius: 8px;
|
|
|
}
|
|
|
|
|
|
.message {
|
|
|
max-width: 90%;
|
|
|
}
|
|
|
|
|
|
.input-group {
|
|
|
flex-direction: column;
|
|
|
gap: 10px;
|
|
|
}
|
|
|
|
|
|
#messageInput {
|
|
|
width: 100%;
|
|
|
}
|
|
|
|
|
|
#sendBtn {
|
|
|
width: 100%;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/* Accessibility improvements */
|
|
|
@media (prefers-reduced-motion: reduce) {
|
|
|
.message {
|
|
|
animation: none;
|
|
|
}
|
|
|
|
|
|
* {
|
|
|
transition: none !important;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/* Dark mode support */
|
|
|
@media (prefers-color-scheme: dark) {
|
|
|
.chat-container {
|
|
|
background: #1e293b;
|
|
|
color: #f1f5f9;
|
|
|
}
|
|
|
|
|
|
.chat-messages {
|
|
|
background: #0f172a;
|
|
|
}
|
|
|
|
|
|
.message.assistant .message-content {
|
|
|
background: #334155;
|
|
|
color: #f1f5f9;
|
|
|
border-color: #475569;
|
|
|
}
|
|
|
|
|
|
.chat-form {
|
|
|
background: #1e293b;
|
|
|
border-color: #475569;
|
|
|
}
|
|
|
|
|
|
#messageInput {
|
|
|
background: #334155;
|
|
|
color: #f1f5f9;
|
|
|
border-color: #475569;
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
|
|
|
**Pag-unawa sa arkitektura ng CSS:**
|
|
|
- **Gumagamit** ng mga custom properties ng CSS (mga variable) para sa pare-parehong tema at madaling maintenance
|
|
|
- **Nagpapatupad** ng layout ng Flexbox para sa responsive na disenyo at tamang alignment
|
|
|
- **Kasama** ang smooth animations para sa paglitaw ng mensahe nang hindi nakakagambala
|
|
|
- **Nagbibigay** ng visual na pagkakaiba sa pagitan ng mga mensahe ng user, mga tugon ng AI, at mga error states
|
|
|
- **Sumusuporta** sa responsive na disenyo na gumagana sa parehong desktop at mobile devices
|
|
|
- **Isinasaalang-alang** ang accessibility gamit ang reduced motion preferences at tamang contrast ratios
|
|
|
- **Nag-aalok** ng dark mode support batay sa system preferences ng user
|
|
|
|
|
|
### Pag-configure ng Iyong Backend URL
|
|
|
|
|
|
Ang huling hakbang ay ang pag-update ng `BASE_URL` sa iyong JavaScript upang tumugma sa iyong backend server:
|
|
|
|
|
|
```javascript
|
|
|
// For local development
|
|
|
this.BASE_URL = "http://localhost:5000";
|
|
|
|
|
|
// For GitHub Codespaces (replace with your actual URL)
|
|
|
this.BASE_URL = "https://your-codespace-name-5000.app.github.dev";
|
|
|
```
|
|
|
|
|
|
**Pagpapasya sa iyong backend URL:**
|
|
|
- **Local development**: Gamitin ang `http://localhost:5000` kung parehong tumatakbo ang frontend at backend nang lokal
|
|
|
- **Codespaces**: Hanapin ang iyong backend URL sa tab na Ports pagkatapos gawing pampubliko ang port 5000
|
|
|
- **Production**: Palitan ng iyong aktwal na domain kapag dineploy sa hosting service
|
|
|
|
|
|
> 💡 **Tip sa Pagsubok**: Maaari mong subukan ang iyong backend nang direkta sa pamamagitan ng pagbisita sa root URL sa iyong browser. Makikita mo ang welcome message mula sa iyong FastAPI server.
|
|
|
|
|
|
## Pagsubok at Deployment
|
|
|
|
|
|
Ngayon na mayroon ka nang parehong frontend at backend components, subukan natin kung gumagana ang lahat nang magkasama at tuklasin ang mga opsyon sa deployment para maibahagi ang iyong chat assistant sa iba.
|
|
|
|
|
|
### Workflow ng Lokal na Pagsubok
|
|
|
|
|
|
Sundin ang mga hakbang na ito upang subukan ang iyong kumpletong aplikasyon:
|
|
|
|
|
|
```mermaid
|
|
|
graph TD
|
|
|
A[Start Backend Server] --> B[Configure Environment Variables]
|
|
|
B --> C[Test API Endpoints]
|
|
|
C --> D[Open Frontend in Browser]
|
|
|
D --> E[Test Chat Functionality]
|
|
|
E --> F[Debug Any Issues]
|
|
|
```
|
|
|
|
|
|
**Hakbang-hakbang na proseso ng pagsubok:**
|
|
|
|
|
|
1. **Simulan ang iyong backend server**:
|
|
|
```bash
|
|
|
cd backend
|
|
|
source venv/bin/activate # or venv\Scripts\activate on Windows
|
|
|
python api.py
|
|
|
```
|
|
|
|
|
|
2. **I-verify ang API ay gumagana**:
|
|
|
- Buksan ang `http://localhost:5000` sa iyong browser
|
|
|
- Makikita mo ang welcome message mula sa iyong FastAPI server
|
|
|
|
|
|
3. **Buksan ang iyong frontend**:
|
|
|
- Pumunta sa iyong frontend directory
|
|
|
- Buksan ang `index.html` sa iyong web browser
|
|
|
- O gamitin ang Live Server extension ng VS Code para sa mas magandang karanasan sa development
|
|
|
|
|
|
4. **Subukan ang functionality ng chat**:
|
|
|
- Mag-type ng mensahe sa input field
|
|
|
- I-click ang "Send" o pindutin ang Enter
|
|
|
- I-verify na ang AI ay tumutugon nang naaangkop
|
|
|
- Suriin ang browser console para sa anumang JavaScript errors
|
|
|
|
|
|
### Pag-aayos ng Karaniwang Problema
|
|
|
|
|
|
| Problema | Sintomas | Solusyon |
|
|
|
|----------|----------|----------|
|
|
|
| **CORS Error** | Hindi maabot ng frontend ang backend | Siguraduhing maayos na naka-configure ang FastAPI CORSMiddleware |
|
|
|
| **API Key Error** | 401 Unauthorized responses | Suriin ang iyong `GITHUB_TOKEN` environment variable |
|
|
|
| **Connection Refused** | Mga error sa network sa frontend | I-verify ang backend URL at na tumatakbo ang Flask server |
|
|
|
| **No AI Response** | Walang laman o error na tugon | Suriin ang backend logs para sa API quota o authentication issues |
|
|
|
|
|
|
**Karaniwang hakbang sa debugging:**
|
|
|
- **Suriin** ang browser Developer Tools Console para sa mga JavaScript errors
|
|
|
- **I-verify** na ang Network tab ay nagpapakita ng matagumpay na API requests at responses
|
|
|
- **Suriin** ang backend terminal output para sa mga Python errors o API issues
|
|
|
- **Siguraduhin** na ang environment variables ay maayos na na-load at accessible
|
|
|
|
|
|
## Hamon ng GitHub Copilot Agent 🚀
|
|
|
|
|
|
Gamitin ang Agent mode upang tapusin ang sumusunod na hamon:
|
|
|
|
|
|
**Deskripsyon:** Pagandahin ang chat assistant sa pamamagitan ng pagdaragdag ng conversation history at message persistence. Ang hamon na ito ay makakatulong sa iyo na maunawaan kung paano pamahalaan ang estado sa mga chat application at magpatupad ng data storage para sa mas magandang karanasan ng user.
|
|
|
|
|
|
**Prompt:** Baguhin ang chat application upang isama ang conversation history na nananatili sa pagitan ng mga session. Magdagdag ng functionality upang i-save ang mga chat message sa local storage, ipakita ang conversation history kapag nag-load ang page, at isama ang "Clear History" button. Magpatupad din ng typing indicators at message timestamps upang gawing mas makatotohanan ang karanasan sa chat.
|
|
|
|
|
|
Alamin pa ang tungkol sa [agent mode](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) dito.
|
|
|
|
|
|
## Asaynment: Gumawa ng Iyong Personal na AI Assistant
|
|
|
|
|
|
Ngayon ay gagawa ka ng sarili mong implementasyon ng AI assistant. Sa halip na gayahin lamang ang tutorial code, ito ay pagkakataon upang ilapat ang mga konsepto habang gumagawa ng isang bagay na sumasalamin sa iyong sariling interes at mga use case.
|
|
|
|
|
|
### Mga Kinakailangan sa Proyekto
|
|
|
|
|
|
I-set up ang iyong proyekto gamit ang malinis at organisadong istruktura:
|
|
|
|
|
|
```text
|
|
|
my-ai-assistant/
|
|
|
├── backend/
|
|
|
│ ├── api.py # Your FastAPI server
|
|
|
│ ├── llm.py # AI integration functions
|
|
|
│ ├── .env # Your secrets (keep this safe!)
|
|
|
│ └── requirements.txt # Python dependencies
|
|
|
├── frontend/
|
|
|
│ ├── index.html # Your chat interface
|
|
|
│ ├── app.js # The JavaScript magic
|
|
|
│ └── styles.css # Make it look amazing
|
|
|
└── README.md # Tell the world about your creation
|
|
|
```
|
|
|
|
|
|
### Mga Gawain sa Core Implementation
|
|
|
|
|
|
**Backend Development:**
|
|
|
- **Gamitin** ang aming FastAPI code at gawing sarili mo
|
|
|
- **Gumawa** ng natatanging AI personality – maaaring isang helpful cooking assistant, isang creative writing partner, o isang study buddy?
|
|
|
- **Magdagdag** ng solid error handling upang hindi masira ang iyong app kapag may problema
|
|
|
- **Sumulat** ng malinaw na dokumentasyon para sa sinumang gustong maunawaan kung paano gumagana ang iyong API
|
|
|
|
|
|
**Frontend Development:**
|
|
|
- **Gumawa** ng chat interface na intuitive at welcoming
|
|
|
- **Sumulat** ng malinis, modernong JavaScript na maipagmamalaki mong ipakita sa ibang developer
|
|
|
- **Magdisenyo** ng custom styling na sumasalamin sa personalidad ng iyong AI – masaya at makulay? Malinis at minimal? Nasa iyo ang desisyon!
|
|
|
- **Siguraduhin** na gumagana ito nang mahusay sa parehong telepono at computer
|
|
|
|
|
|
**Mga Kinakailangan sa Personalization:**
|
|
|
- **Pumili** ng natatanging pangalan at personalidad para sa iyong AI assistant – maaaring isang bagay na sumasalamin sa iyong interes o mga problemang nais mong lutasin
|
|
|
- **I-customize** ang disenyo ng visual upang tumugma sa vibe ng iyong assistant
|
|
|
- **Sumulat** ng nakakaakit na welcome message na magpapasimula sa mga tao na makipag-chat
|
|
|
- **Subukan** ang iyong assistant gamit ang iba't ibang uri ng tanong upang makita kung paano ito tumutugon
|
|
|
|
|
|
### Mga Ideya sa Pagpapahusay (Opsyonal)
|
|
|
|
|
|
Gusto mo bang dalhin ang iyong proyekto sa susunod na antas? Narito ang ilang mga ideya na masaya tuklasin:
|
|
|
|
|
|
| Tampok | Deskripsyon | Mga Kasanayang Iyong Mapa-practice |
|
|
|
|--------|-------------|------------------------------------|
|
|
|
| **Message History** | Tandaan ang mga pag-uusap kahit na mag-refresh ang page | Paggamit ng localStorage, JSON handling |
|
|
|
| **Typing Indicators** | Ipakita ang "AI is typing..." habang naghihintay ng tugon | CSS animations, async programming |
|
|
|
| **Message Timestamps** | Ipakita kung kailan ipinadala ang bawat mensahe | Date/time formatting, UX design |
|
|
|
| **Export Chat** | Payagan ang mga user na i-download ang kanilang pag-uusap | File handling, data export |
|
|
|
| **Theme Switching** | Light/dark mode toggle | CSS variables, user preferences |
|
|
|
| **Voice Input** | Magdagdag ng speech-to-text functionality | Web APIs, accessibility |
|
|
|
|
|
|
### Pagsubok at Dokumentasyon
|
|
|
|
|
|
**Quality Assurance:**
|
|
|
- **Subukan** ang iyong aplikasyon gamit ang iba't ibang uri ng input at edge cases
|
|
|
- **I-verify** na gumagana ang responsive design sa iba't ibang screen sizes
|
|
|
- **Suriin** ang accessibility gamit ang keyboard navigation at screen readers
|
|
|
- **I-validate** ang HTML at CSS para sa standards compliance
|
|
|
|
|
|
**Mga Kinakailangan sa Dokumentasyon:**
|
|
|
- **Sumulat** ng README.md na nagpapaliwanag ng iyong proyekto at kung paano ito patakbuhin
|
|
|
- **Isama** ang mga screenshot ng iyong chat interface habang gumagana
|
|
|
- **Idokumento** ang anumang natatanging tampok o customizations na iyong idinagdag
|
|
|
- **Magbigay** ng malinaw na setup instructions para sa ibang developer
|
|
|
|
|
|
### Mga Alituntunin sa Pagsumite
|
|
|
|
|
|
**Mga Deliverables ng Proyekto:**
|
|
|
1. Kumpletong project folder na may lahat ng source code
|
|
|
2. README.md na may deskripsyon ng proyekto at setup instructions
|
|
|
3. Mga screenshot na nagpapakita ng iyong chat assistant habang gumagana
|
|
|
4. Maikling reflection sa kung ano ang iyong natutunan at mga hamon na iyong hinarap
|
|
|
|
|
|
**Kriteria sa Pagsusuri:**
|
|
|
- **Functionality**: Gumagana ba ang chat assistant ayon sa inaasahan?
|
|
|
- **Code Quality**: Organisado, may komento, at madaling i-maintain ba ang code?
|
|
|
- **Design**: Kaakit-akit ba ang interface at user-friendly?
|
|
|
- **Creativity**: Gaano ka-unique at personalized ang iyong implementasyon?
|
|
|
- **Documentation**: Malinaw at kumpleto ba ang setup instructions?
|
|
|
|
|
|
> 💡 **Tip para sa Tagumpay**: Simulan muna sa mga pangunahing kinakailangan, pagkatapos ay magdagdag ng mga pagpapahusay kapag gumagana na ang lahat. Mag-focus sa paglikha ng isang polished na core experience bago magdagdag ng advanced features.
|
|
|
|
|
|
## Solusyon
|
|
|
|
|
|
[Solusyon](./solution/README.md)
|
|
|
|
|
|
## Mga Bonus na Hamon
|
|
|
|
|
|
Handa ka na bang dalhin ang iyong AI assistant sa susunod na antas? Subukan ang mga advanced na hamon na ito na magpapalalim sa iyong pag-unawa sa AI integration at web development.
|
|
|
|
|
|
### Pag-customize ng Personalidad
|
|
|
|
|
|
Ang tunay na magic ay nangyayari kapag binigyan mo ang iyong AI assistant ng natatanging personalidad. Mag-eksperimento sa iba't ibang system prompts upang lumikha ng mga specialized assistants:
|
|
|
|
|
|
**Halimbawa ng Professional Assistant:**
|
|
|
```python
|
|
|
call_llm(message, "You are a professional business consultant with 20 years of experience. Provide structured, actionable advice with specific steps and considerations.")
|
|
|
```
|
|
|
|
|
|
**Halimbawa ng Creative Writing Helper:**
|
|
|
```python
|
|
|
call_llm(message, "You are an enthusiastic creative writing coach. Help users develop their storytelling skills with imaginative prompts and constructive feedback.")
|
|
|
```
|
|
|
|
|
|
**Halimbawa ng Technical Mentor:**
|
|
|
```python
|
|
|
call_llm(message, "You are a patient senior developer who explains complex programming concepts using simple analogies and practical examples.")
|
|
|
```
|
|
|
|
|
|
### Mga Pagpapahusay sa Frontend
|
|
|
|
|
|
Baguhin ang iyong chat interface gamit ang mga visual at functional na pagpapabuti:
|
|
|
|
|
|
**Mga Advanced na Tampok ng CSS:**
|
|
|
- **Magpatupad** ng smooth message animations at transitions
|
|
|
- **Magdagdag** ng custom chat bubble designs gamit ang CSS shapes at gradients
|
|
|
- **Gumawa** ng typing indicator animation para sa kapag "nag-iisip" ang AI
|
|
|
- **Magdisenyo** ng emoji reactions o message rating system
|
|
|
|
|
|
**Mga Pagpapahusay sa JavaScript:**
|
|
|
- **Magdagdag** ng keyboard shortcuts (Ctrl+Enter para mag-send, Escape para i-clear ang input)
|
|
|
- **Magpatupad** ng message search at filtering functionality
|
|
|
- **Gumawa** ng conversation export feature (i-download bilang text o JSON)
|
|
|
- **Magdagdag** ng auto-save sa localStorage upang maiwasan ang pagkawala ng mensahe
|
|
|
|
|
|
### Advanced na AI Integration
|
|
|
|
|
|
**Maramihang AI Personalities:**
|
|
|
- **Gumawa** ng dropdown upang lumipat sa iba't ibang AI personalities
|
|
|
- **I-save** ang preferred personality ng user sa localStorage
|
|
|
- **Magpatupad** ng context switching na nagpapanatili ng daloy ng pag-uusap
|
|
|
|
|
|
**Mga Tampok ng Smart Response:**
|
|
|
- **Magdagdag** ng conversation context awareness (naalala ng AI ang mga nakaraang mensahe)
|
|
|
- **Magpatupad** ng smart suggestions batay sa topic ng pag-uusap
|
|
|
- **Gumawa** ng quick reply buttons para sa mga karaniwang tanong
|
|
|
|
|
|
> 🎯 **Layunin sa Pag-aaral**: Ang mga bonus na hamon na ito ay tumutulong sa iyo na maunawaan ang mga advanced na pattern ng web development at mga teknik sa AI integration na ginagamit sa mga production application.
|
|
|
|
|
|
## Buod at Susunod na Hakbang
|
|
|
|
|
|
Binabati kita! Matagumpay mong naitayo ang isang kumpletong AI-powered chat assistant mula sa simula. Ang proyektong ito ay nagbigay sa iyo ng hands-on na karanasan sa mga modernong teknolohiya ng web development at AI integration – mga kasanayang lalong mahalaga sa kasalukuyang tech landscape.
|
|
|
|
|
|
### Ano ang Iyong Naabot
|
|
|
|
|
|
Sa buong araling ito, na-master mo ang ilang mahahalagang teknolohiya at konsepto:
|
|
|
|
|
|
**Backend Development:**
|
|
|
- **Na-integrate** sa GitHub Models API para sa AI functionality
|
|
|
- **Nagtayo** ng RESTful API gamit ang Flask na may tamang error handling
|
|
|
- **Nagpatupad** ng secure authentication gamit ang environment variables
|
|
|
- **Nag-configure** ng CORS para sa cross-origin requests sa pagitan ng frontend at backend
|
|
|
|
|
|
**Frontend Development:**
|
|
|
- **Gumawa** ng responsive chat interface gamit ang semantic HTML
|
|
|
- **Nagpatupad** ng modernong JavaScript gamit ang async/await at class-based architecture
|
|
|
- **Nagdisenyo** ng engaging user interface gamit ang CSS Grid, Flexbox, at animations
|
|
|
- **Nagdagdag** ng accessibility features at responsive design principles
|
|
|
|
|
|
**Full-Stack Integration:**
|
|
|
- **Ikonekta** ang frontend at backend sa pamamagitan ng HTTP API calls
|
|
|
- **Pinamahalaan** ang real-time user interactions at asynchronous data flow
|
|
|
- **Nagpatupad** ng error handling at user feedback sa buong aplikasyon
|
|
|
- **Sinubukan** ang kumpletong workflow ng aplikasyon mula sa user input hanggang sa AI response
|
|
|
|
|
|
### Mga Pangunahing Natutunan
|
|
|
|
|
|
```mermaid
|
|
|
mindmap
|
|
|
root((AI Chat App Skills))
|
|
|
API Integration
|
|
|
Authentication
|
|
|
Error Handling
|
|
|
Async Programming
|
|
|
Web Development
|
|
|
HTML5 Semantics
|
|
|
Modern CSS
|
|
|
ES6+ JavaScript
|
|
|
User Experience
|
|
|
Responsive Design
|
|
|
Accessibility
|
|
|
Real-time Interaction
|
|
|
AI Understanding
|
|
|
Prompt Engineering
|
|
|
Model Parameters
|
|
|
Conversation Flow
|
|
|
```
|
|
|
|
|
|
Ang proyektong ito ay nagpakilala sa iyo sa mga pundasyon ng pagbuo ng AI-powered applications, na kumakatawan sa hinaharap ng web development. Ngayon ay nauunawaan mo na kung paano i-integrate ang AI capabilities sa tradisyunal na web applications, na lumilikha ng engaging user experiences na parang matalino at responsive.
|
|
|
|
|
|
### Mga Propesyonal na Aplikasyon
|
|
|
|
|
|
Ang mga kasanayang iyong nakuha sa araling ito ay direktang naaangkop sa mga modernong karera sa software development:
|
|
|
|
|
|
- **Full-stack web development** gamit ang mga modernong frameworks at APIs
|
|
|
- **AI integration** sa mga web applications at mobile apps
|
|
|
- **API design and development** para sa microservices architectures
|
|
|
- **User interface development** na may focus sa accessibility at responsive design
|
|
|
- **DevOps practices** kabilang ang environment configuration at deployment
|
|
|
|
|
|
### Pagpapatuloy ng Iyong AI Development Journey
|
|
|
|
|
|
**Mga Susunod na Hakbang sa Pag-aaral:**
|
|
|
- **Mag-explore** ng mas advanced na AI models at APIs (GPT-4, Claude, Gemini)
|
|
|
- **Matuto** tungkol sa prompt engineering techniques para sa mas mahusay na AI responses
|
|
|
- **Pag-aralan** ang conversation design at chatbot user experience principles
|
|
|
- **Mag-imbestiga** sa AI safety, ethics, at responsible AI development practices
|
|
|
- **Magbuo** ng mas kumplikadong applications na may conversation memory at context awareness
|
|
|
|
|
|
**Mga Advanced na Ideya sa Proyekto:**
|
|
|
- Multi-user chat rooms na may AI moderation
|
|
|
- AI-powered customer service chatbots
|
|
|
- Educational tutoring assistants na may personalized learning
|
|
|
- Creative writing collaborators na may iba't ibang AI personalities
|
|
|
- Technical documentation assistants para sa mga developer
|
|
|
|
|
|
## Pagsisimula sa GitHub Codespaces
|
|
|
|
|
|
Gusto mo bang subukan ang proyektong ito sa isang cloud development environment? Ang GitHub Codespaces ay nagbibigay ng kumpletong development setup sa iyong browser, perpekto para sa pag-eksperimento sa AI applications nang walang lokal na setup requirements.
|
|
|
|
|
|
### Pag-set Up ng Iyong Development Environment
|
|
|
|
|
|
**Hakbang 1: Gumawa mula sa Template**
|
|
|
- **Pumunta** sa [Web Dev For Beginners repository](https://github.com/microsoft/Web-Dev-For-Beginners)
|
|
|
- **I-click** ang "Use this template" sa kanang itaas na bahagi (siguraduhing naka-log in ka sa GitHub)
|
|
|
|
|
|

|
|
|
|
|
|
**Hakbang 2: I-launch ang Codespaces**
|
|
|
- **Buksan** ang iyong bagong likhang repository
|
|
|
- **I-click** ang berdeng "Code" button at piliin ang "Codespaces"
|
|
|
- **Piliin** ang "Create codespace on main" upang simulan ang iyong development environment
|
|
|
|
|
|

|
|
|
|
|
|
**Hakbang 3: Configuration ng Environment**
|
|
|
Kapag nag-load ang iyong Codespace, magkakaroon ka ng access sa:
|
|
|
- **Pre-installed** na Python, Node.js, at lahat ng kinakailangang development tools
|
|
|
- **VS Code interface** na may mga extension para sa web development
|
|
|
- **Terminal access** para sa pagpapatakbo ng backend at frontend servers
|
|
|
- **Port forwarding** para sa pagsubok ng iyong mga aplikasyon
|
|
|
|
|
|
**Ano ang ibinibigay ng Codespaces:**
|
|
|
- **Inaalis** ang mga isyu sa pag-setup at pag-configure ng lokal na environment
|
|
|
- **Nagbibigay** ng pare-parehong development environment sa iba't ibang device
|
|
|
- **Kasama** ang mga pre-configured na tools at extensions para sa web development
|
|
|
- **Nag-aalok** ng seamless na integrasyon sa GitHub para sa version control at collaboration
|
|
|
|
|
|
> 🚀 **Pro Tip**: Ang Codespaces ay perpekto para sa pag-aaral at pag-prototype ng mga AI application dahil awtomatikong inaasikaso nito ang lahat ng kumplikadong pag-setup ng environment, kaya't makakapag-focus ka sa paggawa at pag-aaral sa halip na sa pag-troubleshoot ng configuration.
|
|
|
|
|
|
---
|
|
|
|
|
|
**Paunawa**:
|
|
|
Ang dokumentong ito ay isinalin gamit ang AI translation service na [Co-op Translator](https://github.com/Azure/co-op-translator). Bagamat sinisikap naming maging tumpak, mangyaring tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na dulot ng paggamit ng pagsasaling ito. |