ヘルプとwiki お絵かき サインイン

Japanese Storywriting AI
AI Novelist 2.0

by Bit192

← Back to API Page

API Docs


Only a quickstart manual is available while the API is under development.

◆ About Tokens

Each model tokenizes the input context using the specific dictionary.
For ordinary Japanese text, the rule of thumb is 1.5 characters per token.
Context tokens + Tokens to generate must be the model's maximum sequence length or below.

If you need to calculate how many tokens you send, Tokenizer is available [ here ].


Text Completion API


Follow this section for using the text completion API (non-chat or freeform).

import json, requests

auth_key = 'Your API key';
api_server_url = 'https://api.tringpt.com/'

headers = {'Authorization': 'Bearer {}'.format(auth_key)}

send_body = {
	'text': "これはテストです",
	'length': 15,				# 出力するトークン数 出力が重いと途中で強制終了する場合があります
	'temperature': 0.7,			# ランダム度(0~2.5) 語彙が単調に感じる場合は上げてみてください
	'top_p': 0.7,				# Top Pサンプリング(0.01~1.0) 1より低いほど確率の低いトークンが除外される。極端に関係のない語彙が出ることを防ぎます
	'rep_pen': 1.15,			# 繰り返しペナルティ(1.0~2.0) 値が高すぎると出力が突飛になりすぎる可能性があります
	'model': 'spiko',			# デフォルトはsupertrin_highpresです。
#	spiko / spiko_solid / spiko_max / derrida_03 / damsel_ray / supertrin_highpres / supertrin_maxpresが有効です。
#
#	'top_k': 140,				# Top Kサンプリング(1~500) 上位nトークンのみを採用する
#	'top_a': 0.1,				# Top Aサンプリング(0~1.0) 確率が(一番確率の高いトークン^2 * Top A)以下のトークンを除外
#	'min_p': 0.0,				# Min Pサンプリング(0~1.0)
#	'tailfree': 1.0,			# Tail-freeサンプリング(0.01~1.0) 1より低いほど確率の低いトークンが除外される。やみおとめのみ対応
#	'rep_pen_range': 1024,			# 繰り返しペナルティを適用する範囲(0~2048)
#	'rep_pen_slope': 3.00,			# 繰り返しペナルティの傾斜(0.01~10)
#	'rep_pen_pres': None,			# コンテキスト中に単語が出た回数に依存する繰り返しペナルティ(0~100)
#	'typical_p': 1.0,			# Typicalサンプリング(0.01~1.0)
#	'badwords': '<unk>',			# 禁止ワードを設定します。<<|>>で区切ります。
#	'logit_bias': '【<<|>>_',		# 個別のトークンの出現率を調整します。<<|>>で区切ります。
#	'logit_bias_values': '-2.0|-0.1',	# 確率はlogit spaceに作用します。基本的には-5から+5程度が適正です。|で区切ります。設定がおかしいとエラーになります
#	'stoptokens': 'トマト<<|>>りんご',	# このシーケンスが生成されると強制的に出力が打ち切られます。<<|>>で区切ります。

}

response = requests.post(api_server_url+'/api', headers=headers, json=send_body)
response_array = json.loads(response.text)

result = response_array['data'][0]
	  
$auth_key = 'Your API key';
$api_server_url = 'https://api.tringpt.com/';

$headers = [
    'Content-type: application/json',
    'Authorization: Bearer '.$auth_key
];
$body = [
	'text' => "これはテストです",
	'length' => 15,				// 出力するトークン数(1~2048) 出力が重いと途中で強制終了する場合があります
	'temperature' => 0.7,			// ランダム度(0~2.5) 語彙が単調に感じる場合は上げてみてください
	'top_p' => 0.7,				// Top Pサンプリング(0.01~1.0) 1より低いほど確率の低いトークンが除外される。極端に関係のない語彙が出ることを防ぎます
	'rep_pen' => 1.15,			// 繰り返しペナルティ(1.0~2.0) 値が高すぎると出力が突飛になりすぎる可能性があります
	'model' => 'spiko',			// デフォルトはsupertrin_highpresです
//	spiko / spiko_solid / spiko_max / derrida_03 / damsel_ray / supertrin_highpres / supertrin_maxpresが有効です
//
//	'top_k' => 140,				// Top Kサンプリング(1~500) 上位nトークンのみを採用する
//	'top_a' => 0.1,				// Top Aサンプリング(0~1.0) 確率が(一番確率の高いトークン^2 * Top A)以下のトークンを除外
//	'min_p' => 0.0,				// Min Pサンプリング(0~1.0)
//	'rep_pen_range' => 1024,		// 繰り返しペナルティを適用する範囲(0~2048)
//	'rep_pen_slope' => 3.00,		// 繰り返しペナルティの傾斜(0.01~10)
//	'rep_pen_pres' => null,			// コンテキスト中に単語が出た回数に依存する繰り返しペナルティ(0~100)
//	'typical_p': 1.0,			// Typicalサンプリング(0.01~1.0)
//	'badwords' => '<unk>',			// 禁止ワードを設定します。<<|>>で区切ります。
//	'logit_bias' => '【<<|>>_',		// 個別のトークンの出現率を調整します。<<|>>で区切ります。
//	'logit_bias_values' => '-2.0|-0.1',	// 確率はlogit spaceに作用します。基本的には-5から+5程度が適正です。|で区切ります。設定がおかしいとエラーになります
//	'stoptokens' => 'トマト<<|>>りんご',	// このシーケンスが生成されると強制的に出力が打ち切られます。<<|>>で区切ります。

];

$context = stream_context_create([
    'http' => [
        'method' => 'POST',
        'header' => implode("\r\n", $headers),
        'content' => json_encode($body),
    ]
]);

$json = file_get_contents($api_server_url.'/api', false, $context);

$array = json_decode($json,true);
$result = $array['data'][0];
	  
curl -X POST 'https://api.tringpt.com/api' \
-H 'Authorization: Bearer Your API key' \
-H 'Content-Type: application/json' \
-d '{
	"text": "これはテストです",
	"length": 15,
	"temperature": 0.7,
	"top_p": 0.7,
	"rep_pen": 1.15,
	"model": "spiko"
}'
	  


Chat (OpenAI Compatible) API


Follow this section for using OpenAI-compatible chat/messages API. This API can be used with any OpenAI API-compatible client.

import json, requests

auth_key = 'Your API key';
api_server_url = 'https://api.tringpt.com/'

headers = {'Authorization': 'Bearer {}'.format(auth_key)}

messages_test = [
    {'role': 'user', 'content': 'こんにちは!'},
    {'role': 'assistant', 'content': '私はとりんさま!今日はどうしましたか?'},
    {'role': 'user', 'content': 'どうも。最近ワーズはどうしてるの?'}
]

send_body = {
	'model': 'spiko_solid',			# デフォルトはsupertrin_highpresです。
	'messages': messages_test,
	'max_tokens': 15,			# 出力するトークン数 出力が重いと途中で強制終了する場合があります
	'temperature': 0.7,			# ランダム度(0~2.5) 語彙が単調に感じる場合は上げてみてください
	'top_p': 0.7,				# Top Pサンプリング(0.01~1.0) 1より低いほど確率の低いトークンが除外される。極端に関係のない語彙が出ることを防ぎます
	'repetition_penalty': 1.15,		# 繰り返しペナルティ(1.0~2.0) 値が高すぎると出力が突飛になりすぎる可能性があります
#	'frequency_penalty': 0,			# コンテキスト中に単語が出た回数に依存する繰り返しペナルティ(0~2)
#	'presence_penalty': 0,			# コンテキスト中に単語が1回でも既出かどうかに依存する繰り返しペナルティ(0~2)
#	'top_k': 140,				# Top Kサンプリング(1~500) 上位nトークンのみを採用する
#	'top_a': 0.1,				# Top Aサンプリング(0~1.0) 確率が(一番確率の高いトークン^2 * Top A)以下のトークンを除外
#	'min_p': 0.0,				# Min Pサンプリング(0~1.0)
#	'tailfree': 1.0,			# Tail-freeサンプリング(0.01~1.0) 1より低いほど確率の低いトークンが除外される。やみおとめのみ対応
#	'typical_p': 1.0,			# Typicalサンプリング(0.01~1.0)
#	'badwords': '<unk>',			# 禁止ワードを設定します。<<|>>で区切ります。
#	'logit_bias': '【<<|>>_',		# 個別のトークンの出現率を調整します。<<|>>で区切ります。
#	'logit_bias_values': '-2.0|-0.1',	# 確率はlogit spaceに作用します。基本的には-5から+5程度が適正です。|で区切ります。設定がおかしいとエラーになります
#	'stoptokens': 'トマト<<|>>りんご',	# このシーケンスが生成されると強制的に出力が打ち切られます。<<|>>で区切ります。

}

response = requests.post(api_server_url+'/api', headers=headers, json=send_body)
response_array = json.loads(response.text)

result = response_array['data'][0]
	  
$auth_key = 'Your API key';
$api_server_url = 'https://api.tringpt.com/';


$array_messages_test[0]['role'] = "user";
$array_messages_test[0]['content'] = "こんにちは!";
$array_messages_test[1]['role'] = "assistant";
$array_messages_test[1]['content'] = "私はとりんさま!今日はどうしましたか?";
$array_messages_test[2]['role'] = "user";
$array_messages_test[2]['content'] = "で、ワーズはどうしたの?";

$headers = [
    'Content-type: application/json',
    'Authorization: Bearer '.$auth_key
];
$body = [
	'model' => 'spiko',	// デフォルトはsupertrin_highpresです
	'messages' => array_messages_test,
	'max_tokens' => 15,			// 出力するトークン数(1~2048) 出力が重いと途中で強制終了する場合があります
	'temperature' => 0.7,			// ランダム度(0~2.5) 語彙が単調に感じる場合は上げてみてください
	'top_p' => 0.7,				// Top Pサンプリング(0.01~1.0) 1より低いほど確率の低いトークンが除外される。極端に関係のない語彙が出ることを防ぎます
	'repetition_penalty' => 1.15,		// 繰り返しペナルティ(1.0~2.0) 値が高すぎると出力が突飛になりすぎる可能性があります
//	'frequency_penalty' => 0,		// コンテキスト中に単語が出た回数に依存する繰り返しペナルティ(0~2)
//	'presence_penalty' => 0,		// コンテキスト中に単語が1回でも既出かどうかに依存する繰り返しペナルティ(0~2)
//	'top_k' => 140,				// Top Kサンプリング(1~500) 上位nトークンのみを採用する
//	'top_a' => 0.1,				// Top Aサンプリング(0~1.0) 確率が(一番確率の高いトークン^2 * Top A)以下のトークンを除外
//	'min_p' => 0.0,				// Min Pサンプリング(0~1.0)
//	'rep_pen_range' => 1024,		// 繰り返しペナルティを適用する範囲(0~2048)
//	'rep_pen_slope' => 3.00,		// 繰り返しペナルティの傾斜(0.01~10)
//	'typical_p': 1.0,			// Typicalサンプリング(0.01~1.0)
//	'badwords' => '<unk>',			// 禁止ワードを設定します。<<|>>で区切ります。
//	'logit_bias' => '【<<|>>_',		// 個別のトークンの出現率を調整します。<<|>>で区切ります。
//	'logit_bias_values' => '-2.0|-0.1',	// 確率はlogit spaceに作用します。基本的には-5から+5程度が適正です。|で区切ります。設定がおかしいとエラーになります
//	'stoptokens' => 'トマト<<|>>りんご',	// このシーケンスが生成されると強制的に出力が打ち切られます。<<|>>で区切ります。

];

$context = stream_context_create([
    'http' => [
        'method' => 'POST',
        'header' => implode("\r\n", $headers),
        'content' => json_encode($body),
    ]
]);

$json = file_get_contents($api_server_url.'/api', false, $context);

$array = json_decode($json,true);
$result = $array['data'][0];
	  
curl -X POST 'https://api.tringpt.com/api' \
-H 'Authorization: Bearer Your API key' \
-H 'Content-Type: application/json' \
-d '{
	"model": "spiko"
	"messages": [{"role": "user", "content": "こんにちは!"}],
	"max_tokens": 15,
	"temperature": 0.7,
	"top_p": 0.7,
	"repetition_penalty": 1.15,
}'
	  


Dealing with Tokenizer


Here, we explain how to use Python + Transformers library or C++ and SentencePiece for using the Trin tokenizer.

## コマンドラインで必要なライブラリのインストールを行います
 
pip install transformers sentencepiece



## トークナイザを読み込み、テキストのトークン数を表示

from transformers import T5Tokenizer

tokenizer = T5Tokenizer.from_pretrained('naclbit/trin_tokenizer_v3')

txt = 'これはテストです'
output = tokenizer.encode(txt, add_special_tokens=False)
num_tokens = len(output)

print(str(num_tokens) + ' tokens')



## トークンがどのように分割されているか表示する

tokens = ""

for temp in output:
  tokens = tokens + '[' + tokenizer.decode(temp) + '] '
print(tokens)



## 成功すればこのように表示されます↓
## 3 tokens
## [これは] [テスト] [です] 


	  
// https://github.com/google/sentencepiece/blob/master/doc/api.md を参照
// まずローカルにTrin-Tokenizer V3のspiece.modelを設置してください

#include <sentencepiece_processor.h>

sentencepiece::SentencePieceProcessor processor;
const auto status = processor.Load("trin_tokenizer_v3/spiece.model");
if (!status.ok()) {
   std::cerr << status.ToString() << std::endl;
   // error
}



// テキストのトークン数を表示

std::vector<int> ids;
processor.Encode("これはテストです", &ids);
std::cout << ids.size() << " tokens" << std::endl;



// トークンがどのように分割されているか表示する

std::vector<std::string> pieces;
processor.Encode("これはテストです", &pieces);
for (const std::string &token : pieces) {
  std::cout << "[" << token << "] " << std::endl;
}


	  


Instruct Tuning


テキストコンプリートAPIを利用している場合、下記の記法でInstruct(指示)チューニングに対応した出力を行わせることができます。アシスタントブロックやthinkの挙動に関して細かい制御が必要な場合はこちらをご利用ください(通常はOpenAI互換のチャットAPIをご利用ください)。

## 指示文は[#ユーザー][#アシスタント]のブロックで書きます。
 
[#ユーザー]
りんご1個が100円のとき、りんご4個を買うといくらになりますか?

[#アシスタント]
1個あたりの価格が100円なので、4個の合計金額は4 × 100 = 400円になります。
従って、りんご4個を買うと400円になります。

	  
## 本文を与えてから質問を投げることで、本文中の知識や前提条件に対応した答えを得ることができます。

それからしばらくして、ようやく晩御飯ができた。吾輩は二人を呼んでくるようにハチに頼んでから、テーブルの上に皿を並べ始めた。
二人ともやって来たのだが、相変わらず気まずい雰囲気が漂っている。そんな中で黙々と箸を口に運ぶさまは、まるで通夜か何かのようだった。
吾輩は前足についたご飯粒を舐め取ると、さりげなく目の前のもう一人の自分の様子をうかがった
。向こうも同じことを思ったらしく、視線がぶつかった。その瞬間、お互いに慌てて目を逸らす。
気まずい沈黙が流れた後、最初に口を開いたのは、意外にももう一人の小津の方だった。
「……あのさ、さっきはちょっと言い過ぎたよ」
なんと、向こうから謝ってきたのだ。吾輩は驚いて、彼の顔を見つめた。
「別に俺も手伝いたくないわけじゃないんだ。ただちょっと面倒くさかっただけでさ」
彼はばつが悪そうに頭を掻いた。
「でもまあ、これからはちゃんと手伝うからさ」
そう言うと、照れくさそうに笑った。吾輩は思わず感動してしまいそうになったが、何とかこらえて平静を装うことにした。
「そうか、それは助かる」
そっけなく答えると、吾輩は再び食事に戻った。見ると、もう一人の小津の方も、すっかり機嫌を直したようで、ガツガツと飯を食っている。
その様子を観察していると、不意に彼が顔を上げたので、目が合った。そして、どちらからともなく笑い出すのだった。

☆☆☆

その夜、吾輩は夢を見た。夢の中で、吾輩は大きな猫になっていた。
あたりを見回すと、そこは一面の荒野であった。空はどんよりと曇り、今にも雨が降り出しそうだ。
辺りには草一本生えておらず、荒涼としている。
時折吹きつける風は冷たく、身を切るような厳しさだ。
そんな寂しい景色の中を一匹の黒猫が歩いている。吾輩である。猫になった夢を見ているのだ。
我ながら変な夢を見るものだと思いながらも、吾輩は猫の視点で辺りの様子を観察し続けた。

[#ユーザー]
小津(吾輩)はどうして夢の中で黒猫になっていたの?

[#アシスタント]
夢の中の小津が黒猫になっていた理由は、彼の深層心理にある不安や恐れを反映したものです。
小津は自分が周りとは違う存在であることや、いつか孤独になってしまうのではないかという恐怖を抱えており、
自分自身を猫の姿に投影することで、そのような心細さから逃れようとしていたのです。

## 作品のタイトルを考えさせてみる

[#ユーザー]
この作品にタイトルをつけてください。

[#アシスタント]
『猫は箱の中で夢を見る』
	  
## [#アシスタント]ブロックの直後に<think>を挟むことによって、reasoning/thinkingが発動します。
## 明示的に指示しなくても、場合によっては<think>が出力される場合もあります。
## 出力された内容をユーザーに表示する際は、<think>~</think>の内容を適時トリムするなどしてください。
 
## プロンプトの例:

[#ユーザー]
指示

[#アシスタント]
<think>