اسناد و فراداده در LangChain
توسعه عاملهای هوشمند (Agentic Ai) با Langchain و Langgraph
- Create Document objects with page content and metadata.
- Use metadata for source tracking, filtering, and citation display.
- Preserve document identity through a processing pipeline.
چرا Document مهم است؟
**ایده اصلی**
هر Document دو بخش دارد: متن قابل پردازش و metadata قابل ردیابی.
```mermaid
flowchart LR
A["فایل یا متن خام"] --> B["Document"]
B --> C["تقسیم به chunk"]
C --> D["Embedding"]
D --> E["Retrieval و پاسخ"]
B -.-> F["منبع، صفحه، دستهبندی"]
F --> E
```
ساختن یک Document
**نمونهٔ ساخت**
ورودی: متن یک جملهای، منبع `guide.md` و صفحهٔ `4`. نتیجه: `doc.page_content` متن را میدهد؛ `doc.metadata["source"]` برابر `guide.md` و `doc.metadata["page"]` برابر `4` است.
```mermaid
flowchart TD
A["page_content: متن"] --> C["Document"]
B["metadata: برچسبها"] --> C
C --> D["متن برای پردازش"]
C --> E["اطلاعات برای فیلتر و citation"]
```
مثال کامل چند سند
**ردگیری سند اول**
۱. سه Document ساخته میشود، پس `len(documents) = 3`.
۲. با `documents[0]` سند اول انتخاب میشود.
۳. متن آن جملهٔ نصب است.
۴. `source` برابر `guide.md`، `page` برابر `1` و `category` برابر `setup` است.
**الگوی مهم**
محتوا در هر سند تغییر میکند، اما schema متادیتا ثابت میماند.
Metadata برای فیلتر و citation
**فیلتر کامل**
برای سه مقدار دستهبندی، مقایسهها بهترتیب `False`، `False` و `True` هستند. بنابراین فقط سند سوم باقی میماند، `len(retrieval_docs) = 1`، و ترکیب منبع و صفحه خروجی `guide.md, p. 3` را میسازد.
```mermaid
flowchart LR
A["همه Documentها"] --> B{"category؟"}
B -->|retrieval| C["نتیجهٔ فیلتر"]
B -->|سایر| D["حذف"]
C --> E["citation از source و page"]
```
هویت سند در pipeline
**یک سند، دو chunk**
ورودی: `document_id = guide-0007` و `source = guide.md`.
نتیجهٔ تقسیم: `Chunk 0` و `Chunk 1` هر دو `document_id = guide-0007` را حفظ میکنند؛ برای تمایز میتوانند `chunk_id`های جدا داشته باشند. پس در retrieval، هم متن chunk و هم منشأ سند قابل ردیابی است.
**پیوند با درس بعد**
در `3.2: Document Loading`، loaderها باید همین metadata را هنگام استخراج فایل حفظ کنند.
```mermaid
flowchart LR
A["Document: document_id=guide-0007"] --> B["Chunk 0: همان document_id"]
A --> C["Chunk 1: همان document_id"]
B --> D["Embedding و ذخیره"]
C --> D
D --> E["Retrieval و citation"]
```
بازگشت به دوره