Lingara Lingara Dokumentasi Panduan API Pustaka Aplikasi Bina Apl web
Bahasa: Bahasa Melayu

Hantar giliran tutor

Versi API 2026-10-affable-towhee

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

Menghantar satu mesej kepada tutor dan menstrim balasan sebagai peristiwa delta, berakhir dengan done. Tiada apa-apa disimpan: hantar perbualan terkini dalam history, sehingga 20 entri. character dan situation menetapkan suasana. Memerlukan pelan berbayar.

Skop tutor:converse

Parameter

Lingara-Versionheaderstringpilihan
Versi API yang digunakan untuk menjawab permintaan ini. Tanpanya, token akses mendapat versi yang dipautkan kepada kliennya, dan permintaan tanpa token mendapat versi semasa. Versi yang masih dalam pembangunan hanya boleh dicapai dengan menamakannya di sini. Versi yang tidak dikenali dijawab 400 dengan kod api_version_unknown. GET /v1/versions menyenaraikan versi.

Kandungan permintaan application/json

messagestringwajib
historyarray of TurnEntrypilihan
roleTurnRolewajib
contentstringwajib
source_langstringwajib
target_langstringwajib
levelinteger | nullpilihan
characterstring | nullpilihan
situationstring | nullpilihan

Respons

200 Balasan tutor, sedikit demi sedikit

Peristiwa strim text/event-stream

Tidak menghantar komen keepalive.

delta TurnDelta
textstringwajib
notice Notice
codestringwajib
messagestringwajib
done Done Menamatkan strim
error StreamError Menamatkan strim

Tiba di dalam respons 200. Baris status telah pun dihantar, jadi kegagalan selepas strim dibuka dilaporkan sebagai peristiwa ini.

codestringwajib
messagestringwajib
plan_idstring | nullpilihan

Ralat

402application/json
Panggilan klien bermeter telah ditolak sebelum ia membelanjakan apa-apa. spend_cap_reached: klien atau akaunnya telah mencapai had perbelanjaan bulanannya; naikkan had di halaman Integrasi. metered_billing_inactive: pengebilan bermeter tidak aktif untuk akaun ini; sediakannya, atau kemas kini kaedah pembayaran, di halaman Integrasi.
410application/json
Versi API yang digunakan untuk menjawab permintaan ini telah dihentikan. Hantar versi yang disokong dalam Lingara-Version, atau pautkan klien kepada versi lain.
4XXapplication/json
Permintaan ditolak. code menyatakan sebabnya, dan error menerangkannya dengan perkataan.
503application/json · text/plain
Perkhidmatan tidak tersedia buat sementara waktu; cuba lagi selepas bilangan saat dalam Retry-After. Semasa penyelenggaraan, kandungan ialah teks biasa dan bukan sampul ralat.
5XXapplication/json
Permintaan ditolak. code menyatakan sebabnya, dan error menerangkannya dengan perkataan.
codestringwajib

Sebab permintaan ditolak, sebagai kod stabil untuk dijadikan asas percabangan: contohnya insufficient_scope (403), rate_limited (429) dan, bagi klien bermeter, spend_cap_reached (402) dan metered_billing_inactive (402).

errorstringwajib

Contoh

Bahasa contoh kod

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 bahagian Pustaka.

Contoh strim

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

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

event: done
data: {}

Jika terjemahan dan rujukan bahasa Inggeris berbeza, rujukan bahasa Inggeris adalah yang betul.