Files
LangBot/plugins/KnowledgeEngine/LangRAG/readme/README_th_TH.md
T

111 lines
11 KiB
Markdown

#แลงแร็ก
ปลั๊กอินเครื่องยนต์ RAG (Retriever-Augmented Generation) สำหรับ LangBot
ปลั๊กอินนี้สาธิตวิธีสร้าง Knowledge Engine ที่จัดการการนำเข้าเอกสารและการดึงข้อมูลเวกเตอร์โดยใช้โครงสร้างพื้นฐานในตัวของ LangBot Host (โมเดลการฝังและฐานข้อมูลเวกเตอร์)
## คุณสมบัติ
-**External Parser Integration**- ชอบเนื้อหาที่แยกวิเคราะห์ล่วงหน้าจากปลั๊กอิน Parser เช่น GeneralParsers รวมถึงส่วนที่มีโครงสร้างและข้อมูลเมตาของเอกสาร
-**การแยกวิเคราะห์ภายในสำรอง**- รวมตัวแยกวิเคราะห์ในตัวเป็นทางเลือกเมื่อไม่มีการกำหนดค่าตัวแยกวิเคราะห์ภายนอก
-**กลยุทธ์ดัชนีหลายรายการ**- การแบ่งส่วนแบบแบน การแบ่งส่วนหลักและรอง คู่คำถามและคำตอบที่สร้างโดย LLM
-**การเรียกข้อมูลแบบยืดหยุ่น**- การค้นหาเวกเตอร์ ข้อความแบบเต็ม หรือแบบผสม
-**การเขียนแบบสอบถามใหม่**- กลยุทธ์ HyDE, Multi-Query, Step-Back เพื่อการเรียกคืนที่ดีขึ้น
-**การแบ่งส่วนที่กำหนดค่าได้**- การแยกอักขระแบบเรียกซ้ำด้วยขนาดก้อนที่กำหนดเองและการทับซ้อนกัน
-**การแบ่งส่วนตามส่วน**- เมื่อส่วนที่มีโครงสร้างพร้อมใช้งาน การแบ่งส่วนจะรักษาส่วนหัว ข้อมูลหน้า และขอบเขตของตาราง
-**การขยายบริบท**- เลือกที่จะต่อท้ายส่วนที่อยู่ติดกันรอบๆ Hit แต่ละครั้งเพื่อให้ได้รับบริบทที่สมบูรณ์ยิ่งขึ้น
-**การจัดการเอกสาร**- ลบเวกเตอร์ที่จัดทำดัชนีตามเอกสาร
## สถาปัตยกรรม
```
┌─────────────────────────────────┐
│ LangBot Core │
│ (Embedding / VDB / Storage) │
└──────────┬──────────────────────┘
│ RPC (IPC)
┌──────────▼──────────────────────┐
│ LangRAG │
│ ┌───────────────────────────┐ │
│ │ Knowledge Engine │ │
│ │ Parse → Chunk → Embed │ │
│ │ → Store / Search │ │
│ └───────────────────────────┘ │
└─────────────────────────────────┘
```
## กระแสการกลืนกิน
ตอนนี้ LangRAG ต้องการเอาต์พุตพาร์เซอร์ที่จัดทำโดย LangBot Host:
1. LangBot อ่านไฟล์ที่อัพโหลด
2. ปลั๊กอิน Parser เช่น GeneralParsers จะแยก`text`,`sections`และ`metadata`
3. LangRAG นำเข้าผลลัพธ์ที่มีโครงสร้างนั้นโดยตรง
4. หากไม่มีเอาต์พุตของพาร์เซอร์ LangRAG จะถอยกลับไปยังพาร์เซอร์ภายใน
5. กลยุทธ์ดัชนีที่เลือกจะสร้างคู่คำถาม/คำตอบ
6. LangBot Host สร้างการฝังและจัดเก็บเวกเตอร์
ซึ่งหมายความว่า LangRAG จะทำงานได้ดีที่สุดเมื่อจับคู่กับปลั๊กอินพาร์เซอร์ภายนอก
## การกำหนดค่า
### การสร้างฐานความรู้
| พารามิเตอร์ | คำอธิบาย | ค่าเริ่มต้น |
|----------|-------------|---------|
|`embedding_model_uuid`| โมเดลการฝัง | จำเป็น |
|`index_type`| กลยุทธ์การจัดทำดัชนี:`chunk`,`parent_child`หรือ`qa`|`ชิ้น`|
|`chunk_size`| ตัวอักษรต่อก้อน | 512 |
|`ทับซ้อนกัน' | ทับซ้อนกันระหว่างชิ้น | 50 |
|`ขนาดผู้ปกครอง_chunk_size`| ขนาดก้อนพาเรนต์ (parent_child เท่านั้น) | 2048 |
|`ขนาดเด็กชิ้น`| ขนาดชิ้นย่อย (parent_child เท่านั้น) | 256 |
|`qa_llm_model_uuid`| LLM สำหรับการสร้างคำถาม & คำตอบ (qa เท่านั้น) | - |
|`คำถามต่อชิ้น`| คำถามที่จะสร้างต่อชิ้น (qa เท่านั้น) | 1 |
### การเรียกคืน
| พารามิเตอร์ | คำอธิบาย | ค่าเริ่มต้น |
|----------|-------------|---------|
|`top_k`| จำนวนผลลัพธ์ที่จะส่งคืน | 5 |
|`ประเภทการค้นหา`| โหมดการค้นหา:`vector`,`full_text`หรือ`hybrid`|`เวกเตอร์`|
|`query_rewrite`| เขียนกลยุทธ์ใหม่:`off`,`hyde`,`multi_query`หรือ`step_back`|`ปิด`|
|`rewrite_llm_model_uuid`| LLM สำหรับการเขียนคิวรีใหม่ (เมื่อเปิดใช้งานการเขียนใหม่) | - |
|`context_window`| จำนวนชิ้นที่อยู่ติดกันที่จะต่อท้ายแต่ละ Hit | 0 |
## กลยุทธ์ดัชนี
-**ก้อน**- ก้อนแบนเริ่มต้น แยกเอกสารออกเป็นชิ้นขนาดคงที่และฝังแต่ละชิ้นโดยตรง เมื่อส่วน parser พร้อมใช้งาน ส่วนต่างๆ จะถูกสร้างขึ้นทีละส่วน แทนที่จะทำให้เอกสารทั้งหมดเรียบลง
-**parent_child**- การแบ่งส่วนสองระดับ แบ่งเป็นชิ้นใหญ่ แล้วจึงแยกชิ้นเล็ก ฝังส่วนย่อยแต่ส่งคืนข้อความพาเรนต์เพื่อบริบทที่สมบูรณ์ยิ่งขึ้น เมื่อส่วนของ parser พร้อมใช้งาน ส่วนต่างๆ จะถูกใช้เป็นขอบเขตพาเรนต์ตามธรรมชาติ
-**qa**- คู่ถามตอบที่สร้างโดย LLM ข้อความเป็นชิ้น ใช้ LLM เพื่อสร้างคู่คำถาม-คำตอบต่อชิ้น และฝังคำถาม เมื่อส่วน parser พร้อมใช้งาน การสร้าง Q&A ก็จะรับรู้ถึงส่วนด้วย
## การเขียนแบบสอบถามใหม่
-**ไฮด์**- การฝังเอกสารสมมุติ สร้างคำตอบสมมุติให้กับคำถาม จากนั้นฝังคำตอบนั้นเพื่อการเรียกค้น
-**multi_query**- สร้างรูปแบบข้อความค้นหา 3 แบบ ค้นหาแต่ละรายการ และรวมผลลัพธ์ตามคะแนน
-**step_back**- สร้างคำถามที่เป็นนามธรรมมากขึ้นและค้นหาด้วยข้อความค้นหาดั้งเดิมและเชิงนามธรรม
## จับคู่กับ GeneralParsers
GeneralParsers ปัจจุบันเป็นตัวแยกวิเคราะห์ที่แนะนำสำหรับ LangRAG เนื่องจากสามารถให้:
- การแยกไฟล์ PDF ที่สะอาดยิ่งขึ้น
- ส่วนที่มีโครงสร้าง
- ข้อความรักษาตาราง
- ข้อมูลเมตาระดับเอกสาร
- ตัวเลือก OCR และคำอธิบายรูปภาพผ่านโมเดลการมองเห็น
LangRAG ใช้เอาต์พุตของพาร์เซอร์เหล่านั้นโดยตรงในระหว่างการนำเข้า ซึ่งโดยทั่วไปจะสร้างชิ้นส่วนที่ดีกว่าและคุณภาพการดึงข้อมูลที่ดีกว่าพาร์เซอร์ทางเลือก
## การพัฒนา
```bash
pip install -r requirements.txt
cp .env.example .env
```
กำหนดค่า`DEBUG_RUNTIME_WS_URL`และ`PLUGIN_DEBUG_KEY`ใน`.env`จากนั้นเปิดใช้งานด้วยดีบักเกอร์ IDE ของคุณ
## ลิงค์
- [เอกสาร LangBot](https://langbot.app/docs/)