خودبهسازی، تجمیع پاسخ‌ها، RAG و استفاده از ابزار

خودبهسازی، تجمیع پاسخ‌ها، RAG و استفاده از ابزار

توسط admin | گروه هوش مصنوعی | 1405/05/18

نظرات 0

خودبهسازی، تجمیع پاسخ‌ها، RAG و استفاده از ابزار

عنوان اصلی کتاب: Foundations of Large Language Models

نویسندگان: Tong Xiao و Jingbo Zhu

سازمان: NLP Lab, Northeastern University & NiuTrans Research

زبان اصلی: انگلیسی

بازهٔ منبع: صفحات PDF 132 تا 144

مجوز منبع: Creative Commons Attribution-NonCommercial 4.0 (CC BY-NC 4.0)

تاریخ ترجمه: 1405/05/18 / 2026-08-09

اعتبار ترجمه: ترجمه با کمک هوش مصنوعی

۳.۲.۳ خودبهسازی (Self-refinement)

ادامهٔ مثال بخش قبل: پس از تولید ترجمهٔ اولیهٔ چینی به انگلیسی، همان LLM را با prompt زیر برای refinement به کار می‌گیریم:

یک متن چینی همراه با ترجمهٔ انگلیسی آن در اختیار تو قرار می‌گیرد. اگر لازم است، ترجمه را برای بهبود دقت و روانی اصلاح کن.
Chinese:
一系列考古发现奠定红山文化在中华文明起源研究中的重要地位。最新公布的研究成果认为,大约从距今5800年开始,中华大地上各个区域相继出现较为明显的社会分化,进入文明起源的加速阶段。
English:
A series of discoveries have cemented the significant role of the Hongshan culture in studies on the origins of Chinese civilization. The latest research findings suggests that, starting from around 5800 years ago, many regions across China began to experience noticeable social differentiations, entering an accelerated phase in the origin of civilization.
Refinement:
A series of archaeological discoveries have cemented the significant role of the Hongshan culture in studies on the origins of Chinese civilization. The latest research findings suggest that, starting from around 5800 years ago, various regions across China began to experience noticeable social differentiations, entering an accelerated phase in the origin of civilization.

در نسخهٔ اصلی، تغییرات نسبت به translation ورودی با رنگ سبز نشان داده شده‌اند. این فرایند می‌تواند iterative باشد: در هر گام ترجمهٔ گام قبل به‌عنوان input استفاده و از LLM خواسته می‌شود ترجمهٔ بالقوه بهتری تولید کند.

در مثال بالا refinement با instruction ساده‌ای مانند «لطفاً آن را اصلاح کن» انجام می‌شود. اما این کار فقط بر instruction-following مدل تکیه دارد و guidance یا supervision دقیقی دربارهٔ اینکه کجا و چگونه خروجی باید بهتر شود وجود ندارد. روش مؤثرتر، ارائهٔ feedback دربارهٔ جنبه‌های مشخص است؛ مثلاً «همهٔ خطاهای دستوری ترجمه را اصلاح کن» تا مدل هنگام refinement روی grammar error correction متمرکز شود.

چارچوب عمومی self-refinement با LLM سه گام دارد [Madaan et al., 2024]:

  1. Prediction: تولید output اولیه با LLM.
  2. Feedback Collection: دریافت feedback دربارهٔ output مدل.
  3. Refinement: اصلاح output توسط LLM بر اساس feedback.

دو گام آخر می‌توانند چند بار تکرار شوند و فرایند iterative self-refinement بسازند. در این framework، feedback دقیق و جزئی حیاتی است زیرا refinement بعدی را هدایت می‌کند. feedback را می‌توان به روش‌های مختلف به دست آورد [Fernandes et al., 2023; Pan et al., 2024]: بررسی دستی prediction، استفاده از feedback model یا reward model آموزش‌دیده روی labeled data که کیفیت output را با score ارزیابی کند.

چون تمرکز این فصل prompting است، در ادامه خود LLM برای تولید feedback استفاده می‌شود. مثال، ساخت پاسخ بهتر به پرسش کاربر است. گام نخست تولید پاسخ اولیه:

به پرسش زیر پاسخ بده: «برخی نگرانی‌های مهم محیط‌زیستی امروز چیست؟»
پاسخ:
نگرانی‌های مهم محیط‌زیستی امروز شامل تغییرات اقلیمی، آلودگی هوا و آب، جنگل‌زدایی، از دست رفتن تنوع زیستی و تخریب اقیانوس‌هاست.

گام دوم، prompt کردن همان LLM برای feedback:

یک پرسش و پاسخ متناظر آن در اختیار تو قرار می‌گیرد. دقت و عمق پاسخ را ارزیابی کن، خطاهای factual و جاهایی را که جزئیات بیشتر می‌تواند فهم را بهبود دهد مشخص کن.
Question: What are some major environmental concerns today?
Response: Major environmental concerns today include climate change, air and water pollution, deforestation, loss of biodiversity, and ocean degradation.
Feedback:
پاسخ دقیق است و نگرانی‌های اصلی را پوشش می‌دهد، اما از توضیح‌های مشخص‌تر سود می‌برد:
1. مثال‌های مشخص از مسائل محیط‌زیستی اضافه شود.
2. اطلاعاتی دربارهٔ آلاینده‌های مهم افزوده شود.
3. مناطق بیشتر تحت تأثیر مشخص شوند.

گام سوم refinement بر اساس feedback:

Question، Response و Feedback در اختیار توست. پاسخ را بر اساس feedback اصلاح کن.
Refined Response:
نگرانی‌های کلیدی شامل تغییرات اقلیمی است که با افزایش دمای جهانی و الگوهای شدید آب‌وهوا آشکار می‌شود؛ آلودگی قابل توجه هوا و آب در مناطق شهری و صنعتی؛ جنگل‌زدایی گسترده در مناطقی مانند Amazon که به کاهش تنوع زیستی می‌انجامد؛ و تخریب اقیانوس‌ها که در سفیدشدگی صخره‌های مرجانی و صید بیش از حد دیده می‌شود.

در حالت ایده‌آل، با LLM قوی می‌خواهیم هر سه گام بدون training اضافی انجام شود. اگر labeled data کافی داشته باشیم می‌توان عملکرد را با supervised learning افزایش داد؛ برای مثال LLM را برای refinement fine-tune کرد یا از task-specific modelهایی استفاده کرد که الزاماً LLM نیستند [Welleck et al., 2023; Schick et al., 2023]. در معنای گسترده‌تر، بهبود self-refinement را می‌توان alignment issue دانست؛ برخی توانایی‌های self-correction از طریق RLHF فعال می‌شوند [Ganguli et al., 2023]. این موضوع در فصل ۴ بیشتر بررسی می‌شود.

Self-refinement با مفاهیم روان‌شناختی مانند self-reflection نیز مرتبط است. اگر LLM بتواند دربارهٔ output خودش reflection کند، prediction دقیق‌تر و حتی self-correcting می‌شود. این توان را می‌توان با prompting برای تفکر عمیق‌تر، یا با demonstrationهایی که مدل از آن‌ها یاد می‌گیرد، فعال کرد.

نمونهٔ مهم، روش Deliberate-Then-Generate (DTG) [Li et al., 2023a] است که LLM را به deliberation وادار می‌کند. در DTG یک output اولیه که ممکن است خطا داشته باشد داده می‌شود و مدل ابتدا error type را تشخیص می‌دهد و سپس output بهتری تولید می‌کند. template ترجمهٔ چینی به انگلیسی:

Given the Chinese sentence: {∗source∗}
The English translation is: {∗target∗}
Please first detect the type of error, and then refine the translation.
Error Type:

هدف آن است که ابتدا error type و سپس refined translation پیش‌بینی شود. instruction «ابتدا نوع خطا را تشخیص بده و سپس ترجمه را اصلاح کن» مدل را به تحلیل سنجیده پیش از generation تشویق می‌کند. چون error prediction و refinement در یک اجرای LLM انجام می‌شوند، دو گام feedback و refinement در یک process ادغام شده‌اند.

این روش فرض می‌کند LLM می‌تواند translation ورودی را review و error type را درست تشخیص دهد؛ اما اگر مدل در کشف خطا ضعیف باشد به fine-tuning یا prompt engineering اضافی نیاز خواهد بود. راه ساده‌تر، کاهش بار error identification و استفاده از LLM فقط برای deliberation است. می‌توان translation ورودی را با یک ترجمهٔ تصادفی جایگزین و error type پیش‌فرض تعیین کرد:

Given the Chinese sentence:
一系列考古发现奠定红山文化在中华文明起源研究中的重要地位。
The English translation is:
A variety of innovative techniques have redefined the importance of modern art in contemporary cultural studies.
Please first detect the type of error, and then refine the translation.
Error Type: Incorrect Translation

در این مثال translation ورودی از LLM نیامده، بلکه به‌صورت تصادفی از dataset نمونه‌برداری شده و روشن است که برای source sentence ترجمه‌ای نادرست است. مدل با source و incorrect translation، ترجمهٔ جدید می‌سازد. این طراحی را می‌توان فعال‌سازی توان یادگیری از طریق «negative evidence» [Marcus, 1993] دانست که با contrastive analysis، reflection و output بهتر را تحریک می‌کند. با این حال روش به feedback خارجی وابسته نیست و با prompting ساده prediction یک LLM را بهبود می‌دهد.

DTG non-iterative است، اما iterative learning و refinement در NLP رایج‌اند. مزیت رویکرد iterative آن است که learning و problem-solving انسانی را تقلید می‌کند و feedback و adjustment مداوم به بهبود تدریجی می‌انجامد. برای مثال، در problem decomposition می‌توان در هر مرحله sub-problem و solution جدید را به context افزود تا LLM قدم‌به‌قدم به solution مسئلهٔ اصلی نزدیک شود. در عین حال، iterative method مشکلاتی دارد که در روش non-iterative نیست: خطاهای مراحل ابتدایی می‌توانند مراحل بعدی را خراب کنند و تعیین زمان توقف iteration نیازمند engineering اضافی است.

۳.۲.۴ تجمیع (Ensembling)

Model ensembling برای text generation سابقهٔ گسترده‌ای در NLP دارد. ایده، ترکیب prediction دو یا چند مدل برای ساخت prediction بهتر است و مستقیماً برای LLMها نیز کاربرد دارد. می‌توان چند LLM را روی یک input یکسان اجرا و خروجی نهایی را از ترکیب predictionها ساخت.

در LLM prompting همچنین می‌توان predictionهای حاصل از promptهای متفاوت را ترکیب کرد. فرض کنید یک LLM و مجموعه‌ای از promptهای یک task داریم. مدل را با هر prompt اجرا و outputها را ترکیب می‌کنیم. سه template متفاوت برای text simplification:

این متن را ساده‌تر کن.
{∗text∗}
این متن را کوتاه و ساده کن.
{∗text∗}
برای خواندن آسان بازنویسی کن.
{∗text∗}

هر prompt prediction متفاوتی می‌سازد و می‌توان هر سه را برای خروجی نهایی به کار برد. به‌صورت رسمی، اگر {x₁,...,x_K} تعداد K prompt برای یک task باشند و LLM توزیع Pr(·|·) باشد، بهترین prediction برای هر prompt ŷ_i=argmax_{y_i}Pr(y_i|x_i) است. سپس:

ŷ = Combine(ŷ₁,...,ŷ_K)    (3.6)

Combine(·) را می‌توان به شکل‌های مختلف طراحی کرد: voting، انتخاب output با بیشترین overlap با دیگران، یا model averaging در سطح token. اگر ŷ_j توکن پیش‌بینی‌شده در گام j باشد:

ŷ_j = arg maxy_j Σk=1K log Pr(y_j | x_k, ŷ₁,...,ŷ_{j−1})    (3.7)

در ensembling بهتر است promptها متنوع باشند تا ترکیب دامنهٔ گسترده‌تری از پاسخ‌های ممکن را پوشش دهد. از دیدگاه Bayesian می‌توان prompt یعنی x را با توجه به مسئلهٔ p یک latent variable در نظر گرفت:

Pr(y|p) = ∫ Pr(y|x) Pr(x|p) dx    (3.8)

انتگرال، احتمال کل y را روی همهٔ promptهای ممکن و با وزن likelihood آن‌ها محاسبه می‌کند. Pr(y|x) از LLM و Pr(x|p) prior promptهاست. این formulation عدم قطعیت انتخاب prompt را پوشش می‌دهد، اما به دلیل فضای احتمالاً نامتناهی prompt محاسبهٔ مستقیم آن ممکن نیست. روش‌هایی مانند Monte Carlo sampling با تعداد محدودی prompt انتگرال را تقریب می‌زنند.

در NLP معمولاً prior غیراطلاع‌رسان یا uniform فرض می‌شود و تمرکز بر ساخت promptهای متنوع است. روش‌های ایجاد diversity شامل این موارد است:

  • ساخت دستی demonstrationهای متعدد و استفادهٔ متفاوت از آن‌ها در promptها؛
  • تولید خودکار demonstration و prompt با LLM؛
  • تغییر ترتیب demonstrationها؛
  • تولید چند prompt مشابه از یک prompt توسط LLM؛
  • تبدیل prompt به فرم‌های دیگر، مانند ترجمه به زبان‌های دیگر.

در عمل می‌توان این روش‌ها را ترکیب کرد. فرض ضمنی آن است که prompt متنوع به model output متنوع منجر شود، به‌ویژه وقتی مسئله جدید و دشوار است. برای LLM قوی و robust، variance خروجی میان promptهای مشابه ممکن است کم باشد و سود ensembling prompt محدود شود.

رویکرد دیگر استفاده از variance ذاتی output خود LLM است. با sampling از hypothesis space می‌توان چند output ساخت. الگوریتم‌های search در LLM برای این کار مناسب‌اند؛ مثلاً با beam search همهٔ complete hypothesisهای beam به‌عنوان candidate جمع می‌شوند یا sampling پیشرفته‌تر برای کاوش hypothesisهای باکیفیت به کار می‌رود.

سپس مسئلهٔ ترکیب predictionها مطرح می‌شود. روش self-consistency به‌جای output با بالاترین probability، outputی را انتخاب می‌کند که با سایر predictionها بیشترین سازگاری را دارد [Wang et al., 2022a; 2023b]. ابتدا LLM با CoT چند reasoning path را sample می‌کند، فراوانی هر answer شمرده می‌شود و answer پرتکرار انتخاب می‌گردد. مثال سه prediction برای پرتاب سه سکه:

مسئله: سه دوست هر کدام یک سکهٔ سالم را یک بار پرتاب می‌کنند. احتمال اینکه دقیقاً یکی شیر بیاید چقدر است؟

Prediction 1 — درست:
فضای حالت هشت نتیجه دارد. حالت‌های دقیقاً یک شیر: HTT, THT, TTH؛ بنابراین 3/8.

Prediction 2 — درست:
با binomial: C(3,1)(0.5)^1(0.5)^2 = 3×0.5×0.25 = 0.375.

Prediction 3 — نادرست:
به اشتباه می‌گوید چون سه پرتاب داریم و یکی باید شیر باشد، احتمال 1/3≈33.3% است.

Predictionهای ۱ و ۲ هر دو ۳۷٫۵٪ را می‌دهند، در حالی که prediction ۳ کل فضای ۸ حالت را در نظر نمی‌گیرد. بنابراین consensus برابر ۳۷٫۵٪ انتخاب می‌شود.

Self-consistency معیاری برای انتخاب بهترین prediction از pool candidateهاست. چون prompt و model ثابت‌اند، دقیقاً prompt ensembling نیست؛ بلکه نمونه‌ای از output ensembling یا hypothesis selection است که سابقه‌ای طولانی در NLP دارد [Xiao et al., 2013]. outputهای متعدد با تغییر architecture/parameter یا sampling ساخته می‌شوند، با criterion امتیاز می‌گیرند و re-rank می‌شوند. scoring می‌تواند agreement با outputهای دیگر یا rescoring با مدل قوی‌تر باشد.

شکل 3.2تصویر درون‌خطی شکل 3.2 از کتاب Foundations of Large Language Models؛ توضیح فارسی در زیر شکل آمده است.
شکل ۳.۲ — سه نوع ensembling برای LLM. (a) Model ensembling: چند LLM متفاوت یک prompt مشترک را می‌گیرند و predictionها ترکیب می‌شوند. (b) Prompt ensembling: یک LLM با چند prompt اجرا می‌شود. (c) Output ensembling: یک LLM برای یک prompt چند prediction را از prediction space sample می‌کند. این روش‌ها قابل ترکیب‌اند تا diversity بیشتر شود.

از دید Minimum Bayes Risk نیز می‌توان self-consistency را search برای کمینه‌کردن Bayes risk دانست. اگر تابع risk برای جایگزینی output y با y_r برابر R(y,y_r) باشد و مجموعهٔ outputها Ω، آنگاه:

Risk(y)=E_{y_r~Pr(y_r|x)} R(y,y_r)=Σ_{y_r∈Ω} R(y,y_r)·Pr(y_r|x)    (3.9)

روش‌هایی مانند problem decomposition، self-refinement و ensembling از یک منظر مشترک‌اند: با افزودن «انتخاب‌های» بیشتر به reasoning، decision-making را بهتر می‌کنند و به شکلی prediction را ارزیابی و feedback تولید می‌کنند. در self-refinement پیشنهاد بهبود لازم است و در output ensembling بهترین candidate انتخاب می‌شود. بنابراین می‌توان آن‌ها را در خانوادهٔ predict-then-verify قرار داد. مسئلهٔ بنیادی، verify و evaluate کردن reasoning result یا step میانی است که از جهاتی با reward model در RLHF مرتبط است.

Verifierها در reasoning با LLM به‌طور جدی بررسی شده‌اند. به‌جای heuristic inference-time، بسیاری از کارها verifier را به‌صورت supervised یاد می‌گیرند. روش ساده، binary classifier برای درست/نادرست بودن answer است، هرچند verifier معمولاً scoring model است. برای یک reasoning path می‌توان کل مسیر را score داد، یعنی outcome-based [Cobbe et al., 2021]، یا هر reasoning step را جدا score کرد، یعنی process-based [Uesato et al., 2022; Lightman et al., 2024].

۳.۲.۵ RAG و استفاده از ابزار

Retrieval-Augmented Generation (RAG) معمولاً وقتی به کار می‌رود که LLM استانداردِ متکی بر دانش pre-trained در دقت یا عمق متن تولیدی کمبود دارد. با استفاده از database و document خارجی، RAG می‌تواند کیفیت response را افزایش دهد تا هم از نظر context مرتبط و هم از نظر factual دقیق‌تر باشد. این روش برای سناریوهایی که factual accuracy بالا و اطلاعات به‌روز نیاز دارند، مانند complex question answering، به‌ویژه مفید است.

مفهوم RAG در بخش‌ها و فصل‌های قبلی چند بار مطرح شد. مراحل اصلی آن:

  1. مجموعه‌ای از متن‌ها آماده می‌کنیم که منبع دانش اضافی قابل دسترس‌اند.
  2. برای query داده‌شده متن‌های مرتبط را retrieval می‌کنیم.
  3. متن‌های بازیابی‌شده و query را با هم به LLM می‌دهیم و مدل را برای prediction نهایی prompt می‌کنیم.

دو گام نخست می‌توانند با information retrieval system خارجی انجام شوند؛ مثلاً متن‌ها در vector database ذخیره و با vector-based search نزدیک‌ترین متن‌ها بازیابی شوند. چون IR تمرکز فصل نیست، این سامانه‌ها آماده فرض می‌شوند.

برای نمونه پرسش «بازی‌های المپیک ۲۰۲۸ کجا برگزار می‌شود؟» را در نظر بگیرید. search engine می‌تواند قطعاتی از متن مرتبط برگرداند؛ مثلاً توضیحی از Wikipedia دربارهٔ Los Angeles 2028 / LA28 و متنی از The Sporting News که می‌گوید Los Angeles در ۲۰۲۸ سومین شهری می‌شود که سه بار میزبان Olympics است. سپس این متن‌ها context اضافهٔ LLM می‌شوند:

وظیفهٔ تو پاسخ‌دادن به سؤال زیر است. متن‌های مرتبطی برای کمک ارائه شده‌اند؛ پاسخ را بر اساس آن‌ها تولید کن.
Question: Where will the 2028 Olympics be held?
Relevant Text 1: The 2028 Summer Olympics ... Los Angeles 2028 or LA28 ...
Relevant Text 2: In 2028, Los Angeles will become the third city ...
...
Answer: The 2028 Olympics will be held in Los Angeles.

این prompt فرض می‌کند متن‌های retrievalشده مرتبط‌اند. اما IR system ممکن است متن نامرتبط یا نادرست بدهد و LLM نیز پاسخ غلط بسازد. یکی از راه‌ها بهبود retrieval است، ولی خطا کاملاً حذف نمی‌شود. بنابراین robustness خود LLM نیز باید افزایش یابد تا در input نادقیق تصمیم منطقی بگیرد. prompt زیر امکان امتناع از پاسخ را می‌دهد:

پاسخ باید تا حد ممکن دقیق و وفادار به facts باشد. اگر اطلاعات ارائه‌شده برای پاسخ دقیق کافی نیست، فقط «No answer!» را خروجی بده.
Question: Where will the 2028 Olympics be held?
Relevant Text 1: The 2024 Summer Olympics ... Paris 2024 ...
...
No answer!

در این مثال LLM به دلیل ناکافی و نامرتبط بودن اطلاعات پاسخ نمی‌دهد.

RAG و fine-tuning هر دو روش‌های رایج برای adaptation LLM با task-specific data هستند. RAG استاندارد training-free است و مستقیماً روی LLM قابل اجراست. برای بهبود بیشتر می‌توان LLM را fine-tune کرد؛ مثلاً با human-labeled data رفتار refusal را آموزش داد. با وجود سادگی مثال‌ها، RAG مسئله‌ای ساده نیست. use caseهای مختلف به promptهای متفاوت نیاز دارند، هرچند هدف بلندپروازانه ساخت prompting strategy عمومی است. در برخی کاربردها مدل باید سخت‌گیرانه فقط از context retrievalشده استفاده کند و در برخی دیگر، اگر context ناکافی بود از pre-trained knowledge نیز کمک بگیرد. بخش‌های دیگری مانند بهبود retrieval خارج از دامنهٔ فصل‌اند و surveyهای [Li et al., 2022; Gao et al., 2023c] منابع تکمیلی هستند.

یکی از دلایل بحث RAG در اینجا آن است که می‌توان آن را نمونه‌ای از framework عمومی problem decomposition دانست. RAG حل مسئله را به دو گام تقسیم می‌کند: جمع‌آوری اطلاعات پشتیبان از knowledge sourceها و generation پاسخ با LLM بر اساس آن اطلاعات. با گسترش این ایده، بسیاری از وظایف استفاده از external system یا tool نیز به مسئله‌ای مشابه تبدیل می‌شوند.

نمونه، tool use در LLM است. در بسیاری از applicationها مدل برای response دقیق باید به external database، API یا simulation tool دسترسی داشته باشد؛ مانند دادهٔ real-time بازار مالی یا database سلامت. این integration قابلیت مدل را از text generator صرف فراتر می‌برد و LLM می‌تواند بیشتر مانند autonomous agent عمل کند [Franklin and Graesser, 1996].

Tool use حوزه‌ای بسیار گسترده است. در اینجا بحث به taskهایی محدود می‌شود که با فراخوانی API برای حل برخی sub-problemها آسان‌تر می‌شوند [Parisi et al., 2022; Gao et al., 2023b]. باز همان پرسش Olympics 2028 را با web search در نظر بگیرید:

Your task is to answer the following question. You may use external tools, such as web search, to assist you.
Question: Where will the 2028 Olympics be held?
The information regarding this question is given as follows:
{tool: web-search, query: "2028 Olympics"}
So the answer is: Los Angeles

رشتهٔ {tool: web-search, query: "2028 Olympics"} درخواست به سامانهٔ web search را نشان می‌دهد. وقتی LLM این رشته را می‌بیند، search اجرا و نتیجه جایگزین marker می‌شود؛ سپس در گام‌های بعدی prediction، نتیجهٔ search به‌عنوان context برای ساخت answer استفاده می‌شود. در ادامهٔ کتاب مثال دیگری از tool use برای حل مسئلهٔ ریاضی ارائه می‌شود.

امتیاز کاربران به این مقاله

☆☆☆☆☆

0 نفر امتیاز داده اند. میانگین: 0.0 از 5

 

0 نظر

نظر محترم شما در مورد مقاله های وب سایت برنامه نویسی و پایگاه داده

نظرات محترم شما در خدمات رسانی بهتر ما را یاری می نمایند. لطفا اگر مایل بودید یک نظر ما را مهمان فرمائید. آدرس ایمیل و وب سایت شما نمایش داده نخواهد شد.

0 / 500

اطلاعات تماس

  • آدرس:اصفهان-خیابان ام کلثوم غربی - بعد خیابان تخم چی - بیست متر بعد از پیتزا ننه شب - کوچه تعمیر گاه سمار زغالی - پلاک 354 - درب مشکی - طبقه هفتم
  • آدرس ایمیل:najafzade@gmail.com
  • وب سایت:http://www.a00b.com/
  • تلفن ثابت:(+98)9131253620
  • تلفن همراه:09131253620