Tiếng Việt

Tham chiếu SDK

Đặc tả API chi tiết và cách sử dụng nâng cao của AITracer SDK

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 Tên mô hình sử dụng
provider str 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.

Có sẵn từ gói Starter trở lên
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
Lưu ý với môi trường serverless
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.