Chuyên sâu
⏱ 35 phút
▶ Video
11
Anthropic SDK — Xây dựng AI App
Dùng Claude API trực tiếp để tạo ứng dụng AI tùy chỉnh với Python SDK
🎬
Video cho bài học này đang được chuẩn bị.
🎯 Mục tiêu bài học
- ✓ Cài đặt và sử dụng Anthropic Python SDK
- ✓ Xây dựng chatbot với conversation history
- ✓ Tích hợp tool use (function calling) vào ứng dụng
- ✓ Tối ưu chi phí với prompt caching
Anthropic SDK là gì?
Ngoài Claude Code CLI, Anthropic cung cấp Python SDK để bạn tích hợp Claude trực tiếp vào ứng dụng của mình. Đây là nền tảng để xây dựng chatbot, AI assistant, automated pipelines, và mọi sản phẩm AI tùy chỉnh.
Cài đặt
pip install anthropic
Gọi API cơ bản
import anthropic
client = anthropic.Anthropic(api_key="sk-ant-...")
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[
{"role": "user", "content": "Giai thich DynamoDB GSI la gi?"}
]
)
print(message.content[0].text)
Conversation với lịch sử
conversation = []
def chat(user_message: str) -> str:
conversation.append({"role": "user", "content": user_message})
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=2048,
system="Ban la tro ly lap trinh chuyen ve Python va AWS.",
messages=conversation,
)
reply = response.content[0].text
conversation.append({"role": "assistant", "content": reply})
return reply
Tool Use (Function Calling)
Cho Claude khả năng gọi hàm Python thực trong ứng dụng:
tools = [{
"name": "get_lesson_count",
"description": "Lay so luong bai hoc trong DynamoDB",
"input_schema": {
"type": "object",
"properties": {
"category": {"type": "string"}
}
}
}]
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
tools=tools,
messages=[{"role": "user", "content": "Co bao nhieu bai hoc co ban?"}]
)
if response.stop_reason == "tool_use":
tool_call = next(b for b in response.content if b.type == "tool_use")
print(f"Claude goi: {tool_call.name}({tool_call.input})")
Prompt Caching — Tiết kiệm 90% chi phí
Với context dài lặp đi lặp lại (system prompt, tài liệu), dùng cache để tiết kiệm token:
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
system=[{
"type": "text",
"text": long_system_prompt, # 10,000 tokens
"cache_control": {"type": "ephemeral"} # Cache 5 phut
}],
messages=[{"role": "user", "content": "Cau hoi ngan"}]
)
# Lan dau: tinh phi day du
# Lan 2+: chi tinh 10% gia goc cho phan cached
Streaming Response
with client.messages.stream(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[{"role": "user", "content": "Viet bai tho ve Python"}]
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
💡 Model IDs mới nhất (2025)
- claude-opus-4-7 — Mạnh nhất, dùng cho tasks phức tạp
- claude-sonnet-4-6 — Cân bằng tốt giữa sức mạnh và tốc độ
- claude-haiku-4-5 — Nhanh và rẻ nhất, phù hợp với tasks đơn giản