# এআই ব্যবহার করে একটি চ্যাট সহকারী তৈরি করুন
স্টার ট্রেকের কথা মনে আছে, যখন ক্রু সদস্যরা সহজভাবে জাহাজের কম্পিউটারের সাথে কথা বলত, জটিল প্রশ্ন করত এবং চিন্তাশীল উত্তর পেত? ১৯৬০-এর দশকে যা সম্পূর্ণ বিজ্ঞান কল্পকাহিনী মনে হত, এখন তা আপনি আপনার পরিচিত ওয়েব প্রযুক্তি ব্যবহার করে তৈরি করতে পারেন।
এই পাঠে, আমরা HTML, CSS, JavaScript এবং কিছু ব্যাকএন্ড ইন্টিগ্রেশন ব্যবহার করে একটি এআই চ্যাট সহকারী তৈরি করব। আপনি শিখবেন কীভাবে আপনার শেখা দক্ষতাগুলি শক্তিশালী এআই পরিষেবার সাথে সংযুক্ত হতে পারে যা প্রসঙ্গ বুঝতে পারে এবং অর্থপূর্ণ উত্তর তৈরি করতে পারে।
এআইকে একটি বিশাল লাইব্রেরির মতো ভাবুন যা শুধু তথ্য খুঁজে বের করে না, বরং তা সংক্ষেপে আপনার নির্দিষ্ট প্রশ্নের জন্য উপযুক্ত উত্তর তৈরি করে। হাজার হাজার পৃষ্ঠার মধ্যে অনুসন্ধান করার পরিবর্তে, আপনি সরাসরি, প্রসঙ্গগত উত্তর পান।
এই ইন্টিগ্রেশন পরিচিত ওয়েব প্রযুক্তির মাধ্যমে ঘটে। HTML চ্যাট ইন্টারফেস তৈরি করে, CSS ভিজ্যুয়াল ডিজাইন পরিচালনা করে, JavaScript ব্যবহারকারীর ইন্টারঅ্যাকশন পরিচালনা করে এবং একটি ব্যাকএন্ড API সবকিছুকে এআই পরিষেবার সাথে সংযুক্ত করে। এটি অনেকটা একটি অর্কেস্ট্রার বিভিন্ন অংশ একসাথে কাজ করে একটি সিম্ফনি তৈরি করার মতো।
আমরা মূলত প্রাকৃতিক মানব যোগাযোগ এবং মেশিন প্রসেসিংয়ের মধ্যে একটি সেতু তৈরি করছি। আপনি শিখবেন এআই পরিষেবা ইন্টিগ্রেশনের প্রযুক্তিগত বাস্তবায়ন এবং ডিজাইন প্যাটার্ন যা ইন্টারঅ্যাকশনকে স্বাভাবিক মনে করায়।
এই পাঠের শেষে, এআই ইন্টিগ্রেশন একটি রহস্যময় প্রক্রিয়া মনে হবে না, বরং এটি আরেকটি API-এর মতো মনে হবে যা আপনি কাজ করতে পারেন। আপনি সেই মৌলিক প্যাটার্নগুলি বুঝতে পারবেন যা ChatGPT এবং Claude-এর মতো অ্যাপ্লিকেশনকে চালিত করে, একই ওয়েব ডেভেলপমেন্ট নীতিগুলি ব্যবহার করে যা আপনি শিখছেন।
## ⚡ পরবর্তী ৫ মিনিটে আপনি যা করতে পারেন
**ব্যস্ত ডেভেলপারদের জন্য দ্রুত শুরু করার পথ**
```mermaid
flowchart LR
A[⚡ 5 minutes] --> B[Get GitHub token]
B --> C[Test AI playground]
C --> D[Copy Python code]
D --> E[See AI responses]
```
- **মিনিট ১**: [GitHub Models Playground](https://github.com/marketplace/models/azure-openai/gpt-4o-mini/playground) পরিদর্শন করুন এবং একটি ব্যক্তিগত অ্যাক্সেস টোকেন তৈরি করুন
- **মিনিট ২**: প্লেগ্রাউন্ড ইন্টারফেসে সরাসরি এআই ইন্টারঅ্যাকশন পরীক্ষা করুন
- **মিনিট ৩**: "Code" ট্যাবে ক্লিক করুন এবং Python স্নিপেটটি কপি করুন
- **মিনিট ৪**: আপনার টোকেন দিয়ে লোকালিতে কোড চালান: `GITHUB_TOKEN=your_token python test.py`
- **মিনিট ৫**: আপনার নিজের কোড থেকে প্রথম এআই উত্তর তৈরি হতে দেখুন
**দ্রুত পরীক্ষা কোড**:
```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)
```
**কেন এটি গুরুত্বপূর্ণ**: ৫ মিনিটে, আপনি প্রোগ্রাম্যাটিক এআই ইন্টারঅ্যাকশনের জাদু অনুভব করবেন। এটি প্রতিটি এআই অ্যাপ্লিকেশনের মৌলিক ভিত্তি যা আপনি ব্যবহার করেন।
আপনার সমাপ্ত প্রকল্পটি দেখতে এমন হবে:

## 🗺️ এআই অ্যাপ্লিকেশন ডেভেলপমেন্টের মাধ্যমে আপনার শেখার যাত্রা
```mermaid
journey
title From Web Development to AI Integration
section Understanding AI Foundations
Discover generative AI concepts: 4: You
Explore GitHub Models platform: 6: You
Master AI parameters and prompts: 8: You
section Backend Integration
Build Python API server: 5: You
Implement AI function calls: 7: You
Handle async operations: 8: You
section Frontend Development
Create modern chat interface: 6: You
Master real-time interactions: 8: You
Build responsive user experience: 9: You
section Professional Application
Deploy complete AI system: 7: You
Optimize performance patterns: 8: You
Create production-ready app: 9: You
```
**আপনার যাত্রার গন্তব্য**: এই পাঠের শেষে, আপনি একটি সম্পূর্ণ এআই-চালিত অ্যাপ্লিকেশন তৈরি করবেন যা ChatGPT, Claude এবং Google Bard-এর মতো আধুনিক এআই সহকারীদের চালিত প্রযুক্তি এবং প্যাটার্ন ব্যবহার করে।
## এআই বোঝা: রহস্য থেকে দক্ষতায়
কোডে ডুব দেওয়ার আগে, আসুন আমরা যা নিয়ে কাজ করছি তা বুঝি। যদি আপনি আগে API ব্যবহার করে থাকেন, তবে আপনি মৌলিক প্যাটার্নটি জানেন: একটি অনুরোধ পাঠান, একটি উত্তর পান।
এআই API-গুলি একই কাঠামো অনুসরণ করে, তবে একটি ডাটাবেস থেকে পূর্ব-সংরক্ষিত ডেটা পুনরুদ্ধার করার পরিবর্তে, তারা নতুন উত্তর তৈরি করে যা বিশাল পরিমাণ টেক্সট থেকে শেখা প্যাটার্নের উপর ভিত্তি করে। এটি অনেকটা একটি লাইব্রেরি ক্যাটালগ সিস্টেম এবং একটি জ্ঞানী লাইব্রেরিয়ান যিনি একাধিক উৎস থেকে তথ্য সংক্ষেপ করতে পারেন, তাদের মধ্যে পার্থক্যের মতো।
### "জেনারেটিভ এআই" আসলে কী?
রোসেটা স্টোন কিভাবে পণ্ডিতদের পরিচিত এবং অজানা ভাষার মধ্যে প্যাটার্ন খুঁজে পেতে সাহায্য করেছিল তা বিবেচনা করুন। এআই মডেলগুলি একইভাবে কাজ করে – তারা বিশাল পরিমাণ টেক্সটে প্যাটার্ন খুঁজে বের করে ভাষা কীভাবে কাজ করে তা বুঝতে এবং নতুন প্রশ্নের জন্য উপযুক্ত উত্তর তৈরি করতে।
**আমি এটি একটি সহজ তুলনা দিয়ে ব্যাখ্যা করি:**
- **প্রথাগত ডাটাবেস**: আপনার জন্ম সনদ চাওয়ার মতো – আপনি প্রতিবার একই নথি পান
- **সার্চ ইঞ্জিন**: লাইব্রেরিয়ানকে বি
**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.
"""
```
#### কেন এটি আপনার চ্যাট অ্যাসিস্ট্যান্টের জন্য গুরুত্বপূর্ণ
সিস্টেম প্রম্পট বোঝা আপনাকে বিশেষায়িত AI অ্যাসিস্ট্যান্ট তৈরি করার অসাধারণ ক্ষমতা দেয়:
- **কাস্টমার সার্ভিস বট**: সহায়ক, ধৈর্যশীল, নীতিমালা সম্পর্কে সচেতন
- **শিক্ষার টিউটর**: উৎসাহজনক, ধাপে ধাপে, বোঝার পরীক্ষা করে
- **সৃজনশীল সহযোগী**: কল্পনাপ্রবণ, ধারণাগুলির উপর ভিত্তি করে কাজ করে, "যদি এমন হয়?" প্রশ্ন করে
- **প্রযুক্তিগত বিশেষজ্ঞ**: সুনির্দিষ্ট, বিস্তারিত, নিরাপত্তা সচেতন
**মূল অন্তর্দৃষ্টি**: আপনি শুধু AI API কল করছেন না – আপনি একটি কাস্টম AI ব্যক্তিত্ব তৈরি করছেন যা আপনার নির্দিষ্ট ব্যবহারের ক্ষেত্রে সেবা দেয়। এটি আধুনিক AI অ্যাপ্লিকেশনগুলিকে সাধারণের পরিবর্তে ব্যক্তিগত এবং কার্যকরী মনে করায়।
### 🎯 শিক্ষামূলক চেক-ইন: AI ব্যক্তিত্ব প্রোগ্রামিং
**থামুন এবং চিন্তা করুন**: আপনি সিস্টেম প্রম্পটের মাধ্যমে AI ব্যক্তিত্ব প্রোগ্রাম করতে শিখেছেন। এটি আধুনিক AI অ্যাপ্লিকেশন ডেভেলপমেন্টের একটি মৌলিক দক্ষতা।
**দ্রুত স্ব-মূল্যায়ন**:
- আপনি কি ব্যাখ্যা করতে পারেন কীভাবে সিস্টেম প্রম্পট সাধারণ ব্যবহারকারীর বার্তার থেকে আলাদা?
- temperature এবং top_p প্যারামিটারগুলির মধ্যে পার্থক্য কী?
- আপনি কীভাবে একটি নির্দিষ্ট ব্যবহারের ক্ষেত্রে (যেমন কোডিং টিউটর) জন্য একটি সিস্টেম প্রম্পট তৈরি করবেন?
**বাস্তব জীবনের সংযোগ**: আপনি যে সিস্টেম প্রম্পট কৌশল শিখেছেন তা প্রতিটি প্রধান AI অ্যাপ্লিকেশনে ব্যবহৃত হয় - GitHub Copilot-এর কোডিং সহায়তা থেকে ChatGPT-এর কথোপকথন ইন্টারফেস পর্যন্ত। আপনি একই প্যাটার্ন আয়ত্ত করছেন যা বড় প্রযুক্তি কোম্পানির AI প্রোডাক্ট টিম ব্যবহার করে।
**চ্যালেঞ্জ প্রশ্ন**: আপনি কীভাবে বিভিন্ন ব্যবহারকারীর ধরন (শিক্ষানবিশ বনাম বিশেষজ্ঞ) এর জন্য বিভিন্ন AI ব্যক্তিত্ব ডিজাইন করবেন? প্রম্পট ইঞ্জিনিয়ারিংয়ের মাধ্যমে একই AI মডেল কীভাবে বিভিন্ন শ্রোতাদের সেবা দিতে পারে তা বিবেচনা করুন।
## FastAPI দিয়ে ওয়েব API তৈরি করা: আপনার উচ্চ-প্রদর্শন AI যোগাযোগ কেন্দ্র
এখন আসুন ব্যাকএন্ড তৈরি করি যা আপনার ফ্রন্টএন্ডকে AI পরিষেবাগুলির সাথে সংযুক্ত করে। আমরা FastAPI ব্যবহার করব, একটি আধুনিক পাইথন ফ্রেমওয়ার্ক যা AI অ্যাপ্লিকেশনের জন্য API তৈরি করতে দক্ষ।
FastAPI এই ধরনের প্রকল্পের জন্য বেশ কয়েকটি সুবিধা প্রদান করে: একাধিক অনুরোধ পরিচালনার জন্য বিল্ট-ইন অ্যাসিঙ্ক সাপোর্ট, স্বয়ংক্রিয় API ডকুমেন্টেশন জেনারেশন এবং চমৎকার পারফরম্যান্স। আপনার FastAPI সার্ভার একটি মধ্যস্থতাকারী হিসাবে কাজ করে যা ফ্রন্টএন্ড থেকে অনুরোধ গ্রহণ করে, AI পরিষেবাগুলির সাথে যোগাযোগ করে এবং ফরম্যাট করা উত্তর প্রদান করে।
### কেন AI অ্যাপ্লিকেশনের জন্য FastAPI?
আপনার মনে হতে পারে: "আমি কি সরাসরি আমার ফ্রন্টএন্ড জাভাস্ক্রিপ্ট থেকে AI কল করতে পারি না?" বা "Flask বা Django-এর পরিবর্তে কেন FastAPI?" চমৎকার প্রশ্ন!
**এখানে কেন FastAPI আমাদের জন্য উপযুক্ত:**
- **ডিফল্টভাবে অ্যাসিঙ্ক**: একাধিক AI অনুরোধ একসাথে পরিচালনা করতে পারে
- **স্বয়ংক্রিয় ডকস**: `/docs`-এ যান এবং বিনামূল্যে একটি সুন্দর, ইন্টারেক্টিভ API ডকুমেন্টেশন পৃষ্ঠা পান
- **বিল্ট-ইন যাচাইকরণ**: সমস্যাগুলি ঘটার আগে ত্রুটি শনাক্ত করে
- **অত্যন্ত দ্রুত**: সবচেয়ে দ্রুততম পাইথন ফ্রেমওয়ার্কগুলির মধ্যে একটি
- **আধুনিক পাইথন**: সর্বশেষ এবং সর্বশ্রেষ্ঠ পাইথন বৈশিষ্ট্য ব্যবহার করে
**এবং এখানে কেন আমাদের একটি ব্যাকএন্ড প্রয়োজন:**
**নিরাপত্তা**: আপনার AI API কী একটি পাসওয়ার্ডের মতো – যদি আপনি এটি ফ্রন্টএন্ড জাভাস্ক্রিপ্টে রাখেন, তাহলে যে কেউ আপনার ওয়েবসাইটের সোর্স কোড দেখতে পারে এবং এটি চুরি করতে পারে। ব্যাকএন্ড সংবেদনশীল শংসাপত্রগুলি সুরক্ষিত রাখে।
**রেট সীমাবদ্ধতা এবং নিয়ন্ত্রণ**: ব্যাকএন্ড আপনাকে ব্যবহারকারীরা কতবার অনুরোধ করতে পারে তা নিয়ন্ত্রণ করতে, ব্যবহারকারী প্রমাণীকরণ বাস্তবায়ন করতে এবং ব্যবহার ট্র্যাক করতে লগিং যোগ করতে দেয়।
**ডেটা প্রক্রিয়াকরণ**: আপনি কথোপকথন সংরক্ষণ করতে, অনুপযুক্ত বিষয়বস্তু ফিল্টার করতে বা একাধিক AI পরিষেবা একত্রিত করতে চাইতে পারেন। ব্যাকএন্ড হল যেখানে এই লজিক থাকে।
**আর্কিটেকচারটি ক্লায়েন্ট-সার্ভার মডেলের মতো:**
- **ফ্রন্টএন্ড**: ইন্টারঅ্যাকশনের জন্য ব্যবহারকারীর ইন্টারফেস স্তর
- **ব্যাকএন্ড API**: অনুরোধ প্রক্রিয়াকরণ এবং রাউটিং স্তর
- **AI পরিষেবা**: বাহ্যিক গণনা এবং উত্তর তৈরি
- **পরিবেশ ভেরিয়েবল**: নিরাপদ কনফিগারেশন এবং শংসাপত্র সংরক্ষণ
### অনুরোধ-উত্তর প্রবাহ বোঝা
আসুন ট্রেস করি যখন একজন ব্যবহারকারী একটি বার্তা পাঠায় তখন কী ঘটে:
```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
Adds system prompt
API->>AI: Sends formatted request
AI->>API: Returns AI response
Note over API: Processes response
Logs conversation
API->>Frontend: {"response": "Hello! How can I help?"}
Frontend->>User: Displays AI message
```
**প্রতিটি ধাপ বোঝা:**
1. **ব্যবহারকারীর ইন্টারঅ্যাকশন**: ব্যক্তি চ্যাট ইন্টারফেসে টাইপ করে
2. **ফ্রন্টএন্ড প্রক্রিয়াকরণ**: জাভাস্ক্রিপ্ট ইনপুট ক্যাপচার করে এবং JSON হিসাবে ফরম্যাট করে
3. **API যাচাইকরণ**: FastAPI স্বয়ংক্রিয়ভাবে Pydantic মডেল ব্যবহার করে অনুরোধ যাচাই করে
4. **AI ইন্টিগ্রেশন**: ব্যাকএন্ড প্রসঙ্গ (সিস্টেম প্রম্পট) যোগ করে এবং AI পরিষেবাকে কল করে
5. **উত্তর পরিচালনা**: API AI উত্তর গ্রহণ করে এবং প্রয়োজন হলে এটি সংশোধন করতে পারে
6. **ফ্রন্টএন্ড প্রদর্শন**: জাভাস্ক্রিপ্ট চ্যাট ইন্টারফেসে উত্তর দেখায়
### API আর্কিটেকচার বোঝা
```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?"}
```
```mermaid
flowchart TD
A[User Input] --> B[Frontend Validation]
B --> C[HTTP POST Request]
C --> D[FastAPI Router]
D --> E[Pydantic Validation]
E --> F[AI Function Call]
F --> G[GitHub Models API]
G --> H[Response Processing]
H --> I[JSON Response]
I --> J[Frontend Update]
subgraph "Security Layer"
K[CORS Middleware]
L[Environment Variables]
M[Error Handling]
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
# 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)
```
**FastAPI বাস্তবায়ন বোঝা:**
- **ইমপোর্ট করে** FastAPI আধুনিক ওয়েব ফ্রেমওয়ার্ক কার্যকারিতা এবং Pydantic ডেটা যাচাইকরণের জন্য
- **স্বয়ংক্রিয় API ডকুমেন্টেশন তৈরি করে** (সার্ভার চালানোর সময় `/docs`-এ উপলব্ধ)
- **CORS middleware সক্ষম করে** বিভিন্ন উৎস থেকে ফ্রন্টএন্ড অনুরোধ অনুমোদন করতে
- **Pydantic মডেল সংজ্ঞায়িত করে** স্বয়ংক্রিয় অনুরোধ/উত্তর যাচাইকরণ এবং ডকুমেন্টেশনের জন্য
- **অ্যাসিঙ্ক এন্ডপয়েন্ট ব্যবহার করে** একাধিক অনুরোধের সাথে আরও ভাল পারফরম্যান্সের জন্য
- **উপযুক্ত HTTP স্ট্যাটাস কোড এবং ত্রুটি পরিচালনা বাস্তবায়ন করে** HTTPException সহ
- **গঠনমূলক লগিং অন্তর্ভুক্ত করে** পর্যবেক্ষণ এবং ডিবাগিংয়ের জন্য
- **পরিষেবা স্থিতি পর্যবেক্ষণের জন্য স্বাস্থ্য পরীক্ষা এন্ডপয়েন্ট প্রদান করে**
**FastAPI-এর ঐতিহ্যবাহী ফ্রেমওয়ার্কগুলির উপর মূল সুবিধা:**
- **স্বয়ংক্রিয় যাচাইকরণ**: Pydantic মডেলগুলি প্রক্রিয়াকরণের আগে ডেটার অখণ্ডতা নিশ্চিত করে
- **ইন্টারেক্টিভ ডকস**: `/docs`-এ যান এবং স্বয়ংক্রিয়ভাবে তৈরি, পরীক্ষাযোগ্য API ডকুমেন্টেশন পান
- **টাইপ সেফটি**: পাইথন টাইপ হিন্টগুলি রানটাইম ত্রুটি প্রতিরোধ করে এবং কোডের গুণমান উন্নত করে
- **অ্যাসিঙ্ক সাপোর্ট**: একাধিক AI অনুরোধ একযোগে পরিচালনা করে ব্লকিং ছাড়াই
- **পারফরম্যান্স**: রিয়েল-টাইম অ্যাপ্লিকেশনের জন্য উল্লেখযোগ্যভাবে দ্রুত অনুরোধ প্রক্রিয়াকরণ
### CORS বোঝা: ওয়েবের নিরাপত্তা রক্ষী
CORS (Cross-Origin Resource Sharing) একটি বিল্ডিংয়ের নিরাপত্তা রক্ষীর মতো যে দর্শনার্থীদের প্রবেশের অনুমতি আছে কিনা তা পরীক্ষা করে। আসুন বুঝি কেন এটি গুরুত্বপূর্ণ এবং এটি আপনার অ্যাপ্লিকেশনকে কীভাবে প্রভাবিত করে।
#### CORS কী এবং এটি কেন বিদ্যমান?
**সমস্যা**: কল্পনা করুন যদি কোনো ওয়েবসাইট আপনার অনুমতি ছাড়াই আপনার ব্যাংকের ওয়েবসাইটে অনুরোধ করতে পারে। এটি একটি নিরাপত্তার দুঃস্বপ্ন হবে! ব্রাউজারগুলি ডিফল্টভাবে "Same-Origin Policy" এর মাধ্যমে এটি প্রতিরোধ করে।
**Same-Origin Policy**: ব্রাউজারগুলি শুধুমাত্র সেই ডোমেইন, পোর্ট এবং প্রোটোকল থেকে অনুরোধ করতে দেয় যেখান থেকে তারা লোড হয়েছে।
**বাস্তব জীবনের উপমা**: এটি একটি অ্যাপার্টমেন্ট বিল্ডিংয়ের নিরাপত্তার মতো – শুধুমাত্র বাসিন্দারা (একই উৎস) ডিফল্টভাবে বিল্ডিং অ্যাক্সেস করতে পারে। আপনি যদি একজন বন্ধুকে (ভিন্ন উৎস) আমন্ত্রণ জানাতে চান, তাহলে আপনাকে স্পষ্টভাবে নিরাপত্তাকে জানাতে হবে যে এটি ঠিক আছে।
#### আপনার ডেভেলপমেন্ট পরিবেশে CORS
ডেভেলপমেন্ট চলাকালীন, আপনার ফ্রন্টএন্ড এবং ব্যাকএন্ড বিভিন্ন পোর্টে চলে:
- ফ্রন্টএন্ড: `http://localhost:3000` (অথবা file:// যদি HTML সরাসরি খোলা হয়)
- ব্যাকএন্ড: `http://localhost:5000`
এগুলি "ভিন্ন উৎস" হিসাবে বিবেচিত হয় যদিও তারা একই কম্পিউটারে!
```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"
```
**CORS কনফিগারেশন বাস্তবে যা করে:**
- **বিশেষ HTTP হেডার যোগ করে** API প্রতিক্রিয়াগুলিতে যা ব্রাউজারকে বলে "এই ক্রস-অরিজিন অনুরোধ অনুমোদিত"
- **"প্রিফ্লাইট" অনুরোধ পরিচালনা করে** (ব্রাউজারগুলি কখনও কখনও প্রকৃত অনুরোধ পাঠানোর আগে অনুমতি পরীক্ষা করে)
- **বাধা দেয়** ব্রাউজার কনসোলে "CORS নীতির দ্বারা অবরুদ্ধ" ত্রুটি
#### CORS নিরাপত্তা: ডেভেলপমেন্ট বনাম প্রোডাকশন
```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"])
```
**কেন এটি গুরুত্বপূর্ণ**: ডেভেলপমেন্টে, `CORS(app)` আপনার সামনের দরজা আনলক করার মতো – সুবিধাজনক কিন্তু নিরাপদ নয়। প্রোডাকশনে, আপনি ঠিক কোন ওয়েবসাইটগুলি আপনার API-এর সাথে কথা বলতে পারে তা নির্দিষ্ট করতে চান।
#### সাধারণ CORS পরিস্থিতি এবং সমাধান
| পরিস্থিতি | সমস্যা | সমাধান |
|----------|---------|----------|
| **লোকাল ডেভেলপমেন্ট** | ফ্রন্টএন্ড ব্যাকএন্ডে পৌঁছাতে পারে না | FastAPI-তে CORSMiddleware যোগ করুন |
| **GitHub Pages + Heroku** | ডিপ্লয় করা ফ্রন্টএন্ড API-তে পৌঁছাতে পারে না | আপনার GitHub Pages URL CORS উৎসে যোগ করুন |
| **কাস্টম ডোমেইন** | প্রোডাকশনে CORS ত্রুটি | আপনার ডোমেইনের সাথে CORS উৎস আপডেট করুন |
| **মোবাইল অ্যাপ** | অ্যাপ ওয়েব API-তে পৌঁছাতে পারে না | আপনার অ্যাপের ডোমেইন যোগ করুন বা সাবধানে `*` ব্যবহার করুন |
**প্রো টিপ**: আপনি আপনার ব্রাউজারের ডেভেলপার টুলের নেটওয়ার্ক ট্যাবে CORS হেডারগুলি পরীক্ষা করতে পারেন। প্রতিক্রিয়ায় `Access-Control-Allow-Origin` এর মতো হেডারগুলি দেখুন।
### ত্রুটি পরিচালনা এবং যাচাইকরণ
লক্ষ্য করুন কীভাবে আমাদের API সঠিক ত্রুটি পরিচালনা অন্তর্ভুক্ত করে:
```python
# Validate that we received a message
if not message:
return jsonify({"error": "Message field is required"}), 400
```
**মূল যাচাইকরণ নীতিমালা:**
- **প্রয়োজনীয় ক্ষেত্রগুলির জন্য পরীক্ষা করে** অনুরোধ প্রক্রিয়াকরণের আগে
- **অর্থপূর্ণ ত্রুটি বার্তা প্রদান করে** JSON ফরম্যাটে
- **উপযুক্ত HTTP স্ট্যাটাস কোড ব্যবহার করে** (খারাপ অনুরোধের জন্য 400)
- **সুস্পষ্ট প্রতিক্রিয়া প্রদান করে** যা ফ্রন্টএন্ড ডেভেলপারদের সমস্যা সমাধানে সাহায্য করে
## আপনার ব্যাকএন্ড সেট আপ এবং চালানো
এখন যেহেতু আমাদের AI ইন্টিগ্রেশন এবং FastAPI সার্ভার প্রস্তুত, আসুন সবকিছু চালু করি। সেটআপ প্রক্রিয়ায় পাইথন ডিপেন্ডেন্সি ইনস্টল করা, পরিবেশ ভেরিয়েবল কনফিগার করা এবং আপনার ডেভেলপমেন্ট সার্ভার শুরু করা অন্তর্ভুক্ত।
### পাইথন পরিবেশ সেটআপ
আসুন আপনার পাইথন ডেভেলপমেন্ট পরিবেশ সেট আপ করি। ভার্চুয়াল পরিবেশগুলি ম্যানহাটন প্রজেক্টের compartmentalized পদ্ধতির মতো – প্রতিটি প্রকল্প তার নিজস্ব নির্দিষ্ট সরঞ্জাম এবং ডিপেন্ডেন্সি সহ একটি পৃথক স্থান পায়, বিভিন্ন প্রকল্পের মধ্যে দ্বন্দ্ব প্রতিরোধ করে।
```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
```
**আমরা যা করলাম:**
- **আমাদের নিজস্ব ছোট পাইথন বুদ্বুদ তৈরি করলাম** যেখানে আমরা প্যাকেজ ইনস্টল করতে পারি যা অন্য কিছু প্রভাবিত করবে না
- **এটি সক্রিয় করলাম** যাতে আমাদের টার্মিনাল জানে এই নির্দিষ্ট পরিবেশ ব্যবহার করতে
- **প্রয়োজনীয় জিনিসগুলি ইনস্টল করলাম**: OpenAI AI ম্যাজিকের জন্য, FastAPI আমাদের ওয়েব API-এর জন্য, Uvicorn এটি চালানোর জন্য এবং python-dotenv নিরাপদ গোপনীয়তা ব্যবস্থাপনার জন্য
**মূল ডিপেন্ডেন্সি ব্যাখ্যা:**
- **FastAPI**: আধুনিক, দ্রুত ওয়েব ফ্রেমওয়ার্ক যা স্বয়ংক্রিয় API ডকুমেন্টেশন সহ
- **Uvicorn**: FastAPI অ্যাপ্লিকেশন চালানোর জন্য দ্রুততম ASGI সার্ভার
- **OpenAI**: GitHub মডেল এবং OpenAI API ইন্টিগ্রেশনের জন্য অফিসিয়াল লাইব্রেরি
- **python-dotenv**: .env ফাইল থেকে নিরাপদ পরিবেশ ভেরিয়েবল লোডিং
### পরিবেশ কনফিগারেশন: গোপনীয়তা সুরক্ষিত রাখা
API শুরু করার আগে, আসুন ওয়েব ডেভেলপমেন্টের সবচেয়ে গুরুত্বপূর্ণ পাঠগুলির মধ্যে একটি নিয়ে আলোচনা করি: কীভাবে আপনার গোপনীয়তাগুলি সত্যিই গোপন রাখা যায়। পরিবেশ ভেরিয়েবলগুলি একটি নিরাপদ ভল্টের মতো যা শুধুমাত্র আপনার অ্যাপ্লিকেশন অ্যাক্সেস করতে পারে।
#### পরিবেশ ভেরিয়েবল কী?
**পরিবেশ ভেরিয়েবলগুলি একটি নিরাপদ ডিপোজিট বাক্সের মতো** – আপনি সেখানে আপনার মূল্যবান জিনিস রাখেন, এবং শুধুমাত্র আপনি (এবং আপনার অ্যাপ) এটি বের করার চাবি রাখেন। আপনার কোডে সরাসরি সংবেদনশীল তথ্য লেখার পরিবর্তে (যেখানে যে কেউ এটি দেখতে পারে), আপনি এটি নিরাপদে পরিবেশে সংরক্ষণ করেন।
**এখানে পার্থক্য:**
- **ভুল উপায়**: আপনার পাসওয়ার্ড একটি স্টিকি নোটে লিখে আপনার মনিটরে লাগানো
- **সঠিক উপায়**: আপনার পাসওয়ার্ড একটি নিরাপদ পাসওয়ার্ড ম্যানেজারে রাখা যা শুধুমাত্র আপনি অ্যাক্সেস করতে পারেন
#### পরিবেশ ভেরিয়েবল কেন গুরুত্বপূর্ণ
```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"
)
```
**যখন আপনি গোপনীয়তা হার্ডকোড করেন তখন কী ঘটে:**
1. **ভার্সন কন্ট্রোল এক্সপোজার**: আপনার Git রিপোজিটরিতে অ্যাক্সেস থাকা যে কেউ আপনার API কী দেখতে পারে
2. **পাবলিক রিপোজিটরি**: যদি আপনি GitHub-এ পুশ করেন, আপনার কী পুরো ইন্টারনেটের জন্য দৃশ্যমান
3. **টিম শেয়ারিং**: আপনার প্রকল্পে কাজ করা অন্যান্য ডেভেলপাররা
এখন আসে উত্তেজনাপূর্ণ মুহূর্ত – আপনার FastAPI ডেভেলপমেন্ট সার্ভার চালু করা এবং আপনার AI ইন্টিগ্রেশনকে জীবন্ত দেখতে পাওয়া! FastAPI ব্যবহার করে Uvicorn, একটি অত্যন্ত দ্রুত ASGI সার্ভার যা বিশেষভাবে অ্যাসিঙ্ক্রোনাস Python অ্যাপ্লিকেশনের জন্য ডিজাইন করা হয়েছে।
#### FastAPI সার্ভার স্টার্টআপ প্রক্রিয়া বোঝা
```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
```
যখন আপনি এই কমান্ড চালান, তখন পেছনে যা ঘটে তা হলো:
**1. Python আপনার FastAPI অ্যাপ্লিকেশন লোড করে**:
- প্রয়োজনীয় সব লাইব্রেরি (FastAPI, Pydantic, OpenAI, ইত্যাদি) ইমপোর্ট করে
- `.env` ফাইল থেকে পরিবেশ ভেরিয়েবল লোড করে
- FastAPI অ্যাপ্লিকেশন ইনস্ট্যান্স তৈরি করে স্বয়ংক্রিয় ডকুমেন্টেশনের সাথে
**2. Uvicorn ASGI সার্ভার কনফিগার করে**:
- অ্যাসিঙ্ক্রোনাস রিকোয়েস্ট হ্যান্ডলিং ক্ষমতা সহ পোর্ট ৫০০০-এ সংযুক্ত হয়
- স্বয়ংক্রিয় ভ্যালিডেশন সহ রিকোয়েস্ট রাউটিং সেটআপ করে
- ডেভেলপমেন্টের জন্য হট রিলোড সক্ষম করে (ফাইল পরিবর্তনে পুনরায় চালু হয়)
- ইন্টারঅ্যাকটিভ 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 পরীক্ষা করার জন্য বেশ কিছু সুবিধাজনক উপায় প্রদান করে, যার মধ্যে স্বয়ংক্রিয় ইন্টারঅ্যাকটিভ ডকুমেন্টেশন অন্তর্ভুক্ত:
**পদ্ধতি ১: ইন্টারঅ্যাকটিভ API ডকুমেন্টেশন (প্রস্তাবিত)**
1. আপনার ব্রাউজার খুলুন এবং যান `http://localhost:5000/docs`
2. আপনি Swagger UI দেখতে পাবেন যেখানে আপনার সব এন্ডপয়েন্ট ডকুমেন্টেড থাকবে
3. `/hello` এ ক্লিক করুন → "Try it out" → একটি টেস্ট মেসেজ লিখুন → "Execute"
4. ব্রাউজারে সঠিক ফরম্যাটে রেসপন্স সরাসরি দেখুন
**পদ্ধতি ২: বেসিক ব্রাউজার টেস্ট**
1. রুট এন্ডপয়েন্টের জন্য যান `http://localhost:5000`
2. সার্ভার হেলথ চেক করার জন্য যান `http://localhost:5000/health`
3. এটি নিশ্চিত করে যে আপনার FastAPI সার্ভার সঠিকভাবে চলছে
**পদ্ধতি ৩: কমান্ড লাইন টেস্ট (উন্নত)**
```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?"}
```
**পদ্ধতি ৪: Python টেস্ট স্ক্রিপ্ট**
```python
# test_api.py - Create this file to test your API
import requests
import json
# Test the API endpoint
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` | পোর্ট ৫০০০ ব্যস্ত | পোর্ট ৫০০০ ব্যবহার করা অন্য প্রসেস বন্ধ করুন অথবা পোর্ট পরিবর্তন করুন |
| `ValidationError` | রিকোয়েস্ট ডেটা Pydantic মডেলের সাথে মেলে না | আপনার রিকোয়েস্ট ফরম্যাট চেক করুন যা প্রত্যাশিত স্কিমার সাথে মেলে |
| `HTTPException 422` | অপ্রক্রিয়াযোগ্য সত্তা | রিকোয়েস্ট ভ্যালিডেশন ব্যর্থ হয়েছে, `/docs` এ সঠিক ফরম্যাট চেক করুন |
| `OpenAI API error` | AI সার্ভিস অথেনটিকেশন ব্যর্থ | আপনার GitHub টোকেন সঠিক কিনা এবং যথাযথ অনুমতি আছে কিনা যাচাই করুন |
#### ডেভেলপমেন্টের সেরা অভ্যাস
**হট রিলোডিং**: FastAPI Uvicorn-এর সাথে স্বয়ংক্রিয় রিলোডিং প্রদান করে যখন আপনি আপনার Python ফাইলগুলিতে পরিবর্তন সংরক্ষণ করেন। এর মানে আপনি আপনার কোড পরিবর্তন করতে পারেন এবং ম্যানুয়ালি রিস্টার্ট না করেই তাৎক্ষণিকভাবে পরীক্ষা করতে পারেন।
```python
# Enable hot reloading explicitly
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, debug=True) # debug=True enables hot reload
```
**ডেভেলপমেন্টের জন্য লগিং**: লগিং যোগ করুন যা ঘটছে তা বুঝতে:
```python
import logging
# Set up 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-এ কাজ করেন, তাহলে আপনার ব্যাকএন্ডকে আপনার ফ্রন্টএন্ডের সাথে সংযুক্ত করতে কিছু অতিরিক্ত ধাপ প্রয়োজন।
#### Codespaces নেটওয়ার্কিং বোঝা
একটি লোকাল ডেভেলপমেন্ট এনভায়রনমেন্টে, সবকিছু একই কম্পিউটারে চলে:
- ব্যাকএন্ড: `http://localhost:5000`
- ফ্রন্টএন্ড: `http://localhost:3000` (অথবা file://)
Codespaces-এ, আপনার ডেভেলপমেন্ট এনভায়রনমেন্ট GitHub-এর সার্ভারে চলে, তাই "localhost"-এর অর্থ ভিন্ন। GitHub স্বয়ংক্রিয়ভাবে আপনার সার্ভিসের জন্য পাবলিক URL তৈরি করে, কিন্তু আপনাকে সেগুলো সঠিকভাবে কনফিগার করতে হবে।
#### Codespaces কনফিগারেশন ধাপে ধাপে
**1. আপনার ব্যাকএন্ড সার্ভার চালু করুন**:
```bash
cd backend
python api.py
```
আপনি পরিচিত FastAPI/Uvicorn স্টার্টআপ বার্তা দেখতে পাবেন, কিন্তু লক্ষ্য করুন এটি Codespace এনভায়রনমেন্টের ভিতরে চলছে।
**2. পোর্ট দৃশ্যমানতা কনফিগার করুন**:
- VS Code-এর নিচের প্যানেলে "Ports" ট্যাব খুঁজুন
- তালিকায় পোর্ট ৫০০০ খুঁজুন
- পোর্ট ৫০০০-এ রাইট-ক্লিক করুন
- "Port Visibility" → "Public" নির্বাচন করুন
**কেন এটি পাবলিক করবেন?** ডিফল্টভাবে, Codespace পোর্টগুলো প্রাইভেট থাকে (শুধুমাত্র আপনার জন্য অ্যাক্সেসযোগ্য)। পাবলিক করলে আপনার ফ্রন্টএন্ড (যা ব্রাউজারে চলে) আপনার ব্যাকএন্ডের সাথে যোগাযোগ করতে পারে।
**3. আপনার পাবলিক URL পান**:
পোর্ট পাবলিক করার পরে, আপনি একটি URL দেখতে পাবেন:
```
https://your-codespace-name-5000.app.github.dev
```
**4. আপনার ফ্রন্টএন্ড কনফিগারেশন আপডেট করুন**:
```javascript
// In your frontend app.js, update the BASE_URL:
this.BASE_URL = "https://your-codespace-name-5000.app.github.dev";
```
#### Codespace URL বোঝা
Codespace URL একটি পূর্বানুমানযোগ্য প্যাটার্ন অনুসরণ করে:
```
https://[codespace-name]-[port].app.github.dev
```
**এটি ভেঙে দেখা**:
- `codespace-name`: আপনার Codespace-এর জন্য একটি ইউনিক আইডেন্টিফায়ার (সাধারণত আপনার ইউজারনেম অন্তর্ভুক্ত করে)
- `port`: পোর্ট নম্বর যেখানে আপনার সার্ভিস চলছে (আমাদের FastAPI অ্যাপের জন্য ৫০০০)
- `app.github.dev`: Codespace অ্যাপ্লিকেশনের জন্য GitHub-এর ডোমেইন
#### আপনার Codespace সেটআপ পরীক্ষা করা
**1. সরাসরি ব্যাকএন্ড পরীক্ষা করুন**:
আপনার পাবলিক URL একটি নতুন ব্রাউজার ট্যাবে খুলুন। আপনি দেখতে পাবেন:
```
Welcome to the AI Chat API. Send POST requests to /hello with JSON payload containing 'message' field.
```
**2. ব্রাউজার ডেভেলপার টুল দিয়ে পরীক্ষা করুন**:
```javascript
// Open browser console and test your 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 লিঙ্ক শেয়ার করা সহজ |
| **ইন্টারনেট নির্ভরতা** | শুধুমাত্র AI API কলের জন্য | সবকিছুর জন্য প্রয়োজন |
#### Codespace ডেভেলপমেন্ট টিপস
**Codespaces-এ পরিবেশ ভেরিয়েবল**:
আপনার `.env` ফাইল Codespaces-এ একইভাবে কাজ করে, তবে আপনি সরাসরি Codespace-এ পরিবেশ ভেরিয়েবল সেট করতে পারেন:
```bash
# Set environment variable for the current session
export GITHUB_TOKEN="your_token_here"
# Or add to your .bashrc for persistence
echo 'export GITHUB_TOKEN="your_token_here"' >> ~/.bashrc
```
**পোর্ট ম্যানেজমেন্ট**:
- Codespaces স্বয়ংক্রিয়ভাবে সনাক্ত করে যখন আপনার অ্যাপ্লিকেশন একটি পোর্টে শোনা শুরু করে
- আপনি একাধিক পোর্ট একসাথে ফরওয়ার্ড করতে পারেন (যদি আপনি পরে একটি ডাটাবেস যোগ করেন)
- পোর্টগুলো যতক্ষণ আপনার Codespace চলছে ততক্ষণ অ্যাক্সেসযোগ্য থাকে
**ডেভেলপমেন্ট ওয়ার্কফ্লো**:
1. VS Code-এ কোড পরিবর্তন করুন
2. FastAPI অটো-রিলোড করে (Uvicorn-এর রিলোড মোডের জন্য ধন্যবাদ)
3. পাবলিক URL-এর মাধ্যমে পরিবর্তনগুলো তাৎক্ষণিকভাবে পরীক্ষা করুন
4. প্রস্তুত হলে কমিট এবং পুশ করুন
> 💡 **প্রো টিপ**: ডেভেলপমেন্টের সময় আপনার Codespace ব্যাকএন্ড URL বুকমার্ক করুন। যেহেতু Codespace নামগুলো স্থিতিশীল, URL পরিবর্তন হবে না যতক্ষণ আপনি একই Codespace ব্যবহার করছেন।
## ফ্রন্টএন্ড চ্যাট ইন্টারফেস তৈরি করা: যেখানে মানুষ AI-এর সাথে মিলিত হয়
এখন আমরা ইউজার ইন্টারফেস তৈরি করব – সেই অংশ যা নির্ধারণ করে মানুষ কীভাবে আপনার AI অ্যাসিস্ট্যান্টের সাথে যোগাযোগ করবে। মূল iPhone-এর ইন্টারফেস ডিজাইনের মতো, আমরা জটিল প্রযুক্তিকে সহজ এবং ব্যবহারযোগ্য করার দিকে মনোযোগ দিচ্ছি।
### আধুনিক ফ্রন্টএন্ড আর্কিটেকচার বোঝা
আমাদের চ্যাট ইন্টারফেস হবে একটি "Single Page Application" বা SPA। পুরনো পদ্ধতির পরিবর্তে যেখানে প্রতিটি ক্লিকে একটি নতুন পৃষ্ঠা লোড হয়, আমাদের অ্যাপ মসৃণ এবং তাৎক্ষণিকভাবে আপডেট হবে:
**পুরনো ওয়েবসাইট**: একটি বই পড়ার মতো – আপনি সম্পূর্ণ নতুন পৃষ্ঠায় যান
**আমাদের চ্যাট অ্যাপ**: আপনার ফোন ব্যবহার করার মতো – সবকিছু প্রবাহিত হয় এবং মসৃণভাবে আপডেট হয়
```mermaid
graph TD
A[User Types Message] --> B[JavaScript Captures Input]
B --> C[Validate & Format Data]
C --> D[Send to Backend API]
D --> E[Display Loading State]
E --> F[Receive AI Response]
F --> G[Update Chat Interface]
G --> H[Ready for Next Message]
```
```mermaid
classDiagram
class ChatApp {
+messages: HTMLElement
+form: HTMLElement
+input: HTMLElement
+sendButton: HTMLElement
+BASE_URL: string
+API_ENDPOINT: string
+constructor()
+initializeEventListeners()
+handleSubmit(event)
+callAPI(message)
+appendMessage(text, role)
+escapeHtml(text)
+scrollToBottom()
+setLoading(isLoading)
}
ChatApp --> DOM : manipulates
ChatApp --> FastAPI : sends requests
```
### ফ্রন্টএন্ড ডেভেলপমেন্টের তিনটি স্তম্ভ
প্রত্যেকটি ফ্রন্টএন্ড অ্যাপ্লিকেশন – সাধারণ ওয়েবসাইট থেকে Discord বা Slack-এর মতো জটিল অ্যাপ পর্যন্ত – তিনটি মূল প্রযুক্তির উপর ভিত্তি করে তৈরি। এগুলো হলো আপনি ওয়েবে যা দেখেন এবং যা নিয়ে ইন্টারঅ্যাক্ট করেন তার ভিত্তি:
**HTML (স্ট্রাকচার)**: এটি আপনার ভিত্তি
- নির্ধারণ করে কোন উপাদানগুলো থাকবে (বাটন, টেক্সট এরিয়া, কন্টেইনার)
- কন্টেন্টের অর্থ দেয় (এটি একটি হেডার, এটি একটি ফর্ম, ইত্যাদি)
- মৌলিক স্ট্রাকচার তৈরি করে যার উপর সবকিছু তৈরি হয়
**CSS (প্রেজেন্টেশন)**: এটি আপনার ইন্টেরিয়র ডিজাইনার
- সবকিছু সুন্দর করে তোলে (রঙ, ফন্ট, লেআউট)
- বিভিন্ন স্ক্রিন সাইজ হ্যান্ডেল করে (ফোন বনাম ল্যাপটপ বনাম ট্যাবলেট)
- মসৃণ অ্যানিমেশন এবং ভিজ্যুয়াল ফিডব্যাক তৈরি করে
**JavaScript (বিহেভিয়ার)**: এটি আপনার মস্তিষ্ক
- ইউজারের কাজের প্রতিক্রিয়া জানায় (ক্লিক, টাইপিং, স্ক্রলিং)
- ব্যাকএন্ডের সাথে কথা বলে এবং পৃষ্ঠা আপডেট করে
- সবকিছু ইন্টারঅ্যাকটিভ এবং ডায়নামিক করে তোলে
**এটি স্থাপত্য ডিজাইনের মতো চিন্তা করুন**:
- **HTML**: কাঠামোগত ব্লুপ্রিন্ট (স্পেস এবং সম্পর্ক নির্ধারণ করে)
- **CSS**: নান্দনিক এবং পরিবেশগত ডিজাইন (ভিজ্যুয়াল স্টাইল এবং ইউজার অভিজ্ঞতা)
- **JavaScript**: যান্ত্রিক সিস্টেম (কার্যকারিতা এবং ইন্টারঅ্যাকটিভিটি)
### কেন আধুনিক JavaScript আর্কিটেকচার গুরুত্বপূর্ণ
আমাদের চ্যাট অ্যাপ্লিকেশন আধুনিক JavaScript প্যাটার্ন ব্যবহার করবে যা আপনি পেশাদার অ্যাপ্লিকেশনে দেখতে পাবেন। এই ধারণাগুলো বোঝা আপনাকে একজন ডেভেলপার হিসেবে বেড়ে উঠতে সাহায্য করবে:
**ক্লাস-ভিত্তিক আর্কিটেকচার**: আমরা আমাদের কোড ক্লাসে সংগঠিত করব, যা অবজেক্টের জন্য ব্লুপ্রিন্ট তৈরি করার মতো
**Async/Await**: সময়সাপেক্ষ অপারেশন (যেমন API কল) হ্যান্ডেল করার আধুনিক উপায়
**ইভেন্ট-চালিত প্রোগ্রামিং**: আমাদের অ্যাপ ইউজারের কাজের প্রতিক্রিয়া জানায় (ক্লিক, কী প্রেস) লুপে না চলার পরিবর্তে
**DOM ম্যানিপুলেশন**: ইউজারের ইন্টারঅ্যাকশন এবং API রেসপন্সের উপর ভিত্তি করে ওয়েবপেজ কন্টেন্ট ডায়নামিকভাবে আপডেট করা
### প্রজেক্ট স্ট্রাকচার সেটআপ
একটি ফ্রন্টএন্ড ডিরেক্টরি তৈরি করুন এই সংগঠিত স্ট্রাকচারের সাথে:
```text
frontend/
├── index.html # Main HTML structure
├── app.js # JavaScript functionality
└── styles.css # Visual styling
```
**আর্কিটেকচার বোঝা**:
- **আলাদা করে** স্ট্রাকচার (HTML), বিহেভিয়ার (JavaScript), এবং প্রেজেন্টেশন (CSS)
- **সহজ রাখে** একটি ফাইল স্ট্রাকচার যা নেভিগেট এবং পরিবর্তন করা সহজ
- **অনুসরণ করে** ওয়েব ডেভেলপমেন্টের সেরা অভ্যাস সংগঠন এবং রক্ষণাবেক্ষণের জন্য
### HTML ভিত্তি তৈরি করা: অ্যাক্সেসিবিলিটির জন্য সেমান্টিক স্ট্রাকচার
চলুন HTML স্ট্রাকচার দিয়ে শুরু করি। আধুনিক ওয়েব ডেভেলপমেন্ট "সেমান্টিক HTML"-এর উপর জোর দেয় – HTML এলিমেন্ট ব্যবহার করা যা তাদের উদ্দেশ্য স্পষ্টভাবে বর্ণনা করে, শুধুমাত্র তাদের চেহারা নয়। এটি আপনার অ্যাপ্লিকেশনকে স্ক্রিন রিডার, সার্চ ইঞ্জিন এবং অন্যান্য টুলের জন্য অ্যাক্সেসযোগ্য করে তোলে।
**কেন সেমান্টিক HTML গুরুত্বপূর্ণ**: কল্পনা করুন আপনি ফোনে আপনার চ্যাট অ্যাপ কারো কাছে বর্ণনা করছেন। আপনি বলবেন "একটি হেডার আছে শিরোনাম সহ, একটি প্রধান এলাকা যেখানে কথোপকথন দেখা যায়, এবং নিচে একটি ফর্ম যেখানে মেসেজ টাইপ করা যায়।" সেমান্টিক HTML এমন এলিমেন্ট ব্যবহার করে যা এই প্রাকৃতিক বর্ণনার সাথে মেলে।
`index.html` তৈরি করুন এই চিন্তাশীলভাবে গঠিত মার্কআপ দিয়ে:
```html
Ask me anything!