MinAI - Về trang chủ
Lý thuyết
5/1345 phút
Đang tải...

Working with LLM APIs

Sử dụng OpenAI, Anthropic Claude, và Google Gemini APIs trong Python

0

🎯 Mục tiêu bài học

TB5 min

Bài này hướng dẫn bạn sử dụng APIs của các LLM providers phổ biến nhất: OpenAI, Anthropic, và Google.

Sau bài này, bạn sẽ:

✅ Setup môi trường Python cho GenAI ✅ Sử dụng OpenAI API (GPT-4) ✅ Sử dụng Anthropic API (Claude) ✅ So sánh response quality và cost

1

🛠️ Setup Môi Trường

TB5 min

1.1 Cài đặt

Bash
1# Create virtual environment
2python -m venv genai-env
3source genai-env/bin/activate # Mac/Linux
4genai-env\Scripts\activate # Windows
5
6# Install packages
7pip install openai anthropic google-generativeai python-dotenv

1.2 API Keys

Bash
1# .env file (NEVER commit this!)
2OPENAI_API_KEY=sk-xxxxxxxxxxxxx
3ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxxxxx
4GOOGLE_API_KEY=AIzaxxxxxxxxxxxxx
python.py
1# Load environment variables
2import os
3from dotenv import load_dotenv
4
5load_dotenv()
6openai_key = os.getenv("OPENAI_API_KEY")

1.3 API Key Sources

ProviderFree TierPricing
OpenAI$5 credit (new accounts)GPT-4: ~$0.03/1K input tokens
AnthropicNo free tierClaude 3.5: ~$0.003/1K tokens
GoogleGemini free tierGemini 1.5: Free up to quota

Checkpoint

Bạn đã cài đặt môi trường và cấu hình API keys cho các providers chưa?

2

💻 OpenAI API

TB5 min

2.1 Basic Chat Completion

python.py
1from openai import OpenAI
2
3client = OpenAI() # Reads OPENAI_API_KEY from env
4
5response = client.chat.completions.create(
6 model="gpt-4-turbo",
7 messages=[
8 {"role": "system", "content": "Bạn là AI assistant hữu ích."},
9 {"role": "user", "content": "Giải thích Machine Learning trong 3 câu."}
10 ],
11 temperature=0.7,
12 max_tokens=500
13)
14
15print(response.choices[0].message.content)
16print(f"Tokens used: {response.usage.total_tokens}")

2.2 Streaming Response

python.py
1stream = client.chat.completions.create(
2 model="gpt-4-turbo",
3 messages=[{"role": "user", "content": "Viết bài thơ về Hà Nội"}],
4 stream=True
5)
6
7for chunk in stream:
8 content = chunk.choices[0].delta.content
9 if content:
10 print(content, end="", flush=True)

2.3 Multi-turn Conversation

python.py
1messages = [
2 {"role": "system", "content": "Bạn là Python tutor."}
3]
4
5def chat(user_message):
6 messages.append({"role": "user", "content": user_message})
7
8 response = client.chat.completions.create(
9 model="gpt-4-turbo",
10 messages=messages,
11 temperature=0.7
12 )
13
14 assistant_msg = response.choices[0].message.content
15 messages.append({"role": "assistant", "content": assistant_msg})
16 return assistant_msg
17
18# Conversation
19print(chat("List là gì trong Python?"))
20print(chat("Cho ví dụ với list comprehension"))
21print(chat("So sánh list và tuple"))

2.4 Parameters Explained

ParameterRangeEffect
temperature0.0 - 2.0Creativity. 0 = deterministic, 1+ = creative
max_tokens1 - 128KMax output length
top_p0.0 - 1.0Nucleus sampling. 0.1 = top 10% tokens
frequency_penalty-2.0 - 2.0Penalize repeated tokens
presence_penalty-2.0 - 2.0Encourage new topics

Checkpoint

Bạn đã thực hành gọi OpenAI API với chat completion và streaming chưa?

3

💻 Anthropic Claude API

TB5 min

3.1 Basic Usage

python.py
1import anthropic
2
3client = anthropic.Anthropic() # Reads ANTHROPIC_API_KEY
4
5message = client.messages.create(
6 model="claude-3-5-sonnet-20241022",
7 max_tokens=1024,
8 system="Bạn là data analyst expert.",
9 messages=[
10 {"role": "user", "content": "Phân tích xu hướng e-commerce Việt Nam 2026"}
11 ]
12)
13
14print(message.content[0].text)
15print(f"Input tokens: {message.usage.input_tokens}")
16print(f"Output tokens: {message.usage.output_tokens}")

3.2 Streaming with Claude

python.py
1with client.messages.stream(
2 model="claude-3-5-sonnet-20241022",
3 max_tokens=1024,
4 messages=[{"role": "user", "content": "Viết code Python sort algorithms"}]
5) as stream:
6 for text in stream.text_stream:
7 print(text, end="", flush=True)

3.3 Claude đặc biệt ở đâu?

Ví dụ
1✅ Long context: 200K tokens (đọc ~500 trang PDF)
2✅ Safer responses: Ít hallucination hơn
3✅ Better reasoning: Phân tích logic tốt
4✅ Document analysis: Tốt nhất cho đọc tài liệu

Checkpoint

Bạn đã hiểu những điểm mạnh của Claude và cách sử dụng Anthropic API chưa?

4

💻 Google Gemini API

TB5 min

4.1 Basic Usage

python.py
1import google.generativeai as genai
2
3genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))
4model = genai.GenerativeModel("gemini-1.5-pro")
5
6response = model.generate_content("Giải thích Docker trong 5 câu")
7print(response.text)

4.2 Multi-modal (Text + Image)

python.py
1import PIL.Image
2
3model = genai.GenerativeModel("gemini-1.5-pro")
4image = PIL.Image.open("chart.png")
5
6response = model.generate_content([
7 "Phân tích biểu đồ này và nêu 3 insights chính:",
8 image
9])
10print(response.text)

Checkpoint

Bạn đã thử gọi Google Gemini API với text và multimodal input chưa?

5

📊 So Sánh Providers

TB5 min

5.1 Quick Comparison

CriteriaGPT-4Claude 3.5Gemini 1.5
Code Generation⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
Reasoning⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
Vietnamese⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
Long Context128K200K2M
MultimodalText+ImageText+ImageText+Image+Video
SpeedFastFastFast
Cost$$$$$$ (free tier)

5.2 Chọn model nào?

Ví dụ
1🎯 Code & general: GPT-4 hoặc Claude 3.5
2📚 Document analysis: Claude 3.5 (200K context)
3🎬 Multimodal (video): Gemini 1.5
4💰 Budget: Gemini free tier → GPT-3.5 → Claude Haiku
5🔒 Privacy: Self-host Llama 3

Checkpoint

Bạn có thể chọn model phù hợp cho từng use case cụ thể không?

6

🛠️ Error Handling

TB5 min

6.1 Common Errors

python.py
1from openai import OpenAI, RateLimitError, APIError
2
3client = OpenAI()
4
5def safe_call(prompt, retries=3):
6 for attempt in range(retries):
7 try:
8 response = client.chat.completions.create(
9 model="gpt-4-turbo",
10 messages=[{"role": "user", "content": prompt}],
11 timeout=30
12 )
13 return response.choices[0].message.content
14
15 except RateLimitError:
16 print(f"Rate limited. Waiting {2**attempt}s...")
17 import time
18 time.sleep(2 ** attempt)
19
20 except APIError as e:
21 print(f"API error: {e}")
22 if attempt == retries - 1:
23 raise
24
25 return None

6.2 Token Counting

python.py
1import tiktoken
2
3def count_tokens(text, model="gpt-4"):
4 enc = tiktoken.encoding_for_model(model)
5 return len(enc.encode(text))
6
7# Example
8prompt = "Hãy phân tích dữ liệu sales Q4 2026..."
9tokens = count_tokens(prompt)
10cost = tokens * 0.03 / 1000
11print(f"Tokens: {tokens}, Est cost: ${cost:.4f}")

Checkpoint

Bạn đã hiểu cách xử lý rate limit errors và đếm tokens chưa?

7

💻 Hands-on Lab

TB5 min

Lab 1: Multi-Provider Comparison

python.py
1# Gửi cùng prompt cho cả 3 providers, so sánh:
2prompt = "Viết hàm Python tìm số Fibonacci thứ n. Giải thích time complexity."
3
4# 1. Call OpenAI
5# 2. Call Anthropic
6# 3. Call Gemini
7# 4. Compare: quality, speed, tokens used

Lab 2: Build API Wrapper

python.py
1class LLMClient:
2 def __init__(self, provider="openai"):
3 self.provider = provider
4 # Initialize correct client
5
6 def chat(self, prompt, system=None, **kwargs):
7 # Route to correct API
8 # Return standardized response
9 pass
10
11 def stream(self, prompt, system=None, **kwargs):
12 # Streaming for all providers
13 pass
14
15# Usage
16llm = LLMClient("anthropic")
17response = llm.chat("Hello!")

Lab 3: Token Budget Manager

Viết class quản lý token budget:

  • Set monthly budget ($10)
  • Track usage per call
  • Alert when 80% budget used
  • Block calls when 100% budget

Checkpoint

Bạn đã thực hành xây dựng API Wrapper và Token Budget Manager chưa?

8

🎯 Tổng kết

TB5 min

📝 Quiz

  1. API key nên lưu ở đâu?

    • Hardcode trong code
    • Commit lên GitHub
    • File .env (gitignored)
    • Comment trong code
  2. Temperature = 0 phù hợp cho task nào?

    • Code generation, math
    • Creative writing
    • Brainstorming
    • Poetry
  3. Claude 3.5 Sonnet có ưu điểm gì?

    • Rẻ nhất
    • Long context (200K tokens)
    • Nhanh nhất
    • Free
  4. Rate limit error nên xử lý thế nào?

    • Ignore
    • Exponential backoff retry
    • Gửi lại ngay lập tức
    • Đổi API key

Những điểm quan trọng

  1. OpenAI, Anthropic, Google — 3 providers chính, mỗi cái có strengths riêng
  2. API keys — NEVER commit, luôn dùng .env
  3. Streaming — Better UX cho chatbot interfaces
  4. Error handling — Retry với exponential backoff
  5. Token counting — Kiểm soát cost

Câu hỏi tự kiểm tra

  1. Tại sao API key phải được lưu trong file .env và không bao giờ commit lên GitHub?
  2. So sánh ưu nhược điểm giữa OpenAI, Anthropic Claude và Google Gemini API?
  3. Streaming response cải thiện trải nghiệm người dùng như thế nào trong chatbot?
  4. Exponential backoff retry là gì và tại sao nó quan trọng khi xử lý rate limit errors?

🎉 Tuyệt vời! Bạn đã hoàn thành bài học Working with LLM APIs!

Tiếp theo: Chúng ta sẽ học cách iterate, test và optimize prompts cho production!


🚀 Bài tiếp theo

Prompt Optimization & Testing — Cách iterate, test, và optimize prompts cho production!