SmartProposal یک سامانه هوش مصنوعی متنباز است که برای تحلیل، ارزیابی و اصلاح خودکار پروپوزالهای پژوهشی و پروژهای طراحی شده است.
این سامانه فایلهای .odt را میخواند، ایرادهای نگارشی، ساختاری و محتوایی را تشخیص میدهد، پیشنهادات اصلاحی ارائه میکند و در پایان تصمیمی خودکار برای تأیید یا نیاز به بازنگری صادر میکند.
تمامی خروجیها، از جمله توضیحات و نظرات، به زبان فارسی تولید میشوند و مستقیماً در فایل ورودی به صورت کامنتهای ODF درج میگردند.
- 🔍 تحلیل خودکار ساختار، نگارش و محتوای پروپوزالهای فارسی
- 📝 درج خودکار کامنتها و پیشنهادها در همان فایل
.odt - 🧾 گزارش تفصیلی هوشمند شامل ایرادات و امتیازدهی هر بخش
- ✅ تولید تصمیم خودکار (تأیید / نیاز به بازنگری / رد) با توجیه دلایل
- 👀 نمایش نتایج برای کاربر با امکان تأیید یا رد هر پیشنهاد
- 🧠 یادگیری از بازخورد کاربران برای بهبود تدریجی مدلها
- 🔐 پنل مدیریت (Admin Panel) برای مدیریت کاربران، تنظیمات و گزارشهای عملکرد
- 🇮🇷 پشتیبانی کامل از زبان فارسی در تمام بخشها
SmartProposal از چند لایه اصلی تشکیل شده است:
-
استخراجکننده ODF
استخراج متن و ساختار از فایل.odtو نگهداری مسیرهای XML برای درج دقیق کامنتها. -
پردازش زبان فارسی (NLP)
نرمالسازی، توکنسازی، برچسبگذاری اجزای کلام و تشخیص جملات فارسی. -
ماژولهای تحلیلی
- بررسی ساختار (وجود و ترتیب بخشهای استاندارد پروپوزال)
- بررسی نگارشی و املایی
- تحلیل محتوایی و کیفیت علمی
- امتیازدهی و تصمیمگیری خودکار
-
درج کامنتها در فایل ODF
تبدیل پیشنهادات به annotation در.odtهمراه با توضیحات فارسی. -
رابط کاربری (UI)
مشاهده نتایج، قبول/رد کامنتها و ارائه بازخورد. -
ماژول یادگیری از بازخورد
ثبت بازخورد کاربران و استفاده از آن در بازآموزی مدلها. -
پنل ادمین
مدیریت کاربران، تنظیمات سیستم، گزارشگیری و کنترل نسخه مدلها.
- Python 3.10+
- Node.js 18+
- PostgreSQL یا SQLite برای دیتابیس
- LibreOffice (برای پردازش
.odt) - Git و Docker (اختیاری برای استقرار)
# دریافت کد پروژه
git clone https://github.com/YourUsername/SmartProposal.git
cd SmartProposal
# ساخت محیط مجازی
python -m venv venv
source venv/bin/activate # در ویندوز: venv\Scripts\activate
# نصب وابستگیها
pip install -r requirements.txt
# اجرای سرور بکاند
uvicorn app.main:app --reloadنمای کلی و طراحی مؤلفهای سامانه متنباز تحلیل، اصلاح و ارزیابی خودکار پروپوزالهای پروژه با فرمت .odt.
معماری، ماژولها، گردش داده، قالبهای نظرگذاری داخل فایل، یادگیری از بازخورد، پنل ادمین، امنیت در ادامه آمده است.
SmartProposal سامانه متنباز :
- استخراج متن از فایلهای
.odt، - آنالیز ساختاری، نگارشی و محتوایی (تماماً به زبان فارسی)،
- درج کامنتهای پیشنهادی مستقیماً در همان فایل ورودی (کامنتهای ODF)،
- تولید گزارش تفصیلی و تصمیم اتوماتیک (تأیید/عدمتأیید) با توجیه،
- نمایش نتایج برای کاربر جهت تأیید و یادگیری از بازخورد او،
- داشتن پنل ادمین برای مدیریت کاربران، پیکربندی سیستم و گزارشهای استفاده.
-
لایه ورود/بارگذاری
- API وب / UI وب برای آپلود فایل
.odt - تحلیل سریع متادیتا (نام، نویسنده، تاریخ، اندازه)
- API وب / UI وب برای آپلود فایل
-
لایه استخراج محتوا
- تبدیل
.odt-> متن ساختاریافته (بخشبندی، عنوانها، جداول، لیستها، تصاویر، پاورقیها) - نگهداری موقعیتها (offsets) و مسیرهای XML برای درج کامنت
- تبدیل
-
لایه پیشپردازش زبان (فارسی)
- نرمالسازی (اِعراب/نشانهها)، توکنسازی مناسب فارسی، حذف نویز، تشخیص جملات، POS و NER مخصوص فارسی
-
ماژولهای تحلیلی
- تحلیل ساختاری (قاببندی پروپوزال براساس قالب مورد انتظار)
- بررسی نگارشی/دستوری/املایی (قواعد فارسی + مدل ML)
- تحلیل محتوایی/موضوعی (پوشش موضوع، منطق، اهداف، روششناسی، منابع)
- بررسی سرقت ادبی (اختیاری، با منابع مجاز)
- امتیازدهی کلی و تولید تصمیم (قوانین + مدل تصمیمگیری)
-
ماژول پیشنهادات و کامنتگذاری
- تولید پیامهای پیشنهادی فارسی قابل درج بهعنوان comment در همان
.odt - سطح پیشنهاد (اجباری، توصیه، خوب است) + توضیح مختصر + نمونه جایگزین
- تولید پیامهای پیشنهادی فارسی قابل درج بهعنوان comment در همان
-
ماژول تعامل با کاربر
- نمایش پیشنمایش نتایج در UI (مشخص کردن موقعیت متن، محتوای کامنت)
- امکان قبول/رد/ویرایش هر کامنت توسط کاربر
- فرم دلایل/توضیحات بازخورد کاربر
-
ماژول یادگیری (Feedback Loop)
- ثبت بازخوردهای کاربر، ایجاد دیتاست برچسبخورده کاربری
- آموزش دورهای / incremental learning (با نگهداری نسخهها)
- سیاست اعتبارسنجی تا از افت کیفیت جلوگیری شود
-
پنل ادمین
- مدیریت کاربران و نقشها (ادمین، بازبین، نویسنده)
- پیکربندی قواعد ارزیابی و آستانههای تصمیم
- گزارشهای استفاده، معیارهای کیفیت، آمار خطاها
- مدیریت مدلها و فرایند آموزش
-
ذخیرهسازها و مدارک
- ذخیره فایلهای آپلود شده (نسخههای قبل/بعد)
- دیتابیس متادیتا، لاگها، و بازخوردها
- نگهداری مدلها و نسخهبندی (model registry)
-
لایه امنیت و حریم خصوصی
- رمزنگاری ذخیره / انتقال، دسترسی مبتنی بر نقش، پاکسازی موقت فایلها، لاگ دسترسی
-
CI/CD و استقرار
- کانتینریزه (Docker/Kubernetes)، نظارت، لاگینگ، بکآپ مدلها
لایه های توسعه ای:
-
تحلیل معنایی عمیق (Deep Semantic Analysis)
- استفاده از مدلهای زبانی عمیق برای درک مفهوم پروپوزالها و تشخیص استدلال ضعیف یا تناقض در متن
-
تحلیل سبک نگارشی و لحن (Writing Style & Tone Analysis)
- تحلیل میزان رسمی بودن، روانی و سازگاری سبک نوشتار با اصول نگارش علمی فارسی
-
تحلیل استنادات و منابع (Reference & Citation Analysis)
- بررسی صحت، کامل بودن و سبک ارجاع منابع علمی در متن پروپوزال
-
:پشتیبانی از تحلیلگر LM Studio و دانش ثانویه
- از LM Studio بهعنوان مدل تحلیل متن استفاده کند (در کنار OpenAI، Ollama، یا مدل داخلی).
- از دانش ثانویه (مثلاً اصول نگارش پروپوزال، قانون ارزیابی علمی، چکلیستها) که در قالب یک فایل JSON/Markdown بارگذاری میشود، هنگام تحلیل محتوا استفاده کند.
- یک Knowledge Integrator اضافه شود برای ادغام این دانش با خروجی مدل.
- کاربر فایل
.odtرا آپلود میکند (وب/REST). - سیستم متادیتا را ذخیره میکند و نسخه «ورودی خام» را مینویسد.
- استخراجگر ODF متن و ساختار را همراه با مسیرهای XML برمیگرداند.
- پیشپردازش زبانی روی متن انجام میشود (جملات، پاراگرافها نشانهگذاری میشوند).
- هر ماژول تحلیلی (ساختاری، نگارشی، محتوایی) روی بخشهای مرتبط اجرا میشود و مشکلات/توصیهها تولید میشود.
- ماژول تولید کامنت، هر توصیه را به یک
comment objectنگاشت میکند که حاوی: متن پیام فارسی، دسته (نگارشی/ساختاری/محتوایی)، شدت، موقعیت در ODF (XPath/offset) و شناسه پیشنهاد است. - کامنتها به فایل
.odtاضافه شده (نسخه پیشنهادی فایل با کامنتها ساخته میشود). - تصمیم نهایی (تأیید/عدمتأیید/نیاز به اصلاح) تولید و در همان فایل یا در گزارش جداگانه درج میشود.
- UI نتایج را نشان میدهد و کاربر میتواند هر کامنت را قبول/رد/ویرایش کند.
- بازخوردها ثبت میشوند؛ در صورت پذیرفتن کاربر، کامنت میتواند بهعنوان «تأیید شده» ثبت شود.
- بازخوردها به مخزن یادگیری ارسال شده و برای آموزش بعدی یا بهروزرسانی مدل استفاده میشوند.
برای درج نظرات از قابلیت office:annotation یا مشابه در ODF استفاده میکنیم. هر کامنت شامل فیلدهای زیر باشد:
{
"comment_id": "cmt-20251105-0001",
"type": "نگارشی", // نگارشی | ساختاری | محتوایی
"severity": "توصیه", // اجباری | توصیه | پیشنهاد
"short_message": "استفاده از فعل مجهول در جمله اول پیشنهاد نمیشود.",
"detailed_suggestion": "جمله 'پروژه اجرا خواهد شد' بهتر است تبدیل شود به 'ما پروژه را اجرا میکنیم' برای شفافیتِ فاعل.",
"xpath": "/office:document-content/.../text:p[3]",
"offset": {"start": 120, "end": 145},
"example_replacement": "ما پروژه را اجرا خواهیم کرد.",
"confidence": 0.87,
"origin": "grammar-model-v1.3"
}- هنگام درج در
.odt، متنshort_messageبهعنوان متن کامنت نمایش داده شده وdetailed_suggestionدر بدنهٔ کامنت قرار میگیرد. xpathیا mapping موقعیتی تضمین میکند که کامنت دقیقاً روی متن مورد نظر دیده شود.
- تعریف قالب استاندارد پروپوزال (سربرگ، چکیده، مقدمه، اهداف، روش، برنامه زمانی، بودجه، منابع).
- بررسی وجود / ترتیب / طول منطقی هر بخش.
- الگوریتم: ترکیب قوانین (rule-based) و مدل طبقهبندی بخش (section classifier) — مدلهای fine-tuned برای فارسی (BERT-based).
-
استفاده از مجموعهای ترکیبی:
- دیکشنری املایی فارسی (Aspell-like یا Hunspell با افزونه فارسی)،
- مدل تصحیح مبتنی بر ترنسفورمر (مثلاً ParsBERT یا مدلهای HooshvareLab برای پیشنهاد اصلاحات),
- قواعد دستوری رایج (اسم-فعل، هماهنگیها).
-
خروجی: پیشنهاد جایگزین، دلیل، و درجه اطمینان.
- بررسی پوشش اهداف و انطباق روش با اهداف: استخراج هدفها (NER+semantic matching).
- اعتبار روششناسی: شناسایی ادعاهای بدون منبع، موارد نیازمند توضیح دقیق.
- اعتبار منابع: بررسی کیفیت مراجع (در صورت وجود لیست منابع).
- الگوریتم: ترکیبی از مدلهای رتبهبندی متن، تشخیص مغایرت (inconsistency), و قواعد منطقی.
- ورودیها: امتیازات ماژولها (وزندار)، قوانین بیزین/قانونی، آستانههای کانفیگ.
- خروجی:
Approved|Needs Revision|Rejectedبه همراه توضیح (top-k دلایل).
-
جمعآوری بازخورد
- برای هر کامنت: قبول/رد/ویرایش + توضیحات آزاد (فارسی).
- برای تصمیم کلی: قبول تصمیم سیستم یا رد با دلایل.
-
ذخیرهسازی و برچسبگذاری
- بازخوردها به صورت ساختاری ذخیره شوند (comment_id, user_action, modified_text, timestamp).
-
استفاده از بازخورد
-
دستهبندی: بازخوردهای مثبت بهعنوان examples تایید، بازخوردهای منفی بهعنوان counterexamples.
-
دو روش آموزش:
- Batch retraining (پیشنهاد شده برای امنیت و بررسی کیفیت): دورهای (مثلاً هفتهای/ماهانه) دادهها را بررسی، پاکسازی و مدلها را بازآموزی کن.
- Online / Incremental learning (با مراقبت): برای بخشهای با ضریب خطای کم، از یادگیری افزایشی استفاده شود.
-
-
اعتبارسنجی انسانی
- قبل از انتشار مدل جدید، یک مجموعه آزمون (QA) و پنل تأیید انسانی (ادمین/بازبین) داشته باشیم.
-
پرایوتنس و انونیمسازی
- قبل از استفاده در مدل، دادههای حساس (نام افراد، ایمیلها) را نشانهگذاری یا آنونیمایز کن.
-
مدیریت کاربران و نقشها:
- ایجاد/حذف/ویرایش کاربران، تعیین نقش (admin, reviewer, submitter).
- تنظیم سطوح دسترسی (مثلاً چه کسانی بتوانند مدل را بازآموزی کنند).
-
پیکربندی سیستم:
- تنظیم آستانههای تصمیمگیری، وزندهی ماژولها، فعال/غیرفعال کردن بررسیهای خاص.
-
مدیریت مدلها:
- نمایش نسخه مدلها، بازگردانی به نسخه قدیمی، آپلود مدل جدید، برنامهریزی آموزش.
-
گزارشات و آنالیتیکس:
- تعداد پردازشها، زمانهای واکنش، نرخ قبول/رد پیشنهادات، خطاها، معیارهای کیفیت (precision/recall برای اصلاحات پذیرفتهشده).
-
قوانین سازمانی (policy rules):
- اضافه کردن یا ویرایش قواعد rule-based برای بررسیهای ساختاری یا امنیتی.
-
مدیریت لاگها و امنیت:
- مشاهده لاگهای دسترسی، تنظیم سیاست نگهداری فایلها، ریپورتهای امنیتی.
-
صفحه آپلود فایل → پیشنمایش سریع (متادیتا) → دکمه «شروع بررسی»
-
پس از بررسی:
- نمایش خلاصه تصمیم کلی و امتیازات هر بخش (اعداد و نمودار ساده).
- لیست کامنتها به ترتیب موقعیت در سند (با امکان پرش به آن قطعه متن).
- هر کامنت: متن پیشنهادی، دکمههای [قبول] [رد] [ویرایش متن پیشنهاد] و فیلد توضیح (اختیاری).
- دکمه «نهاییسازی و دانلود فایل با کامنتهای تاییدشده» — فایل خروجی
.odtبا کامنتهای نهایی و گزارش جداگانه.
-
صفحه بازخورد جمعی: نمایش تأثیر بازخورد کاربر روی مدل (پس از هر بروزرسانی مدل).
-
خواندن/نوشتن ODF (.odt):
- کتابخانههای پیشنهادی:
odfpy(Python),python-uno(برای LibreOffice headless) یاlxmlبرای ویرایش XML ODF. - راهکار: از XML داخلی ODF استفاده کن؛ مکان دقیق (paragraph index / xpath) را ثبت و
office:annotationاضافه کن.
- کتابخانههای پیشنهادی:
-
توجه به نسخههای مختلف ODF: تست با فایلهای ساختهشده توسط LibreOffice، OpenOffice و Microsoft Word (در صورت تبدیل).
- زبان برنامهنویسی: Python (back-end NLP-heavy) + TypeScript/React برای UI
- فریمورک وب: FastAPI یا Django REST Framework
- فرانتاند: React (i18n برای فارسی، RTL)، یا Vue.js
- پایگاه داده: PostgreSQL (متادیتا، بازخورد)، Elasticsearch (جستجوی متن/لاگ)، MinIO/S3 (ذخیره فایلهای .odt)
- مدلها: استفاده از Transformers (HuggingFace) + مدلهای فارسی (ParsBERT, HooshvareLab, or custom fine-tuned)
- نُردینگ (orchestration): Docker, Kubernetes
- CI/CD: GitHub Actions / GitLab CI
- صف وظایف: Redis + Celery برای پردازشهای سنگین (تحلیل سند)
- نسخهبندی مدلها: MLflow یا DVC
- لاگ و مانیتورینگ: Prometheus + Grafana + Sentry
- llm: LmStudio with OpenaiAPI
LM Studio یک API ارائه میکند که 100٪ سازگار با ساختار OpenAI است. ساختار نمونه درخواست:
POST http://localhost:1234/v1/chat/completions
{
"model": "phi3",
"messages": [
{"role": "system", "content": "You are a Persian academic proposal reviewer."},
{"role": "user", "content": "متن پروپوزال این است ..."}
]
}SmartProposal میتواند بدون تغییرات زیاد، این را بهعنوان یک backend فعال استفاده کند.
مثال فایل JSON:
{
"sections": {
"abstract": {
"min_words": 100,
"rules": [
"چکیده باید شامل هدف، روش، و نتایج مورد انتظار باشد.",
"نباید شامل ارجاع باشد."
]
},
"methodology": {
"rules": [
"روش باید با هدف اصلی کاملاً منطبق باشد.",
"روش باید قابل تکرار باشد."
]
}
}
}این دانش در prompt استفاده میشود:
این قواعد از دانش ثانویه استخراج شدهاند:
- چکیده باید شامل هدف، روش و نتایج باشد.
- روش باید با هدف سازگار باشد.
با توجه به متن پروپوزال زیر، تحلیل دقیق ارائه کن...
-
معیارهای کلیدی:
- Precision/Recall برای پیشنهادات اصلاح نگارشی (با مجموعه تست فارسی برچسبخورده).
- Accuracy بخشبندی ساختار (section classifier).
- Consistency score (تغییرات پذیرفتهشده توسط کاربر بعد از پیشنهاد).
- Latency: زمان متوسط تاخورد پردازش هر فایل.
-
تستها:
- واحد (unit), یکپارچگی (integration), E2E (با نمونه .odt)، آزمونهای بار (load testing).
-
جمعآوری dataset فارسی برای ارزیابی (نمونههای پروپوزال واقعی یا ساختگی با برچسب).
{
"file_id": "file-20251105-001",
"summary": {
"decision": "Needs Revision",
"score": 62,
"top_issues": [
{"type":"نگارشی","count":12},
{"type":"ساختاری","count":3},
{"type":"محتوایی","count":2}
]
},
"comments": [
{
"comment_id":"cmt-1",
"type":"نگارشی",
"location":"بند 2، پاراگراف 1",
"message":"واژه 'باید' در این جمله کلی است؛ لطفاً مشخص کنید چه کسی/چه زمانی.",
"severity":"توصیه",
"status":"pending"
}
],
"generated_at":"2025-11-05T18:46:00Z",
"origin":"SmartProposal v0.9"
}