# Python: OpenAI SDK trỏ vào các model open-weight

> Gọi LLM open-weight từ Python bằng package openai chính thức: một lần gọi, batch async với giới hạn concurrency, streaming, và chi phí của từng truy vấn.

- URL: https://llmwithcrypto.com/vi/docs/python/
- Cập nhật lần cuối: 2026-10-23
- Đơn vị phát hành: LLMwithCrypto (https://llmwithcrypto.com)

Package `openai` chính thức dùng được ngay: truyền base URL của chúng tôi và khóa của bạn khi tạo client. Mọi thứ khác trong code giữ nguyên, trừ tên model.

**Trả lời nhanh — Làm sao gọi LLMwithCrypto từ Python?**

Cài package chính thức bằng `pip install openai`, rồi tạo client với `base_url="https://llmwithcrypto.com/api/v1"` và khóa của bạn từ `LLMWITHCRYPTO_API_KEY`. **LLMwithCrypto** trả lời `client.chat.completions.create()` giống OpenAI API, cho 12 model open-weight như `deepseek-v4-pro` hay `gpt-oss-120b`. Streaming, async và tool calling hoạt động như bình thường, theo tài liệu ngày 23 tháng 10 năm 2026.

## Bạn cần gì

| Thuộc tính | Giá trị |
| --- | --- |
| Python | 3.9 trở lên |
| Gói | `openai` (chính thức); `requests` cho lần gọi credits |
| Base URL | `https://llmwithcrypto.com/api/v1` |
| Key | Trong biến môi trường `LLMWITHCRYPTO_API_KEY`, không bao giờ trong code |
| Model id | Trên [trang models](https://llmwithcrypto.com/vi/models/) hoặc từ `client.models.list()` |

## Làm sao để gửi một truy vấn?

Tạo client một lần và dùng lại: client giữ kết nối mở giữa các lần gọi. Ở đây SDK không tự đọc biến môi trường nào cho base URL, nên hãy truyền rõ ràng.

*one_call.py*

```python
import os

from openai import OpenAI

client = OpenAI(
    base_url="https://llmwithcrypto.com/api/v1",
    api_key=os.environ["LLMWITHCRYPTO_API_KEY"],
)

resp = client.chat.completions.create(
    model="deepseek-v4-pro",
    messages=[
        {"role": "system", "content": "Answer in two sentences."},
        {"role": "user", "content": "What is a context window?"},
    ],
    max_tokens=200,
)
print(resp.choices[0].message.content)
print(resp.usage.prompt_tokens, "in,", resp.usage.completion_tokens, "out")

```

## Làm sao chạy nhiều truy vấn cùng lúc?

Dùng `AsyncOpenAI` với `asyncio.gather`, và một semaphore để giới hạn số yêu cầu chạy song song. Bốn là một khởi đầu an toàn; tăng lên trong khi vẫn dưới rate limit của bạn. Mỗi tài khoản có giới hạn request và token mỗi phút, hiển thị trong dashboard; liên hệ support để được nâng lên.

*many_calls.py*

```python
import asyncio
import os

from openai import AsyncOpenAI

client = AsyncOpenAI(
    base_url="https://llmwithcrypto.com/api/v1",
    api_key=os.environ["LLMWITHCRYPTO_API_KEY"],
)
LIMIT = asyncio.Semaphore(4)


async def summarize(text):
    async with LIMIT:
        resp = await client.chat.completions.create(
            model="deepseek-v4.1-flash",
            messages=[
                {"role": "system", "content": "Summarize in one sentence."},
                {"role": "user", "content": text},
            ],
            max_tokens=80,
        )
        return resp.choices[0].message.content


async def main():
    docs = ["First report text...", "Second report text...", "Third report text..."]
    for summary in await asyncio.gather(*(summarize(d) for d in docs)):
        print("-", summary)


asyncio.run(main())

```

## Làm sao stream câu trả lời?

Truyền `stream=True` và lặp qua các chunk; mỗi chunk mang một phần văn bản trong `delta.content`. Với `stream_options={"include_usage": True}`, chunk cuối cùng mang số lượng token. [Trang streaming](https://llmwithcrypto.com/vi/docs/streaming/) giải thích định dạng.

*stream.py*

```python
import os

from openai import OpenAI

client = OpenAI(
    base_url="https://llmwithcrypto.com/api/v1",
    api_key=os.environ["LLMWITHCRYPTO_API_KEY"],
)

stream = client.chat.completions.create(
    model="deepseek-v4.1-flash",
    messages=[{"role": "user", "content": "Write a haiku about latency."}],
    stream=True,
    stream_options={"include_usage": True},
    max_tokens=120,
)
for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)
    if chunk.usage:
        print("\n", chunk.usage.prompt_tokens, "in,", chunk.usage.completion_tokens, "out")

```

## Làm sao tôi biết một yêu cầu tốn bao nhiêu?

Nhân số lượng `usage` với giá của model trên mỗi triệu token. Tính đến ngày 23 tháng 10 năm 2026, DeepSeek V4 Pro có giá $1.254 mỗi triệu token đầu vào và $3.762 mỗi triệu token đầu ra; ví dụ mã cứng hai con số đó, nên cập nhật chúng từ [trang giá](https://llmwithcrypto.com/vi/pricing/) khi giá thay đổi. Dashboard hiển thị chi phí chính xác của mọi lần gọi.

*cost.py*

```python
import os

from openai import OpenAI

# prices per 1M tokens of the models you use, copied from the pricing page
PRICES = {"deepseek-v4-pro": (1.254, 3.762)}

client = OpenAI(
    base_url="https://llmwithcrypto.com/api/v1",
    api_key=os.environ["LLMWITHCRYPTO_API_KEY"],
)
resp = client.chat.completions.create(
    model="deepseek-v4-pro",
    messages=[{"role": "user", "content": "Give me three names for a coffee shop."}],
    max_tokens=100,
)
price_in, price_out = PRICES[resp.model]
cost = (resp.usage.prompt_tokens * price_in + resp.usage.completion_tokens * price_out) / 1_000_000
print(resp.choices[0].message.content)
print(f"cost: ${cost:.6f}")

```

## Làm sao chuyển một app OpenAI đang có sang?

Ba thay đổi, thường trong một file:

1. **Client.** Thêm `base_url` và đọc khóa từ `LLMWITHCRYPTO_API_KEY` nơi bạn tạo `OpenAI()` hoặc `AsyncOpenAI()`.
2. **Tên model.** Thay mọi tên `gpt-…` bằng một id từ [trang models](https://llmwithcrypto.com/vi/models/). Tìm trong toàn bộ dự án: tên model ẩn trong file config, prompt và test.
3. **Các tính năng bạn dựa vào.** Chat, streaming và system prompt hoạt động ở mọi nơi. Tool calling và JSON output phụ thuộc vào model, nên chạy các test hiện có của bạn với model bạn chọn.

Mọi thứ khác giữ nguyên: prompt, logic retry, cách bạn parse `choices` và `usage`. [Hướng dẫn chuyển đổi](https://llmwithcrypto.com/vi/guides/switch-openai-sdk-to-open-models/) đi qua chi tiết.

## Khóa nên nằm ở đâu?

Trong environment, không bao giờ trong code. Cục bộ, một file `.env` được app của bạn nạp và được liệt kê trong `.gitignore` là đủ; trong production, dùng secret store của host hoặc CI. Cấp cho mỗi app hoặc service một khóa riêng để bạn có thể thu hồi một khóa mà không dừng các khóa khác. Tạo một khóa API cho mỗi ứng dụng, agent hoặc thành viên nhóm và thu hồi bất kỳ khóa nào trong dashboard mà không ảnh hưởng đến các khóa khác.

## Python: các câu hỏi thường gặp

### SDK có tự retry không?

Có, gói `openai` mặc định retry một số lỗi hai lần (`max_retries`). [Trang errors](https://llmwithcrypto.com/vi/docs/errors/) liệt kê những lỗi nào đáng retry.

### Tôi có thể tiếp tục dùng code OpenAI của mình không?

Có. API dùng đúng định dạng chat completions của OpenAI: trỏ OpenAI SDK, LangChain hoặc bất kỳ công cụ tương thích OpenAI nào vào base URL của chúng tôi với khóa của bạn, và đổi tên model. [Hướng dẫn chuyển đổi](https://llmwithcrypto.com/vi/guides/switch-openai-sdk-to-open-models/) liệt kê những gì cần kiểm tra.

### Những framework Python nào hoạt động?

Bất kỳ thứ gì chấp nhận base URL tương thích OpenAI. [Trang LangChain](https://llmwithcrypto.com/vi/docs/langchain/) hiển thị LangChain và LlamaIndex.

---

LLMwithCrypto: LLMwithCrypto là API LLM tương thích OpenAI cho các mô hình open-weight — DeepSeek V4 Pro, DeepSeek V4.1 Flash, DeepSeek R1, Qwen3.5 397B A17B, Qwen3 235B A22B Instruct, gpt-oss-120b, gpt-oss-20b, GLM-4.7, Llama 3.3 70B Instruct, Gemma 4 31B, Mistral Large 3, Mistral Small 4 — thanh toán theo token từ số dư crypto trả trước, thấp hơn 5% so với giá trung vị của các nhà cung cấp công khai. Không cần KYC: không ID, không selfie, không giấy tờ. Prompt và output không được lưu trữ.
