T Pro It 2.0
モデル概要
モデル特徴
モデル能力
使用事例
🚀 T-pro-it-2.0
T-pro-it-2.0は、Qwen 3モデルファミリーをベースに構築されたモデルで、継続的な事前学習とアラインメント技術を組み合わせています。
🚀 クイックスタート
🚨 ユーザーは、注意を払い、モデルの応答が許容可能な倫理的および安全基準を満たすことを保証するために必要な追加のトレーニングと監視に責任を負うことが推奨されます。このモデルを産業または商業ソリューションに組み込む責任は、それを展開することを選択した者に完全にあります。
✨ 主な機能
T-pro-it-2.0は、Qwen 3モデルファミリーをベースに構築され、継続的な事前学習とアラインメント技術を組み合わせています。
📚 データセット
- 命令事前学習: 400億トークンの命令データで、そのうち3分の1は推論タスクに焦点を当てています。
- 教師付き微調整 (SFT): 約50万件の高品質で多様な命令で、複雑さがバランスされています。推論タスクはデータセットの約20%を占めています。
- 嗜好調整: 約10万件の慎重に選択された命令で、一般タスクについては長さとタイプでフィルタリングされ、推論タスクについてはドメインがバランスされた選択が行われています。
📊 ベンチマーク
モデル | MERA | ruMMLU | Ru Arena Hard | ru AIME 2025 | ru LCB |
---|---|---|---|---|---|
T-pro 2.0 | 0.660 | 0.790 | 0.876 | 0.646 | 0.563 |
Qwen 3 32B | 0.584 | 0.740 | 0.836 | 0.625 | 0.537 |
Ruadapt 3 32B V2 | 0.574 | 0.737 | 0.660 | 0.450 | 0.500 |
DeepSeek-R1-Distill-Qwen-32B | 0.508 | 0.702 | 0.426 | 0.402 | 0.493 |
Gemma 3 27B | 0.577 | 0.695 | 0.759 | 0.231 | 0.261 |
思考モードと非思考モードの切り替え
HuggingFaceで推論モードを有効または無効にするには、tokenizer.apply_chat_template
のenable_thinking
フラグを設定します。
詳細については、以下を参照してください。
推奨生成パラメータ
モード | 温度 | 出現ペナルティ |
---|---|---|
非思考 (一般的なリクエスト) | ≤ 0.3 | 1.0 |
思考モード (標準的なリクエスト) | ≈ 0.6 | 1.0 |
複雑な推論リクエスト | ≥ 0.8 | 1.0 |
- ハイブリッド推論モデルでは、サンプリングハイパーパラメータを慎重に調整する必要があり、これはドメインによって異なります。
- 単純なクエリには低い温度を、複雑な「思考モード」タスクには高い温度を使用します。
- 0から2の間の出現ペナルティを使用すると、繰り返しの出力を避けるのに役立ちます。
💻 使用例
SGLangの使用
品質と安定性を向上させるために、SGLangを推論フレームワークとして使用することをお勧めします。
T-pro-it-2.0の推論サーバーを実行するには、まずSGLangサーバーを起動します。
python -m sglang.launch_server \
--model-path t-tech/T-pro-it-2.0 \
--reasoning-parser qwen3
サーバーが起動し、localhost:30000
で待機している状態になったら、OpenAI Pythonクライアントを介してチャットベースのリクエストを送信できます。
import openai
client = openai.OpenAI(
base_url="http://127.0.0.1:30000/v1",
api_key="ANY" # サーバーはAPIキーを無視します
)
prompt = (
"Пожалуйста, вычисли определённый интеграл ∫_0^1 x² eˣ dx, "
"пошагово объясни решение и укажи окончательный результат."
)
completion = client.chat.completions.create(
model="ANY", # サーバーはモデル名を無視します
messages=[
{"role": "system", "content": "Ты T-pro, виртуальный ассистент в Т-Технологии. Твоя задача - быть полезным диалоговым ассистентом."},
{"role": "user", "content": prompt}
],
# 必須: 「推奨生成パラメータ」表からのサンプリングパラメータ
temperature=0.6,
presence_penalty=1.0,
)
# 生成された応答は `completion.choices[0].message.content` にあります
print(completion.choices[0].message.content)
注意: すべてのコンプリーション呼び出しにtemperature
とpresence_penalty
の両方を含めることが必須です。
HFの使用
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
torch.manual_seed(42)
model_name = "t-tech/T-pro-it-2.0"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype="auto",
device_map="auto",
)
prompt = (
"Пожалуйста, вычисли определённый интеграл ∫_0^1 x² eˣ dx, "
"пошагово объясни решение и укажи окончательный результат."
)
messages = [
{"role": "system", "content": "Ты T-pro, виртуальный ассистент в Т-Технологии. Твоя задача - быть полезным диалоговым ассистентом."},
{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
enable_thinking=True # 思考モードと非思考モードを切り替えます。デフォルトはTrueです。
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
generated_ids = model.generate(
**model_inputs,
max_new_tokens=512
)
generated_ids = [
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(response)
出力:
<think>
Хорошо, мне нужно вычислить определенный интеграл от 0 до 1 функции x² * e^x dx. Я помню, что для интегралов такого вида, где есть произведение многочлена и экспоненты, обычно применяют метод интегрирования по частям. Давайте вспомню формулу интегрирования по частям: ∫u dv = uv - ∫v du.
Первым делом нужно выбрать, что взять за u, а что за dv. Обычно в таких случаях многочлен (в данном случае x²) берут за u, потому что при дифференцировании его степень понижается, и в конце концов он превратится в константу, что упростит интеграл. Тогда dv будет оставшаяся часть, то есть e^x dx.
Итак, пусть u = x², тогда du = 2x dx. А dv = e^x dx, значит, v = ∫e^x dx = e^x.
Теперь применим формулу интегрирования по частям: ∫x² e^x dx = uv - ∫v du = x² e^x - ∫e^x * 2x dx.
Теперь у нас остался интеграл ∫2x e^x dx. Его тоже нужно взять по частям. Опять выбираем u и dv. Теперь u = 2x, тогда du = 2 dx, а dv = e^x dx, значит, v = e^x.
Применяем формулу снова: ∫2x e^x dx = 2x e^x - ∫e^x * 2 dx = 2x e^x - 2∫e^x dx.
Интеграл ∫e^x dx равен e^x + C. Подставляем обратно: 2x e^x - 2e^x + C.
Теперь возвращаемся к исходному интегралу: x² e^x - (2x e^x - 2e^x) + C = x² e^x - 2x e^x + 2e^x + C.
Теперь нужно вычислить определенный интеграл от 0 до 1. Для этого подставим верхний и нижний пределы в первообразную и вычтем.
Сначала подставим x = 1: (1² * e^1) - 2*1*e^1 + 2*e^1 = e - 2e + 2e = (1 - 2 + 2)e = 1*e = e.
Теперь подставим x = 0: (0² * e^0) - 2*0*e^0 + 2*e^0 = 0 - 0 + 2*1 = 2.
Вычитаем: e - 2.
Проверю, не ошибся ли я в вычислениях. При подстановке x=1: 1*e - 2*1*e + 2*e = e - 2e + 2e = e. Да, верно. При x=0: 0 - 0 + 2*1 = 2. Тогда разность e - 2.
Но подожди, может быть я где-то пропустил знак? В первообразной после интегрирования по частям: x² e^x - 2x e^x + 2e^x. Да, правильно. Тогда при подстановке 1: 1*e - 2*1*e + 2*e = (1 - 2 + 2)e = 1*e. При 0: 0 - 0 + 2*1 = 2. Тогда ответ e - 2.
Но e примерно равно 2.718, значит, e - 2 ≈ 0.718. Интуитивно кажется, что интеграл от 0 до 1 x² e^x должен быть положительным, что соответствует.
Может, стоит проверить через другой метод или дифференцированием первообразной? Возьмем производную от x² e^x - 2x e^x + 2e^x.
Производная: d/dx [x² e^x] = 2x e^x + x² e^x.
d/dx [-2x e^x] = -2 e^x - 2x e^x.
d/dx [2e^x] = 2 e^x.
Складываем все: 2x e^x + x² e^x - 2 e^x - 2x e^x + 2 e^x = x² e^x.
Да, производная равна подынтегральной функции. Значит, первообразная найдена верно. Тогда определенный интеграл равен e - 2.
Вроде все правильно. Возможно, можно было использовать рекуррентную формулу или таблицу интегралов, но метод по частям сработал.
Итак, окончательный ответ: e - 2.
</think>
Для вычисления определённого интеграла
$$
\int_0^1 x^2 e^x \, dx
$$
используем **метод интегрирования по частям**.
### Шаг 1: Применение интегрирования по частям
Формула интегрирования по частям:
$$
\int u \, dv = uv - \int v \, du.
$$
Выбираем:
- $ u = x^2 $, тогда $ du = 2x \, dx $,
- $ dv = e^x \, dx $, тогда $ v = e^x $.
Подставляем в формулу:
$$
\int x^2 e^x \, dx = x^2 e^x - \int e^x \cdot 2x \, dx = x^2 e^x - 2 \int x e^x \, dx.
$$
### Шаг 2: Интегрирование оставшегося интеграла
Теперь вычисляем $ \int x e^x \, dx $, снова применяя интегрирование по частям:
- $ u = x $, тогда $ du = dx $,
- $ dv = e^x \, dx $, тогда $ v = e^x $.
Получаем:
$$
\int x e^x \, dx = x e^x - \int e^x \, dx = x e^x - e^x + C.
$$
Подставляем обратно:
$$
\int x^2 e^x \, dx = x^2 e^x - 2 \left( x e^x - e^x \right) + C = x^2 e^x - 2x e^x + 2 e^x + C.
$$
### Шаг 3: Вычисление определённого интеграла
Подставляем пределы $ 0 $ и $ 1 $:
$$
\left[ x^2 e^x - 2x e^x + 2 e^x \right]_0^1 = \left( 1^2 e^1 - 2 \cdot 1 \cdot e^1 + 2 e^1 \right) - \left( 0^2 e^0 - 2 \cdot 0 \cdot e^0 + 2 e^0 \right).
$$
Упрощаем:
- При $ x = 1 $:
$$
e - 2e + 2e = e.
$$
- При $ x = 0 $:
$$
0 - 0 + 2 \cdot 1 = 2.
$$
Итоговый результат:
$$
e - 2.
$$
### Ответ:
$$
\boxed{e - 2}
$$
VLLMの使用
from transformers import AutoTokenizer
from vllm import LLM, SamplingParams
model_name = "t-tech/T-pro-it-2.0"
tokenizer = AutoTokenizer.from_pretrained(model_name)
llm = LLM(model=model_name, max_model_len=8192)
sampling_params = SamplingParams(temperature=0.7,
repetition_penalty=1.05,
top_p=0.8, top_k=70,
max_tokens=512)
prompt = (
"Пожалуйста, вычисли определённый интеграл ∫_0^1 x² eˣ dx, "
"пошагово объясни решение и укажи окончательный результат."
)
messages = [
{"role": "system", "content": "Ты T-pro, виртуальный ассистент в Т-Технологии. Твоя задача - быть полезным диалоговым ассистентом."},
{"role": "user", "content": prompt}
]
prompt_token_ids = tokenizer.apply_chat_template(messages, add_generation_prompt=True)
outputs = llm.generate(prompt_token_ids=prompt_token_ids, sampling_params=sampling_params)
generated_text = [output.outputs[0].text for output in outputs]
print(generated_text)
長文コンテキストの使用
T-pro-it-2.0はネイティブで32,768トークンのコンテキスト長をサポートしています。 入力がこの制限を大幅に超える会話の場合、Qwen3モデルカードの長文処理に関する推奨事項に従ってください。
たとえば、SGLangでは、次のコマンドで128Kのコンテキストサポートを有効にできます。
llama-server ... --rope-scaling yarn --rope-scale 4 --yarn-orig-ctx 32768
📄 ライセンス
このプロジェクトは、Apache-2.0ライセンスの下でライセンスされています。



