โครงการนี้รวม Langchain เข้ากับ fastapi ในลักษณะอะซิงโครนัสปรับขนาดได้ซึ่งเป็นกรอบสำหรับการจัดทำดัชนีเอกสารและการดึงข้อมูลโดยใช้ PostgreSQL/PGVector
ไฟล์ถูกจัดระเบียบเป็น EMBEDDINGS โดย file_id กรณีการใช้งานหลักสำหรับการรวมเข้ากับ Liberchat แต่ API ง่าย ๆ นี้สามารถใช้สำหรับกรณีการใช้งานที่ใช้ ID ใด ๆ
เหตุผลหลักในการใช้วิธีการ ID คือการทำงานกับ EMBEDDINGS ในระดับไฟล์ สิ่งนี้ทำให้สำหรับการสืบค้นเป้าหมายเมื่อรวมกับข้อมูลเมตาไฟล์ที่เก็บไว้ในฐานข้อมูลเช่นที่ทำโดย Librechat
API จะพัฒนาขึ้นเมื่อเวลาผ่านไปเพื่อใช้วิธีการสอบถาม/การจัดอันดับที่แตกต่างกัน, แบบจำลองการฝังและร้านค้าเวกเตอร์
.env ตามส่วนด้านล่างdocker compose up (ยังเริ่ม RAG API)docker compose -f ./db-compose.yaml updocker compose up (ยังเริ่ม PSQL/PGVECTOR)docker compose -f ./api-compose.yaml upDB_HOST เป็นชื่อโฮสต์ฐานข้อมูลที่ถูกต้องpip install -r requirements.txt
uvicorn main:appต้องใช้ตัวแปรสภาพแวดล้อมต่อไปนี้เพื่อเรียกใช้แอปพลิเคชัน:
RAG_OPENAI_API_KEY : คีย์ API สำหรับ OpenAI API EMBEDDINGS (หากใช้การตั้งค่าเริ่มต้น)
OPENAI_API_KEY จะทำงานได้ แต่ RAG_OPENAI_API_KEY จะแทนที่มันเพื่อไม่ขัดแย้งกับการตั้งค่า Librechat RAG_OPENAI_BASEURL : (ไม่บังคับ) URL พื้นฐานสำหรับ OpenAI API Embeddings ของคุณ
RAG_OPENAI_PROXY : (ไม่บังคับ) พร็อกซีสำหรับ OpenAI API Embeddings
VECTOR_DB_TYPE : (ไม่บังคับ) เลือกประเภทฐานข้อมูลเวกเตอร์, ค่าเริ่มต้นเป็น pgvector
POSTGRES_DB : (ไม่บังคับ) ชื่อของฐานข้อมูล PostgreSQL ใช้เมื่อ VECTOR_DB_TYPE=pgvector
POSTGRES_USER : (ไม่บังคับ) ชื่อผู้ใช้สำหรับการเชื่อมต่อกับฐานข้อมูล PostgreSQL
POSTGRES_PASSWORD : (ไม่บังคับ) รหัสผ่านสำหรับการเชื่อมต่อกับฐานข้อมูล PostgreSQL
DB_HOST : (ไม่บังคับ) ที่อยู่โฮสต์หรือที่อยู่ IP ของเซิร์ฟเวอร์ฐานข้อมูล PostgreSQL
DB_PORT : (ไม่บังคับ) หมายเลขพอร์ตของเซิร์ฟเวอร์ฐานข้อมูล PostgreSQL
RAG_HOST : (ไม่บังคับ) ที่อยู่โฮสต์หรือ IP ที่เซิร์ฟเวอร์ API จะทำงาน ค่าเริ่มต้นเป็น "0.0.0.0"
RAG_PORT : (ไม่บังคับ) หมายเลขพอร์ตที่เซิร์ฟเวอร์ API จะทำงาน ค่าเริ่มต้นเป็นพอร์ต 8000
JWT_SECRET : (ไม่บังคับ) รหัสลับที่ใช้สำหรับการตรวจสอบโทเค็น JWT สำหรับคำขอ
COLLECTION_NAME : (ไม่บังคับ) ชื่อของคอลเลกชันในร้านค้าเวกเตอร์ ค่าเริ่มต้นคือ "TestCollection"
CHUNK_SIZE : (เสริม) ขนาดของชิ้นสำหรับการประมวลผลข้อความ ค่าเริ่มต้นคือ "1500"
CHUNK_OVERLAP : (ไม่บังคับ) การทับซ้อนระหว่างชิ้นส่วนระหว่างการประมวลผลข้อความ ค่าเริ่มต้นคือ "100"
RAG_UPLOAD_DIR : (ไม่บังคับ) ไดเรกทอรีที่เก็บไฟล์ที่อัปโหลดไว้ ค่าเริ่มต้นคือ "./uploads/"
PDF_EXTRACT_IMAGES : (ไม่บังคับ) ค่าบูลีนระบุว่าจะแยกรูปภาพออกจากไฟล์ PDF หรือไม่ ค่าเริ่มต้นคือ "เท็จ"
DEBUG_RAG_API : (ไม่บังคับ) ตั้งค่าเป็น "true" เพื่อแสดงเอาต์พุตการบันทึก verbose เพิ่มเติมในคอนโซลเซิร์ฟเวอร์และเพื่อเปิดใช้งานเส้นทางฐานข้อมูล PostgreSQL
CONSOLE_JSON : (ไม่บังคับ) ตั้งค่าเป็น "true" เพื่อเข้าสู่ระบบเป็น JSON สำหรับการรวมการบันทึกคลาวด์
EMBEDDINGS_PROVIDER : (เป็นทางเลือก) อย่างใดอย่างหนึ่ง "Openai", "Bedrock", "Azure", "HuggingFace", "HuggingFacetei" หรือ "Ollama" ที่ซึ่ง "HuggingFace" ใช้ sentence_transformers; ค่าเริ่มต้นเป็น "openai"
EMBEDDINGS_MODEL : (ไม่บังคับ) ตั้งค่าโมเดล EMBEDDINGS ที่ถูกต้องเพื่อใช้จากผู้ให้บริการที่กำหนดค่า
RAG_AZURE_OPENAI_API_VERSION : (ไม่บังคับ) ค่าเริ่มต้นคือ 2023-05-15 เวอร์ชันของ Azure Openai API
RAG_AZURE_OPENAI_API_KEY : (ตัวเลือก) คีย์ API สำหรับบริการ Azure OpenAI
AZURE_OPENAI_API_KEY จะทำงานได้ แต่ RAG_AZURE_OPENAI_API_KEY จะแทนที่มันเพื่อไม่ขัดแย้งกับการตั้งค่า Librechat RAG_AZURE_OPENAI_ENDPOINT : (ไม่บังคับ) URL ปลายทางสำหรับบริการ Azure OpenAI รวมถึงทรัพยากร
https://YOUR_RESOURCE_NAME.openai.azure.comAZURE_OPENAI_ENDPOINT จะทำงานได้ แต่ RAG_AZURE_OPENAI_ENDPOINT จะแทนที่มันเพื่อไม่ขัดแย้งกับการตั้งค่า Liberchat HF_TOKEN : (ไม่บังคับ) หากจำเป็นสำหรับตัวเลือก huggingface
OLLAMA_BASE_URL : (ไม่บังคับ) ค่าเริ่มต้นเป็น http://ollama:11434
ATLAS_SEARCH_INDEX : (ไม่บังคับ) ชื่อของดัชนีการค้นหาเวกเตอร์หากใช้ Atlas MongoDB, ค่าเริ่มต้นเป็น vector_index
MONGO_VECTOR_COLLECTION : เลิกใช้สำหรับ MongoDB โปรดใช้ ATLAS_SEARCH_INDEX และ COLLECTION_NAME
AWS_DEFAULT_REGION : (ไม่บังคับ) ค่าเริ่มต้นเป็น us-east-1
AWS_ACCESS_KEY_ID : (ไม่จำเป็น) จำเป็นสำหรับการฝังตัวของข้อเท็จจริง
AWS_SECRET_ACCESS_KEY : (ไม่จำเป็น) จำเป็นสำหรับการฝังตัวของข้อเท็จจริง
ตรวจสอบให้แน่ใจว่าได้ตั้งค่าตัวแปรสภาพแวดล้อมเหล่านี้ก่อนเรียกใช้แอปพลิเคชัน คุณสามารถตั้งค่าได้ในไฟล์ .env หรือเป็นตัวแปรสภาพแวดล้อมระบบ
แทนที่จะใช้ PGVector เริ่มต้นเราสามารถใช้ Atlas MongoDB เป็นฐานข้อมูลเวกเตอร์ หากต้องการทำเช่นนั้นให้ตั้งค่าตัวแปรสภาพแวดล้อมต่อไปนี้
VECTOR_DB_TYPE = atlas-mongo
ATLAS_MONGO_DB_URI = <mongodb+srv://...>
COLLECTION_NAME = <vector collection>
ATLAS_SEARCH_INDEX = <vector search index> ATLAS_MONGO_DB_URI อาจเหมือนกันหรือแตกต่างจากสิ่งที่ Librechat ใช้ แม้ว่ามันจะเหมือนกันคอลเลกชัน $COLLECTION_NAME จะต้องเป็นชุดใหม่ที่สมบูรณ์แยกออกจากคอลเลกชันทั้งหมดที่ใช้โดย Librechat นอกจากนี้สร้างดัชนีการค้นหาเวกเตอร์สำหรับการรวบรวมด้านบน (อย่าลืมกำหนด $ATLAS_SEARCH_INDEX ) ด้วย JSON ต่อไปนี้:
{
"fields" : [
{
"numDimensions" : 1536 ,
"path" : " embedding " ,
"similarity" : " cosine " ,
"type" : " vector "
},
{
"path" : " file_id " ,
"type" : " filter "
}
]
}ทำตามหนึ่งในสี่วิธีที่บันทึกไว้เพื่อสร้างดัชนีเวกเตอร์
ตรวจสอบให้แน่ใจว่าอินสแตนซ์ RDS Postgres ของคุณปฏิบัติตามข้อกำหนดนี้:
The pgvector extension version 0.5.0 is available on database instances in Amazon RDS running PostgreSQL 15.4-R2 and higher, 14.9-R2 and higher, 13.12-R2 and higher, and 12.16-R2 and higher in all applicable AWS Regions, including the AWS GovCloud (US) Regions.
ในการตั้งค่า RDS postgres ด้วย RAG API คุณสามารถทำตามขั้นตอนเหล่านี้:
สร้างอินสแตนซ์/คลัสเตอร์ RDS โดยใช้เอกสาร AWS ที่ให้ไว้
เข้าสู่ระบบคลัสเตอร์ RDS โดยใช้สตริงการเชื่อมต่อจุดสิ้นสุดจากคอนโซล RDS หรือจากเอาต์พุตโซลูชัน IAC ของคุณ
การเข้าสู่ระบบผ่าน ผู้ใช้หลัก
สร้างฐานข้อมูลเฉพาะสำหรับ RAG_API: create database rag_api; -
สร้างบทบาทผู้ใช้เฉพาะสำหรับฐานข้อมูลนั้น: create role rag;
สลับไปที่ฐานข้อมูลที่คุณเพิ่งสร้าง: c rag_api
เปิดใช้งานส่วนขยายเวกเตอร์: create extension vector;
ใช้เอกสารที่ให้ไว้ด้านบนเพื่อตั้งค่าสตริงการเชื่อมต่อเป็นอินสแตนซ์ RDS Postgres Cluster
หมายเหตุ:
create role x with superuser;เรียกใช้คำสั่งต่อไปนี้เพื่อติดตั้งตัวฟอร์แมตล่วงหน้าซึ่งใช้ FLEFART BLACK CODE:
pip install pre-commit
pre-commit install