PL ▾
Pobierz klucz API

Szczegółowy przewodnik po parametrach API dużych modeli: od pól żądania do pól odpowiedzi

Pierwszy kontakt z dokumentacją chat completions może przytłoczyć długą listą parametrów. Traktuj wywołanie jak zamawianie jedzenia: messages to rozmowa z kelnerem, temperature to zakres kreatywności kucharza, max_tokens to maksymalna porcja, a tools to możliwość zadawania pytań o składniki. Przejrzyjmy każde pole krok po kroku.

Zaktualizowano

Kluczowe informacje

  • messages składa się z ról system, user, assistant, tool. Model nie ma pamięci, więc to Ty musisz dostarczyć historię.
  • temperature kontroluje losowość, top_p zakres kandydatów. Ich działanie jest podobne, więc zwykle wystarczy zmienić jeden parametr.
  • finish_reason określa działanie: stop to zakończenie, length to ucięcie, tool_calls wymaga wykonania funkcji.
  • Pole usage to jedyny wiarygodny podstawę do rozliczeń i budżetu; odczytuj je zawsze.

Jak wygląda żądanie

Adres endpointu to POST https://api.apidamoxing.com/v1/chat/completions, nagłówek autoryzacji to Authorization: Bearer <key>, ciało żądania to JSON kompatybilny z OpenAI. Zobacz pełne żądanie z popularnymi polami:

curl https://api.apidamoxing.com/v1/chat/completions \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "uncensored",
    "messages": [
      {"role": "system", "content": "你是一位耐心的天文科普作者。"},
      {"role": "user", "content": "为什么月亮总是同一面朝向地球?"}
    ],
    "temperature": 0.7,
    "top_p": 0.9,
    "max_tokens": 400,
    "stop": ["###"]
  }'

Zwróć uwagę, że model musi mieć wartość uncensored, ponieważ dostępny jest tylko jeden model. Możesz to sprawdzić przez GET /v1/models. Poniżej wyjaśnienie pól.

Po przeczytaniu zauważysz trzy kategorie: „co powiedzieć” (messages, tools), „jak powiedzieć” (temperature, top_p) oraz „ile i kiedy przestać” (max_tokens, stop, stream). Zrozumienie kategorii pomoże Ci zgadnąć przeznaczenie nowych pól.

messages: „Księga” tej rozmowy

messages to tablica, gdzie każdy element ma role i content. Wyobraź sobie, że to dziennik protokołów z spotkań, gdzie model czyta wszystko od początku i pisze kolejną stronę. Nie pamięta tego, co czytał wcześniej, więc w rozmowie wieloetapowej musisz sam podać pełną historię.

roleKto napisałZastosowanie
systemTy (developer)Definicja roli, zasad i formatu; zwykle na początku
userKońcowy użytkownikPytanie lub instrukcja
assistantModel (lub uzupełniona przez Ciebie historia)Poprzednie odpowiedzi, niezbędne do kontekstu wieloetapowego
toolTwój programWynik wykonania funkcji, wymaga tool_call_id

Popularny trik: aby wymusić ton, dodaj do historii wiadomość assistant. Pamiętaj, że suma tokenów w prompt i output nie może przekroczyć 100,000 tokenów — im dłuższa historia, tym więcej miejsca zajmuje.

Przykład: system mówi „odpowiadaj tylko na pytania o zamówienia, max trzy zdania”. Pytanie 1: czas dostawy. Pytanie 2: „a zwroty?”. W messages muszą być: system, user 1, assistant 1, user 2. Bez tego model nie zrozumie, na co odnosi się „a zwroty”.

Parametry próbkowania: regulacja „zakresu kreatywności”

Model przypisuje prawdopodobieństwa do wszystkich możliwych tokenów, a następnie losuje. Poniższe parametry to pokrętła regulujące te reguły:

ParametrAnalogiaJak zrozumiećTypowe wartości
temperatureStopień kreatywności modeluNiższe wartości dają wyniki bardziej konserwatywne i stabilne; wyższe zwiększają dygresyjnośćZakres 0–1,2; dla pytań i odpowiedzi ustaw niższą wartość, dla twórczości wyższą
top_pWybór spośród najlepszych kandydatówLosuj tylko spośród kandydatów, których kumulatywne prawdopodobieństwo osiągnęło pZakres 0,8–1; domyślna wartość zwykle wystarcza

Oba parametry kontrolują „stopień losowości”, ale z różnych perspektyw. Jednoczesna zmiana obu utrudnia ocenę, który z nich wpłynął na wynik, dlatego zalecamy modyfikację tylko jednego parametru na raz. Pola standardowego próbkowania są przekazywane bez zmian; interfejs nie modyfikuje ich samodzielnie.

Dla jasności: załóżmy, że najbardziej prawdopodobne trzy kolejne tokeny mają prawdopodobieństwo 60%, 30% i 10%. Obniżenie temperature sprawia, że token z 60% staje się wyraźnie dominujący, a wynik bardziej przypomina stały wybór pierwszego kandydata; podwyższenie temperature zbliża prawdopodobieństwa wszystkich trzech, zwiększając szansę wylosowania rzadkich tokenów. Przy top_p = 0,9 pozostawiane są tylko dwa pierwsze tokeny (o łącznym prawdopodobieństwie 90%), trzeci jest odrzucany. Powyższe liczby ilustrują zasadę działania i nie odzwierciedlają rzeczywistego prawdopodobieństwa.

Kontrola długości i warunków zakończenia: max_tokens, stop, stream

ParametrZastosowanieKluczowe uwagi
max_tokensOgranicza maksymalną liczbę tokenów generowanych w tym zapytaniuDomyślnie 2048, maksymalnie 32,000 na zapytanie; suma tokenów z promptem nie może przekroczyć 100,000
stopZatrzymuje generowanie po napotkaniu określonego ciągu znakówMożna przekazać tablicę ciągów; przydatne do segmentacji lub przycinania w stałym formacie
streamOkreśla, czy odpowiedź ma być zwracana strumieniowoUstaw true, aby wysyłać strumieniowo przez SSE; na końcu dodawany jest obiekt z metrykami usage.

max_tokens to jak wielkość talerza: jeśli jest za mały, danie zostaje niedokończone, a finish_reason to length. stop to umowny sygnał, po którym model przestaje. stream nie zmienia treści, tylko sposób dostarczania: zamiast podawać wszystko naraz, podaje porcje, co przyspiesza wrażenie odpowiedzi.

Praktyczne zastosowanie stop: jeśli poprosisz model o generowanie w formacie „Pytanie: … Odpowiedź: …###”, ustawienie ### jako wartości stop spowoduje automatyczne zakończenie generowania po napotkaniu separatora. Oszczędza to tokeny i zapobiega zbędnym dodatkowym wywódcom. Pamiętaj, że przy trafieniu stop finish_reason również przyjmuje wartość stop; jeśli musisz rozróżnić te przypadki, sprawdź treść odpowiedzi samodzielnie.

tools i tool_choice: pozwól modelowi „zadzwonić” do Ciebie

Model nie ma bezpośredniego dostępu do danych w czasie rzeczywistym. W podejściu function calling najpierw informujesz model o dostępnych funkcjach. Gdy uzna, że jest to potrzebne, zamiast odpowiadać bezpośrednio, zwraca informację „wywołaj funkcję X z parametrami Y”. Twój program wykonuje funkcję, zwraca wynik, a model na tej podstawie formułuje ostateczną odpowiedź. Format jest zgodny z OpenAI.

ParametrWartośćOpis
toolsTablica opisów funkcjiKażdy obiekt zawiera name, description oraz parameters w formacie JSON Schema
tool_choice"auto" / "none" / nazwa konkretnej funkcjiauto – decyzja należy do modelu; none – wyłączenie wywołań; nazwa funkcji – wymuszenie wywołania danej funkcji
import json
import os
from openai import OpenAI

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

tools = [{
    "type": "function",
    "function": {
        "name": "get_tide_time",
        "description": "查询某港口今天的高潮时刻",
        "parameters": {
            "type": "object",
            "properties": {"port": {"type": "string", "description": "港口名称"}},
            "required": ["port"],
        },
    },
}]

messages = [{"role": "user", "content": "青岛今天几点涨潮?"}]
first = client.chat.completions.create(
    model="uncensored", messages=messages, tools=tools, tool_choice="auto"
)
msg = first.choices[0].message

if msg.tool_calls:
    call = msg.tool_calls[0]
    args = json.loads(call.function.arguments)
    result = {"port": args["port"], "high_tide": "14:20"}   # 这里换成你自己的查询
    messages.append(msg)
    messages.append({"role": "tool", "tool_call_id": call.id, "content": json.dumps(result, ensure_ascii=False)})
    final = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
    print(final.choices[0].message.content)
else:
    print(msg.content)

Proces składa się z dwóch rund: w pierwszej otrzymujesz tool_calls, a w drugiej dołączasz wynik z role: tool i wysyłasz kolejne zapytanie. Im bardziej szczegółowy opis (description), tym lepiej model wie, kiedy wywołać funkcję. Parametry są przekazywane jako ciąg JSON – koniecznie użyj json.loads do parsowania i walidacji, nie ufasz im bez sprawdzenia.

Pola odpowiedzi: zrozumienie „paragonu” z zapytania

Pomyślna odpowiedź ma zazwyczaj następującą strukturę, z stałymi polami:

{
  "id": "chatcmpl-xxxx",
  "object": "chat.completion",
  "model": "uncensored",
  "choices": [
    {
      "index": 0,
      "message": {"role": "assistant", "content": "因为潮汐锁定……"},
      "finish_reason": "stop"
    }
  ],
  "usage": {"prompt_tokens": 38, "completion_tokens": 212, "total_tokens": 250}
}
PoleZnaczenie
choicesTablica wyników (zazwyczaj jedno-wierszowa); treść odpowiedzi znajduje się w choices[0].message.content
finish_reasonPowód zakończenia: stop – normalne zakończenie; length – przycięcie po przekroczeniu max_tokens; tool_calls – model zażądał wywołania funkcji
usage.prompt_tokensLiczba tokenów zużytych na wejście
usage.completion_tokensLiczba tokenów zużytych na wyjście
usage.total_tokensSuma obu wartości

W kodzie najpierw sprawdź finish_reason: jeśli to length, poinformuj użytkownika o ucięciu treści lub kontynuuj automatycznie; jeśli to tool_calls, przejdź do gałęzi wykonania funkcji. Szczegółowe metody rozliczenia znajdziesz w artykule Tokeny i rozliczenia.

Najczęstsze błędy przy konfiguracji parametrów

  • Traktowanie max_tokens jako „górnej granicy wejścia”. max_tokens ogranicza tylko wyjście; wejście kontrolujesz samodzielnie.
  • Myślenie, że model pamięta poprzednie zapytanie. Każde zapytanie jest niezależne – historię musisz przekazać samodzielnie.
  • Ustawienie temperature na 0 nie gwarantuje identycznych wyników. Wyniki będą bardziej stabilne, ale nie należy zakładać zgodności znak po znaku.
  • Bezpośrednie odczytywanie choices[0].message w trybie strumieniowym. W blokach strumieniowych pola to delta – musisz połączyć je samodzielnie.
  • Pominięcie dodania wiadomości assistant z tool_calls po wywołaniu funkcji, co powoduje błąd w drugiej rundzie.

Znaczenie kodów błędów i strategię ponawiania zapytań znajdziesz w Dokumentacji. Aby zobaczyć kompletny przykład łączący te parametry, odwołaj się do artykułu Budowanie chatbota.

Najczęściej zadawane pytania

Czy można jednocześnie ustawić temperature i top_p?

Tak, ale trudno jest rozdzielić wpływ obu parametrów. W większości przypadków wystarczy regulacja temperature; top_p zmieniaj tylko wtedy, gdy potrzebujesz precyzyjnej kontroli zakresu kandydatów.

Co zrobić, gdy finish_reason wynosi length?

Oznacza to, że wyjście zostało przycięte po osiągnięciu max_tokens. Możesz zwiększyć max_tokens (maksymalny limit to 32,000) lub poprosić model o generowanie w mniejszych fragmentach.

Czy format tools jest zgodny z OpenAI?

Tak. Używasz tools i tool_choice w formacie OpenAI, a pole tool_calls w odpowiedzi ma identyczną strukturę.

Jak uzyskać informacje o zużyciu w odpowiedzi strumieniowej?

Po włączeniu stream na końcu odpowiedzi automatycznie dodawany jest blok danych zawierający usage. Wystarczy go odczytać – nie są potrzebne dodatkowe parametry.

Wypełnij formularz, aby uzyskać klucz

Utwórz konto, skopiuj klucz i zmień Base URL. Konfiguracja jest prosta.

Pobierz klucz API