Cách gọi Jev trên AiHubMix: Hướng dẫn phân loại có cấu trúc

AIHubMixĐọc 5 phút
Cách gọi Jev trên AiHubMix: Hướng dẫn phân loại có cấu trúc

Câu trả lời ngắn gọn: jev-1.13 không tạo ra văn bản. Bạn gửi một đoạn văn bản cùng với một tập hợp các câu hỏi có tên đến https://aihubmix.com/v1/systemone, và bạn nhận lại các câu trả lời đã được gõ theo tên câu hỏi của bạn — một danh mục, một điểm số, hoặc một xác suất. Không cần phân tích. Dưới đây là một yêu cầu hoạt động, định dạng phản hồi đầy đủ, và một sai sót thiết kế sẽ âm thầm làm giảm độ chính xác của bạn.

Jev dùng để làm gì

Sử dụng nó khi bạn cần một phán đoán, không phải một đoạn văn: định tuyến một vé hỗ trợ, đánh giá mức độ nghiêm trọng, đánh dấu tính cấp bách, kiểm soát nội dung. Trang mô hình nói rõ ràng — "Không tạo văn bản, không có gì để phân tích."

Sử dụng một mô hình trò chuyện bình thường thay vào đó khi bạn cần giải thích, tóm tắt, hoặc bất kỳ đầu ra tự do nào. jev không thể tạo ra những điều đó.

Trước khi bạn bắt đầu

  • [ ] Python 3 đã được cài đặt (thư viện tiêu chuẩn là đủ)
  • [ ] Một tài khoản AiHubMix và khóa API
  • [ ] Khóa được xuất ra dưới dạng AIHUBMIX_API_KEY, không bao giờ được mã hóa cứng trong mã nguồn

Bạn không cần một SDK OpenAI, LangChain, hoặc gói requests.

Bước 1 — Biết điểm cuối

POST https://aihubmix.com/v1/systemone
Authorization: Bearer YOUR_KEY
Content-Type: application/json

Đây là một tuyến đường cụ thể cho mô hình, không /v1/chat/completions. Các khách hàng tương thích với OpenAI không thể gọi nó. Sử dụng HTTP thông thường.

Bước 2 — Chọn loại câu hỏi của bạn

Có ba loại, và bạn có thể kết hợp chúng tự do trong một yêu cầu:

LoạiSử dụng choBạn cung cấp
choiceChọn một danh mụccriteria như một dict: nhãn → định nghĩa
scoreĐánh giá trên một thang điểm có thứ tựcriteria như một danh sách, từ thấp đến cao
noulMột phán đoán có/khôngkhông có gì ngoài instructions

Bước 3 — Xây dựng yêu cầu

state là văn bản cần được đánh giá. questions khóa là những tên bạn tự đặt; phản hồi sử dụng cùng tên.

payload = {
    "model": "jev-1.13",
    "state": "Chào, tôi đã cố gắng kết nối tài khoản Stripe của mình trong 3 ngày "
             "và nó cứ thất bại. Tôi đang mất doanh thu. Xin hãy giúp đỡ càng sớm càng tốt.",
    "questions": {
        "department": {
            "type": "choice",
            "instructions": "Nhóm nào nên xử lý việc này",
            "criteria": {
                "billing":   "Vấn đề thanh toán hoặc đăng ký",
                "technical": "Lỗi hoặc vấn đề tích hợp",
                "sales":     "Câu hỏi về giá cả hoặc tài khoản",
            },
        },
        "frustration": {
            "type": "score",
            "instructions": "Khách hàng có vẻ thất vọng như thế nào",
            "criteria": [
                "Điềm tĩnh, chỉ nêu rõ sự thật",
                "Thất vọng nhưng lịch sự",
                "Rất tức giận, ngôn ngữ mạnh mẽ",
            ],
        },
        "is_urgent": {
            "type": "noul",
            "instructions": "Tin nhắn truyền đạt tính cấp bách hoặc nhạy cảm về thời gian",
        },
    },
}

Bước 4 — Gửi nó bằng thư viện tiêu chuẩn

import json, os, urllib.error, urllib.request

def ask(payload):
    req = urllib.request.Request(
        "https://aihubmix.com/v1/systemone",
        data=json.dumps(payload).encode(),
        headers={"Authorization": "Bearer " + os.environ["AIHUBMIX_API_KEY"],
                 "Content-Type": "application/json"},
        method="POST",
    )
    try:
        with urllib.request.urlopen(req, timeout=60) as r:
            return json.loads(r.read())
    except urllib.error.HTTPError as e:
        raise SystemExit(f"HTTP {e.code}: {e.read().decode(errors='replace')[:500]}")

Giữ việc xây dựng yêu cầu bên trong một hàm. Nếu bạn xây dựng và gửi ở cấp độ mô-đun, việc nhập tệp sẽ kích hoạt lại cuộc gọi và tiêu tốn token.

Bước 5 — Đọc các câu trả lời

Mỗi câu trả lời lưu trữ giá trị của nó dưới một khóa tương ứng với type, vì vậy một bộ truy cập bao phủ cả ba:

data = ask(payload)
for name, ans in data["answers"].items():
    kind = ans["type"]
    print(name, kind, ans[kind], ans.get("confidence"))
print("usage:", data.get("usage"))

Đầu ra đã được xác minh:

department   choice  billing   0.51
frustration  score   1         1
is_urgent    noul    1         None
usage: {'input_tokens': 424, 'output_tokens': 73}

Bước 6 — Hiểu toàn bộ thông điệp

Vòng lặp in ẩn các trường hữu ích. JSON thô cho một câu trả lời score:

{
  "type": "score",
  "score": 1,
  "legend": {"0": "Điềm tĩnh, chỉ nêu rõ sự thật", "1": "Thất vọng nhưng lịch sự", "2": "Rất tức giận, ngôn ngữ mạnh mẽ"},
  "probabilities": {"0": 0, "1": 1, "2": 0},
  "confidence": 1
}
  • legend liên kết chỉ số trở lại với cách diễn đạt của bạn — số nguyên tự mô tả, vì vậy bạn không cần bảng tra cứu trong mã của mình.
  • probabilities cung cấp phân phối đầy đủ, hữu ích cho việc phát hiện một sự gần như hòa.
  • noul không có trường confidence . Xác suất của nó là tín hiệu.

Cấp cao nhất cũng trả về usage, id, provider (TypeSafe), và phiên bản backend đã được giải quyết typesafe/jev-1.13-20260917.

Sai lầm làm giảm độ chính xác của bạn

Trong yêu cầu ở trên, department trả về billing với độ tin cậy là 0.51. Lặp lại yêu cầu giống hệt đã trả về cùng một nhãn với 0.38 — câu trả lời ổn định, nhưng độ chắc chắn được nêu không phải vậy.

Nguyên nhân nằm ở các tiêu chí, không phải mô hình. billing là "Vấn đề thanh toán hoặc đăng ký" và technical là "Lỗi hoặc vấn đề tích hợp." Một tích hợp Stripe cứ thất bại thực sự phù hợp với cả hai. Mô hình đang báo cáo một sự mơ hồ đã được viết vào sơ đồ.

Hai quy tắc trước khi sản xuất:

  1. Viết choice tiêu chí mà là loại trừ lẫn nhau. Nếu một con người sẽ do dự giữa hai nhãn, mô hình cũng sẽ như vậy.
  2. Đặt ngưỡng độ tin cậy và định tuyến các kết quả có độ tin cậy thấp đến hàng đợi của con người thay vì chấp nhận chúng như những quyết định. Một mô hình thừa nhận sự không chắc chắn có giá trị hơn một mô hình che giấu nó.

Danh sách kiểm tra trước khi ra mắt

  • [ ] Khóa được tải từ môi trường hoặc một tệp 600 chế độ mà VCS của bạn bỏ qua
  • [ ] choice tiêu chí đã được xem xét để tìm sự chồng chéo
  • [ ] Ngưỡng độ tin cậy đã được xác định, với một con đường dự phòng bên dưới nó
  • [ ] Các câu trả lời noul được xử lý riêng — chúng không mang theo confidence
  • [ ] Các câu hỏi không sử dụng đã được loại bỏ (3 câu hỏi tiêu tốn 424 token đầu vào; 2 câu tiêu tốn 355)
  • [ ] Các phản hồi không phải 2xx đã được ghi lại với nội dung thô

Câu hỏi thường gặp

Tôi có thể sử dụng SDK OpenAI không? Không. /v1/systemone là một tuyến đường không tương thích với OpenAI.

Jev có thể trả về một câu hoặc tóm tắt không? Không. Nó chỉ trả lời các câu hỏi đã được gõ mà bạn định nghĩa.

Có bao nhiêu câu hỏi cho mỗi yêu cầu? Các bài kiểm tra đã được xác minh sử dụng hai và ba. Mỗi câu hỏi thêm token đầu vào và đầu ra, vì vậy chỉ bao gồm những gì bạn sẽ hành động.

Có một bí danh phiên bản không? Trang mô hình liệt kê một jev-latest bí danh bên cạnh jev-1.13. Ghi rõ phiên bản nếu khả năng tái sản xuất là quan trọng.

Nó tốn bao nhiêu? Trang mô hình công bố $0.0462 / M token đầu vào và $0 / M token đầu ra. Đây là số liệu của nhà cung cấp — xác nhận giá cả hiện tại trước khi lập ngân sách.

Cửa sổ ngữ cảnh là gì? Trang mô hình không nhất quán: 64K trong tiêu đề của nó, 32K trong bảng nhà cung cấp. Xác minh với đầu vào dài nhất của riêng bạn trước khi dựa vào bất kỳ điều nào.

Phạm vi của hướng dẫn này

Tất cả những điều trên đã được xác minh với ba cuộc gọi trực tiếp đối với một đầu vào duy nhất. Nó không đề cập đến độ trễ, gộp, thông lượng, hoặc hành vi trên các đầu vào không giống như ví dụ. Sự trôi dạt độ tin cậy là một quan sát đã được tái hiện, không phải là tỷ lệ lỗi đã đo — lặp lại nó trên dữ liệu của riêng bạn trước khi thiết lập ngưỡng.

Bắt đầu trên AiHubMix

jev-1.13 có sẵn thông qua AiHubMix, và trang mô hình mang tất cả những gì hướng dẫn này đã tham khảo: điểm cuối /v1/systemone, ba loại câu hỏi với định dạng criteria  của chúng, các trường phản hồi đầy đủ, và giá cả đã công bố của $0.0462 / M token đầu vào với $0 / M token đầu ra. Bí danh jev-latest giải quyết đến phiên bản mới nhất, vì vậy nó luôn cập nhật khi các phiên bản thay đổi.

Bắt đầu ở đây: https://aihubmix.com/model/jev-latest

Các bước tiếp theo:

  1. Tạo một tài khoản AiHubMix và tạo một khóa API
  2. Sao chép yêu cầu từ Bước 3 và hàm ask() từ Bước 4
  3. Thay thế state bằng một bản ghi thực tế từ hàng đợi của bạn
  4. So sánh kết quả với cách bạn phân loại bản ghi đó hôm nay

Nếu hướng dẫn này hữu ích, hãy đăng ký để nhận các bài viết trong tương lai về các mô hình đầu ra có cấu trúc và quy trình phân loại.