Mục lục
Cài đặt
Python
pip install aitracer
Yêu cầu: Python 3.8 trở lên
PHP
composer require haro/aitracer
Yêu cầu: PHP 8.0 trở lên
TypeScript / JavaScript
npm install @haro/aitracer
# hoặc
yarn add @haro/aitracer
Yêu cầu: Node.js 18 trở lên
Khởi tạo
Lớp AITracer
from aitracer import AITracer
tracer = AITracer(
api_key="at-xxxx", # Bắt buộc (hoặc biến môi trường AITRACER_API_KEY)
project="my-project", # Tên dự án
enabled=True, # Bật/tắt ghi log
sync=False, # Chế độ gửi đồng bộ
batch_size=10, # Kích thước batch
flush_interval=5.0, # Khoảng thời gian flush (giây)
pii_detection=False, # Phát hiện PII
pii_action="mask", # Hành động khi phát hiện PII
base_url="https://api.aitracer.co" # Endpoint API
)
Tùy chọn Constructor
| Tham số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
api_key |
str | - | API key AITracer (bắt buộc) |
project |
str | None | Định danh dự án |
enabled |
bool | True | Bật ghi log |
sync |
bool | False | Chế độ gửi đồng bộ (khuyến nghị cho serverless) |
batch_size |
int | 10 | Kích thước gửi batch |
flush_interval |
float | 5.0 | Khoảng thời gian tự động flush (giây) |
flush_on_exit |
bool | True | Tự động flush khi kết thúc |
pii_detection |
bool | False | Tự động phát hiện PII |
pii_action |
str | "mask" | mask / redact / hash / none |
pii_types |
list | ["email", "phone", ...] | Các loại PII cần phát hiện |
Phương thức Wrapper
Bọc các LLM client hiện có để tự động ghi log.
wrap_openai(client)
Bọc OpenAI client.
from openai import OpenAI
client = tracer.wrap_openai(OpenAI())
# Sử dụng bình thường - tự động ghi log
response = client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": "Hello"}]
)
wrap_anthropic(client)
Bọc Anthropic client.
from anthropic import Anthropic
client = tracer.wrap_anthropic(Anthropic())
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello"}]
)
wrap_gemini(model)
Bọc mô hình Google Gemini.
import google.generativeai as genai
model = tracer.wrap_gemini(genai.GenerativeModel("gemini-pro"))
response = model.generate_content("Hello")
Ghi log thủ công
Ghi log thủ công mà không sử dụng auto wrap.
log(data)
tracer.log({
"model": "gpt-4",
"provider": "openai",
"input_data": {
"messages": [{"role": "user", "content": "Hello"}]
},
"output_data": {
"content": "Hi there!"
},
"input_tokens": 10,
"output_tokens": 5,
"latency_ms": 450,
"status": "success",
"metadata": {
"user_id": "user-123",
"feature": "chat"
}
})
Các trường dữ liệu log
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
model |
str | Có | Tên mô hình sử dụng |
provider |
str | Có | openai / anthropic / gemini / other |
input_data |
dict | Không | Dữ liệu đầu vào |
output_data |
dict | Không | Dữ liệu đầu ra |
input_tokens |
int | Không | Số token đầu vào |
output_tokens |
int | Không | Số token đầu ra |
latency_ms |
int | Không | Độ trễ (mili giây) |
status |
str | Không | success / error |
error_message |
str | Không | Thông báo lỗi |
metadata |
dict | Không | Metadata tùy chỉnh (tối đa 10 key) |
Quản lý phiên
Nhóm log theo đơn vị phiên người dùng.
session(session_id, **kwargs)
with tracer.session(
session_id="session-abc123",
user_id="user-456",
metadata={"channel": "web"}
) as session:
# Tất cả yêu cầu trong phiên tự động được nhóm
response1 = client.chat.completions.create(...)
response2 = client.chat.completions.create(...)
# Ghi phản hồi
session.thumbs_up() # Đánh giá cao cho phản hồi cuối
session.thumbs_down() # Đánh giá thấp cho phản hồi cuối
session.feedback("Great response!") # Phản hồi văn bản
Tùy chọn phiên
| Tham số | Kiểu | Mô tả |
|---|---|---|
session_id |
str | Định danh phiên (bắt buộc) |
user_id |
str | Định danh người dùng |
metadata |
dict | Metadata tùy chỉnh |
Theo dõi người dùng ứng dụng
Sử dụng chức năng người dùng ứng dụng để theo dõi tình trạng sử dụng theo từng người dùng cuối của ứng dụng AI. Bạn có thể nắm bắt chi phí và sử dụng theo từng người dùng, sử dụng cho thiết kế tính phí và giới hạn sử dụng.
Chức năng phân tích người dùng ứng dụng có sẵn từ gói Starter trở lên.
Cách chỉ định user_id
Khuyến nghị chỉ định user_id khi bắt đầu phiên.
# Khuyến nghị: Chỉ định user_id trong phiên
with tracer.session(
session_id="session-abc123",
user_id="user-456", # ID người dùng của ứng dụng bạn
) as session:
# Tất cả yêu cầu trong phiên này được liên kết với user-456
response = client.chat.completions.create(...)
Chỉ định trong metadata
Nếu không sử dụng phiên, bạn có thể chỉ định trong metadata cho mỗi yêu cầu.
# Chỉ định user_id trong metadata
response = client.chat.completions.create(
model="gpt-4",
messages=[...],
extra_body={
"aitracer_metadata": {
"user_id": "user-456"
}
}
)
# Hoặc cài đặt toàn cục với set_metadata
tracer.set_metadata({"user_id": "user-456"})
response = client.chat.completions.create(...)
Xem trên Dashboard
user_id đã chỉ định có thể được tổng hợp và phân tích trong menu "Người dùng ứng dụng" trên dashboard.
- Danh sách người dùng: Số yêu cầu, chi phí, số token, số lỗi của tất cả người dùng
- Chi tiết người dùng: Sử dụng theo mô hình, log gần đây, thông tin thống kê
- Tìm kiếm người dùng: Tìm kiếm và lọc log theo user_id
Xem chi tiết tại Hướng dẫn sử dụng Dashboard - Phân tích người dùng ứng dụng.
Trace
Nhóm nhiều cuộc gọi API vào một trace.
trace(trace_id)
with tracer.trace("request-123") as trace:
# Nhiều cuộc gọi API thuộc cùng một trace
response1 = client.chat.completions.create(...)
response2 = client.chat.completions.create(...)
# Thêm metadata
trace.set_metadata({
"user_id": "user-456",
"feature": "summarization"
})
# Thêm tag
trace.add_tag("production")
trace.add_tag("high-priority")
Flush
Gửi ngay các log đang trong buffer.
flush()
# Flush thủ công
tracer.flush()
# Khuyến nghị gọi trước khi kết thúc Lambda / Cloud Functions
def handler(event, context):
try:
response = client.chat.completions.create(...)
return response
finally:
tracer.flush() # Nhất định phải flush
Với Lambda / Cloud Functions, cài đặt
sync=True hoặc nhất định gọi flush() trước khi kết thúc.
Xử lý lỗi
SDK được thiết kế để không ảnh hưởng đến ứng dụng của bạn.
from aitracer.exceptions import AITracerError, APIError, RateLimitError
try:
tracer.log({...})
except RateLimitError:
# Đã đạt giới hạn rate
pass
except APIError as e:
# Lỗi giao tiếp API
print(f"API Error: {e}")
except AITracerError:
# Các lỗi khác
pass
Mặc định, lỗi của SDK chỉ có nghĩa là ghi log thất bại và không ảnh hưởng đến hoạt động của ứng dụng.
