ในปี 2026 AI และ Large Language Models (LLMs) ไม่ใช่แค่เทรนด์อีกต่อไป แต่กลายเป็นเครื่องมือพื้นฐานที่ Developer ทุกคนต้องรู้จักและใช้เป็น ตั้งแต่การสร้าง Chatbot อัจฉริยะ ระบบค้นหาเชิงความหมาย ไปจนถึง AI-powered Application ที่สร้างรายได้จริง
บทความนี้จะสอนคุณทุกอย่างที่ Developer ต้องรู้เกี่ยวกับการนำ AI/LLM มาใช้ในงานจริง ตั้งแต่ OpenAI API, Claude API, LangChain, RAG Architecture ไปจนถึง Vector Database และการสร้าง Production AI Application
AI/LLM Landscape สำหรับ Developer ปี 2026
ก่อนจะเริ่มเขียน Code มาทำความเข้าใจ Landscape ของ AI/LLM ที่ Developer ต้องรู้
ประเภทของ LLM
| ประเภท | ตัวอย่าง | ข้อดี | ข้อเสีย |
|---|---|---|---|
| Cloud API | OpenAI GPT-4o, Claude, Gemini | แรงสุด ไม่ต้อง Infra | มีค่าใช้จ่าย ข้อมูลออกนอก |
| Open Source (Cloud) | Llama 3, Mistral, Qwen | Free ควบคุมได้ | ต้องมี GPU Server |
| Local LLM | Ollama, llama.cpp | Privacy 100% ฟรี | ช้ากว่า ต้องมี RAM/VRAM |
| Fine-tuned | Custom trained models | เฉพาะทาง แม่นยำ | ต้องมีข้อมูล/เวลา Train |
เลือก Model อย่างไร
- งาน Complex (Reasoning, Code Generation): GPT-4o, Claude Opus, Gemini Ultra
- งานทั่วไป (Chat, Summary, Translation): GPT-4o-mini, Claude Sonnet, Gemini Flash
- Privacy-sensitive: Local LLMs ผ่าน Ollama
- High Volume / Low Cost: GPT-4o-mini, Open Source Models
- Domain-specific: Fine-tuned Models
OpenAI API — พื้นฐานที่ต้องรู้
ติดตั้งและเริ่มต้น
# ติดตั้ง
pip install openai
# หรือ Node.js
npm install openai
Chat Completions — API หลัก
# Python
from openai import OpenAI
client = OpenAI(api_key="sk-...") # หรือตั้ง OPENAI_API_KEY env
# Basic Chat Completion
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "คุณเป็นผู้เชี่ยวชาญด้านการเขียนโปรแกรม Python"},
{"role": "user", "content": "อธิบาย List Comprehension ใน Python"}
],
temperature=0.7, # ความสร้างสรรค์ (0=แม่นยำ, 1=สร้างสรรค์)
max_tokens=1000,
)
print(response.choices[0].message.content)
print(f"Tokens used: {response.usage.total_tokens}")
Streaming — แสดงผลแบบ Real-time
# Streaming Response (สำหรับ UI ที่แสดงทีละตัวอักษร)
stream = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "user", "content": "เขียนบทความเรื่อง Python สั้นๆ"}
],
stream=True,
)
for chunk in stream:
content = chunk.choices[0].delta.content
if content:
print(content, end="", flush=True)
Function Calling — ให้ AI เรียกฟังก์ชัน
import json
# กำหนด Tools/Functions ที่ AI สามารถเรียกได้
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "ดึงข้อมูลสภาพอากาศของเมืองที่ระบุ",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "ชื่อเมือง เช่น Bangkok, Chiang Mai"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "หน่วยอุณหภูมิ"
}
},
"required": ["city"]
}
}
}
]
# AI จะตัดสินใจว่าต้องเรียก Function ไหน
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "อากาศกรุงเทพวันนี้เป็นยังไง?"}],
tools=tools,
tool_choice="auto",
)
# ตรวจว่า AI ต้องการเรียก Function
if response.choices[0].message.tool_calls:
tool_call = response.choices[0].message.tool_calls[0]
args = json.loads(tool_call.function.arguments)
print(f"AI ต้องการเรียก: {tool_call.function.name}")
print(f"Arguments: {args}")
# เรียก Function จริง
weather_data = get_weather(args["city"]) # ฟังก์ชันของเรา
# ส่งผลลัพธ์กลับให้ AI
messages = [
{"role": "user", "content": "อากาศกรุงเทพวันนี้เป็นยังไง?"},
response.choices[0].message,
{
"role": "tool",
"tool_call_id": tool_call.id,
"content": json.dumps(weather_data)
}
]
final = client.chat.completions.create(model="gpt-4o", messages=messages)
print(final.choices[0].message.content)
Structured Outputs — ได้ JSON ที่ต้องการ
from pydantic import BaseModel
class ProductReview(BaseModel):
sentiment: str # positive, negative, neutral
score: float # 0.0 - 1.0
summary: str
keywords: list[str]
response = client.beta.chat.completions.parse(
model="gpt-4o",
messages=[
{"role": "system", "content": "วิเคราะห์รีวิวสินค้าแล้วตอบเป็น JSON"},
{"role": "user", "content": "สินค้าดีมาก คุณภาพเยี่ยม ส่งไว แพ็คอย่างดี"}
],
response_format=ProductReview,
)
review = response.choices[0].message.parsed
print(f"Sentiment: {review.sentiment}")
print(f"Score: {review.score}")
print(f"Keywords: {review.keywords}")
Anthropic Claude API
# pip install anthropic
from anthropic import Anthropic
client = Anthropic(api_key="sk-ant-...")
# Basic Message
message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
system="คุณเป็นผู้เชี่ยวชาญด้านการเขียนโปรแกรม",
messages=[
{"role": "user", "content": "อธิบาย async/await ใน Python"}
]
)
print(message.content[0].text)
# Streaming
with client.messages.stream(
model="claude-sonnet-4-20250514",
max_tokens=1024,
messages=[{"role": "user", "content": "เขียน Python decorator ตัวอย่าง"}]
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
# Tool Use (Function Calling)
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
tools=[{
"name": "calculate",
"description": "คำนวณสมการทางคณิตศาสตร์",
"input_schema": {
"type": "object",
"properties": {
"expression": {"type": "string", "description": "สมการ เช่น 2+2"}
},
"required": ["expression"]
}
}],
messages=[{"role": "user", "content": "คำนวณ 15% ของ 2500 บาท"}]
)
Local LLMs — Ollama และ llama.cpp
สำหรับงานที่ต้องการ Privacy หรือไม่อยากเสียค่า API สามารถรัน LLM บนเครื่องตัวเองได้
# ติดตั้ง Ollama (https://ollama.ai)
# macOS/Linux
curl -fsSL https://ollama.ai/install.sh | sh
# ดาวน์โหลดและรัน Model
ollama pull llama3.1:8b # Meta Llama 3.1 8B
ollama pull mistral # Mistral 7B
ollama pull codellama # สำหรับ Code
# รัน Chat
ollama run llama3.1:8b
# ใช้ผ่าน API (OpenAI-compatible)
curl http://localhost:11434/v1/chat/completions \
-d '{
"model": "llama3.1:8b",
"messages": [{"role": "user", "content": "Hello"}]
}'
# ใช้ Ollama กับ OpenAI Python SDK (Compatible!)
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama", # ไม่จำเป็นแต่ต้องใส่
)
response = client.chat.completions.create(
model="llama3.1:8b",
messages=[{"role": "user", "content": "สอน Python OOP"}]
)
print(response.choices[0].message.content)
LangChain — Framework สำหรับ AI Application
LangChain เป็น Framework ที่ช่วยให้สร้าง AI Application ได้ง่ายขึ้น โดยจัดการ Prompt, Chain, Memory, Agent และ Tool Integration ให้
ติดตั้ง
pip install langchain langchain-openai langchain-community
pip install langchain-anthropic # สำหรับ Claude
Basic Chain
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
# สร้าง LLM instance
llm = ChatOpenAI(model="gpt-4o", temperature=0.7)
# สร้าง Prompt Template
prompt = ChatPromptTemplate.from_messages([
("system", "คุณเป็นผู้เชี่ยวชาญด้าน {topic}"),
("user", "{question}")
])
# สร้าง Chain (LCEL - LangChain Expression Language)
chain = prompt | llm | StrOutputParser()
# เรียกใช้
result = chain.invoke({
"topic": "Python",
"question": "อธิบาย Generator ใน Python"
})
print(result)
Memory — จำบทสนทนา
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.chat_history import InMemoryChatMessageHistory
from langchain_core.runnables.history import RunnableWithMessageHistory
llm = ChatOpenAI(model="gpt-4o")
prompt = ChatPromptTemplate.from_messages([
("system", "คุณเป็น AI Assistant ที่ช่วยตอบคำถาม"),
MessagesPlaceholder(variable_name="history"),
("user", "{input}")
])
chain = prompt | llm
# Store สำหรับเก็บประวัติ
store = {}
def get_session_history(session_id: str):
if session_id not in store:
store[session_id] = InMemoryChatMessageHistory()
return store[session_id]
chain_with_history = RunnableWithMessageHistory(
chain,
get_session_history,
input_messages_key="input",
history_messages_key="history",
)
# สนทนา — AI จะจำบริบทได้
config = {"configurable": {"session_id": "user123"}}
r1 = chain_with_history.invoke({"input": "ผมชื่อสมชาย"}, config=config)
r2 = chain_with_history.invoke({"input": "ผมชื่ออะไร?"}, config=config)
print(r2.content) # "คุณชื่อสมชาย"
Agents — AI ที่ตัดสินใจและใช้ Tools
from langchain_openai import ChatOpenAI
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_core.tools import tool
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
# สร้าง Custom Tools
@tool
def search_database(query: str) -> str:
"""ค้นหาข้อมูลจาก Database ภายใน"""
# จำลอง Database search
return f"ผลลัพธ์สำหรับ '{query}': พบข้อมูล 5 รายการ..."
@tool
def calculate_price(base_price: float, discount_percent: float) -> str:
"""คำนวณราคาหลังหักส่วนลด"""
final = base_price * (1 - discount_percent / 100)
return f"ราคาหลังลด {discount_percent}%: {final:.2f} บาท"
# สร้าง Agent
llm = ChatOpenAI(model="gpt-4o")
tools = [search_database, calculate_price]
prompt = ChatPromptTemplate.from_messages([
("system", "คุณเป็น AI Shopping Assistant ช่วยค้นหาสินค้าและคำนวณราคา"),
MessagesPlaceholder(variable_name="chat_history", optional=True),
("user", "{input}"),
MessagesPlaceholder(variable_name="agent_scratchpad"),
])
agent = create_tool_calling_agent(llm, tools, prompt)
executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# Agent จะตัดสินใจเองว่าต้องเรียก Tool ไหน
result = executor.invoke({
"input": "ค้นหาสินค้า iPhone 16 แล้วคำนวณราคาถ้าลด 15% จาก 45000 บาท"
})
print(result["output"])
RAG — Retrieval Augmented Generation
RAG เป็นเทคนิคที่สำคัญที่สุดสำหรับการสร้าง AI Application ที่ตอบคำถามจากข้อมูลของเราเอง แทนที่จะพึ่ง Knowledge ของ LLM อย่างเดียว
RAG Architecture
# ขั้นตอนของ RAG:
# 1. Ingestion (ครั้งเดียว):
# เอกสาร → Chunk → Embedding → Vector Database
#
# 2. Query (ทุกครั้งที่ User ถาม):
# คำถาม → Embedding → ค้นหา Vector DB → เอกสารที่เกี่ยวข้อง
# → ส่งให้ LLM พร้อมคำถาม → คำตอบ
สร้าง RAG ด้วย LangChain
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import Chroma
from langchain_community.document_loaders import (
PyPDFLoader, TextLoader, DirectoryLoader
)
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser
# === ขั้นตอนที่ 1: Ingestion ===
# โหลดเอกสาร
loader = PyPDFLoader("company_handbook.pdf")
# หรือโหลดหลายไฟล์จากโฟลเดอร์
# loader = DirectoryLoader("./docs", glob="**/*.pdf", loader_cls=PyPDFLoader)
documents = loader.load()
# แบ่งเอกสารเป็น Chunks
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000, # ขนาด chunk (ตัวอักษร)
chunk_overlap=200, # overlap ระหว่าง chunks
separators=["\n\n", "\n", " ", ""]
)
chunks = text_splitter.split_documents(documents)
print(f"แบ่งเป็น {len(chunks)} chunks")
# สร้าง Embeddings และเก็บใน Vector Store
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = Chroma.from_documents(
documents=chunks,
embedding=embeddings,
persist_directory="./chroma_db" # เก็บบน Disk
)
# === ขั้นตอนที่ 2: Query ===
# สร้าง Retriever
retriever = vectorstore.as_retriever(
search_type="similarity",
search_kwargs={"k": 5} # ดึง 5 chunks ที่เกี่ยวข้องที่สุด
)
# สร้าง RAG Chain
llm = ChatOpenAI(model="gpt-4o", temperature=0)
prompt = ChatPromptTemplate.from_template("""
ตอบคำถามโดยใช้เฉพาะข้อมูลจาก Context ด้านล่าง
ถ้าไม่มีข้อมูลเพียงพอ ให้บอกว่าไม่ทราบ อย่าแต่งคำตอบขึ้นมาเอง
Context:
{context}
คำถาม: {question}
คำตอบ:
""")
def format_docs(docs):
return "\n\n".join(doc.page_content for doc in docs)
rag_chain = (
{"context": retriever | format_docs, "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)
# ถามคำถาม
answer = rag_chain.invoke("นโยบายการลาป่วยของบริษัทเป็นอย่างไร?")
print(answer)
Vector Databases — เปรียบเทียบ
| Vector DB | ประเภท | จุดเด่น | เหมาะกับ |
|---|---|---|---|
| ChromaDB | Embedded / Server | ง่ายที่สุด ติดตั้งเร็ว | Prototype, โปรเจกต์เล็ก |
| Pinecone | Managed Cloud | Scale ได้ไม่จำกัด Managed | Production, Enterprise |
| Weaviate | Self-hosted / Cloud | GraphQL API, Hybrid Search | Complex Search, Multi-modal |
| pgvector | PostgreSQL Extension | ใช้กับ PostgreSQL ที่มีอยู่ | ทีมที่ใช้ PostgreSQL อยู่แล้ว |
| Qdrant | Self-hosted / Cloud | เร็วมาก Rust-based | High Performance needs |
| Milvus | Self-hosted / Cloud | Scale ได้มาก Distributed | Big Data, Enterprise |
ตัวอย่าง pgvector
# ใช้ pgvector กับ PostgreSQL ที่มีอยู่แล้ว
# SQL: CREATE EXTENSION vector;
from langchain_community.vectorstores import PGVector
CONNECTION_STRING = "postgresql://user:pass@localhost:5432/mydb"
vectorstore = PGVector.from_documents(
documents=chunks,
embedding=embeddings,
connection_string=CONNECTION_STRING,
collection_name="company_docs",
)
# ค้นหา
results = vectorstore.similarity_search("วันลาพักร้อน", k=3)
for doc in results:
print(doc.page_content[:200])
Embeddings คืออะไร?
Embedding คือการแปลงข้อความ (Text) เป็น Vector ตัวเลข (Array of floats) ที่คอมพิวเตอร์เข้าใจ โดยข้อความที่มีความหมายคล้ายกันจะมี Vector ที่อยู่ใกล้กันใน Vector Space
from openai import OpenAI
client = OpenAI()
# สร้าง Embedding
response = client.embeddings.create(
model="text-embedding-3-small",
input=["แมวนอนอยู่บนโซฟา", "สุนัขนอนบนเตียง", "Python programming"]
)
# ได้ Vector (1536 dimensions สำหรับ text-embedding-3-small)
vec1 = response.data[0].embedding # แมว
vec2 = response.data[1].embedding # สุนัข
vec3 = response.data[2].embedding # Python
# คำนวณ Cosine Similarity
import numpy as np
def cosine_sim(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
print(f"แมว vs สุนัข: {cosine_sim(vec1, vec2):.4f}") # สูง (คล้ายกัน)
print(f"แมว vs Python: {cosine_sim(vec1, vec3):.4f}") # ต่ำ (ต่างกัน)
Prompt Engineering Techniques
การเขียน Prompt ที่ดีเป็นทักษะสำคัญสำหรับ Developer ที่ทำงานกับ LLM
เทคนิคสำคัญ
# 1. System Prompt — กำหนดบทบาทและกฎเกณฑ์
system_prompt = """คุณเป็น Senior Python Developer ที่เชี่ยวชาญ Django
กฎ:
- ตอบเป็นภาษาไทย
- แสดง Code ตัวอย่างเสมอ
- อธิบาย Best Practices
- เตือนเรื่อง Security ถ้าเกี่ยวข้อง"""
# 2. Few-shot Prompting — ให้ตัวอย่างก่อน
prompt = """จำแนกประเภทข้อความ:
ข้อความ: "สินค้าดีมาก ส่งไว"
ประเภท: positive
ข้อความ: "สินค้าเสีย ส่งช้ามาก"
ประเภท: negative
ข้อความ: "ได้รับของแล้ว"
ประเภท: neutral
ข้อความ: "คุณภาพไม่ตรงปก แต่ส่งเร็วดี"
ประเภท:"""
# 3. Chain of Thought — ให้คิดทีละขั้น
prompt = """วิเคราะห์โค้ด Python ต่อไปนี้ ทีละขั้นตอน:
1. อ่านโค้ดทั้งหมดก่อน
2. ระบุ Bug หรือปัญหาที่พบ
3. อธิบายสาเหตุของแต่ละปัญหา
4. เสนอวิธีแก้ไขพร้อม Code
โค้ด:
```python
def get_user(id):
user = db.query(f"SELECT * FROM users WHERE id={id}")
return user
```"""
# 4. Output Format Control
prompt = """วิเคราะห์ข้อมูลต่อไปนี้แล้วตอบในรูปแบบ JSON:
{
"summary": "สรุปสั้นๆ",
"sentiment": "positive/negative/neutral",
"action_items": ["สิ่งที่ต้องทำ"],
"priority": "high/medium/low"
}"""
สร้าง AI Chatbot พร้อม Context
from openai import OpenAI
from typing import List
class AIChatbot:
def __init__(self, system_prompt: str, model: str = "gpt-4o"):
self.client = OpenAI()
self.model = model
self.messages: List[dict] = [
{"role": "system", "content": system_prompt}
]
def chat(self, user_message: str) -> str:
self.messages.append({"role": "user", "content": user_message})
response = self.client.chat.completions.create(
model=self.model,
messages=self.messages,
temperature=0.7,
)
assistant_message = response.choices[0].message.content
self.messages.append({"role": "assistant", "content": assistant_message})
return assistant_message
def clear_history(self):
self.messages = [self.messages[0]] # เก็บ system prompt
# ใช้งาน
bot = AIChatbot(
system_prompt="คุณเป็น AI ผู้ช่วยสำหรับร้านอาหารไทย ช่วยแนะนำเมนูและรับออเดอร์"
)
print(bot.chat("มีเมนูแนะนำอะไรบ้าง?"))
print(bot.chat("สั่งผัดกะเพรา 2 จาน ส้มตำ 1 จาน"))
print(bot.chat("รวมเป็นเท่าไหร่?")) # AI จำบริบทได้
AI-Powered Search
from openai import OpenAI
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings
class SemanticSearch:
def __init__(self, collection_name: str):
self.embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
self.vectorstore = Chroma(
collection_name=collection_name,
embedding_function=self.embeddings,
persist_directory="./search_db"
)
self.llm = OpenAI()
def index_documents(self, documents: list[dict]):
"""เพิ่มเอกสารเข้า Index"""
texts = [doc["content"] for doc in documents]
metadatas = [{
"title": doc["title"],
"url": doc.get("url", ""),
"category": doc.get("category", "")
} for doc in documents]
self.vectorstore.add_texts(texts, metadatas=metadatas)
def search(self, query: str, k: int = 5) -> str:
"""ค้นหาเชิงความหมาย + สรุปด้วย AI"""
# ค้นหา Vector
results = self.vectorstore.similarity_search_with_score(query, k=k)
# สร้าง Context จากผลลัพธ์
context = "\n\n".join([
f"[{doc.metadata.get('title', 'N/A')}] {doc.page_content}"
for doc, score in results
])
# ให้ AI สรุปผลลัพธ์
response = self.llm.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "สรุปผลการค้นหาให้กระชับ อ้างอิงแหล่งที่มา"},
{"role": "user", "content": f"คำค้น: {query}\n\nผลลัพธ์:\n{context}"}
]
)
return response.choices[0].message.content
# ใช้งาน
search = SemanticSearch("products")
search.index_documents([
{"title": "iPhone 16 Pro", "content": "สมาร์ทโฟนรุ่นใหม่...", "category": "phone"},
{"title": "MacBook Pro M4", "content": "แล็ปท็อปสำหรับมืออาชีพ...", "category": "laptop"},
])
result = search.search("โน้ตบุ๊คสำหรับเขียนโปรแกรม")
print(result)
Cost Optimization สำหรับ AI Application
เทคนิคลดค่าใช้จ่าย
# 1. Caching — ไม่ต้อง Call API ซ้ำ
import hashlib
import json
from functools import lru_cache
# Simple In-memory Cache
response_cache = {}
def cached_completion(messages: list, model: str = "gpt-4o"):
cache_key = hashlib.md5(json.dumps(messages).encode()).hexdigest()
if cache_key in response_cache:
return response_cache[cache_key]
response = client.chat.completions.create(model=model, messages=messages)
result = response.choices[0].message.content
response_cache[cache_key] = result
return result
# 2. Model Selection — ใช้ Model ถูกก่อน
def smart_completion(messages: list):
# ลองใช้ Model ถูกก่อน
response = client.chat.completions.create(
model="gpt-4o-mini", # ถูกกว่า 10x
messages=messages,
)
result = response.choices[0].message.content
# ถ้าคำตอบไม่ดีพอ (เช่น สั้นเกิน) ค่อยใช้ Model แพง
if len(result) < 50 or "ไม่ทราบ" in result:
response = client.chat.completions.create(
model="gpt-4o",
messages=messages,
)
result = response.choices[0].message.content
return result
# 3. Token Management
# - ตัด Context ที่ไม่จำเป็น
# - ใช้ Summary แทน Full History
# - กำหนด max_tokens ให้เหมาะสม
# 4. Batch API — ลด Cost 50% (ไม่ต้องการ Real-time)
# OpenAI Batch API ให้ส่ง Requests เป็น Batch
# ประมวลผลภายใน 24 ชั่วโมง ราคาลดครึ่ง
| Model | Input (1M tokens) | Output (1M tokens) | เหมาะกับ |
|---|---|---|---|
| GPT-4o | $2.50 | $10.00 | งาน Complex |
| GPT-4o-mini | $0.15 | $0.60 | งานทั่วไป ประหยัด |
| Claude Sonnet | $3.00 | $15.00 | Long context, Code |
| Claude Haiku | $0.25 | $1.25 | งานเบา รวดเร็ว |
AI Safety และ Guardrails
# 1. Input Validation — กรอง Input ที่อันตราย
def validate_input(user_input: str) -> bool:
# ตรวจ Prompt Injection
suspicious_patterns = [
"ignore previous instructions",
"ignore all rules",
"system prompt",
"reveal your instructions",
]
lower_input = user_input.lower()
return not any(p in lower_input for p in suspicious_patterns)
# 2. Output Moderation
def moderate_output(response: str) -> str:
moderation = client.moderations.create(input=response)
if moderation.results[0].flagged:
return "ขออภัย ไม่สามารถแสดงเนื้อหานี้ได้"
return response
# 3. Rate Limiting
from datetime import datetime, timedelta
class RateLimiter:
def __init__(self, max_requests: int, window_seconds: int):
self.max_requests = max_requests
self.window = timedelta(seconds=window_seconds)
self.requests: dict[str, list] = {}
def is_allowed(self, user_id: str) -> bool:
now = datetime.now()
if user_id not in self.requests:
self.requests[user_id] = []
# ลบ Request เก่า
self.requests[user_id] = [
t for t in self.requests[user_id] if now - t < self.window
]
if len(self.requests[user_id]) >= self.max_requests:
return False
self.requests[user_id].append(now)
return True
limiter = RateLimiter(max_requests=10, window_seconds=60)
LlamaIndex — ทางเลือกของ LangChain
# pip install llama-index
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from llama_index.llms.openai import OpenAI
# โหลดเอกสาร (ง่ายมาก!)
documents = SimpleDirectoryReader("./docs").load_data()
# สร้าง Index
index = VectorStoreIndex.from_documents(documents)
# สร้าง Query Engine
query_engine = index.as_query_engine(
llm=OpenAI(model="gpt-4o"),
similarity_top_k=5,
)
# ถามคำถาม
response = query_engine.query("นโยบายการทำงานจากบ้านเป็นอย่างไร?")
print(response)
print(f"Sources: {response.source_nodes}")
Testing AI Applications
import pytest
from unittest.mock import patch, MagicMock
# 1. Mock LLM Responses สำหรับ Unit Tests
@patch('openai.OpenAI')
def test_chatbot_response(mock_openai):
mock_client = MagicMock()
mock_openai.return_value = mock_client
mock_client.chat.completions.create.return_value = MagicMock(
choices=[MagicMock(message=MagicMock(content="สวัสดีครับ"))]
)
bot = AIChatbot("test system prompt")
result = bot.chat("สวัสดี")
assert "สวัสดี" in result
# 2. Evaluation Metrics
def evaluate_rag_response(question: str, expected: str, actual: str) -> dict:
"""ประเมินคุณภาพคำตอบ RAG"""
# Relevance — คำตอบเกี่ยวข้องกับคำถามไหม
# Faithfulness — คำตอบตรงกับ Context ไหม (ไม่ Hallucinate)
# Completeness — คำตอบครบถ้วนไหม
eval_prompt = f"""ประเมินคำตอบ AI (0-10):
คำถาม: {question}
คำตอบที่คาดหวัง: {expected}
คำตอบ AI: {actual}
ให้คะแนน: relevance, faithfulness, completeness"""
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": eval_prompt}]
)
return response.choices[0].message.content
# 3. Regression Testing — ทดสอบชุดคำถามมาตรฐาน
test_cases = [
{"q": "วันลาป่วยมีกี่วัน?", "expected_keywords": ["30", "วัน"]},
{"q": "เงินเดือนออกวันไหน?", "expected_keywords": ["25", "ทุกเดือน"]},
]
def run_regression_tests(rag_chain):
results = []
for tc in test_cases:
answer = rag_chain.invoke(tc["q"])
passed = all(kw in answer for kw in tc["expected_keywords"])
results.append({"question": tc["q"], "passed": passed, "answer": answer})
return results
Production AI Architecture
# Production AI App Architecture
# ┌─────────────────────────────────────────┐
# │ Frontend (React/Next.js) │
# │ Chat UI | Search UI | Dashboard │
# └────────────────┬────────────────────────┘
# │ REST/WebSocket
# ┌────────────────▼────────────────────────┐
# │ API Server (FastAPI) │
# │ Rate Limiting | Auth | Input Validation │
# └────────────────┬────────────────────────┘
# │
# ┌────────────────▼────────────────────────┐
# │ AI Orchestration Layer │
# │ LangChain/LlamaIndex | Prompt Mgmt │
# │ Caching | Model Router | Guardrails │
# └──┬──────────┬──────────┬────────────────┘
# │ │ │
# ┌──▼──┐ ┌───▼───┐ ┌──▼──────────┐
# │ LLM │ │Vector │ │ Database │
# │ API │ │ DB │ │ (PostgreSQL)│
# └─────┘ └───────┘ └─────────────┘
# FastAPI + AI Example
from fastapi import FastAPI, HTTPException
from fastapi.responses import StreamingResponse
from pydantic import BaseModel
app = FastAPI()
class ChatRequest(BaseModel):
message: str
session_id: str
@app.post("/api/chat")
async def chat(req: ChatRequest):
if not validate_input(req.message):
raise HTTPException(400, "Invalid input")
if not limiter.is_allowed(req.session_id):
raise HTTPException(429, "Rate limit exceeded")
response = rag_chain.invoke(req.message)
return {"response": response}
@app.post("/api/chat/stream")
async def chat_stream(req: ChatRequest):
async def generate():
stream = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": req.message}],
stream=True,
)
for chunk in stream:
if chunk.choices[0].delta.content:
yield f"data: {chunk.choices[0].delta.content}\n\n"
return StreamingResponse(generate(), media_type="text/event-stream")
สรุป
AI และ LLM ได้เปลี่ยนวิธีที่เราสร้าง Software ไปอย่างสิ้นเชิง ในปี 2026 Developer ที่เข้าใจการใช้ AI API, สร้าง RAG System, และออกแบบ AI Application ที่ปลอดภัยและคุ้มค่า จะมีข้อได้เปรียบอย่างมากในตลาดแรงงาน
เทคโนโลยีหลักที่ควรเรียนรู้: OpenAI API สำหรับ Cloud LLM, Ollama สำหรับ Local LLM, LangChain สำหรับ Orchestration, RAG + Vector Database สำหรับ Knowledge-augmented AI และ Prompt Engineering สำหรับการควบคุมคุณภาพ Output
เริ่มต้นง่ายๆ ด้วยการสร้าง Chatbot ง่ายๆ ด้วย OpenAI API แล้วค่อยๆ เพิ่ม RAG, Agents และ Tools เข้าไป เมื่อเข้าใจพื้นฐานแล้ว คุณจะสามารถสร้าง AI Application ที่แก้ปัญหาจริงในธุรกิจได้อย่างมั่นใจ
