mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-11-01 13:25:18 +08:00
111 lines
11 KiB
Markdown
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/)
|