Lingara Lingara Dokumentasi Panduan API Pustaka Aplikasi Buat Aplikasi web
Bahasa: Bahasa Indonesia

Kirim giliran tutor

Versi API 2026-10-affable-towhee

post https://api.getlingara.com/v1/tutor/message

Mengirim satu pesan ke tutor dan mengalirkan balasannya sebagai peristiwa delta, diakhiri dengan done. Tidak ada yang disimpan: kirim percakapan terbaru dalam history, hingga 20 entri. character dan situation menentukan adegan. Memerlukan paket berbayar.

Cakupan tutor:converse

Parameter

Lingara-Versionheaderstringopsional
Versi API yang digunakan untuk menjawab permintaan ini. Tanpanya, token akses mendapatkan versi yang disematkan pada kliennya, dan permintaan tanpa token mendapatkan versi saat ini. Versi yang masih dalam pengembangan hanya dapat dicapai dengan menyebutkannya di sini. Versi yang tidak dikenal dijawab 400 dengan kode api_version_unknown. GET /v1/versions mencantumkan versi-versinya.

Isi permintaan application/json

messagestringwajib
historyarray of TurnEntryopsional
roleTurnRolewajib
contentstringwajib
source_langstringwajib
target_langstringwajib
levelinteger | nullopsional
characterstring | nullopsional
situationstring | nullopsional

Respons

200 Balasan tutor, sepotong demi sepotong

Peristiwa stream text/event-stream

Tidak mengirim komentar keepalive.

delta TurnDelta
textstringwajib
notice Notice
codestringwajib
messagestringwajib
done Done Mengakhiri stream
error StreamError Mengakhiri stream

Tiba di dalam respons 200. Baris status sudah dikirim, sehingga kegagalan setelah stream dibuka dilaporkan sebagai event ini.

codestringwajib
messagestringwajib
plan_idstring | nullopsional

Galat

402application/json
Panggilan klien dengan penagihan per pemakaian ditolak sebelum menghabiskan apa pun. spend_cap_reached: klien atau akunnya telah mencapai batas pengeluaran bulanannya; naikkan batasnya di halaman Integrasi. metered_billing_inactive: penagihan per pemakaian tidak aktif untuk akun ini; siapkan, atau perbarui metode pembayarannya, di halaman Integrasi.
410application/json
Versi API yang digunakan untuk menjawab permintaan ini telah dihentikan. Kirim versi yang didukung di Lingara-Version, atau sematkan klien ke versi lain.
4XXapplication/json
Permintaan ditolak. code menyebutkan alasannya, dan error menjelaskannya dengan kata-kata.
503application/json · text/plain
Layanan sementara tidak tersedia; coba lagi setelah jumlah detik di Retry-After. Selama pemeliharaan, isi respons berupa teks biasa, bukan amplop galat.
5XXapplication/json
Permintaan ditolak. code menyebutkan alasannya, dan error menjelaskannya dengan kata-kata.
codestringwajib

Alasan permintaan ditolak, sebagai kode tetap untuk percabangan: misalnya insufficient_scope (403), rate_limited (429) dan, untuk klien dengan penagihan per pemakaian, spend_cap_reached (402) dan metered_billing_inactive (402).

errorstringwajib

Contoh

Bahasa contoh kode

curl

curl -N -X POST "https://api.getlingara.com/v1/tutor/message" \
  -H "Authorization: Bearer $LINGARA_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"message":"我要两斤荔枝。","history":[{"role":"assistant","content":"欢迎!今天的荔枝很新鲜。"}],"source_lang":"en","target_lang":"zh","level":2,"character":"a fruit seller in a night market","situation":"buying lychees, haggling"}'

TypeScript

const reply = client.sendTutorMessage({
  message: "你好!我想点一杯茶。",
  history: [],
  source_lang: "en",
  target_lang: "zh",
});
for await (const ev of reply) {
  if (ev.event === "delta") process.stdout.write(ev.data.text);
}

Rust

use lingara::models::{SendTutorMessageEvent, TutorTurnRequest};

let request = TutorTurnRequest {
    message: "你好!我想点一杯茶。".into(),
    history: Vec::new(),
    source_lang: "en".into(),
    target_lang: "zh".into(),
    level: None,
    character: None,
    situation: None,
};
let mut reply = client.send_tutor_message(&request).await?;
while let Some(event) = reply.next().await {
    if let SendTutorMessageEvent::Delta(delta) = event? {
        print!("{}", delta.text);
    }
}

Go

s, err := client.SendTutorMessage(ctx, lingara.TutorTurnRequest{
	Message:    "你好!我想点一杯茶。",
	SourceLang: "en",
	TargetLang: "zh",
})
if err != nil {
	return err
}
defer s.Close()
for ev, err := range s.Events() {
	if err != nil {
		return err
	}
	if delta, ok := ev.(lingara.SendTutorMessageEventDelta); ok {
		fmt.Print(delta.Data.Text)
	}
}

Java

import com.getlingara.client.model.SendTutorMessageEvent;
import com.getlingara.client.model.TutorTurnRequest;

TutorTurnRequest turn =
    new TutorTurnRequest().message("荔枝多少钱?").sourceLang("en").targetLang("zh").level(2);
try (EventStream<SendTutorMessageEvent> stream = client.sendTutorMessage(turn)) {
  for (SendTutorMessageEvent event : stream) {
    if (event instanceof SendTutorMessageEvent.Delta delta) {
      System.out.print(delta.data().getText());
    } else if (event instanceof SendTutorMessageEvent.Notice notice) {
      System.out.println("\n(" + notice.data().getMessage() + ")");
    }
  }
}

Kotlin

import com.getlingara.kotlin.LingaraClient
import com.getlingara.kotlin.model.SendTutorMessageEvent
import com.getlingara.kotlin.model.TutorTurnRequest

val turn = TutorTurnRequest(message = "荔枝多少钱?", sourceLang = "en", targetLang = "zh", level = 2)
client.sendTutorMessage(turn).use { stream ->
    stream.collect { event ->
        when (event) {
            is SendTutorMessageEvent.Delta -> print(event.data.text)
            is SendTutorMessageEvent.Notice -> println("\n(${event.data.message})")
        }
    }
}

Ruby

history = [{role: "user", content: "你好"}, {role: "assistant", content: "你好!你想练习什么?"}]
client.send_tutor_message(message: "我想点菜", history: history, source_lang: "en", target_lang: "zh") do |event|
  case event
  in Lingara::SendTutorMessageEventDelta => delta then print delta.data.text
  in Lingara::SendTutorMessageEventNotice => notice then warn notice.data.message
  else nil
  end
end
puts

PHP

use Lingara\Model\TutorTurnRequest;
use Lingara\Stream\SendTutorMessageEvent;

$turn = new TutorTurnRequest(['message' => '荔枝多少钱?', 'source_lang' => 'en', 'target_lang' => 'zh', 'level' => 2]);
foreach ($client->sendTutorMessage($turn) as $event) {
    if ($event instanceof SendTutorMessageEvent\Delta) {
        echo $event->data->getText();
    } elseif ($event instanceof SendTutorMessageEvent\Notice) {
        echo "\n(", $event->data->getMessage(), ')';
    }
}
echo "\n";

Lebih suka pustaka? Lihat bagian Pustaka.

Contoh stream

event: delta
data: {"text":"两斤荔枝,"}

event: delta
data: {"text":"一共三十块。"}

event: done
data: {}

Jika terjemahan berbeda dengan referensi berbahasa Inggris, referensi berbahasa Inggris yang berlaku.