فهرست مطالب
smithtune ابزار خطفرمان لنگچین است تا مسیر کار یک ایجنت را که در LangSmith ضبط شده، به دادهٔ آموزش تبدیل کند، مدل را روی Fireworks یا Baseten تنظیمدقیق کند، و نتیجه را دوباره در LangSmith با مدل پایه مقایسه کند. این صفحه قدمبهقدم همان مسیر CLI است — نه معرفی دوبارهٔ محصول. برای تصویر کلی محصول، اول LangSmith Fine-Tuning چیست؟ را بخوانید؛ بعد برگردید اینجا و دستورها را یکییکی اجرا کنید.
وضعیت رسمی: Public Beta. طبق README، دستورها و قالب پوشهها ممکن است بین نسخهها عوض شوند. قیمت آموزش و ارزیابی را در این راهنما نمینویسیم؛ هزینه را از ارائهدهنده و صورتحساب خودتان ببینید.
قبل از شروع: مسیر، SFT و LoRA به زبان ساده
مسیر (trajectory) یعنی زنجیرهٔ مرتب پیامها، فراخوانی ابزارها و نتیجهٔ ابزارها وقتی ایجنت یک کار را جلو میبرد. LangSmith این مسیر را از پروژهٔ tracing شما نگه میدارد؛ smithtune همان را برای آموزش برمیدارد.
تنظیمدقیق نظارتشده (SFT) یعنی مدل را با مثالهای خوب رفتار (ورودی / خروجی / فراخوانی ابزار) دوباره تربیت میکنید تا شبیه همان رفتار ضبطشده شود — نه اینکه از صفر مدل بسازید.
LoRA (روی مسیر Baseten Loops) روشی سبکتر برای تنظیمدقیق است: بهجای عوض کردن همهٔ وزنهای مدل، لایههای کمحجم اضافه میشود. انتخاب Fireworks یا Baseten را خودتان با کلید API و مدل پشتیبانیشده انجام میدهید؛ هر دو در README پشتیبانی شدهاند.
نکتهٔ عملی: اول harness و پرامپت و ابزارها را درست کنید؛ وقتی رفتار خوب در tracing تکرار شد، آن وقت SFT معنا دارد. بدون دادهٔ تمیز، آموزش فقط نویز را حفظ میکند.
پیشنیازها
حساب LangSmith با مسیرهای ضبطشده در یک tracing project، یا یک دیتاست مسیر آماده.
کلیدهای محیطی: LANGSMITH_API_KEY همیشه؛ بهعلاوه BASETEN_API_KEY یا FIREWORKS_API_KEY.
ابزار نصب: uv برای smithtune؛ برای خواندن traceها، LangSmith CLI؛ برای استقرار Fireworks در صورت نیاز firectl.
اختیاری برای ایجنت کدنویسی (مثل Cursor یا Claude Code): مهارت smithtune با npx.
اگر با محیطهای امن ایجنت کار میکنید، زمینهٔ نزدیک را در Docker Cloud Sandboxes ببینید. برای ابزارهای ترمینال مشابه، MiniMax Code CLI، بررسی Cursor و بررسی Claude Code هم مفیدند.
قدم ۱: نصب smithtune و مهارت ایجنت
طبق README نسخهٔ v0.1.0، نصب با uv و overrides همین تگ را عیناً اجرا کنید:
کد: uv tool install --python 3.12 --overrides https://raw.githubusercontent.com/langchain-ai/smithtune/v0.1.0/overrides.txt 'smithtune[deepagents] @ git+https://github.com/langchain-ai/smithtune.git@v0.1.0'
extra مربوط به deepagents برای شورای اختیاری مدلها (triage) لازم است. برای بهروزرسانی تگ جدید، همان تگ را در هر دو URL بگذارید و با --force دوباره نصب کنید.
مهارت برای ایجنت کدنویسی:
کد: npx skills add langchain-ai/smithtune
LangSmith CLI (خواندن trace و تست فیلتر بدون هزینهٔ مدل):
کد: curl -fsSL https://cli.langsmith.com/install.sh | sh
قدم ۲: کلیدها، acknowledge و doctor
در پوستهای که smithtune را اجرا میکنید متغیرها را بگذارید: LANGSMITH_API_KEY؛ سپس BASETEN_API_KEY یا FIREWORKS_API_KEY. شرایط Data Rights را از مخزن بخوانید؛ اولین اجرای workflow نیاز به تأیید تعاملی دارد و --confirm جایگزین آن نیست.
کد: smithtune acknowledge-data-rights
کد: smithtune doctor
doctor فقط پیشنیاز محلی را چک میکند، نه دسترسی کامل سرویسها. برای فهرست گزینهها: smithtune --help.
پیشنمایش رایگان در برابر کار پولی (--confirm)
فراخوانی مدل و ظرفیت GPU برای کار پولی باید با --confirm صریح باشد. بدون آن، بیشتر دستورها فقط پیشنمایش میدهند یا قبل از هزینه متوقف میشوند.
دستور | بدون --confirm | با --confirm |
|---|---|---|
plan / eval-plan | پیشنمایش رایگان (محاسبات پولی شروع نمیشود) | لازم نیست؛ همین پیشنمایشاند |
dataset push | پیشنمایش آپلود | آپلود واقعی دیتاست |
dataset triage / resume | پیشنمایش شورای مدل / کار معلق | اجرای شورای مدل / ادامه کار |
train / evaluate / deploy / undeploy | قبل از کار پولی یا تغییر منبع متوقف میشود | آموزش، ارزیابی، استقرار یا توقف endpoint |
prepare و publish-splits متادیتای split را در LangSmith مینویسند ولی مدل را آموزش نمیدهند. endpointهای در حال اجرا تا وقتی متوقف نشوند هزینه میگیرند.
قدم ۳: از tracing به دیتاست (pull، فیلتر، push)
اگر از قبل دیتاست مسیر در LangSmith دارید، این بخش را رد کنید و بروید سراغ prepare. وگرنه از tracing project بکشید.
۳‑۱. فیلتر را بنویسید و تست کنید
فیلتر روی root runها اعمال میشود و کل thread را میآورد. همیشه --start-time و --end-time بگذارید؛ پنجرهٔ پیشفرض فقط ۲۴ ساعت اخیر است. نمونهٔ README برای بازخورد خوب:
کد فیلتر: and(eq(feedback_key, "correctness"), gte(feedback_score, 0.9))
قبل از pull، همان فیلتر را با LangSmith CLI روی همان بازه تست کنید (بدون هزینهٔ مدل). فقط فیلتر روی نام ایجنت یا حذف خطا بهتنهایی کیفیت آموزش را تضمین نمیکند؛ اگر سیگنال کیفیت معتبری ندارید، triage شورایی را در نظر بگیرید.
۳‑۲. pull سپس push (بدون triage)
وقتی فیلتر خودش سیگنال کیفیت قابل اعتماد دارد (مثلاً امتیاز بازخورد تأییدشده یا برچسب انسانی)، با --no-triage شورا را رد کنید:
کد: smithtune dataset pull data/datasets/my-sft --workspace-id WORKSPACE --project-id PROJECT --start-time 2026-09-01T00:00:00Z --end-time 2026-09-22T00:00:00Z --filter 'FILTER' --target-count 100 --no-triage
pull بدون فراخوانی مدل دانلود میکند. خلاصهٔ مسیرهای قابل استفاده و دلایل حذف را بخوانید. --target-count تعداد مسیر هدف است (پیشفرض ۱۰۰).
کد: smithtune dataset push data/datasets/my-sft --name my-sft-dataset
این فقط پیشنمایش است. آپلود واقعی:
کد: smithtune dataset push data/datasets/my-sft --confirm
بعد از --confirm شناسهٔ دیتاست را برای prepare نگه دارید. پوشه را در کل مسیر عوض نکنید.
۳‑۳. اختیاری: triage با شورای مدل
--no-triage را از pull اول بردارید، یک rubric.md بنویسید (وظیفه، چه چیزی نگه داشته شود، چه چیزی حذف شود، چند مثال واقعی)، بعد:
کد: smithtune dataset triage data/datasets/my-sft --rubric ./rubric.md
کد: smithtune dataset triage data/datasets/my-sft --confirm
تصمیمها در labels.jsonl و گزارش در report.md ذخیره میشود؛ قبل از push بخوانید. شورا کمک میکند ولی تضمین دادهٔ عالی نیست. کار معلق را با dataset resume ببینید؛ برای ادامه --confirm بزنید.
قدم ۴: prepare
شناسهٔ دیتاست (از push یا دیتاست موجود)، ارائهدهنده و مدل را یکدست نگه دارید. نمونهٔ README: مدل qwen3p8-27b با هر دو ارائهدهنده کار میکند. فهرست مدلها:
کد: smithtune models list --provider fireworks
یا baseten بهجای fireworks.
کد: smithtune prepare --provider PROVIDER --model qwen3p8-27b --workspace-id WORKSPACE --dataset-id DATASET --data-dir ./data/my-sft
prepare مسیرها را چک میکند، ابزارهای هر نوبت دستیار را حفظ میکند، حدود ۸۰٪ آموزش / ۱۰٪ اعتبارسنجی / ۱۰٪ تست میدهد، و عضویت split را به دیتاست LangSmith هم مینویسد. مسیرهای نامعتبر یا خیلی بلند بدون برش حذف و در prepared/rejected.json فهرست میشوند.
قدم ۵: plan، بعد train با --evaluate
اول پیشنمایش رایگان:
کد: smithtune plan --provider PROVIDER --data-dir ./data/my-sft --evaluate --judge-model JUDGE --max-points-per-trajectory 2
سپس آموزش و ارزیابی با تأیید هزینه (پوشهٔ run خالی یا جدید):
کد: smithtune train --provider PROVIDER --data-dir ./data/my-sft --run-dir ./runs/my-sft --evaluate --judge-model JUDGE --max-points-per-trajectory 2 --confirm
تنظیمات سفارشی را روی هر دو دستور تکرار کنید؛ plan چیزی برای train ذخیره نمیکند. --max-points-per-trajectory سقف مقایسه روی هر مسیر تست است؛ برای ارزیابی همهٔ اکشنهای واجد شرایط، سقف را از هر دو دستور بردارید. چکپوینت با کمترین validation loss انتخاب میشود و با مدل پایه روی تست مقایسه میگردد. برای این مرحله لازم نیست از قبل deploy کرده باشید.
اگر فقط آموزش میخواهید، --evaluate و گزینههای replay را حذف کنید. ارزیابی جدا با eval-plan (پیشنمایش) و evaluate --confirm هم ممکن است.
قدم ۶: مرور مقایسه در LangSmith
وقتی ارزیابی شروع شود، CLI یک لینک مقایسه برای آزمایش مدل پایه و مدل تنظیمشده چاپ میکند. نتایج در پسزمینه منتشر میشوند؛ JSON نهایی شامل langsmith.comparison_url است.
teacher_agreement: آیا اکشن دستیار از نظر قاضی قبول شد، با توضیح.
trajectory_teacher_agreement: میانگین امتیاز روی مسیر.
مهم: replay پاسخ یا فراخوانی ابزار بعدی را از زمینهٔ ضبطشده پیشبینی میکند؛ فراخوانی ابزار اجرا نمیشود. امتیاز یعنی توافق با رفتار ضبطشده، نه موفقیت سر تا ته کار واقعی. این امتیازها انتخاب چکپوینت را عوض نمیکنند.
قدم ۷ (اختیاری): deploy و undeploy
وقتی برای اپلیکیشن endpoint میخواهید، از همان ارائهدهندهٔ آموزش استفاده کنید.
Fireworks (با firectl و حساب مالک چکپوینت):
کد: smithtune deploy --provider fireworks --run-dir ./runs/my-sft --account-id ACCOUNT --output-model-id my-tuned-model --deployment-id my-endpoint --deployment-shape SHAPE --confirm
Baseten (بعد از نصب deployment extra؛ سختافزار و سقف context نمونهٔ README):
کد: smithtune deploy --provider baseten --run-dir ./runs/my-sft --accelerator H200:1 --max-seq-len 32768 --confirm
توقف سرویس تا هزینه قطع شود:
کد: smithtune undeploy --provider fireworks --account-id ACCOUNT --deployment-id my-endpoint --confirm
کد: smithtune undeploy --provider baseten --run-dir ./runs/my-sft --confirm
کی SFT با smithtune منطقی است؟
رفتار خوب در tracing تکرار شده و برچسب یا بازخورد کیفیت دارید.
میخواهید همان سبک فراخوانی ابزار و پاسخ را در مدل ارزانتر یا اختصاصی قفل کنید.
آمادهٔ هزینهٔ آموزش/ارزیابی ارائهدهنده و نگهداری endpoint هستید.
وقتی منطقی نیست: داده کم یا نویزی، فیلتر بدون سیگنال کیفیت، یا وقتی هنوز با پرامپت و ابزار به نتیجه میرسید. طبق اعلام لنگچین در بلاگ، روی بعضی بنچمارکهای داخلی بعد از SFT بهبود دیده شده؛ اینها گزارش شرکتیاند، نه تضمین برای پروژهٔ شما. دادهٔ بدتر حتی میتواند امتیاز را پایین بیاورد — curation مهم است.
پرسشهای پرتکرار
smithtune همان LangSmith Fine-Tuning است؟
LangSmith Fine-Tuning نام محصول/جریان است؛ smithtune CLI متنباز برای اجرای همان جریان از ترمینال (و مهارت ایجنت) است.
باید Fireworks بگیری یا Baseten؟
هر دو در README پشتیبانی شدهاند. کلید و مدل پشتیبانیشده را یکی کنید و تا آخر همان ارائهدهنده و مسیر پوشه را نگه دارید. qwen3p8-27b با هر دو کار میکند.
بدون --confirm چه میشود؟
کارهای پولی و تغییر منابع ارائهدهنده متوقف یا فقط پیشنمایش میشوند. plan و eval-plan اصولاً برای پیشنمایش رایگاناند.
ارزیابی یعنی ایجنت واقعاً ابزار را صدا میزند؟
خیر. طبق مستندات، smithtune فراخوانی ابزار تولیدشده را اجرا نمیکند؛ امتیاز توافق با رفتار ضبطشده است.
پنجرهٔ زمانی pull را فراموش کنم چه میشود؟
پیشفرض فقط ۲۴ ساعت اخیر است. همیشه --start-time و --end-time را صریح بگذارید.
triage اجباری است؟
خیر. اگر فیلتر سیگنال کیفیت معتبر دارد، --no-triage کافی است. وگرنه شورا با rubric کمک میکند ولی تضمین نیست.
برای شروع از کجا کمک ایجنت بگیرم؟
مهارت را با npx skills add langchain-ai/smithtune نصب کنید و از ایجنت بخواهید کل جریان را با ارائهدهنده و شناسههای پروژه شما جلو ببرد؛ بعد از هر قدم doctor/خلاصه را چک کنید.
هنوز بتا است؟
بله، Public Beta / early beta. قبل از اتوماسیون سنگین، changelog و issues مخزن را نگاه کنید.



