1 q efktrvbk1gzh qbzghag

چگونه از LangChain ReAct Agents برای پاسخ به سؤالات پیچیده استفاده کنیم؟

تولید افزوده بازیابی (RAG) نحوه استقرار مدل‌های زبانی بزرگ با دانش خاص حوزه توسط سازمان‌ها را متحول کرده است، با این حال مشتریان به طور فزاینده‌ای راه‌حل‌هایی برای پرس‌وجوهای پیچیده و چندلایه تقاضا می‌کنند که سیستم‌های RAG استاندارد در مدیریت آن‌ها با مشکل مواجه می‌شوند.

وقتی اطلاعات مستقیماً در مستندات موجود نیست یا نیاز به استدلال در سراسر چندین منبع داده دارد، چت‌بات‌های سنتی اغلب ناکام می‌مانند. شما می‌توانید این محدودیت‌ها را با پیاده‌سازی اصل ReAct غلبه کنید، که استدلال و عمل را ترکیب می‌کند تا ایجنت‌های هوش مصنوعی پیچیده‌تری ایجاد کند که قادر به مدیریت سناریوهای حل مسئله پیچیده هستند.

این راهنمای جامع کاوش می‌کند که چگونه چارچوب ReAct لنگ‌چین به شما امکان می‌دهد ایجنت‌های هوشمندی بسازید که بتوانند پرس‌وجوهای پیچیده را از طریق استدلال تکراری و تعامل ابزار پیمایش کنند، و در نهایت پاسخ‌های دقیق‌تر و مرتبط با زمینه به کاربران شما ارائه دهند.

چارچوب LangChain ReAct چیست و چگونه کار می‌کند؟

LangChain ReAct تکنیک پیشرفته‌ای از هدایت پیشرفته را نشان می‌دهد که عناصر استدلال و عمل را در مدل‌های زبانی بزرگ هم‌افزا می‌کند. این چارچوب به مدل‌های زبانی بزرگ امکان می‌دهد مشکلات را به طور سیستماتیک تحلیل کنند در حالی که اقدامات خاصی را از طریق ادغام ابزار خارجی اجرا می‌کنند، و محیط حل مسئله پویایی ایجاد می‌کنند که فرآیندهای شناختی انسانی را بازتاب می‌دهد.

ایجنت‌های ReAct اساساً قابلیت‌های مدل زبانی بزرگ را با امکان تقلید رویکردهای حل مسئله شبیه به انسانی گسترش می‌دهند. آن‌ها به طور یکپارچه با ابزارهای خارجی تعامل می‌کنند تا اطلاعات را جمع‌آوری، تبدیل، و تحلیل کنند در حالی که بین تفکر تحلیلی و انجام عمل مشخص جایگزین می‌شوند. این رویکرد به شدت شبیه به نحوه‌ای است که انسان‌ها به مشکلات پیچیده نزدیک می‌شوند: برنامه‌ریزی استراتژیک، جمع‌آوری داده‌های مرتبط، و تکرار به سمت راه‌حل‌های جامع.

چگونه می‌توانید سیستم‌های پاسخ‌دهی به سوالات چندگامی با استفاده از LangChain ReAct بسازید؟

ساخت سیستم‌های پاسخ‌دهی به سوالات چندگامی موثر نیاز به آماده‌سازی دقیق زیرساخت داده‌های شما و پیکربندی سیستماتیک ایجنت دارد. پایه هر پیاده‌سازی موفق ReAct در تثبیت داده‌های سازمانی شما در مخازن قابل دسترسی نهفته است که ایجنت‌های شما بتوانند به طور کارآمد آن‌ها را پرس‌وجو کنند.

پلتفرم‌های ادغام داده مدرن مانند Airbyte این مرحله آماده‌سازی را با ارائه راه‌حل‌های جامع برای تثبیت داده متحول کرده‌اند. با بیش از ۶۰۰ اتصال‌دهنده پیش‌ساخته و ویژگی‌های پیشرفته حاکمیت داده، Airbyte به شما امکان می‌دهد سوابق ساختاریافته و فایل‌های بدون ساختار را در همان اتصال جمع‌آوری کنید در حالی که متاداده‌های حیاتی را حفظ می‌کند که قابلیت‌های استدلال ایجنت را افزایش می‌دهد.

راهنمای پیاده‌سازی کامل در اینجا پیاده‌سازی کد جامع آورده شده است که ساخت سیستم ایجنت ReAct آماده تولید را نشان می‌دهد:

۱. وارد کردن کتابخانه‌های مورد نیاز

python
import os
from langchain_openai import AzureChatOpenAI
from langchain_openai import AzureOpenAIEmbeddings
from langchain.retrievers import ParentDocumentRetriever
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain.storage._lc_store import create_kv_docstore
from langchain.storage import LocalFileStore
from langchain.agents import Tool, AgentExecutor, create_react_agent
from langchain.tools.retriever import create_retriever_tool
from langchain import hub

۲. پیکربندی مدل زبانی شما

python
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")

llm = AzureChatOpenAI(
azure_deployment="gpt-4",
model_name="gpt-4",
azure_endpoint="https://.openai.azure.com/",
api_version="2024-02-01",
openai_api_key=OPENAI_API_KEY,
temperature=0.1,
)

۳. مقداردهی اولیه مدل‌های جاسازی

python
embeddings = AzureOpenAIEmbeddings(
azure_deployment="text-embedding-3-large",
model="text-embedding-3-large",
azure_endpoint="https://.openai.azure.com/",
openai_api_key=OPENAI_API_KEY,
api_version="2024-02-01",
chunk_size=1,
)

۴. ایجاد سیستم بازیابی داده پیشرفته

python
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain.storage import LocalFileStore
from langchain.docstore import create_kv_docstore
from langchain.retrievers import ParentDocumentRetriever

# Define splitters
parent_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=20)
child_splitter = RecursiveCharacterTextSplitter(chunk_size=200, chunk_overlap=20)

# Initialize vectorstore
vectorstore = Chroma(
    persist_directory="./data/local_vectorstore",
    collection_name="hr_docs",
    embedding_function=embeddings,
)

# Initialize local docstore
local_store = LocalFileStore("./data/local_docstore")
store = create_kv_docstore(local_store)

# Create retriever
retriever = ParentDocumentRetriever(
    vectorstore=vectorstore,
    docstore=store,
    child_splitter=child_splitter,
    parent_splitter=parent_splitter,
)

# Initialize your data repository
vectorstore.persist()
retriever.add_documents(documents)

۵. ساخت زنجیره بازیابی-پاسخگویی

python
from langchain.chains import RetrievalQA

# Create the QA chain
qa = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",
    retriever=retriever,
    return_source_documents=True,
)

# Test with increasingly complex queries
qa({"query": "What is the probationary period?"})
qa({"query": "What is the difference in the number of work hours in Germany vs. United States?"})
qa({"query": "What is the percentage difference in the annual budget for Japan and US if 1 USD = 146.91 JPY?"})

۶. پیکربندی ایجنت ReAct پیشرفته ابزارهای تخصصی برای ایجنت شما ایجاد کنید:

python
tool_search = create_retriever_tool(
retriever=retriever,
name="search_hr_policy",
description="Searches and returns relevant excerpts from comprehensive HR policy documentation.",
)

ایجنت و استقرار ReAct خود را بسازید:

python
prompt = hub.pull("hwchase17/react")
react_agent = create_react_agent(llm, [tool_search], prompt)

agent_executor = AgentExecutor(
agent=react_agent,
tools=[tool_search],
verbose=True,
handle_parsing_errors=True,
max_iterations=10,
)

۷. آزمایش استدلال چندگامی پیچیده

python
agent_executor.invoke({"input": "Which country has the highest budget?"})
agent_executor.invoke({"input": "Is the budget for Japan different than the United States?"})
agent_executor.invoke({"input": "Calculate the budget difference between the top two countries and explain the implications."})

چگونه می‌توانید معماری ایجنت ReAct را برای عملکرد و قابلیت اطمینان بهینه کنید؟

محیط‌های تولید مدرن ایجنت‌های ReAct را طلب می‌کنند که به طور مداوم تحت بارهای کاری متفاوت عمل کنند در حالی که دقت را در وظایف استدلال پیچیده حفظ می‌کنند.

چارچوب‌های انتخاب و اجرای ابزار پیشرفته

ایجنت‌های ReAct موثر باید استفاده از ابزار را به طور هوشمند بر اساس پیچیدگی وظیفه، ارتباط حوزه، و هزینه محاسباتی اولویت‌بندی کنند. پیاده‌سازی الگوریتم‌های انتخاب ابزار پویا به ایجنت‌های شما امکان می‌دهد مسیرهای اجرای بهینه را بدون مداخله دستی انتخاب کنند.

مکانیسم‌های مدیریت خطا و بازیابی ستون فقرات سیستم‌های ایجنت قابل اعتماد را تشکیل می‌دهند. به جای فرض اجرای کامل ابزار، ایجنت‌های آماده تولید استراتژی‌های کاهش تدریجی را پیاده‌سازی می‌کنند که به رویکردهای جایگزین بازمی‌گردند وقتی ابزارهای اصلی شکست می‌خورند.

مدیریت حالت و بهینه‌سازی حافظه

ایجنت‌های ReAct که پرس‌وجوهای پیچیده را مدیریت می‌کنند باید حالت پیچیده‌ای را در چندین تعامل ابزار حفظ کنند در حالی که استفاده از حافظه را برای عملکرد بهینه می‌کنند. مدیریت حالت موثر شامل پیاده‌سازی تنظیم پنجره توجه است که حفظ زمینه تاریخی را با کارایی محاسباتی تعادل می‌بخشد.

تکنیک‌های فشرده‌سازی حالت به ایجنت‌ها امکان می‌دهد اقدامات و مشاهدات قبلی را خلاصه کنند بدون از دست دادن اطلاعات حیاتی. ذخیره‌های حافظه کلید-مقدار بازیابی کارآمد اطلاعات اغلب دسترسی‌شده را فراهم می‌کنند، در حالی که ساختارهای حالت سلسله‌مراتبی زنجیره‌های استدلال پیچیده را برای نگهداری و عیب‌یابی بهتر سازماندهی می‌کنند.

تنظیم عملکرد آگاه از مدل معماری‌های مدل زبانی بزرگ مختلف به طور منحصربه‌فرد با پارادایم‌های ReAct تعامل می‌کنند و نیاز به رویکردهای بهینه‌سازی سفارشی دارند. درک محدودیت‌های عمق استدلال زنجیره تفکر به جلوگیری از پیگیری زنجیره‌های استدلال غیرمولد توسط ایجنت‌ها کمک می‌کند، در حالی که کارایی فراخوانی ابزار بین مدل‌هایی مانند پردازش آگاه از زمینه GPT-4 و الگوهای بهینه‌سازی سطح بایت Claude به طور قابل توجهی متفاوت است.

قابلیت‌های پیروی از دستورالعمل باید با نقاط قوت مدل خاص شما همخوانی داشته باشد، چه از طریق بهینه‌سازی بدون نمونه برای مدل‌هایی با توانایی‌های قوی پیروی از دستورالعمل یا رویکردهای تنظیم دقیق برای کاربردهای حوزه تخصصی. بنچمارک منظم پیکربندی‌های مدل مختلف اطمینان می‌دهد که ایجنت‌های شما عملکرد بهینه را با تکامل فناوری‌های زیربنایی حفظ می‌کنند.

چه اصول طراحی سیستم پیشرفته امکان استقرارهای تعیین ایجنت ReAct را فراهم می‌کند؟

مقیاس‌بندی ایجنت‌های ReAct فراتر از پیاده‌سازی‌های اثبات مفهوم نیاز به طراحی سیستم جامع دارد که چالش‌های مدیریت منابع، حاکمیت امنیتی، و همکاری بین‌حوزه را حل کند.

مقیاس‌پذیری و ارکستراسیون منابع

استقرارهای تعیین ایجنت ReAct نیاز به ارکستراسیون خدمات ابزار پیچیده دارند که بار محاسباتی را به طور موثر توزیع می‌کند. استراتژی‌های تعادل بار اطمینان می‌دهند که فراخوانی‌های ابزار در چندین نمونه توزیع شوند تا از گلوگاه‌ها در دوره‌های اوج استفاده جلوگیری شود. سیاست‌های اجرای آگاه از هزینه عملیات محلی کم‌هزینه را بر فراخوانی‌های API خارجی گران اولویت‌بندی می‌کنند وقتی ممکن است، و کارایی عملیاتی را بدون قربانی کردن عملکرد بهینه می‌کنند.

معماری‌های توزیع‌شده سیستم‌های ایجنت چندگره‌ای را برای کاربردهای با throughput بالا از طریق شاردینگ استراتژیک وظیفه بر اساس تخصص ایجنت و استخرهای حافظه مشترک برای داده‌های اغلب دسترسی‌شده امکان‌پذیر می‌سازند. پلتفرم‌های ارکستراسیون کانتینر مانند Kubernetes پایه زیرساختی برای استقرارهای مقیاس‌پذیر فراهم می‌کنند، در حالی که سیاست‌های خود-مقیاس‌بندی منابع را بر اساس الگوهای تقاضا به طور پویا تنظیم می‌کنند.

پیاده‌سازی حفاظت‌های امنیتی و اخلاقی

سیستم‌های ReAct تولیدی نیاز به چارچوب‌های امنیتی جامع دارند که داده‌های حساس را در حالی که عملکرد لازم را امکان‌پذیر می‌سازند، محافظت می‌کنند. حفاظت‌های پیشگیرانه شامل لایه‌های اعتبارسنجی فراخوانی ابزار هستند که عملیات بالقوه مخرب را مسدود می‌کنند، سیستم‌های پاکسازی ورودی که آرگومان‌های ارائه‌شده توسط کاربر را برای جلوگیری از حملات تزریق فیلتر می‌کنند، و کنترل‌های دسترسی مبتنی بر نقش که قابلیت‌های ایجنت را بر اساس مجوزهای کاربر و سطوح حساسیت داده محدود می‌کنند.

قابلیت‌های حسابرسی پسینی نظارت ضروری را از طریق سیستم‌های تجسم ردیابی جامع فراهم می‌کنند که نمای گرافیکی از توالی‌های استدلال و عمل برای اهداف پاسخگویی ایجاد می‌کنند. مکانیسم‌های تشخیص بایاس الگوهای استدلال کج‌شده را در کاربردهای خاص حوزه شناسایی می‌کنند، در حالی که سیستم‌های لاگینگ جامع تمام تعاملات ایجنت را برای اهداف انطباق و عیب‌یابی ضبط می‌کنند.

ادغام دانش بین‌حوزه و همکاری

شرکت‌های مدرن ایجنت‌های ReAct نیاز دارند که به طور موثر در چندین حوزه تجاری عمل کنند در حالی که تخصص تخصصی را حفظ می‌کنند. استراتژی‌های تخصص حوزه شامل تنظیم ایجنت‌ها برای عمودی‌های خاص از طریق الگوهای دیالوگ خاص صنعت و هم‌ترازی هستی‌شناسی است که ثبت‌های ابزار ReAct را با گراف‌های دانش خاص حوزه ادغام می‌کند.

معماری‌های هیبریدی ReAct را با پارادایم‌های مکمل مانند یادگیری تقویتی از بازخورد انسانی (RLHF) و هدایت با نمونه‌های اندک برای حل چالش‌های خاص حوزه ترکیب می‌کنند. پروتکل‌های هماهنگی چندایجنتی به ایجنت‌های تخصصی امکان می‌دهند به طور موثر همکاری کنند و اطلاعات مرتبط را به اشتراک بگذارند در حالی که مرزها و کنترل‌های امنیتی مناسب را حفظ می‌کنند.

چه روندهای فعلی و بهترین شیوه‌ها باید استراتژی پیاده‌سازی LangChain ReAct شما را هدایت کند؟

پیاده‌سازی موفق ایجنت‌های LangChain ReAct نیاز به درک روندهای صنعت فعلی و اتخاذ روش‌شناسی‌های اثبات‌شده دارد که هم اثربخشی فوری و هم مقیاس‌پذیری بلندمدت را تضمین می‌کند.

تکامل چارچوب ReAct

چارچوب ReAct از ادغام ابزار پایه به سیستم‌های ایجنت پیچیده با حافظه و مدیریت خطای جامع تکامل یافته است. پیاده‌سازی‌های فعلی از قلاب‌های پیش و پس از مدل برای فیلترینگ زمینه، ابزارهای داخلی ارائه‌دهنده برای جستجوی وب و مفسرهای کد، و اعتبارسنجی طرح خودکار برای خروجی‌های ساختاریافته بهره می‌برند.

ادغام لنگ‌گراف با React توسعه را از طریق قلاب useStream که جریان پیام و مدیریت حالت را مدیریت می‌کند، ساده می‌کند، با پشتیبانی TypeScript ایمن از نوع، و خطاهای توسعه را کاهش می‌دهد.

مدیریت حافظه

ایجنت‌های ReAct موثر سیستم‌های حافظه چندسطحی را پیاده‌سازی می‌کنند و بافرهای کوتاه‌مدت را با ذخیره‌سازی پایدار بلندمدت تعادل می‌بخشند. الگوهای پیشرفته از بافرهای مکالمه لنگ‌چین برای ذخیره موقت تعاملات و ذخیره موقت خاص ابزار برای بهینه‌سازی عملکرد بهره می‌برند. قابلیت‌های تغییر حالت به ایجنت‌ها امکان می‌دهد زمینه را در میانه اجرا برای پردازش افزایشی به‌روزرسانی کنند.

امنیت و حاکمیت

پیاده‌سازی‌های تولیدی نیاز به لاگینگ جامع فراخوانی‌های ابزار و پاسخ‌ها برای قابلیت حسابرسی دارند در حالی که از اعتبارسنجی طرح برای فیلتر ورودی‌ها و جلوگیری از دسترسی غیرمجاز استفاده می‌کنند. محدودسازی نرخ از جهش‌های ترافیک از طریق سهمیه‌های API و محدودسازی درخواست محافظت می‌کند، در حالی که چارچوب‌های اعتبارسنجی مانند Zod الزامات نوع داده را اعمال می‌کنند.

بهینه‌سازی عملکرد پیاده‌سازی‌های ReAct عملکرد و هزینه را از طریق هدایت کارآمد، بهینه‌سازی پنجره زمینه، و تنظیمات ایجنت ساده‌شده تعادل می‌بخشند. ابزارهای نظارت مانند LangSmith هشدارهایی برای شکست‌ها، مدیریت آزمایش، و قابلیت‌های پیگیری هزینه ارائه می‌دهند.

با تکامل ایجنت‌های ReAct به اعضای تیم خودمختار برای وظایف روتین، سازمان‌ها باید الگوهای همکاری طراحی کنند که نظارت و کنترل انسانی مناسب را حفظ کنند.

نتیجه‌گیری

چارچوب ReAct لنگ‌چین تکامل قابل توجهی فراتر از سیستم‌های RAG سنتی را نشان می‌دهد با امکان ترکیب استدلال با عمل توسط ایجنت‌های هوش مصنوعی از طریق ادغام ابزار خارجی. از طریق چرخه‌های استدلال تکراری و مدیریت حافظه پیچیده، ایجنت‌های ReAct می‌توانند پرس‌وجوهای چندگامی پیچیده را پیمایش کنند که چت‌بات‌های متداول را فلج می‌کند.

سازمان‌هایی که این ایجنت‌های پیشرفته را پیاده‌سازی می‌کنند باید امنیت، مقیاس‌پذیری، و بهینه‌سازی عملکرد را اولویت‌بندی کنند در حالی که سیستم‌هایی طراحی می‌کنند که نظارت و کنترل انسانی مناسب را حفظ می‌کنند.

سوالات متداول لنگ‌چین الگوی ReAct را در سطح بالا چگونه پیاده‌سازی می‌کند؟

LangChain ReAct را از طریق ترکیب پیچیده‌ای از ابزارها و صفحه یادداشت ایجنت پیاده‌سازی می‌کند که چرخه‌های استدلال و عمل سیستماتیک را امکان‌پذیر می‌سازد. ابزارها توابع یا APIهایی را نشان می‌دهند که ایجنت‌ها می‌توانند برای جمع‌آوری اطلاعات یا انجام اقدامات فراخوانی کنند، در حالی که صفحه یادداشت ایجنت لاگ در حال اجرا از افکار، اقدامات، و مشاهدات را در طول فرآیند حل مسئله حفظ می‌کند. ایجنت بین استدلال تحلیلی و انجام عمل مشخص جایگزین می‌شود تا اعتماد کافی برای ارائه پاسخ نهایی جامع توسعه دهد.

آیا جایگزین‌هایی برای ReAct برای ایجنت‌های لنگ‌چین وجود دارد؟

چندین جایگزین برای موارد استفاده و الزامات مختلف وجود دارد. اجراکننده ایجنت از طرح‌های هدایت مختلف فراتر از ReAct پشتیبانی می‌کند، شامل ایجنت‌های چت ساختاریافته برای الگوهای تعامل رسمی‌تر و الگوهای خود-پرسش-با-جستجو برای رویکردهای تجزیه پرس‌وجو. هر جایگزین تجارت-خسارتهای خاصی در پیچیدگی، دقت کنترل، و ویژگی‌های عملکرد ارائه می‌دهد. انتخاب شما باید با الزامات مورد استفاده خاص، سطح کنترل مورد نظر، و پیچیدگی مشکلاتی که ایجنت‌های شما نیاز به حل دارند، همخوانی داشته باشد.

چه چیزی ایجنت‌های ReAct را موثرتر از سیستم‌های RAG سنتی می‌کند؟

ایجنت‌های ReAct سیستم‌های RAG سنتی را با گنجاندن قابلیت‌های استدلال تکراری و تعامل ابزار خارجی پشت سر می‌گذارند. در حالی که سیستم‌های RAG استاندارد اسناد مرتبط را بازیابی و پاسخ‌ها را در یک عبور تولید می‌کنند، ایجنت‌های ReAct می‌توانند تشخیص دهند که وقتی اطلاعات اولیه ناکافی است و به طور پویا به دنبال منابع داده اضافی هستند. این رویکرد تکراری مدیریت پرس‌وجوهای پیچیده‌ای را که نیاز به استدلال چندگامی، مرجع متقابل چندین منبع داده، و اعتبارسنجی نتایج میانی قبل از ارائه پاسخ‌های نهایی دارند، امکان‌پذیر می‌سازد.

چگونه می‌توانید عملکرد ایجنت ReAct را برای محیط‌های تولید بهینه کنید؟

بهینه‌سازی تولید نیاز به توجه به چندین حوزه کلیدی دارد، شامل چارچوب‌های انتخاب ابزار که مسیرهای اجرای کارآمد را اولویت‌بندی می‌کنند، سیستم‌های مدیریت حالت که حفظ زمینه را با کارایی محاسباتی تعادل می‌بخشد، و مکانیسم‌های مدیریت خطا که کاهش تدریجی را وقتی ابزارها شکست می‌خورند تضمین می‌کنند. پیاده‌سازی سیستم‌های نظارت و مشاهده‌پذیری جامع شناسایی پیشگیرانه گلوگاه‌های عملکرد را امکان‌پذیر می‌سازد، در حالی که سیاست‌های اجرای آگاه از هزینه به مدیریت هزینه‌های عملیاتی بدون قربانی کردن عملکرد کمک می‌کند.

چه ملاحظات امنیتی برای استقرارهای ایجنت ReAct اعمال می‌شود؟

امنیت ایجنت ReAct نیاز به رویکردهای جامع دارد که شامل حفاظت‌های پیشگیرانه مانند اعتبارسنجی فراخوانی ابزار و پاکسازی ورودی، کنترل‌های دسترسی مبتنی بر نقش که قابلیت‌های ایجنت را بر اساس مجوزهای کاربر محدود می‌کنند، و سیستم‌های حسابرسی پسینی که ردیابی کامل اقدامات ایجنت را فراهم می‌کنند. علاوه بر این، پیاده‌سازی مکانیسم‌های تشخیص بایاس و سیستم‌های لاگینگ جامع اطمینان می‌دهد که ایجنت‌ها در مرزهای اخلاقی عمل می‌کنند در حالی که انطباق با الزامات مقرراتی و سیاست‌های سازمانی را حفظ می‌کنند.

۷ راه استفاده از هوش مصنوعی برای تحلیل داده چه هستند؟
چگونه از ChromaDB برای جاسازی‌های برداری استفاده می‌شود؟

دیدگاهتان را بنویسید

سبد خرید
علاقه‌مندی‌ها
مشاهدات اخیر
دسته بندی ها