# កសាងជំនួយការជជែកជាមួយ AI
ចងចាំនៅក្នុង Star Trek ពេលក្រុមយោធាជជែកជាមួយកុំព្យូទ័រនាវាកូនសង្សាយ ដើម្បីសួរទៅវាអំពីសំណួរវិបស្សនៈ ហើយទទួលបានចម្លើយមានអត្ថន័យ? រឿងនិទានវិទ្យាសាស្ត្រពិតមួយដែលហៅថា science fiction នៅឆ្នាំ 1960 ឥឡូវនេះអ្នកអាចបង្កើតវាបានដោយប្រើបច្ចេកវិទ្យាវែបដែលអ្នកបានស្គាល់រួចហើយ។
នៅក្នុងមេរៀននេះ យើងនឹងបង្កើតជំនួយការជជែក AI ដោយប្រើ HTML, CSS, JavaScript និងការតភ្ជាប់ក្រោយម៉ាស៊ីនមួយខ្លះ។ អ្នកនឹងស្វែងរកវិធីដែលជំនាញដូចគ្នាដែលអ្នកបានរៀនអាចភ្ជាប់ទៅកាន់សេវាកម្ម AI ដ៏មានថាមពលដែលអាចយល់ន័យបរិបទ និងបង្កើតចម្លើយមានអត្ថន័យ។
គិតថា AI គឺដូចជាការចូលដំណើរការបណ្ណាល័យធំមួយ ដែលមិនត្រឹមតែរកព័ត៌មានប៉ុណ្ណោះទេ ប៉ុន្តែអាចសម្រួលវាចេញជាចម្លើយមានរចនាប័ទ្មដែលឆបគ្នាជាមួយសំណួររបស់អ្នក។ មិនចាំបាច់រកសៀវភៅរាប់ពាន់ទំព័រ អ្នកទទួលបានចម្លើយផ្ទាល់ ដែលមានបរិបទជាក់លាក់។
ការតភ្ជាប់ត្រូវបានប្រតិបត្តិតាមបច្ចេកវិទ្យាវែបដែលស្គាល់គ្នា។ HTML បង្កើតផ្ទាំងជជែក CSS គ្រប់គ្រងរចនាបថមើលឃើញ JavaScript គ្រប់គ្រងអន្តរកម្មអ្នកប្រើ ហើយ API ផ្នែកក្រោយភ្ជាប់គ្រប់យ៉ាងទៅកាន់សេវាកម្ម AI។ វាស្រដៀងនឹងវិធីដែលផ្នែកផ្សេងៗរបស់ឧបករណ៍តន្ត្រីធ្វើការជាមួយគ្នាដើម្បីបង្កើតតន្ត្រីសម្រង់។
យើងគ្រាន់តែបង្កើតស្ពានចូលរវាងការប្រាស្រ័យទាក់ទងដោយធម្មជាតិតាមមនុស្ស និង ការបំលែងដោយម៉ាស៊ីន។ អ្នកនឹងរៀនទាំងការប្រតិបត្តិផ្នែកបច្ចេកទេសនៃការតភ្ជាប់សេវាកម្ម AI និងលំនាំរចនាដែលធ្វើឲ្យអន្តរកម្មមានអារម្មណ៍ទាក់ទាញ។
នៅចុងបញ្ចប់មេរៀននេះ ការតភ្ជាប់ AI នឹងមិនមែនជាដំណើរការស្អប់ស្អើងទេ ប៉ុន្តែក្លាយជាតំណភ្ជាប់ API មួយទៀតដែលអ្នកអាចប្រើបាន។ អ្នកនឹងយល់លំនាំមូលដ្ឋានដែលបញ្ជូនកម្មវិធីដូចជា ChatGPT និង Claude យ៉ាងដូចគ្នា ដោយប្រើគោលការណ៍អភិវឌ្ឍន៍វែបដែលអ្នកបានរៀន។
## ⚡ អ្វីដែលអ្នកអាចធ្វើបាន ក្នុងរយៈពេល 5 នាទីក្រោយ
**ផ្លូវចាប់ផ្តើមលឿនសម្រាប់អ្នកអភិវឌ្ឍដែលរវល់**
```mermaid
flowchart LR
A[⚡ ៥ នាទី] --> B[ទទួលបានសញ្ញា GitHub]
B --> C[សាកល្បងលេង AI]
C --> D[ចម្លងកូដ Python]
D --> E[មើលចម្លើយ AI]
```
- **នាទីទី 1**៖ ទៅកាន់ [GitHub Models Playground](https://github.com/marketplace/models/azure-openai/gpt-4o-mini/playground) ហើយបង្កើត token ចូលប្រើផ្ទាល់ខ្លួន
- **នាទីទី 2**៖ សាកល្បងអន្តរកម្ម AI ដោយផ្ទាល់នៅផ្ទាំងប្រើប្រាស់
- **នាទីទី 3**៖ ចុចផ្ទាំង "Code" ហើយចម្លង snippet Python
- **នាទីទី 4**៖ បើកបញ្ចូលកូដក្នុងម៉ាស៊ីនជាមួយ token របស់អ្នក៖ `GITHUB_TOKEN=your_token python test.py`
- **នាទីទី 5**៖ មើលចម្លើយ AI ផ្តើមបង្ហាញពីកូដរបស់អ្នក
**កូដសាកល្បងលឿន**៖
```python
import os
from openai import OpenAI
client = OpenAI(
base_url="https://models.github.ai/inference",
api_key="your_token_here"
)
response = client.chat.completions.create(
messages=[{"role": "user", "content": "Hello AI!"}],
model="openai/gpt-4o-mini"
)
print(response.choices[0].message.content)
```
**ហេតុអ្វីវាសំខាន់**៖ ក្នុងរយៈពេល 5 នាទី អ្នកនឹងទទួលបានបទពិសោធន៍វេទមន្តនៃអន្តរកម្ម AI ដោយកម្មវិធី។ វាជាប្លុកសំណុំមូលដ្ឋានដែលបញ្ជូនកម្មវិធី AI ដែលអ្នកប្រើជានិច្ច។
នេះជាប្រាក់សារដ្ឋានរបស់គម្រោងដែលអ្នកអាចទទួលបាន៖

## 🗺️ យានដ្ឋានរៀនរបស់អ្នកតាមរយៈអភិវឌ្ឍន៍កម្មវិធី AI
```mermaid
journey
title ពីការអភិវឌ្ឍវេបទៅការរួមបញ្ចូល AI
section ការយល់ដឹងពីមូលដ្ឋាន AI
រកឃើញគំនិត AI បង្កើតថ្មី៖ 4: You
ស្វែងយល់ពីវេទិកាម៉ូដែល GitHub៖ 6: You
ជំនាញពាក្យបញ្ជា និងប៉ារ៉ាម៉ែត AI៖ 8: You
section ការរួមបញ្ចូលផ្នែកខាងសេវាកម្ម
សាងសង់ម៉ាស៊ីនមេ API Python៖ 5: You
អនុវត្តការហៅមុខងារ AI៖ 7: You
គ្រប់គ្រងប្រតិបត្តិការប្រតិកម្មមិន đồng bộ៖ 8: You
section ការអភិវឌ្ឍផ្នែកមុខងារ
បង្កើតចំណុចប្រទាក់ជជែកទំនើប៖ 6: You
ជំនាញទំនាក់ទំនងពេលវេលាពិត៖ 8: You
សាងសង់បទពិសោធន៍អ្នកប្រើប្រាស់ឆ្លាតវៃ៖ 9: You
section ការអនុវត្តវិជ្ជាជីវៈ
ដាក់ប្រព័ន្ធ AI ពេញលេញ៖ 7: You
បង្កើនគំរូប្រសិទ្ធភាព៖ 8: You
បង្កើតកម្មវិធីសម្របសម្រួលសម្រាប់ផលិតកម្ម៖ 9: You
```
**គោលដៅនៃការធ្វើដំណើររបស់អ្នក**៖ នៅចុងបញ្ចប់មេរៀននេះ អ្នកនឹងបានបង្កើតកម្មវិធីដំណើរការជាមួយ AI មួយ ពេញលេញ ដោយប្រើបច្ចេកវិទ្យា និងលំនាំដដែលដែលជំនួយការហ្មត់ AI ម៉ូដទំនើបដូចជា ChatGPT, Claude និង Google Bard ប្រើ។
## ការយល់ដឹងអំពី AI: ពីអាថ៌កំបាំងទៅជាការគ្រប់គ្រង
មុនចូលទៅក្នុងកូដ យើងមកយល់ពីអ្វីដែលយើងកំពុងធ្វើការ។ ប្រសិនបើអ្នកធ្លាប់ប្រើ API មកហើយ អ្នកបានស្គាល់លំនាំមូលដ្ឋាន ៖ ផ្ញើសំណើ - ទទួលចម្លើយ។
API AI ធ្វើដូចគ្នា ប៉ុន្តេញិតចេញមិនមែនជាការយកទិន្នន័យដែលបានរក្សាទុកពីរាល់កន្លែងទេ តែបង្កើតចម្លើយថ្មីដោយផ្អែកលើលំនាំដែលបានរៀនពីអត្ថបទច្រើនណាស់។ គិតថាវាដូចជាផ្នែកខុសគ្នារវាងប្រព័ន្ធបញ្ជីសៀវភៅបណ្ណាល័យ និងបណ្ណាអ្នកបណ្ណាល័យមានចំណេះដឹង អាចសម្រួលព័ត៌មានពីប្រភពច្រើន។
### "AI បង្កើត" មានន័យយ៉ាងដូចម្តេច?
គិតពីរបៀប ដែល Rosetta Stone អនុញ្ញាតឲ្យអ្នកស្រាវជ្រាវយល់ភាសាជីវចារាជ្រិតអេហ្ស៊ីបត ដោយរកលំនាំរវាងភាសាដែលស្គាល់ និងមិនស្គាល់។ ម៉ូដែល AI ក៏ដូចជាមួយគ្នា – វារកលំនាំក្នុងអត្ថបទធំទូលាយដើម្បីយល់ភាសា បន្ទាប់មកប្រើលំនាំទាំងនេះសម្រាប់បង្កើតចម្លើយសមនឹងសំណួរថ្មី។
**យើងខ្ញុំបំបែកវាជាទូទៅ៖**
- **មូលដ្ឋានទិន្នន័យចាស់**៖ ដូចជាការស្នើសុំសញ្ញាបត្រកំណើត – អ្នកទទួលបានឯកសារដដែលគ្មានផ្លាស់ប្តូរ
- **ម៉ាស៊ីនស្វែងរក**៖ ដូចជាការស្នើសុំឲ្យបណ្ណាអ្នកផ្តល់សៀវភៅអំពីឆ្មា – ពួកគេសម្គាល់ និងបង្ហាញអ្វីដែលមាន
- **Generative AI**៖ ដូចជាស្នើសុំមិត្តរបស់អ្នកដែលមានចំណេះដឹងអំពីឆ្មា – ពួកគេច្រៀងអ្វីដែលគួរឱ្យចាប់អារម្មណ៍ដោយពាក្យរបស់ខ្លួន ដែលផ្គូផ្គងតាមអ្វីដែលអ្នកចង់ដឹង
```mermaid
graph LR
A[សំណួររបស់អ្នក] --> B[ម៉ូដែល AI]
B --> C[ការទទួលស្គាល់គំរូ]
C --> D[ការបង្កើតមាតិកា]
D --> E[ការឆ្លើយតបមានបរិបទ]
F[ទិន្នន័យបណ្ដុះបណ្ដាល
សៀវភៅ អត្ថបទ វេបសាយ] --> B
```
### របៀប AI ម៉ូដែលរៀន (ជាកំណែសាមញ្ញ)
AI ម៉ូដែលរៀនតាមការបង្ហាញឯកសារធំទូលាយដែលមានអត្ថបទពីសៀវភៅ, អត្ថបទ, និងការសន្ទនា។ តាមរបៀបនេះវាបង្កើតលំនាំ៖
- របៀបគំនិតត្រូវបានរៀបចំក្នុងការប្រាស្រ័យ
- ពាក្យណាដែលបង្ហាញជាទៀងទាត់
- របៀបសន្ទនាស្ទើរតែអនុវត្ត
- ហេតុផលបរិបទរវាងការប្រាស្រ័យផ្លូវការនិងមិនផ្លូវការ
**វាស្រដៀងនឹងរបៀបដែលអ្នកកក្សត្រាដោះស្រាយភាសាបុរាណ**៖ ពួកគេចាត់ផ្តល់ឧទាហរណ៍រាប់ពាន់ ដើម្បីយល់វេយ្យាករណ៍, ពាក្យសម្គាល់ និងបរិបទវប្បធម៌ នៅចុងក្រោយអាចបកស្រាយអត្ថបទថ្មីដោយប្រើលំនាំរៀន។
### ហេតុអ្វីជ្រើស GitHub Models?
យើងប្រើ GitHub Models ដោយហេតុផលពេញនិយម – វាផ្តល់ដល់យើងនូវការចូលដំណើរការ AI កម្រិតអាជីវកម្ម បើគ្មានការតំឡើងហេដ្ឋារចនាសម្ព័ន្ធ AI របស់ខ្លួន (ដែលជំនាញប្រាកដ អ្នកមិនចង់ធ្វើឥឡូវនេះទេ!)។ គិតថាវាដូចជាការប្រើ API អាកាសធាតុ មិនចាំបាច់តំឡើងស្ថានីយ៍អាកាសធាតុ។
វាជាពីរូបមន្ត "AI-as-a-Service" ហើយភាគច្រើនគឺឥតគិតថ្លៃចាប់ផ្តើម ដូច្នេះអ្នកអាចសាកល្បងដោយមិនបារម្ភពីវិក្កយបត្រ។
```mermaid
graph LR
A[UI ជជែកមុខងារ] --> B[API ផ្នែកខាងត្រង់របស់អ្នក]
B --> C[API ទំរង់ GitHub]
C --> D[ដំណើរការម៉ូដែល AI]
D --> C
C --> B
B --> A
```
យើងនឹងប្រើ GitHub Models សម្រាប់ការតភ្ជាប់ផ្នែកក្រោយ ដែលផ្តល់ចូលដំណើរការ AI វិជ្ជាជីវៈតាមផ្ទាំងប្រើប្រាស់ងាយស្រួលសម្រាប់អ្នកអភិវឌ្ឍ។ [GitHub Models Playground](https://github.com/marketplace/models/azure-openai/gpt-4o-mini/playground) គឺជានិថិជនសាកល្បង ដែលអាចច្រៀង AI ម៉ូដែលផ្សេងៗហើយយល់ពីសមត្ថភាពមុនពេលអនុវត្តនៅក្នុងកូដ។
## 🧠 បរិដ្ឋានអភិវឌ្ឍកម្មវិធី AI
```mermaid
mindmap
root((ការអភិវឌ្ឍ AI))
Understanding AI
Generative Models
ការទទួលស្គាល់រូបមន្ត
ការបង្កើតមាតិកា
ការយល់ដឹងបរិបទ
សមាសភាពចម្លើយ
AI Parameters
ការគ្រប់គ្រងសីតុណ្ហភាព
ចំណុចដែនកំណត់តូកិន
ការត្រង Top-p
ប្រព័ន្ធការហៅ
Backend Architecture
API Integration
ម៉ូឌែល GitHub
ការផ្ទៀងផ្ទាត់
ការដោះស្រាយសំណើ
ការគ្រប់គ្រងកំហុស
Python Infrastructure
ស្ថាបត្យកម្ម FastAPI
ប្រតិកម្មអាស៊ីនខ្នាត
សន្តិសុខបរិយាកាស
ការកំណត់ CORS
Frontend Experience
Chat Interface
បច្ចុប្បន្នភាពពេលវេលាប្រសព្វ
ប្រវត្តិសារ
មតិយោបល់អ្នកប្រើ
ស្ថានភាពបញ្ចូល
Modern Web Tech
ថ្នាក់ ES6
Async/Await
ការប្រើប្រាស់ DOM
ការគ្រប់គ្រងព្រឹត្តិការណ៍
Professional Patterns
Security Best Practices
ការគ្រប់គ្រងតូកិន
ការបញ្ជាក់បញ្ចូល
ការបង្ហាញ XSS
ជម្រះកំហុស
Production Readiness
ការបង្កើនសមត្ថភាព
ទីតាំងឆ្លើយតប
ការចូលដំណើរការ
យុទ្ធសាស្ដ្រពិនិត្យ
```
**គោលការណ៍មូលដ្ឋាន**៖ ការអភិវឌ្ឍកម្មវិធី AI បញ្ចូលជំនាញអភិវឌ្ឍវែបបែបចាស់ជាមួយការតភ្ជាប់សេវា AI ដើម្បីបង្កើតកម្មវិធីឆ្លាតវៃដែលមានអារម្មណ៍ធម្មជាតិ និងឆ្លើយតបលឿនចំពោះអ្នកប្រើ។

**អ្វីដែលធ្វើឲ្យផ្លេយក្រដាស់មានប្រយោជន៍ ៖**
- **សាកល្បង** ម៉ូដែល AI ផ្សេងៗដូចជា GPT-4o-mini, Claude និងផ្សេងទៀត (ទាំងអស់ឥតគិតថ្លៃ!)
- **សាកល្បង** គំនិត និងសេចក្តីផ្ដើមមុនសរសេរកូដណាមួយ
- **ទទួល** កូដអាចប្រើបានជាភាសាកម្មវិធីដែលអ្នកចូលចិត្ត
- **បត់បែន** ការកំណត់ដូចជា កម្រិតភាពច្នៃប្រឌិត និងប្រវែងចម្លើយ ដើម្បីមើលផលប៉ះពាល់
បន្ទាប់ពីលេងល្បែងលះ អ្នកគ្រាន់តែចុចផ្ទាំង "Code" ហើយជ្រើសភាសាកម្មវិធីដើម្បីទទួលបានកូដអនុវត្ត។

## ការតំឡើង Python សម្រាប់ការតភ្ជាប់ផ្នែកក្រោយ
ឥឡូវនេះ យើងអនុវត្តការតភ្ជាប់ AI ដោយប្រើ Python។ Python ល្អសម្រាប់កម្មវិធី AI ដោយសាររចនាសម្ព័ន្ធសាមញ្ញ និងបណ្ណាល័យមានថាមពល។ យើងចាប់ផ្តើមជាមួយកូដពី GitHub Models playground បន្ទាប់មកកំណត់រៀបចំមកជាឧទាហរណ៍មួយដែលអាចប្រើឡើងវិញនិងមានស្រេចសម្រាប់ផលិតកម្ម។
### ការយល់ដឹងអំពីអនុវត្តមូលដ្ឋាន
ពេលអ្នកចម្លងកូដ Python ពីផ្លេយក្រដាស់ អ្នកនឹងទទួលបានអ្វីមួយដូចនៅទីនេះ។ កុំបារម្ភ ប្រសិនបើវាហាក់ដូចច្រើនពេក – មកដើរមកវិញជាផ្នែកៗ៖
```python
"""Run this model in Python
> pip install openai
"""
import os
from openai import OpenAI
# ដើម្បីផ្ទៀងផ្ទាត់អត្តសញ្ញាណជាមួយម៉ូដែល អ្នកត្រូវការបង្កើតស្លាកសោការចូលប្រើផ្ទាល់ខ្លួន (PAT) នៅក្នុងការកំណត់ GitHub របស់អ្នក។
# បង្កើតស្លាកសោ PAT របស់អ្នកដោយអនុវត្តបញ្ជារណ៍នៅទីនេះ: 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)
```
**អ្វីកំពុងត្រូវបានអនុវត្តក្នុងកូដនេះ**៖
- **យើងនាំចូល** ឧបករណ៍ដែលត្រូវការ៖ `os` សម្រាប់អានអថេរបរិស្ថាន និង `OpenAI` សម្រាប់ទំនាក់ទំនង AI
- **យើងកំណត់** ម៉ាស៊ីនភ្ញៀវ OpenAI ទៅម៉ាស៊ីនបម្រើ AI របស់ GitHub ជំនួស OpenAI ទ្រង់ទ្រាយផ្ទាល់
- **យើងផ្ទៀងផ្ទាត់** ដោយប្រើ token GitHub ពិសេស (ពេលក្រោយនឹងពន្យល់!)
- **យើងរៀបចំសន្ទនា** ជាមួយតួ "roles" ផ្សេងៗ – គិតថាវាស្រដៀងនឹងរៀបចំឋានការណ៍លេង
- **យើងផ្ញើ** សំណើទៅ AI នឹងមានកំណត់បរិមាណមួយចំនួន
- **យើងយកចេញ** ព័ត៌មានចម្លើយពីទិន្នន័យដែលបានតបសង
### ការយល់ដឹងអំពីតួនាទីសារ៖ គំរូសន្ទនាអាជីវ AI
សន្ទនាអាជីវ AI ប្រើរចនាសម្ព័ន្ធជាមួយតួ "roles" ផ្សេងៗដែលមានគោលបំណងខុសគ្នា៖
```python
messages=[
{
"role": "system",
"content": "You are a helpful assistant who explains things simply."
},
{
"role": "user",
"content": "What is machine learning?"
}
]
```
**គិតថាវាស្មើនឹងការបញ្ជូនឱ្យតួអង្គលេងរឿង**៖
- **តួនាទីប្រព័ន្ធ**៖ ដូចជាគន្លងលេងឲ្យតួអង្គ – ផ្ដល់ដល់ AI របៀបអប់រំ អាវុធ និងរបៀបឆ្លើយ
- **តួនាទីអ្នកប្រើ**៖ សំណួរឬសារពីមនុស្សប្រើកម្មវិធី
- **តួនាទីជំនួយការ**៖ ចម្លើយ AI (អ្នកមិនផ្ញើនេះទេ ប៉ុន្តែវាផ្ទុកនៅក្នុងប្រវត្តិសន្ទនា)
**អាថ៌កំបាំងក្នុងជីវិតពិត**៖ គិតថាអ្នកណែនាំមិត្តទៅសំណព្វម្នាក់នៅក្នុងប្រលោមលោក៖
- **សារប្រព័ន្ធ**៖ "នេះជាមិត្តស្រីខ្ញុំ Sarah គឺជាជំនួយការពេទ្យដែលល្អក្នុងការពន្យល់យ៉ាងងាយស្រួល"
- **សារអ្នកប្រើ**៖ "អ្នកអាចពន្យល់ពីរបៀបដែលវីធីសាស្ត្រពាក់ព័ន្ធទទួលបានវ៉ាក់សាំងដែរឬទេ?"
- **ចម្លើយជំនួយការ**៖ Sarah ឆ្លើយរៀបរាប់ក្នុងបែបជំនួយការពេទ្យមិត្តភាព មិនមែនជាខាងច្បាប់ឬចុងម្រាមស្រ្តីផ្ទះផាយ
### ការយល់ដឹងអំពីប៉ារ៉ាម៉ែត្ររបស់ AI៖ ការតំឡើងសកម្មភាពចម្លើយ
ប៉ារ៉ាម៉ែត្រខ្នាតលេខក្នុងការហៅ API AI គ្រប់គ្រងវិធីដែលម៉ូដែលបង្កើតចម្លើយ។ ការកំណត់ទាំងនេះ អនុញ្ញាតឲ្យអ្នកកែតម្រូវអាកប្បកិរិយា AI សម្រាប់បំណងប្រើខុសៗគ្នា។
#### អ្នកវាស់កម្រិតច្នៃប្រឌិត (Temperature 0.0 ទៅ 2.0)
**អ្វីដែលវាធ្វើ**៖ គ្រប់គ្រងថាតើចម្លើយ AI មានភាពច្នៃប្រឌិត ឬអាចអួតត្រង់ប៉ុណ្ណា។
**គិតថាវាស្រដៀងនឹងកម្រិតបង្កើតរបស់ музыការ jazz:**
- **Temperature = 0.1**៖ លេងតន្ត្រីតួស្រដៀងគ្នាទាំងឡាយ (អាចទស្សនាបានច្បាស់)
- **Temperature = 0.7**៖ បន្ថែមការបំលែងល្អៗ មិនបាត់បង់អត្តសញ្ញាណ (ច្នៃប្រឌិតត្រូវតុល្យ)
- **Temperature = 1.5**៖ Jazz ស្រាលពេញលេញ មានការប្រែប្រួលមិនចេះភ្លេច (មិនអាចទស្សនាបាន)
```python
# ចម្លើយដែលអាចទាយបានយ៉ាងច្បាស់ (ល្អសម្រាប់សំណួរព័ត៌មាន)
response = client.chat.completions.create(
messages=[{"role": "user", "content": "What is 2+2?"}],
temperature=0.1 # ជាញឹកញាប់នឹងនិយាយថា "4"
)
# ចម្លើយមានការច្នៃប្រឌិត (ល្អសម្រាប់ការស្ទ្រាយគំនិត)
response = client.chat.completions.create(
messages=[{"role": "user", "content": "Write a creative story opening"}],
temperature=1.2 # នឹងបង្កើតរឿងរ៉ាវមិនធ្លាប់មាន និងមិនបានរំពឹងទុក
)
```
#### ខ្ទង់ Token អតិបរមា (Max Tokens 1 ទៅ 4096+)
**អ្វីដែលវាធ្វើ**៖ កំណត់កម្ពស់នៃប្រវែងចម្លើយ AI។
**គិតថា token ម្នាក់លើសលប់ជាសន្ទស្សន៍ពាក្យ** (ប្រហែល 1 token = 0.75 ពាក្យភាសាអង់គ្លេស)៖
- **max_tokens=50**៖ ខ្លីតូច និងផ្អែម (ដូចសារកាត់)
- **max_tokens=500**៖ មួយកថាខណ្ឌល្អ
- **max_tokens=2000**៖ ពន្យល់លម្អិតជាមួយឧទាហរណ៍
```python
# ចម្លើយខ្លី និងចំរូង
response = client.chat.completions.create(
messages=[{"role": "user", "content": "Explain JavaScript"}],
max_tokens=100 # បង្ខំបង្ហាញអត្ថន័យដោយសង្ខេប
)
# ចម្លើយលំអិត និងទូលំទូលាយ
response = client.chat.completions.create(
messages=[{"role": "user", "content": "Explain JavaScript"}],
max_tokens=1500 # អនុញ្ញាតឲ្យមានការពន្យល់លំអិតជាមួយនឹងឧទាហរណ៍
)
```
#### Top_p (0.0 ទៅ 1.0): ប៉ារ៉ាម៉ែត្រយកចិត្តទុកដាក់
**អ្វីដែលវាធ្វើ**៖ គ្រប់គ្រងថាតើ AI ផ្តោតលើចម្លើយដែលសាកសមបំផុត ប៉ុន្មាន។
**គិតថា AI មានវាក្យសព្ទជាច្រើន និងត្រូវបានរៀបចំតាមការជៀសវាងផ្នែកមួយ**៖
- **top_p=0.1**៖ គិតតែពាក្យ ១០% ខាងលើបំផុត (ផ្តោតខ្លាំង)
- **top_p=0.9**៖ គិតពាក្យ ៩០% (ច្នៃប្រឌិត)
- **top_p=1.0**៖ គិតពេញលេញ (ភាពចម្រុះខ្ពស់)
**ឧទាហរណ៍**៖ ប្រសិនបើអ្នកសួរ "មេឃធម្មតា..."
- **top_p តូច**៖ ជាប់ថ្លៃថា "ខៀវ"
- **top_p ខ្ពស់**៖ ក្រៅពី "ខៀវ" មាន "ពពក", "ធំ", "ផ្លាស់ប្តូរ", "ស្រស់ស្អាត" ហើយផ្សេងទៀត។
### រួមបញ្ចូលគ្នា៖ ប៉ារ៉ាម៉ែត្រចម្រុះសម្រាប់ការប្រើប្រាស់ខុសៗគ្នា
```python
# សម្រាប់ចម្លើយដែលមានរឿងត្រឹមត្រូវ និងមានសេចក្ដីណែនាំជាប្រចាំ (ដូចជាបុរេប្រឹក្សាឯកសារ)
factual_params = {
"temperature": 0.2,
"max_tokens": 300,
"top_p": 0.3
}
# សម្រាប់ជំនួយសរសេរច្នៃប្រឌិត
creative_params = {
"temperature": 1.1,
"max_tokens": 1000,
"top_p": 0.9
}
# សម្រាប់ចម្លើយមានសំណូក និងជួយបាន (មានការតុល្យភាព)
conversational_params = {
"temperature": 0.7,
"max_tokens": 500,
"top_p": 0.8
}
```
```mermaid
quadrantChart
title ម៉ាទ្រីចធ្វើអវិជ្ជមានប៉ារ៉ាម៉ែត្ររបស់ AI
x-axis ការច្នៃប្រឌិតទាប --> ការច្នៃប្រឌិតខ្ពស់
y-axis ចម្លើយខ្លី --> ចម្លើយយូរ
quadrant-1 បណ្ដាញបង្កើតច្នៃប្រឌិត
quadrant-2 ការវិស্লেষលម្អិត
quadrant-3 ព័ត៌មានរហ័ស
quadrant-4 AI នៃការសន្ទនា
Documentation Bot: [0.2, 0.3]
Customer Service: [0.4, 0.4]
General Assistant: [0.7, 0.5]
Creative Writer: [0.9, 0.9]
Brainstorming Tool: [0.8, 0.8]
```
**យល់ថាហេតុអ្វីប៉ារ៉ាម៉ែត្រទាំងនេះមានភាពសំខាន់**៖ កម្មវិធីនីមួយៗត្រូវការចម្លើយប្រភេទខុសគ្នា។ ប៉ុស្តិ៍បម្រើអតិថិជនគួរតែអាចមានភាពថេរនិងមានការពិតប្រាកដ (temperature ទាប) ខណៈជំនួយការសរសេរច្នៃប្រឌិតគួរមានភាពច្នៃប្រឌិត និងបម្រែបម្រួលខ្ពស់ (temperature ខ្ពស់)។ ការយល់ដឹងពីប៉ារ៉ាម៉ែត្រទាំងនេះឲ្យអ្នកគ្រប់គ្រងលក្ខណៈបុគ្គលនៃ 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))
```
**យល់ពីមុខងារកែលម្អនេះ**៖
- **ទទួលប៉ារ៉ាម៉ែត្រពីរជាពាក្យបញ្ចូលអ្នកប្រើ និងសារប្រព័ន្ធជាជម្រើស**
- **ផ្តល់សារប្រព័ន្ធលំនាំដើមសម្រាប់អាកប្បកិរិយាជំនួយទូទៅ**
- **ប្រើសញ្ញាបញ្ជាក់ប្រភេទ Python សម្រាប់ឯកសារកូដល្អប្រសើរ**
- **មានឯកសារពន្យល់ជារបាយការណ៍ អំពីគោលបំណង និងប៉ារ៉ាម៉ែត្រ**
- **ត្រឡប់តែខ្លឹមសារចម្លើយ ងាយស្រួលប្រើក្នុងវែប API**
- **រក្សាពត៌មានម៉ូដែលដូចគ្នា សម្រាប់អាកប្បកិរិយាត្រឹមត្រូវដោយឥតផ្លាស់ប្តូរ**
### វេទមន្ដសារប្រព័ន្ធ៖ ការបញ្ច programmation បុគ្គលិកភាព AI
ប្រសិនបើប៉ារ៉ាម៉ែត្រគ្រប់គ្រងវិធីដែល AI គិត ប៉ុន្តែសារប្រព័ន្ធគ្រប់គ្រងថា AI គិតថាវាគឺជាអ្នកណា។ នេះជាមួួយល្អៗសម្រាប់ការងារជាមួយ AI – អ្នកផ្តល់បុគ្គលិកភាពពេញលេញ ជំនាញ និងរបៀបប្រាស្រ័យរបស់ AI។
**គិតថាសារប្រព័ន្ធដូចជា ណែនាំតួអង្គតួផ្សេងៗសម្រាប់តួនាទីខុសគ្នា**៖ មិនមែនមានជំនួយការញឹកញាប់មួយទេ អ្នកអាចបង្កើតជំនាញជាក់លាក់សម្រាប់ស្ថានการณ์នីមួយៗ។ តើអ្នកត្រូវការអ្នកគ្រូព្យាបាលអត់? មិត្តភក្តិបង្កើតគំនិតច្នៃប្រឌិត? ឱបិកាយអាជីវកម្មមិនចូលចិត្តការលេងល្បិច? គ្រាន់តែកែសារប្រព័ន្ធ!
#### ហេតុអ្វីសារប្រព័ន្ធមានអំណាចខ្លាំង
អ្វីគួរឱ្យភ្ញាក់ផ្អើល៖ ម៉ូដែល AI ត្រូវបានបណ្តុះបណ្តាលលើសន្ទនាច្រើនដែលមនុស្សនិពន្ធតួនាទី និងជំនាញផ្សេងៗ។ ពេលអ្នកផ្តល់តួនាទីជាក់លាក់ឲ្យ AI វាស្រដៀងនឹងបើកការសកម្មការនៃលំនាំរៀនទាំងអស់។
**វាស្រដៀងនឹងការលេងតួរតួអង្គយ៉ាងជ្រាលជ្រៅ**៖ ប្រាប់តួអង្គថា "អ្នកជាគ្រូប៊ុយលែនចាស់ដែលមានចំណេះដឹង" ហើយមើលថាតួអង្គកែប្រែអាកប្បកិរិយា ពាក្យ និងរបៀបនិយាយ។ AI ក៏ធ្វើដូចគ្នានៅលើលំនាំភាសា។
#### ការបង្កើតសារប្រព័ន្ធដែលមានប្រសិទ្ធភាព៖ សិល្បៈ និងវិទ្យាសាស្ត្រ
**រចនាសម្ព័ន្ធសារប្រព័ន្ធល្អ**៖
1. **តួនាទី/អត្តសញ្ញាណ**៖ AI គឺជាយ៉ាងដូចម្តេច?
2. **ជំនាញ**៖ វាដឹងអ្វី?
3. **របៀបប្រាស្រ័យទាក់ទង**៖ វានិយាយយ៉ាងដូចម្តេច?
4. **សេចក្តីណែនាំជាក់លាក់**៖ វាគួរតែផ្តោតលើអ្វី?
```python
# ❌ សេចក្ដីបញ្ជាលំអៀងរបស់ប្រព័ន្ធ
"You are helpful."
# ✅ សេចក្ដីបញ្ជាលម្អិត និងមានប្រសិទ្ធភាពរបស់ប្រព័ន្ធ
"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."
```
#### ឧទាហរណ៍សារប្រព័ន្ធជាមួយបរិបទ
មកមើលថាសារប្រព័ន្ធផ្សេងៗបង្កើតបុគ្គលិកភាព AI ដែលខុសគ្នាគ្នា៖
```python
# ឧទាហរណ៍ទី 1: អ្នកគ្រូដែលមានអត់ធ្មត់
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.
"""
# ឧទាហរណ៍ទី 2: អ្នកសហការបង្កើតគំនិត
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.
"""
# ឧទាហរណ៍ទី 3: អ្នកប្រឹក្សាអាជីវកម្មយុទ្ធសាស្រ្ត
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.
"""
```
#### មើលសារប្រព័ន្ធក្នុងសកម្មភាព
សាកល្បងសំណួរដូចគ្នាជាមួយសារប្រព័ន្ធផ្សេងៗ ដើម្បីឃើញភាពខុសគ្នាដ៏ច្បាស់លាស់៖
**សំណួរ**៖ "តើធ្វើដូចម្តេចដើម្បីគ្រប់គ្រងការផ្ទៀងផ្ទាត់អ្នកប្រើនៅក្នុងកម្មវិធីវែបរបស់ខ្ញុំ?"
```python
# ជាមួយការជំរុញពីគ្រូៈ
teacher_response = call_llm(
"How do I handle user authentication in my web app?",
teacher_prompt
)
# សំណើឆ្លើយតបផ្ទាល់: "សំណួរល្អណាស់! យើងមកបំបែកការផ្ទៀងផ្ទាត់អត្តសញ្ញាណជាជំហានសាមញ្ញ។
# គិតវាដូចជាអ្នកត្រួតពិនិត្យអត្តសញ្ញាណនៅក្លੱਬយប់ម្ដង..."
# ជាមួយការជំរុញពីអាជីវកម្មៈ
business_response = call_llm(
"How do I handle user authentication in my web app?",
business_prompt
)
# សំណើឆ្លើយតបផ្ទាល់: "ពីចំណុចមើលយុទ្ធសាស្ត្រមានសារៈសំខាន់ណាស់ចំពោះការផ្ទៀងផ្ទាត់អត្តសញ្ញាណសម្រាប់អ្នកប្រើប្រាស់
# ការជឿទុកចិត្ត និងការអនុលោមតាមស្តង់ដារជាអ្វីមួយ។ អនុញ្ញាតឲ្យខ្ញុំរៀបចំរចនាសម្ព័ន្ធដែលពិចារណាលើសុវត្ថិភាព,
# ប្រសិទ្ធភាពប្រើប្រាស់ និងការអាចពង្រីកបាន..."
```
#### ក្បូនវេទមន្តសារប្រព័ន្ធកម្រិតខ្ពស់
**1. ការកំណត់បរិបទ**៖ ផ្ដល់ព័ត៌មានផ្ទៃក្រោយឲ្យ AI
```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. ការរៀបចំលទ្ធផល**៖ ប្រាប់ AI របៀបរៀបចំចម្លើយ
```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. ការកំណត់ការរឹតបន្តឹង**: កំណត់អ្វីដែល 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.
"""
```
#### ហេតុអ្វីបានជា វាមានសារៈសំខាន់សម្រាប់ជំនួយការជជែករបស់អ្នក
ការយល់ដឹងពី system prompts ផ្ដល់ឱ្យអ្នកនូវថាមពលដ៏អស្ចារ្យក្នុងការបង្កើតជំនួយការជាតិ AI ជាពិសេស៖
- **កូនចៅសេវាកម្មអតិថិជន**: ជួយសោះ អត់ធ្មត់ យល់ដឹងគោលនយោបាយ
- **គ្រូបង្រៀន**: លើកទឹកចិត្ត ជំហាន់ដល់ជំហាន់ ពិនិត្យការយល់ដឹង
- **ដៃគូបង្កើតនិពន្ធ**: មានស្នាដៃ គ្រួសរលើគំនិត សួរថា "តើបើជា?"
- **អ្នកជំនាញបច្ចេកទេស**: ជាក់លាក់ ពិស្តារ សង្កត់ធ្ងន់ទៅលើសុវត្ថិភាព
**ចំណុចចម្បង**: អ្នកមិនត្រឹមតែចូលបម្រើ API AI តែប៉ុណ្ណោះទេ – អ្នកកំពុងបង្កើតបុគ្គលិកភាព AI ផ្ទាល់ខ្លួន ដែលបម្រើករណីប្រើជាក់លាក់របស់អ្នក។ នេះជាហេតុផលដែលកម្មវិធី AI សម័យថ្មី មានអារម្មណ៍បូកបន្ថែម និងមានប្រយោជន៍ជាងការដែលគេសំដៅទូទៅ។
### 🎯 ពិនិត្យទស្សនវិជ្ជាសិក្សា: ការកម្មវិធីបុគ្គលិកភាព AI
**ឈប់ និងគិត**: អ្នកទើបតែបានរៀនកម្មវិធីបុគ្គលិកភាព AI តាម system prompts។ នេះជជំនាញមូលដ្ឋានក្នុងការអភិវឌ្ឍកម្មវិធី AI សម័យថ្មី។
**ការវាយតម្លៃខ្លីៗដោយផ្ទាល់**៖
- តើអ្នកអាចពណ៌នាថា system prompts ខុសពីសារប្រើប្រាស់សារធម្មតាយ៉ាងដូចម្តេច?
- តើ temperature និង top_p មានភាពខុសគ្នាយ៉ាងដូចម្តេច?
- តើអ្នកនឹងបង្កើត system prompt សម្រាប់ករណីប្រើប្រាស់ជាក់លាក់ (ដូចជា គ្រូបង្រៀនកូដ) ដោយរបៀបណា?
**ការតភ្ជាប់ជាក់ស្តែង**: បច្ចេកទេស system prompt ដែលអ្នកបានរៀន មានការប្រើប្រាស់នៅក្នុងកម្មវិធី AI ដ៏ធំនានា - ចាប់ពីជំនួយ GitHub Copilot ដល់ចំណុចប្រទាក់ជជែក ChatGPT។ អ្នកកំពុងអភិវឌ្ឍលំនាំដូចជាក្រុមផលិតផល AI នៅក្រុមហ៊ុនបច្ចេកវិទ្យាធំៗ។
**សំណួរប្រកួតប្រជែង**: តើអ្នកអាចរចនាបុគ្គលិកភាព AI ផ្សេងៗសម្រាប់ប្រភេទអ្នកប្រើប្រាស់ផ្សេងៗ (អ្នកចាប់ផ្តើម ប្រៀបធៀបជាមួយអ្នកជំនាញ) ដោយរបៀបណា? សូមពិចារណាថា ពីរបៀបអនុវត្តតែមួយ AI មានសមត្ថភាពបម្រើចេញទៅកាន់អ្នកទស្សនាពីរបីតាមរយៈបច្ចេកទេស prompt។
## ការបង្កើត Web API ជាមួយ FastAPI: មជ្ឈមណ្ឌលចលនាថាមពលខ្ពស់សម្រាប់ការទំនាក់ទំនង AI របស់អ្នក
ឥឡូវសូមបង្កើតផ្នែកខាងក្រោយ (backend) ដែលភ្ជាប់ផ្នែកមុខ (frontend) របស់អ្នកទៅនឹងសេវាកម្ម AI។ យើងនឹងប្រើ FastAPI ដែលជា framework Python សម័យថ្មី ដែលល្អក្នុងការបង្កើត APIs សម្រាប់កម្មវិធី AI។
FastAPI ផ្តល់នូវអត្ថប្រយោជន៍ជាច្រើនសម្រាប់ប្រភេទគម្រោងនេះ៖ ការគាំទ្រអស៊ីន្ដ្រូណូស៊ី១ (async) សម្រាប់ដោះស្រាយសំណើរជាច្រើននៅពេលតែមួយ, ការបង្កើតឯកសារផ្ទាល់ API ស្វ័យប្រវត្តិ និងសមត្ថភាពធ្វើការលឿន។ ម៉ាស៊ីនម៉ាស៊ីន FastAPI របស់អ្នកបំរើជាមធ្យមភាព ដែលទទួលសំណើពីផ្នែកមុខ បង្ហាញចូលជាមួយសេវាកម្ម AI ហើយប្រាប់ត្រឡប់ចម្លើយដែលបានរៀបចំ។
### ហេតុអ្វីបានជាច្រើនប្រើ FastAPI សម្រាប់កម្មវិធី AI?
អ្នកប្រហែលជាកំពុងចង់ដឹង៖ "តើអាចទាក់ទង AI ត напрямую ពី JavaScript ផ្នែកមុខបានទេ?" ឬ "ហេតុអ្វីបានជាជ្រើស FastAPI មិនប្រើ Flask ឬ Django?" សំណួរល្អ!
**នេះជាហេតុផលដែល FastAPI ល្អសម្រាប់អ្វីដែលយើងកំពុងបង្កើត៖**
- **Async ដឹកនាំដោយលំនាំដើម**: អាចដោះស្រាយសំណើ AI ច្រើនជាមួយគ្នា ដោយគ្មានការកកិត
- **ឯកសារអេពីអាយ (API docs) ស្វ័យប្រវត្តិ**: បើក `/docs` ដើម្បីទទួលបានទំព័រឯកសារអេពីអាយដ៏ស្អាត និងអាចធ្វើតេស្តបានដោយឥតគិតថ្លៃ
- **ការត្រួតពិនិត្យស្វ័យប្រវត្តិ**: ចាប់កំហុសមុនពេលបញ្ហាបានកើតឡើង
- **លឿនភ្លាម**: ជារូបមន្ត Python រំឭកលឿនបំផុតមួយ
- **Python សម័យថ្មី**: ប្រើគ្រប់លក្ខណៈពិសេស Python ថ្មីៗ
**ហេតុអ្វីបានជាអ្នកត្រូវការផ្នែកខាងក្រោយ៖**
**សុវត្ថិភាព**: Key API AI របស់អ្នកដូចជាកូដសម្ងាត់មួយ – ប្រសិនបើអ្នកដាក់វានៅក្នុង JavaScript ផ្នែកមុខ ដែលគេអាចមើលកូដប្រភពគេហទំព័ររបស់អ្នក និងលួចប្រើ credits AI របស់អ្នក។ ផ្នែកខាងក្រោយរក្សាទុកសម្ងាត់យ៉ាងសុវត្ថិភាព។
**កំណត់ល្បឿននិងការគ្រប់គ្រង**: ផ្នែកខាងក្រោយអនុញ្ញាតឱ្យអ្នកគ្រប់គ្រងពីឥតឈប់ឈរពេលអ្នកប្រើប្រាស់ធ្វើសំណើ និងដាក់អោយមានការផ្ទៀងផ្ទាត់អ្នកប្រើ និងកំណត់ហេតុការប្រើប្រាស់។
**ដំណើរការទិន្នន័យ**: អ្នកប្រហែលចង់រក្សាទុកសន្ទស្សន៍ជជែក, កំចាត់មាតិកាមិនសមរម្យ, ឬបិទបញ្ចូលសេវាកម្ម AI ជាច្រើន។ ផ្នែកខាងក្រោយជាទីតាំងស្នាក់នៅរបស់តួលេខនេះ។
**រចនាសម្ព័ន្ធស្រដៀងនឹងម៉ូដែល client-server:**
- **Frontend**: ស្រទាប់ចំណុចប្រទាក់អ្នកប្រើប្រាស់សម្រាប់ចូលរួម
- **Backend API**: ស្រទាប់ដំណើរការសំណើ និងបញ្ជូន
- **សេវាកម្ម AI**: ការគណនា និងបង្កើតចម្លើយខាងក្រៅ
- **Environment Variables**: ការកំណត់រចនាសម្ព័ន្ធ និងរក្សាសម្ងាត់ដោយសុវត្ថិភាព
### យល់ដឹងពីចរន្តសំណើ-ចម្លើយ
មកតាមដានអ្វីកើតឡើងពេលអ្នកប្រើផ្ញើសារមួយ៖
```mermaid
sequenceDiagram
participant User as 👤 អ្នកប្រើ
participant Frontend as 🌐 ផ្នែកមុខ
participant API as 🔧 មេម៉ាស៊ីន FastAPI
participant AI as 🤖 សេវាកម្ម AI
User->>Frontend: កំពុងវាយ "សួស្តី AI!"
Frontend->>API: POST /hello {"message": "សួស្តី AI!"}
Note over API: សម្រាប់ផ្ទៀងផ្ទាត់សំណើ
បន្ថែមសៀវភៅប្រព័ន្ធ
API->>AI: ផ្ញើសំណើដែលបានរៀបចំទ្រង់ទ្រាយ
AI->>API: ត្រលប់ចម្លើយ AI
Note over API: ប្រតិបត្តិចម្លើយ
កត់ត្រាការសម្ភាសន៍
API->>Frontend: {"response": "សួស្តី! ថ្ងៃនេះខ្ញុំអាចជួយដូចម្តេច?"}
Frontend->>User: បង្ហាញសារ AI
```
**យល់ដឹងពីជំហាននីមួយៗៈ**
1. **ការផ្គូមផ្គាត់អ្នកប្រើ**: មនុស្សវាយក្នុងចំណុចប្រទាក់ជជែក
2. **ដំណើរការផ្នែកមុខ**: JavaScript យកបញ្ចូល និងរៀបចំជារាង JSON
3. **ការត្រួតពិនិត្យ API**: FastAPI មើលសំណើដោយស្វ័យប្រវត្តិប្រើម៉ូដែល Pydantic
4. **ការបញ្ចូល AI**: ផ្នែកខាងក្រោយបន្ថែម context (system prompt) ហើយហៅសេវាកម្ម AI
5. **ដំណើរការចម្លើយ**: API ទទួលចម្លើយ AI ហើយអាចកែប្រែបានប្រសិនបើចាំបាច់
6. **បង្ហាញនៅផ្នែកមុខ**: JavaScript បង្ហាញចម្លើយនៅចំណុចប្រទាក់ជជែក
### យល់ដឹងអំពីរចនាសម្ព័ន្ធ API
```mermaid
sequenceDiagram
participant Frontend
participant FastAPI
participant AI Function
participant GitHub Models
Frontend->>FastAPI: POST /hello {"message": "សួស្តី 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": "សួស្តី! តើខ្ញុំអាចជួយអ្វីបាន?"}
```
```mermaid
flowchart TD
A[ការបញ្ចូលរបស់អ្នកប្រើ] --> B[ការត្រួតពិនិត្យផ្នែកមុខ]
B --> C[សំណើ HTTP POST]
C --> D[ម៉ាស៊ីនបម្រើ FastAPI]
D --> E[ការត្រួតពិនិត្យ Pydantic]
E --> F[ការហៅមុខងារ AI]
F --> G[API ម៉ូឌែល GitHub]
G --> H[ការចំរូងចំរាស្សចម្លើយ]
H --> I[ចម្លើយ JSON]
I --> J[បន្ថែមផ្នែកមុខ]
subgraph "ស្រទាប់សន្តិសុខ"
K[មេឌីយ៉ូ CORS]
L[អថេរបរិស្ថាន]
M[ការដោះស្រាយកំហុស]
end
D --> K
F --> L
H --> M
```
### បង្កើតកម្មវិធី FastAPI
សូមបង្កើត API របស់យើងជាជំហានៗ។ បង្កើតឯកសារ `api.py` ដោយមានកូដ FastAPI ដូចខាងក្រោម៖
```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
# កំណត់កំណត់ការចុះបញ្ជី
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
# បង្កើតកម្មវិធី FastAPI
app = FastAPI(
title="AI Chat API",
description="A high-performance API for AI-powered chat applications",
version="1.0.0"
)
# កំណត់ CORS
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # កំណត់ឱ្យសមរម្យសម្រាប់ផលិតកម្ម
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# ម៉ូដែល Pydantic សម្រាប់ការផ្ទៀងផ្ទាត់ស្នើសុំ/ការឆ្លើយតប
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:
# ដកយក និងផ្ទៀងផ្ទាត់សារនេះ
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]}...")
# ហៅសេវាកម្ម AI (ចំណាំ៖ ការហៅ call_llm គួរតែធ្វើជា async សម្រាប់ប្រសិទ្ធភាពល្អប្រសើរ)
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)
```
**យល់ដឹងពីការអនុវត្ត FastAPI៖**
- **អញ្ចឹមចូល** FastAPI សម្រាប់មុខងារផ្នែកវែបសម័យថ្មី និង Pydantic សម្រាប់ការត្រួតពិនិត្យទិន្នន័យ
- **បង្កើត** ឯកសារអេពីអាយ ស្វ័យប្រវត្តិ (មាននៅ `/docs` ខណៈម៉ាស៊ីនដំណើរការ)
- **បើក** មធ្យោបាយ CORS middleware អនុញ្ញាតសំណើពីដែនផ្សេងៗ
- **កំណត់** ម៉ូដែល Pydantic សម្រាប់ការត្រួតពិនិត្យសំណើ/ចម្លើយ និងឯកសារអេពីអាយ
- **ប្រើ** endpoints async សម្រាប់សមត្ថភាពល្អជាមួយសំណើតែមួយពេល
- **អនុវត្ត** ស្ថានភាព HTTP និងដោះស្រាយកំហុសជាមួយ HTTPException
- **រួមបញ្ចូល** ការចុះកំណត់ហេតុដែលមានរចនាសម្ព័ន្ធសម្រាប់តាមដាន និងរកសុី
- **ផ្តល់** endpoint ឆែកសុខភាពសម្រាប់មើលស្ថានភាពសេវា
**អត្ថប្រយោជន៍សំខាន់ៗរបស់ FastAPI ប្រឆាំងនឹង framework ប្រពៃណី៖**
- **ការត្រួតពិនិត្យស្វ័យប្រវត្តិ**: ម៉ូដែល Pydantic រក្សាអនុភាពទិន្នន័យមុនដំណើរការ
- **ឯកសារជំនួសអន្តរកម្ម**: ហៅ `/docs` សម្រាប់ឯកសារអេពីអាយ ដែលផលិតដោយស្វ័យប្រវត្តិ និងអាចសាកល្បងបាន
- **ប្រើប្រភេទយ៉ាងត្រឹមត្រូវ**: ការសម្គាល់ប្រភេទ Python ជួយបញ្ចៀសកំហុសពេលរត់ និងបង្កើនគុណភាពកូដ
- **គាំទ្រ async**: ដោះស្រាយសំណើ AI ជាច្រើនដោយមិនរាំងខ្ទប់
- **សមត្ថភាពលឿន**: បង្កើនល្បឿនដំណើរការសំណើសម្រាប់កម្មវិធីពេលវេលាពិត
### យល់ដឹងអំពី CORS: អ្នកថែសុវត្ថិភាពនៃវែប
CORS (Cross-Origin Resource Sharing) ជាដូចជា អ្នកសន្តិសុខនៅអាគារ ដែលពិនិត្យមើលថា អ្នកទស្សនា ត្រូវបានអនុញ្ញាតឲ្យចូលក្នុងទេ។ តោះយើងយល់ថា ហេតុអ្វីវាសំខាន់ និងវាធ្វើឲ្យកម្មវិធីរបស់អ្នកមានផលប៉ះពាល់ដូចម្តេច។
#### CORS ទាំងអស់មានអ្វី ហើយហេតុអ្វីវាកើតមាន?
**បញ្ហា**: សូមចូរត្រួតពិនិត្យថា បើគេហទំព័រណាមួយអាចធ្វើសំណើទៅគេហទំព័របន្ទាប់របស់ធនាគារអ្នកដោយគ្មានការអនុញ្ញាតពីអ្នក។ នេះជាស្ថានភាពសុវត្ថិភាពពិបាកណាស់! មុំរក្សាទុកគេហទំព័ររក្សាបទបញ្ជាពីលំនាំនិងច្បាប់ "Same-Origin Policy"។
**Same-Origin Policy**: និយាយថា វែបប្រាក់ក្រុមហ៊ុនបានអនុញ្ញាតឲ្យគេហទំព័រធ្វើសំណើទៅដែនដូចគ្នា ព័រត (port) និងសេវាកម្ម (protocol) ដែលបានផ្ទុកលើមុន។
**គំរូជាក់ស្តែង**: ដូចជាជួរការពារអាគារអាផាតមិន – គ្រឹះសំណង់អនុញ្ញាតតែអ្នករស់នៅ (ដែនដូចគ្នា) ចូល។ ប្រសិនបើអ្នកចង់អោយមិត្តមកលេង (ដែនផ្សេង) អ្នកត្រូវប្រាប់អ្នកសន្តិសុខថាអាចអោយចូលបាន។
#### CORS នៅក្នុងបរិបទការអភិវឌ្ឍរបស់អ្នក
ក្នុងអំឡុងពេលអភិវឌ្ឍ ភ្នែកមុខ និងផ្នែកខាងក្រោយរបស់អ្នកដំណើរការលើព័រតផ្សេងៗគ្នា៖
- ផ្នែកមុខ៖ `http://localhost:3000` (ឬ file:// ប្រសិនបើបើក HTML ដោយផ្ទាល់)
- ផ្នែកខាងក្រោយ៖ `http://localhost:5000`
ទាំងនេះត្រូវបានគិតថាជា "ដែនផ្សេង" ទោះបីនៅលើកុំព្យូទ័រដូចគ្នា!
```python
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI(__name__)
CORS(app) # វានិយាយបិត្តរុករកថា៖ "វាពិតជាល្អសម្រាប់ប្រភពដើមផ្សេងទៀតធ្វើការស្នើសុំទៅ API នេះ"
```
**ប្រតិបត្តិការដែលកំណត់ CORS វត្ថុសំខាន់៖**
- **បន្ថែម** header HTTP លើចម្លើយ API ដែលប្រាប់កម្មវិធីរុករកថា "សំណើលើដែនផ្សេងនេះត្រូវបានអនុញ្ញាត"
- **ដោះស្រាយ** សំណើ "preflight" (កម្មវិធីរុករកពេលខ្លះពិនិត្យការអនុញ្ញាតមុនផ្ញើសំណើពេញ)
- **ទប់ស្កាត់** បញ្ហា "blocked by CORS policy" ដែលចេញនៅក្នុងបង្អួច console របស់កម្មវិធីរុករក
#### សុវត្ថិភាព CORS៖ ការអភិវឌ្ឍ ទល់នឹង ផលិតកម្ម
```python
# 🚨 ការអភិវឌ្ឍ៖ អនុញ្ញាតដើមទាំងអស់ (ងាយស្រួលប៉ុន្តែមិនមានសុវត្ថិភាព)
CORS(app)
# ✅ ផលិតកម្ម៖ អនុញ្ញាតតែដែនផ្នែកមុខជាក់លាក់របស់អ្នក
CORS(app, origins=["https://yourdomain.com", "https://www.yourdomain.com"])
# 🔒 អភិវឌ្ឍន៍ខ្ពស់៖ ដើមផ្សេងៗសម្រាប់បរិយាកាសផ្សេងៗ
if app.debug: # របៀបអភិវឌ្ឍ
CORS(app, origins=["http://localhost:3000", "http://127.0.0.1:3000"])
else: # របៀបផលិតកម្ម
CORS(app, origins=["https://yourdomain.com"])
```
**ហេតុអ្វីវាសំខាន់**៖ នៅពេលអភិវឌ្ឍ `CORS(app)` គឺដូចជាចាក់បើកទ្វារចូលផ្ទះអោយទល់ – ស្រួលប្រើ ប៉ុន្តែមិនសុវត្ថិភាព។ នៅផលិតកម្ម អ្នកត្រូវកំណត់បានច្បាស់ថា គេហទំព័រណាអាចពិភាក្សាជាមួយ API របស់អ្នកបាន។
#### សកម្មភាព CORS ទូទៅ និងដំណោះស្រាយ
| សកម្មភាព | បញ្ហា | ដំណោះស្រាយ |
|----------|---------|----------|
| **អភិវឌ្ឍក្នុងជីវិតមូលដ្ឋាន** | ផ្នែកមុខមិនអាចទាក់ទងផ្នែកខាងក្រោយ | បន្ថែម CORSMiddleware ទៅ FastAPI |
| **GitHub Pages + Heroku** | ផ្នែកមុខដាក់បង្ហាញមិនអាចទាក់ទង API | បន្ថែម URL GitHub Pages របស់អ្នកទៅ CORS origins |
| **ដែនផ្ទាល់ខ្លួន** | កំហុស CORS នៅផលិតកម្ម | កែប្រែ CORS origins ឲ្យស្របវះដែនរបស់អ្នក |
| **កម្មវិធីទូរស័ព្ទ** | កម្មវិធីមិនទាក់ទងបានទៅ Web API | បន្ថែមដែនកម្មវិធីរបស់អ្នក ឬប្រើ `*` ដោយប្រុងប្រយ័ត្ន |
**ក្បាលថ្មី**៖ អ្នកអាចពិនិត្យ header CORS នៅក្នុង Developer Tools របស់កម្មវិធីរុករក នៅផ្នែកបណ្ដាញ (Network tab)។ សូមស្វែងរក header `Access-Control-Allow-Origin` ក្នុងចម្លើយ។
### ការដោះស្រាយកំហុស និងការត្រួតពិនិត្យ
សូមប្រុងប្រយ័ត្នមើលថា API របស់យើងរួមបញ្ចូលការដោះស្រាយកំហុសត្រឹមត្រូវ៖
```python
# ផ្ទៀងផ្ទាត់ថា យើងបានទទួលសារមួយ
if not message:
return jsonify({"error": "Message field is required"}), 400
```
**គោលការណ៍ត្រួតពិនិត្យសំខាន់ៗ៖**
- **ពិនិត្យ** ផ្ទាល់មើលវាលដែលត្រូវការ មុនដំណើរការសំណើ
- **ត្រឡប់** សារជំហានកំហុសមានន័យក្នុងទ្រង់ទ្រាយ JSON
- **ប្រើ** កូដស្ថាន HTTP ឲ្យសមរម្យ (400 សម្រាប់សំណើខូច)
- **ផ្តល់** មតិកែតម្រូវច្បាស់លាស់ ដើម្បីជួយអ្នកអភិវឌ្ឍផ្នែកមុខ ដោះស្រាយបញ្ហា
## ការតំឡើង និងដំណើរការផ្នែកខាងក្រោយរបស់អ្នក
ឥឡូវនេះពេលយើងមានការភ្ជាប់ AI និងម៉ាស៊ីន FastAPI រួចរាល់ សូមចាប់ផ្តើមដំណើរការទាំងអស់។ ដំណើរការតំឡើងរួមមានការដំឡើង Python dependencies ការកំណត់ environment variables និងចាប់ផ្តើមម៉ាស៊ីនអភិវឌ្ឍ។
### ការតំឡើងបរិស្ថាន Python
សូមតំឡើងបរិស្ថានអភិវឌ្ឍ Python របស់អ្នក។ បរិស្ថាននិរន្តរភាព (virtual environment) ដូចជាគម្រោង Manhattan Project ដែលសំគាល់តំបន់កំណត់ម៉ាស្ស្អូរមួយ – គម្រោងនីមួយៗមានលក្ខណៈផ្ទាល់ខ្លួន ជាមួយឧបករណ៍ និងផ្នែកគ្រប់គ្រាន់ដើម្បីបរិភោគដោយគ្មានការជួបប្រទៈផ្សេងគ្នា។
```bash
# នាវិកទៅឯកសារ backend របស់អ្នក
cd backend
# បង្កើតបរិយាកាសនិមិត្ត (ដូចជាបង្កើតបន្ទប់ស្អាតសម្រាប់គម្រោងរបស់អ្នក)
python -m venv venv
# បើកវា (Linux/Mac)
source ./venv/bin/activate
# លើ Windows, ប្រើ:
# venv\Scripts\activate
# តំឡើងវត្ថុល្អៗ
pip install openai fastapi uvicorn python-dotenv
```
**អ្វីដែលយើងទើបបញ្ចប់៖**
- **បង្កើត** ដុំ Python ផ្ទាល់ខ្លួន មិនប៉ះពាល់ទៅអ្វីផ្សេងទេ
- **បើកបរ** ដើម្បីភ្ជាប់ terminal រាជ្យដឹងថាត្រូវប្រើបរិស្ថាននេះ
- **ដំឡើង** មូលដ្ឋាន: OpenAI សម្រាប់ភាពអស្ចារ្យ AI, FastAPI សម្រាប់ Web API, Uvicorn ដើម្បីរៀបចំដំណើរការ ជាមួយ python-dotenv ដែលគ្រប់គ្រងសម្ងាត់យ៉ាងមុត
**ការពន្យល់ពី dependencies សំខាន់ៗ៖**
- **FastAPI**: Framework ម៉ូដឺន លឿនសម្រាប់ Web ជាមួយឯកសារអេពីអាយស្វ័យប្រវត្តិ
- **Uvicorn**: ម៉ាស៊ីន ASGI លឿនសម្រាប់ដំណើរការកម្មវិធី FastAPI
- **OpenAI**: ឡាយបราារីផ្លូវការសម្រាប់ GitHub Models និង OpenAI API
- **python-dotenv**: ឧបករណ៍ដំណើរការលំនាំបរិស្ថានពីឯកសារ .env
### ការកំណត់បរិស្ថាន៖ រក្សាសម្ងាត់ឱ្យមានសុវត្ថិភាព
មុនពេលចាប់ផ្តើម API យើង ត្រូវនិយាយអំពីមេរៀនសំខាន់មួយក្នុងការអភិវឌ្ឍវែប៖ របៀបរក្សាអោយសម្ងាត់របស់អ្នក ជាលំនាំពិតប្រាកដ។ Environment variables ដូចជា ទ្រនិចសុវត្ថិភាព មួយ ដែលកម្មវិធីរបស់អ្នកតែម្នាក់ឯងអាចចូលប្រើបាន។
#### តើ Environment Variables ជាអ្វី?
**សូមគិតថា environment variables ជាប្រអប់ដាក់វត្ថុមានតម្លៃ** – អ្នកដាក់វត្ថុមានតម្លៃរបស់អ្នកនៅក្នុងមួយ ហើយមានកូនសោរតែម្នាក់ឯងអ្នក (និងកម្មវិធីរបស់អ្នក) អាចបើកបាន។ ជំនួសការសរសេរព័ត៌មានសំងាត់ដោយផ្ទាល់ក្នុងកូដ (ដែលគេអាចមើលឃើញបានទាំងអស់) អ្នករក្សាទុកវាជាសុវត្ថិភាពក្នុងសេវា environment ។
**នេះជាការប្រៀបធៀប**៖
- **វិធីខុស**: សរសេរពាក្យសម្ងាត់លើក្រដាសខ្នាតតូច ហើយដាក់លើម៉ូនីទ័រ
- **វិធីត្រឹមត្រូវ**: រក្សាពាក្យសម្ងាត់ក្នុងកម្មវិធីគ្រប់គ្រងពាក្យសម្ងាត់ដែលមានសុវត្ថិភាព និងចូលបានតែអ្នក
#### ហេតុអ្វីបានជា Environment Variables មានសារៈសំខាន់
```python
# 🚨 កុំធ្វើបែបនេះទេ - សោ API មើលឃើញដោយមនុស្សគ្រប់គ្នា
client = OpenAI(
api_key="ghp_1234567890abcdef...", # មនុស្សណាមួយអាចលួចយកបាន!
base_url="https://models.github.ai/inference"
)
# ✅ ប្រាកដថាដាក់សោ API គ្រប់គ្រាន់
client = OpenAI(
api_key=os.environ["GITHUB_TOKEN"], # មានតែកម្មវិធីរបស់អ្នកប៉ុណ្ណោះអាចចូលប្រើបាន
base_url="https://models.github.ai/inference"
)
```
**អ្វីកើតឡើងពេលអ្នកបញ្ចូលសម្ងាត់ក្នុងកូដ៖**
1. **ស្ថានភាព version control បង្ហាញ** : មនុស្សណាមួយដែលមានការចូលប្រើ Git repository របស់អ្នកទទួលបាន key API របស់អ្នក
2. **ឃ្លាំងសាធារណៈ**: ប្រសិនបើអ្នក push ទៅ GitHub ផ្ទុក key របស់អ្នកអាចមើលឃើញបានសកលលោក
3. **ចែករំលែកជាក្រុម**: អ្នកអភិវឌ្ឍផ្សេងទៀតដែលបង្កើតគម្រោង អាចប្រើប្រាស់ key API ផ្ទាល់ខ្លួនរបស់អ្នក
4. **រប្រហារព័ត៌មាន**: ប្រសិនបើនរណាខ្លះលួចបាន key API របស់អ្នក អ្នកនោះអាចប្រើប្រាស់ credits AI របស់អ្នកបាន
#### ការបង្កើតឯកសារ .env របស់អ្នក
បង្កើតឯកសារ `.env` ក្នុងថតផ្នែកខាងក្រោយរបស់អ្នក។ ឯកសារនេះរក្សាសម្ងាត់របស់អ្នកនៅតំបន់ក្នុងរយៈពេលអភិវឌ្ឍ៖
```bash
# ឯកសារ .env - អ្វីនេះមិនគួរត្រូវបានបញ្ចូលទៅ Git ទេ
GITHUB_TOKEN=your_github_personal_access_token_here
FASTAPI_DEBUG=True
ENVIRONMENT=development
```
**យល់ដឹងពីឯកសារ .env៖**
- **មួយសម្ងាត់ក្នុងមួយបន្ទាត់** ជាទ្រង់ទ្រាយ `KEY=value`
- **គ្មានចន្លោះ** នៅជុំវិញសញ្ញាទង្ស
- **គ្មានគូសពាក្យ** នៅជុំវិញតម្លៃ (ភាគច្រើន)
- **មតិយោបល់** ចាប់ផ្តើមជាមួយ `#`
#### ការបង្កើតកូដចូលផ្ទាល់ខ្លួន GitHub របស់អ្នក
កូដតំណាក់ផ្ទាល់ខ្លួន GitHub របស់អ្នកដូចជាពាក្យសម្ងាត់ពិសេស ដែលផ្តល់អនុសាសន៍កម្មវិធីរបស់អ្នកក្នុងការប្រើសេវា AI របស់ GitHub៖
**ជំហានលំអិតក្នុងការបង្កើត token៖**
1. **ចូលទៅ GitHub Settings** → Developer settings → Personal access tokens → Tokens (classic)
2. **ចុច "Generate new token (classic)"**
3. **កំណត់រយៈពេលផុតកំណត់** (30 ថ្ងៃសម្រាប់សាកល្បង ជាងនេះសម្រាប់ផលិតកម្ម)
4. **ជ្រើសយក scopes**: ពិនិត្យ "repo" និងសិទ្ធផ្សេងៗដែលអ្នកត្រូវការ
5. **បង្កើត token** ហើយចម្លងភ្លាម (អ្នកមិនអាចមើលវិញបានទេ!)
6. **បិទបញ្ចូលទៅឯកសារ .env របស់អ្នក**
```bash
# ឧទាហរណ៍នៃរូបរាងនៃស្លាកសញ្ញារបស់អ្នក (នេះគឺមិនពិត!)
GITHUB_TOKEN=ghp_1A2B3C4D5E6F7G8H9I0J1K2L3M4N5O6P7Q8R
```
#### ការផ្ទុក Environment Variables ក្នុង Python
```python
import os
from dotenv import load_dotenv
# បញ្ចូលអថេរបរិស្ថានពីឯកសារ .env
load_dotenv()
# ឥឡូវនេះអ្នកអាចចូលដំណើរការពួកវាបានយ៉ាងសុវត្ថិភាព
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"
)
```
**អ្វីដែលកូដនេះធ្វើ៖**
- **ផ្ទុក** ឯកសារ .env ហើយធ្វើអោយអាចប្រើបានក្នុង Python
- **ពិនិត្យ** ថាតើ token ត្រូវការមានស្រាប់ (មានការដោះស្រាយកំហុសល្អ!)
- **បង្កើត** កំហុសច្បាស់លាស់ ប្រសិនបើ token ខ្វះ
- **ប្រើ** token នៅក្នុងសុវត្ថិភាព ដោយមិនបង្ហាញក្នុងកូដ
#### សុវត្ថិភាព Git៖ ឯកសារ .gitignore
ឯកសារ `.gitignore` របស់អ្នកប្រាប់ Git ថាតើឯកសារមួយណាដែលមិនគួរត្រូវតាមដាន ឬផ្ទុកឡើងលើ GitHub៖
```bash
# .gitignore - បន្ថែមបន្ទាត់ទាំងនេះ
.env
*.env
.env.local
.env.production
__pycache__/
venv/
.vscode/
```
**ហេតុអ្វីវាចាំបាច់**៖ ពេលអ្នកបញ្ចូល `.env` ទៅ `.gitignore` Git នឹងមិនរកឃើញឯកសារបរិស្ថានរបស់អ្នកទេ ដូច្នេះអ្នកនឹងមិនបង្កើតកំហុសដោយចៃដន្យផ្ទុកសម្ងាត់របស់អ្នកទៅ GitHub ទេ។
#### បរិបទផ្សេងៗ ការអភិវឌ្ឍ ដំណើរការ និងផលិតកម្ម មានសម្ងាត់ខុសគ្នា
```bash
# .env.development
GITHUB_TOKEN=your_development_token
DEBUG=True
# .env.production
GITHUB_TOKEN=your_production_token
DEBUG=False
```
**ហេតុអ្វីវាសំខាន់**៖ អ្នកមិនចង់ឲ្យការវាយតម្លៃការអភិវឌ្ឍខូចប៉ះពាល់ដល់បរិមាណការប្រើប្រាស់ AI ផលិតកម្ម និងចង់មានកម្រិតសុវត្ថភាពខុសគ្នាទៅតាមបរិបទណាមួយ។
### ចាប់ផ្តើមម៉ាស៊ីនអភិវឌ្ឍ៖ ផ្តល់ជីវិតដល់ FastAPI របស់អ្នក
ឥឡូវមានពេលវេលារីករាយ – ចាប់ផ្តើមម៉ាស៊ីនដំណើរការអភិវឌ្ឍ FastAPI របស់អ្នក ហើយមើលការភ្ជាប់ AI របស់អ្នកមានជីវិតឡើងវិញ! FastAPI ប្រើ Uvicorn ដែលជាម៉ាស៊ីន ASGI លឿនខ្លាំងសម្រាប់កម្មវិធី Python async ។
#### យល់ដឹងអំពីដំណើរការចាប់ផ្តើមម៉ាស៊ីន FastAPI
```bash
# វិធី ១: ប្រតិបត្តិការ Python ផ្ទាល់ (រួមមានការផ្ទុកឡើងវិញដោយស្វ័យប្រវត្តិ)
python api.py
# វិធី ២: ប្រើ Uvicorn ផ្ទាល់ (ត្រួតពិនិត្យបានច្រើនជាង)
uvicorn api:app --host 0.0.0.0 --port 5000 --reload
```
ពេលដែលអ្នកដំណើរការបញ្ញាតិនេះ នេះគឺជាអ្វីដែលកើតឡើងនៅពីក្រោយឈើ:
**1. Python ផ្ទុកកម្មវិធី FastAPI របស់អ្នក**៖
- នាំចូលបណ្ណាល័យទាំងអស់ដែលត្រូវការ (FastAPI, Pydantic, OpenAI, ល។)
- ផ្ទុកអថេរបរិស្ថានពីឯកសារ `.env` របស់អ្នក
- បង្កើតអ实例កម្មវិធី FastAPI ជាមួយឯកសារឯកសារជម្រាបអំពីកម្មវិធីដោយស្វ័យប្រវត្តិ
**2. Uvicorn កំណត់រចនាសម្ព័ន្ធម៉ាស៊ីនមេ ASGI**៖
- ចាក់ផ្លាស់ទៅតំបន់ 5000 ជាមួយសមត្ថភាពរៀបចំសំណើ async
- បង្កើតផ្លូវសំណើជាមួយការត្រួតពិនិត្យដោយស្វ័យប្រវត្តិ
- បើកការផ្លាស់ប្តូរឆាប់រហ័សសម្រាប់ការអភិវឌ្ឍន៍ (ចាប់ផ្តើមឡើងវិញនៅពេលមានការផ្លាស់ប្តូរឯកសារ)
- បង្កើតឯកសារព័ត៌មាន API អន្តរកម្ម
**3. ម៉ាស៊ីនមេចាប់ផ្តើមស្ដាប់**៖
- ត្រង់វាំងទ័ររបស់អ្នកបង្ហាញៈ `INFO: Uvicorn running on http://0.0.0.0:5000`
- ម៉ាស៊ីនមេទទួលបានសំណើ AI សមាសភាពច្រើនដោយសមង់
- API របស់អ្នកបានរៀបចំជាមួយឯកសារដែលមាននៅ `http://localhost:5000/docs`
#### អ្វីដែលអ្នកគួរមើលឃើញពេលដែលពីរត្រូវដំណើរការ
```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.
```
**ការយល់ដឹងអំពីលទ្ធផល FastAPI៖**
- **នឹងតាមដានការផ្លាស់ប្តូរ**៖ បើកជាដំណើរការចាប់ផ្តើមឡើងវិញសម្រាប់អភិវឌ្ឍន៍
- **Uvicorn កំពុងដំណើរការ**៖ ម៉ាស៊ីនមេ ASGI ដំណើរការជាប្រសើរ
- **ចាប់ផ្តើមដំណើរការរន្ធត់ឡើងវិញ**៖ កម្មវិធីតាមដានឯកសារសម្រាប់ចាប់ផ្តើមឡើងវិញដោយស្វ័យប្រវត្តិ
- **ការចាប់ផ្តើមកម្មវិធីបានបញ្ចប់**៖ កម្មវិធី FastAPI បានបង្កើតដោយជោគជ័យ
- **ឯកសារអន្តរកម្មមានស្រាប់**៖ ចូលទៅកាន់ `/docs` សម្រាប់ឯកសារព័ត៌មាន API ដោយស្វ័យប្រវត្តិ
#### សាកល្បង FastAPI របស់អ្នក៖ វិធីសាស្រ្តហាម្លែងចិត្តច្រើន
FastAPI ផ្ដល់នូវវិធីសាស្រ្តងាយស្រួលជាច្រើនសម្រាប់ធ្វើតេស្ត API របស់អ្នក រួមទាំងឯកសារអន្តរកម្មដោយស្វ័យប្រវត្តិ៖
**វិធីសាស្រ្ត 1: ឯកសារព័ត៌មាន API អន្តរកម្ម (ផ្ដល់អនុសាសន៍)**
1. បើកកម្មវិធីរុករករបស់អ្នកទៅកាន់ `http://localhost:5000/docs`
2. អ្នកនឹងឃើញ Swagger UI ជាមួយចំណុចចូលទាំងអស់របស់អ្នកបានបង្ហាញ
3. ចុចលើ `/hello` → "Try it out" → បញ្ចូលសារធ្វើតេស្ត → "Execute"
4. មើលចម្លើយដោយផ្ទាល់នៅក្នុងកម្មវិធីរុករកជាមួយទ្រង់ទ្រាយត្រឹមត្រូវ
**វិធីសាស្រ្ត 2: សាកល្បងមូលដ្ឋានកម្មវិធីរុករក**
1. ទៅកាន់ `http://localhost:5000` សម្រាប់ចំណុចចូលមូលដ្ឋាន
2. ទៅកាន់ `http://localhost:5000/health` ដើម្បីពិនិត្យសុខភាពម៉ាស៊ីនមេ
3. នេះបញ្ជាក់ថាម៉ាស៊ីនមេ FastAPI របស់អ្នកដំណើរការបានត្រឹមត្រូវ
**វិធីសាស្រ្ត 2: សាកល្បងបញ្ជារបញ្ជា (កម្រិតខ្ពស់)**
```bash
# សាកល្បងជាមួយ curl (ប្រសិនបើមាន)
curl -X POST http://localhost:5000/hello \
-H "Content-Type: application/json" \
-d '{"message": "Hello AI!"}'
# ការឆ្លើយតបដែលរំពឹងទុក៖
# {"response": "សួស្ដី! ខ្ញុំជាអ្នកជំនួយ AI របស់អ្នក។ តើខ្ញុំអាចជួយអ្វីបានខ្លះនៅថ្ងៃនេះ?"}
```
**វិធីសាស្រ្ត 3: ស្គ្រីប Python សម្រាប់សាកល្បង**
```python
# test_api.py - បង្កើតឯកសារនេះដើម្បីធ្វើតេស្ត API របស់អ្នក
import requests
import json
# សាកល្បងចំណុចចេញ API
url = "http://localhost:5000/hello"
data = {"message": "Tell me a joke about programming"}
response = requests.post(url, json=data)
if response.status_code == 200:
result = response.json()
print("AI Response:", result['response'])
else:
print("Error:", response.status_code, response.text)
```
#### ដោះស្រាយបញ្ហាធម្មតា ពេលចាប់ផ្តើម
| សារបញ្ហា | អ្វីដែលមានន័យ | របៀបដោះស្រាយ |
|---------------|---------------|------------|
| `ModuleNotFoundError: No module named 'fastapi'` | FastAPI មិនបានដំឡើង | រៀបចំ `pip install fastapi uvicorn` ក្នុងបរិស្ថានវ៉ឺតចូលរបស់អ្នក |
| `ModuleNotFoundError: No module named 'uvicorn'` | ម៉ាស៊ីនមេ ASGI មិនបានដំឡើង | រៀបចំ `pip install uvicorn` ក្នុងបរិស្ថានវ៉ឺតចូលរបស់អ្នក |
| `KeyError: 'GITHUB_TOKEN'` | អថេរបរិស្ថានមិនមាន | ពិនិត្យឯកសារ `.env` របស់អ្នក និងហៅ `load_dotenv()` |
| `Address already in use` | តំបន់ 5000 កំពុងមានប្រើប្រាស់ | សម្លាប់ដំណើរការផ្សេងទៀតដែលកំពុងប្រើតំបន់ 5000 ឬផ្លាស់ប្តូរតំបន់ |
| `ValidationError` | ទិន្នន័យសំណើមិនត្រូវនឹងម៉ូដែល Pydantic | ពិនិត្យទ្រង់ទ្រាយសំណើឱ្យត្រូវនឹងសchema ដែលរំពឹងទុក |
| `HTTPException 422` | ប្រភេទមិនអាចដំណើរការ | ការត្រួតពិនិត្យសំណើបរាជ័យ ពិនិត្យ `/docs` សម្រាប់ទ្រង់ទ្រាយត្រឹមត្រូវ |
| `OpenAI API error` | ការផ្ទៀងផ្ទាត់សេវ AI បរាជ័យ | បញ្ជាក់ថា Token GitHub របស់អ្នកត្រឹមត្រូវ ហើយមានសិទ្ធិគ្រប់គ្រាន់ |
#### សីលធម៌ល្អសម្រាប់ការអភិវឌ្ឍ
**ការផ្លាស់ប្តូរឆាប់រហ័ស (Hot Reloading)**៖ FastAPI ជាមួយ Uvicorn ផ្ដល់នូវការចាប់ផ្តើមឡើងវិញដោយស្វ័យប្រវត្តិពេលអ្នករក្សាទុកការផ្លាស់ប្តូរកូដ Python របស់អ្នក។ នេះមានន័យថាអ្នកអាចកែប្រែកូដ និងសាកល្បងភ្លាមភ្លាមដោយមិនចាំបាច់ចាប់ផ្តើមឡើងវិញដោយដៃ។
```python
# បើកការផ្ទុកឡើងវិញបន្ទាន់ដោយពាក់ព័ន្ធ
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, debug=True) # debug=True បើកការផ្ទុកឡើងវិញបន្ទាន់
```
**កំណត់ហេតុសម្រាប់ការអភិវឌ្ឍ**៖ បន្ថែមកំណត់ហេតុដើម្បីយល់ពីអ្វីកើតឡើង៖
```python
import logging
# កំណត់ការចុះបញ្ជីសកម្មភាព
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
@app.route("/hello", methods=["POST"])
def hello():
data = request.get_json()
message = data.get("message", "")
logger.info(f"Received message: {message}")
if not message:
logger.warning("Empty message received")
return jsonify({"error": "Message field is required"}), 400
try:
response = call_llm(message, "You are a helpful and friendly assistant.")
logger.info(f"AI response generated successfully")
return jsonify({"response": response})
except Exception as e:
logger.error(f"AI API error: {str(e)}")
return jsonify({"error": "AI service temporarily unavailable"}), 500
```
**ហេតុអ្វីបានជា កំណត់ហេតុមានប្រយោជន៍**៖ ក្នុងពេលការអភិវឌ្ឍ អ្នកអាចមើលឃើញច្បាស់ថាសំណើអ្វីខ្លះមក អ្វីដែល AI ឆ្លើយតប និងកន្លែងដែលកើតមានកំហុស។ វាធ្វើឱ្យការរកកំហុសរហ័សជាងមុន។
### កំណត់រចនាសម្ព័ន្ធសម្រាប់ GitHub Codespaces៖ ការអភិវឌ្ឍគ្រប់ពេលគ្រាន់តែបញ្ចេញនៅពពក
GitHub Codespaces គឺដូចជាម៉ាស៊ីនកុំព្យ៊ទ័រអភិវឌ្ឍមានសមត្ថភាពបំផុតនៅពពកដែលអ្នកអាចចូលប្រើពីកម្មវិធីរុករកណាមួយ។ ប្រសិនបើអ្នកកំពុងធ្វើការក្នុង Codespaces មានជំហានបន្ថែមមួយចំនួនដើម្បីធ្វើអោយ backend របស់អ្នកអាចចូលប្រើដោយផ្នែកមុខ។
#### ការយល់ដឹងអំពីបណ្តាញ Codespaces
នៅក្នុងបរិស្ថានអភិវឌ្ឍនៅលើក្នុងកុំព្យូទ័រផ្ទាល់ខ្លួន អ្វីៗរត់នៅលើកុំព្យូទ័រដូចគ្នា៖
- Backend: `http://localhost:5000`
- Frontend: `http://localhost:3000` (ឬ file://)
ក្នុង Codespaces បរិស្ថានអភិវឌ្ឍរបស់អ្នកដំណើរការនៅលើម៉ាស៊ីនមេ GitHub ដូច្នេះ "localhost" មានន័យខុសគ្នា។ GitHub បង្កើត URL សាធារណៈសម្រាប់សេវាកម្មរបស់អ្នកដោយស្វ័យប្រវត្តិ ប៉ុន្តែអ្នកត្រូវតែផ្លាស់ប្តូរតាមរយៈការកំណត់ត្រឹមត្រូវ។
#### ជំហានចុះចូលក្នុង Codespaces
**1. ចាប់ផ្តើមម៉ាស៊ីនមេ backend របស់អ្នក**៖
```bash
cd backend
python api.py
```
អ្នកនឹងឃើញសារ Startup FastAPI/Uvicorn ដែលខុសគ្នាបន្តិច ប៉ុន្តែចាប់ផ្តើមនៅក្នុងបរិស្ថាន Codespace។
**2. កំណត់មើលឃើញព្រិលតំបន់(port visibility)**៖
- ស្វែងរកផ្ទាំង "Ports" នៅខាងក្រោម VS Code
- រកតំបន់ 5000 នៅក្នុងបញ្ជី
- ចុចមោទនភាពព្រិលចុចស្ដាំលើតំបន់ 5000
- ជ្រើស "Port Visibility" → "Public"
**ហេតុអ្វីបានចុះប្រកាស(public)?** ប្រភេទលំនាំដើម Ports នៅ Codespaces ជារបារម្ភឯកជន (គ្រាន់តែអ្នកអាចចូលមើល)។ ការចុះប្រកាសអោយសាធារណៈធ្វើអោយផ្នែកមុខដែលរត់នៅក្នុងកម្មវិធីរុករកអាចទំនាក់ទំនងទៅ backend របស់អ្នកបាន។
**3. ទទួល URL សាធារណៈរបស់អ្នក**៖
បន្ទាប់ពីចុះសាធារណៈ តំណភ្ជាប់ URL ដូចជា៖
```
https://your-codespace-name-5000.app.github.dev
```
**4. បន្ទាន់សម័យការកំណត់ផ្នែកមុខរបស់អ្នក**៖
```javascript
// នៅក្នុង app.js ផ្នែកមុខអ្នក, បន្ទាន់សម័យ BASE_URL:
this.BASE_URL = "https://your-codespace-name-5000.app.github.dev";
```
#### ការយល់ដឹងអំពី URL Codespace
URL Codespace បំពេញទៅលើលំដាប់ដែលអាចទាយបាន៖
```
https://[codespace-name]-[port].app.github.dev
```
**លែងយកលំអិត៖**
- `codespace-name`: សម្គាល់តែមួយសម្រាប់ Codespace របស់អ្នក (ភាគច្រើនរួមមានឈ្មោះអ្នកប្រើ)
- `port`: លេខតំបន់ដែលសេវាកម្មរត់ (5000 សម្រាប់កម្មវិធី FastAPI របស់យើង)
- `app.github.dev`: ដែនហ្វឹកហាត់សម្រាប់កម្មវិធី Codespace របស់ GitHub
#### សាកល្បង Codespace របស់អ្នក
**1. សាកល្បង backend ដោយផ្ទាល់**៖
បើក URL សាធារណៈរបស់អ្នកក្នុងផ្ទាំងកម្មវិធីរុករកថ្មី។ អ្នកគួរតែឃើញ៖
```
Welcome to the AI Chat API. Send POST requests to /hello with JSON payload containing 'message' field.
```
**2. សាកល្បងជាមួយឧបករណ៍អភិវឌ្ឍកម្មវិធីរុករក**៖
```javascript
// បើកកុងសូលកម្មវិធីរកមើល ហើយសាកល្បង API របស់អ្នក
fetch('https://your-codespace-name-5000.app.github.dev/hello', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({message: 'Hello from Codespaces!'})
})
.then(response => response.json())
.then(data => console.log(data));
```
#### Codespaces ប្រៀបធៀបនឹងការអភិវឌ្ឍលើកុំព្យូទ័រផ្ទាល់ខ្លួន
| ផ្នែក | ការអភិវឌ្ឍលើកុំព្យូទ័រផ្ទាល់ខ្លួន | GitHub Codespaces |
|--------|-------------------|-------------------|
| **ម៉ោងតម្រូវការ** | យូរ (ដំឡើង Python, សមាសភាព) | មិនយូរ (បរិស្ថានបានកំណត់រួច) |
| **ការចូលប្រើ URL** | `http://localhost:5000` | `https://xyz-5000.app.github.dev` |
| **ការកំណត់តំបន់** | ស្វ័យប្រវត្តិ | ដោយដៃ (ធ្វើឱ្យតំបន់មានសាធារណៈ) |
| **ការរក្សាទុកឯកសារ** | ឧបករណ៍ក្នុងស្រុក | តាមរ៉េភូ GitHub |
| **ការសហការយ៉ាងងាយស្រួល** | ពិបាកចែករំលែកបរិស្ថាន | ងាយស្រួលចែករំលែកតំណ Codespace |
| **ការពឹងផ្អែកលើអ៊ិនធឺណិត** | សំរាប់ហៅ API AI តែប៉ុណ្ណោះ | ត្រូវការសម្រាប់គ្រប់អ្វីៗ |
#### ជំនួយ Codespace សម្រាប់ការអភិវឌ្ឍ
**អថេរបរិស្ថានក្នុង Codespaces**៖
ឯកសារ `.env` របស់អ្នកដំណើរការដូចគ្នានៅក្នុង Codespaces ប៉ុន្តែអ្នកអាចកំណត់អថេរបរិស្ថានដោយផ្ទាល់ក្នុង Codespace ផងដែរ៖
```bash
# កំណត់អថេរបរិយាកាសសម្រាប់សម័យបច្ចុប្បន្ន
export GITHUB_TOKEN="your_token_here"
# ឬបន្ថែមទៅក្នុង .bashrc របស់អ្នកសម្រាប់ការរក្សាទុក
echo 'export GITHUB_TOKEN="your_token_here"' >> ~/.bashrc
```
**ការគ្រប់គ្រងតំបន់**៖
- Codespaces ស្វ័យប្រវត្តិរកមើលពេលកម្មវិធីរបស់អ្នកចាប់ផ្តើមស្ដាប់លើតំបន់មួយ
- អ្នកអាចបញ្ជូនប៉ុស្តិ៍ជាច្រើនក្នុងពេលតែមួយ (មានប្រយោជន៍បើអ្នកបន្ថែមមូលដ្ឋានទិន្នន័យ)
- តំបន់នៅសមត្ថភាពចូលប្រើតទៅរហូតដល់ Codespace របស់អ្នកកំពុងដំណើរការ
**លំដាប់ការងារអភិវឌ្ឍ**៖
1. កែប្រែកូដក្នុង VS Code
2. FastAPI ផ្លាស់ប្តូរបានដោយស្វ័យប្រវត្តិ (ដោយសាររបៀបចាប់ផ្តើមឡើងវិញរបស់ Uvicorn)
3. សាកល្បងការផ្លាស់ប្តូរបានភ្លាមៗតាមរយៈ URL សាធារណៈ
4. កំណត់ commit និង push នៅពេលដែលរួចរាល់
> 💡 **ជំនួយដ៏ល្អ**៖ កំណត់ bookmark ទៅ URL backend Codespace របស់អ្នកនៅពេលអភិវឌ្ឍ។ ព្រោះឈ្មោះ Codespace នៅស្ថិតស្ថេរដូច្នេះ URL នឹងមិនផ្លាស់ប្ដូរទេ ដល់ពេលដែលអ្នកកំពុងប្រើ Codespace ដូចគ្នា។
## បង្កើតផ្ទាំងផ្នែកមុខសម្រាប់ការជជែក៖ កន្លែងមនុស្សជួប AI
ឥឡូវនេះយើងនឹងបង្កើតផ្នែកផ្ទាំងបង្ហាញ – ផ្នែកដែលកំណត់របៀបដែលមនុស្សជួបប្រទៈជាមួយជំនួយការប្រព្រឹត្តការណ៍ AI របស់អ្នក។ ដូចជាការរៀបចំរចនាសម្ព័ន្ធ iPhone ដំបូងគេ យើងផ្ដោតលើការធ្វើឱ្យបច្ចេកវិទ្យាស្មុគស្មាញក្លាយទៅជាអារម្មណ៍ងាយស្រួល និងធម្មជាតិក្នុងការប្រើប្រាស់។
### ការយល់ដឹងអំពីរចនាសម្ព័ន្ធផ្នែកមុខទំនើប
ផ្នែកជជែករបស់យើងនឹងជាកម្មវិធី "Single Page Application" ឬ SPA។ ជំនួសបច្ចេកទេសចាស់ដែលបើកទំព័រថ្មីរៀងរាល់ពេលចុច អ្នកប្រើអាចទទួលបានការអាប់ដេតរលូន និងភ្លាមភ្លើយៈ
**គេហទំព័រចាស់ៗ**៖ ដូចការអានសៀវភៅផ្សេងៗ– អ្នកបិទទំព័រស្រាប់ហើយបើកទំព័រថ្មី
**កម្មវិធីជជែករបស់យើង**៖ ដូចប្រើទូរស័ព្ទ– អ្វីៗរាបរលូន និងបែបទំនងល្អ
```mermaid
graph TD
A[អ្នកប្រើវាយសារ] --> B[JavaScript ចាប់យកការបញ្ចូល]
B --> C[ផ្ទៀងផ្ទាត់ និង ទ្រង់ទ្រាយទិន្នន័យ]
C --> D[ផ្ញើទៅ Backend API]
D --> E[បង្ហាញស្ថានភាពកំពុងផ្ទុក]
E --> F[ទទួលបានចម្លើយ AI]
F --> G[អាប់ដេតផ្ទៃប្រឹក្សាយផ្ទាល់]
G --> H[រួចរាល់សម្រាប់សារ القادمة]
```
```mermaid
classDiagram
class ChatApp {
+សាររបស់: HTMLElement
+សំណុំបែបបទ: HTMLElement
+បញ្ចូល: HTMLElement
+ប៊ូតុងបញ្ជូន: HTMLElement
+BASE_URL: string
+API_ENDPOINT: string
+constructor()
+initializeEventListeners()
+handleSubmit(event)
+callAPI(message)
+appendMessage(text, role)
+escapeHtml(text)
+scrollToBottom()
+setLoading(isLoading)
}
ChatApp --> DOM : គ្រប់គ្រង
ChatApp --> FastAPI : ផ្ញើការស្នើរសុំ
```
### បីស្នូលសំខាន់នៃការអភិវឌ្ឍផ្នែកមុខ
កម្មវិធីផ្នែកមុខទាំងអស់ – ចាប់តាំងពីគេហទំព័រងាយស្រួលទស្សនា ទៅដល់កម្មវិធីស្មុគស្មាញដូចជា Discord ឬ Slack – ត្រូវបានបង្កើតលើបច្ចេកវិទ្យាបីសំខាន់ៗ។ សូមគិតថាវាជាមូលដ្ឋាននៃអ្វីៗដែលអ្នកឃើញ និងអាចធ្វើប្រតិបត្តិការបានលើវា៖
**HTML (រចនាសម្ព័ន្ធ)**៖ នេះគឺជា יסודរបស់អ្នក
- កំណត់ថាធាតុអ្វីមាន (ប៊ូតុង, តំបន់អក្សរ, កុងតឺន័រ)
- ផ្ដល់ន័យដល់មាតិកា (នេះជាប្រធាន, នេះជារាបពិធី, ល។)
- បង្កើតរចនាសម្ព័ន្ធមូលដ្ឋានដែលអ្វីៗផ្សេងទៀតអាចសង់លើបន្ទាប់
**CSS (ការបង្ហាញ)**៖ នេះគឺជាអ្នករចនាផ្ទៃក្នុងរបស់អ្នក
- ធ្វើឱ្យអ្វីៗស្អាត (ពណ៌, ភាសាអក្សរ, រៀបចំផ្ទាំង)
- គ្រប់គ្រងទំហំអេក្រង់ផ្សេងៗ (ទូរស័ព្ទ ប្រូកថេប លើក)
- បង្កើតចលនា និងប្រតិកម្មខាងមើល
**JavaScript (អាកប្បកិរិយា)**៖ នេះគឺជាខួរក្បាលរបស់អ្នក
- ឆ្លើយតបទៅនឹងអ្វីដែលអ្នកប្រើធ្វើ (ចុច, វាយអក្សរ, រំកិល)
- ទំនាក់ទំនងទៅ backend របស់អ្នក និងធ្វើអាប់ដេតទំព័រ
- ធ្វើអោយអ្វីៗអាចប្រតិបត្តិបាន និងមានអន្តរកម្ម
**គិតថាវាដូចជារចនាសម្ព័ន្ធស្ថាបត្យកម្ម៖**
- **HTML**៖ គំនូសប្លង់ស្ថាបត្យកម្ម (កំណត់ទីតាំង និងទំនាក់ទំនង)
- **CSS**៖ រចនាសម្រស់ និងបរិយាកាស (រចនាបទភ្នែក និងបទពិសោធន៍អ្នកប្រើ)
- **JavaScript**៖ ប្រព័ន្ធយានយន្ត (មុខងារ និងអន្តរកម្ម)
### ហេតុអ្វីបានជារចនាសម្ព័ន្ធ JavaScript ទំនើបមានសារៈសំខាន់
កម្មវិធីជជែករបស់យើងនឹងប្រើលំនាំ JavaScript ទំនើបដែលអ្នកនឹងឃើញនៅក្នុងកម្មវិធីវិជ្ជាជីវៈ។ ការយល់ដឹងពីយុទ្ធសាស្រ្តទាំងនេះនឹងជួយអ្នកពេលអ្នកក្លាយជាអ្នកអភិវឌ្ឍ៖
**រចនាសម្ព័ន្ធផ្អែកលើថ្នាក់ (Class-Based Architecture)**៖ យើងនឹងរៀបចំកូដជាតំណាងថ្នាក់ ដែលដូចជាការបង្កើតគំនូសប្លង់សម្រាប់អចលនវត្ថុ
**Async/Await**៖ វិធីសាស្រ្តទំនើបសម្រាប់គ្រប់គ្រងប្រតិបត្តិការដែលចំណាយពេល (ដូចជាការហៅ API)
**កម្មវិធីបើកហេតុ (Event-Driven Programming)**៖ កម្មវិធីរបស់យើងឆ្លើយតបសកម្មភាពអ្នកប្រើ (ចុច, រាកាល់) មិនមែនរត់ក្នុងលំនាំរំកិល
**ការគ្រប់គ្រង DOM (DOM Manipulation)**៖ ធ្វើអាប់ដេតមាតិកាទំព័រតាមសកម្មភាពអ្នកប្រើ និងចម្លើយ API
### រៀបចំរចនាសម្ព័ន្ធគម្រោង
បង្កើតថត frontend ជាមួយរចនាសម្ព័ន្ធរៀបចំយ៉ាងម៉ត់ចត់៖
```text
frontend/
├── index.html # Main HTML structure
├── app.js # JavaScript functionality
└── styles.css # Visual styling
```
**ការយល់ដឹងអំពីរចនាសម្ព័ន្ធ៖**
- **ផ្ទះ**ការចាប់អារម្មណ៍រវាងរចនាសម្ព័ន្ធ (HTML), អាកប្បកិរិយា (JavaScript), និងការបង្ហាញ (CSS)
- **រក្សា**រចនាសម្ព័ន្ធឯកសារឆាប់យល់ និងងាយស្រួលប្តូរ
- **អនុវត្ត**សីលធម៌ល្អនៃការអភិវឌ្ឍគេហទំព័រ ដើម្បីងាយស្រួលគ្រប់គ្រង និងថែទាំ
### ការសាងសង់មូលដ្ឋាន HTML: រចនាសម្ព័ន្ធមានន័យសម្រាប់ភាពចូលដំណើរការ
ចាប់ផ្តើមជាមួយរចនាសម្ព័ន្ធ HTML។ ការអភិវឌ្ឍគេហទំព័រទំនើបលើកលែងនូវ "semantic HTML" – ប្រើធាតុ HTML ដែលពិពណ៌នាច្បាស់វត្ថុបំណង មិនមែនគ្រាន់តែរូបរាងទេ។ វាធ្វើអោយកម្មវិធីរបស់អ្នកអាចចូលដំណើរការដោយ screen readers, ម៉ាស៊ីនស្វែងរក និងឧបករណ៍ផ្សេងទៀត។
**ហេតុអ្វីបានជា semantic HTML មានសារៈសំខាន់**៖ ស្រមៃថា អ្នកពិពណ៌នាកម្មវិធីជជែករបស់អ្នកទៅភាគីម្នាក់តាមទូរស័ព្ទ។ អ្នកនិយាយថា "មានចំណុចខាងលើមួយដែលមានចំណងជើង, ផ្នែកចម្បងដែលមានការសន្ទនា, ហើយមានបែបទម្រង់នៅខាងក្រោមសម្រាប់វាយសារ"។ Semantic HTML ប្រើធាតុសមស្របដែលឆ្លុះបញ្ចាំងការពិពណ៌នាធម្មជាតិនេះ។
បង្កើត `index.html` ជាមួយមុខរបាំដែលរៀបចំយ៉ាងម៉ត់ចត់៖
```html
Ask me anything!