Lingara Lingara 說明文件 學習指南 API 程式庫 App 建立 網頁版
語言: 粵語

導師提示

呢頁係由英文翻譯過嚟嘅。如果兩個版本有出入,以英文頁為準。 睇英文頁

你個 App 可以喺回覆入面加一個 tutor_note,俾 Lingara 嘅導師一行情境資料,例如學習者啱啱練習咗邊啲詞。淨係喺你個 manifest 有聲明佢,而且學習者安裝你個 App 嗰陣開咗佢,個提示先會去到導師度。想改呢個選擇,學習者要解除安裝你個 App 再重新安裝。

Lingara 會點處理佢

  • 換行會變成空格。
  • 控制字元同方向覆寫字元會被移除。
  • 長過 280 個字元嘅提示會被剪短到 280 個字元,再用 … 收尾。字元係用 Unicode 純量值嚟計,唔係用位元組或者螢幕上面嘅字形。
  • 你個 manifest 冇聲明、或者學習者冇允許嘅提示,會被丟棄。

導師點樣睇佢

導師會將你個提示當係第三方嘅引述文字嚟睇,永遠唔會當係指示。如果 Lingara 嘅安全檢查拒絕咗個提示,佢就會被丟棄,學習者嗰一輪對話照樣冇佢咁繼續。學習者永遠都唔會見到個提示。

好嘅提示

一個好嘅提示係一個導師用得着嘅簡單事實,例如「學習者啱啱溫習咗佢日文計畫入面 5 個詞。」佢講學習者做緊乜,而唔係導師應該做乜。唔好寫指示、唔好評價學習者,亦唔好寫任何學習者喺你張卡片上面冇見過嘅嘢。

程式碼例子嘅語言

TypeScript

function withNote(request: AppRenderRequest) {
  const note = planLine(request);
  // Plain text, at most 280 characters; the tutor reads it, the learner does not.
  return note === "" ? todayCard(0) : reply(todayCard(0)).tutorNote(note);
}

Rust

async fn render(seen: Seen, request: AppRenderRequest) -> Result<Reply, BoxError> {
    let (lang, progress) = shared_plan(&request);
    let count = seen.lock().map_err(|_| "poisoned")?.get(&request.subject).copied().unwrap_or(0);
    let card = today_card("Today's five", &lang)?;
    // Plain text the learner's tutor can read: at most 280 characters.
    let note = match progress {
        Some((done, total)) => format!("The learner has reviewed {count} words with this app today; {done} of {total} sets done."),
        None => format!("The learner has reviewed {count} words with this app today."),
    };
    Ok(reply(card).tutor_note(note)?)
}

Go

card, err := lingaraapps.NewCard().Heading("Daily five", 1).Text("雨 · 雪 · 风 · 云 · 雷").Build()
if err != nil {
	return nil, err
}
// Plain text, at most 280 characters, for Lingara's tutor to use.
return lingaraapps.Reply(card).
	TutorNote("The learner is reviewing weather words today."), nil

Java

import com.getlingara.apps.Card;
import com.getlingara.apps.Reply;

Card card = Card.card().heading("Today's five", 1).term("雨", "yǔ", "rain", "zh").build();
// Plain text, at most 280 characters; the tutor reads it beside the card.
return Reply.reply(card).tutorNote("The learner is reviewing weather words today.");

Kotlin

import com.getlingara.apps.kotlin.Reply
import com.getlingara.apps.kotlin.card
import com.getlingara.apps.kotlin.reply

val c =
    card {
        heading("Today's five", 1)
        term("雨", reading = "yǔ", gloss = "rain", lang = "zh")
    }
// Plain text, at most 280 characters; the tutor reads it beside the card.
return reply(c).tutorNote("The learner is reviewing weather words today.")

Ruby

note = plan_line(request)
# Plain text, at most 280 characters; the tutor reads it, the learner does not.
note.empty? ? today_card(0) : Lingara::Apps.reply(today_card(0)).tutor_note(note)

PHP

use Lingara\Apps\Reply;

function withNote(AppRenderRequest $request): CardModel|Reply
{
    $note = planLine($request);
    // Plain text, at most 280 characters; the tutor reads it, the learner does not.
    return $note === '' ? todayCard(0) : Reply::of(todayCard(0))->tutorNote($note);
}