ทําความเข้าใจรูปแบบ RAG ด้วย Azure Database for PostgreSQL

เสร็จสมบูรณ์เมื่อ

ลองนึกภาพว่าคุณกําลังสร้างผู้ช่วยภายในที่ตอบคําถามของพนักงานเกี่ยวกับนโยบายของบริษัท โมเดลภาษาขนาดใหญ่ (LLM) สามารถสร้างการตอบสนองได้อย่างคล่องแคล่ว อย่างไรก็ตาม หากไม่สามารถเข้าถึงข้อมูลบริษัทล่าสุดของคุณ LLM จะให้คําตอบที่ล้าสมัยหรือไม่ถูกต้อง Retrieval Augmented Generation (RAG) แก้ปัญหานี้โดยการรวมพลังการใช้เหตุผลของ LLM เข้ากับความถูกต้องของข้อมูลของคุณเอง

เหตุใด RAG จึงมีความสําคัญ

LLM ได้รับการฝึกอบรมเกี่ยวกับข้อความจํานวนมาก แต่ไม่ทราบข้อมูลขององค์กรหรือเนื้อหาที่เป็นกรรมสิทธิ์ของคุณ เพื่อแก้ไขปัญหานี้ RAG จะดึงข้อมูลที่เกี่ยวข้องจากแหล่งที่เชื่อถือได้ที่คุณให้ไว้ วิธีการนี้ช่วยเพิ่มความแม่นยํา ลดการตอบสนองที่สร้างโดย AI ที่อาจไม่ถูกต้อง และทําให้แน่ใจว่าคําตอบจะขึ้นอยู่กับข้อเท็จจริงที่คุณควบคุม

ไปป์ไลน์ RAG ทํางานอย่างไร

ไปป์ไลน์ RAG ประกอบด้วยองค์ประกอบหลักหลายอย่างที่ทํางานร่วมกันเพื่อให้การตอบสนองที่ถูกต้องและเกี่ยวข้อง คิดว่า RAG เป็นลําดับของขั้นตอนที่ทํางานร่วมกัน:

  • จัดเตรียมและจัดเก็บเนื้อหา: แบ่งเอกสารของคุณออกเป็นชิ้นเล็ก ๆ และจัดเก็บไว้เพื่อการค้นหาที่มีประสิทธิภาพ
  • สร้างการฝัง: แปลงข้อความของคุณเป็นเวกเตอร์ตัวเลขที่จับความหมาย ทําให้สามารถค้นหาเนื้อหาที่เกี่ยวข้องได้แม้ว่าถ้อยคําจะแตกต่างกันก็ตาม
  • ดึงส่วนที่เกี่ยวข้อง: เมื่อผู้ใช้ถามคําถาม ระบบจะค้นหาส่วนที่คล้ายกันมากที่สุดในฐานข้อมูลของคุณโดยใช้การค้นหาความคล้ายคลึงกันของเวกเตอร์
  • สร้างคําตอบ: โดยปกติแล้วก้อนที่ดึงมาจะถูกส่งผ่านไปยังแอปพลิเคชันที่เรียกโมเดลภาษา ซึ่งจะสร้างการตอบสนองภาษาธรรมชาติจากข้อมูลจริงของคุณ

ตัวอย่างเช่น หากคุณจัดเก็บนโยบายของบริษัทของคุณในฐานข้อมูล ไปป์ไลน์ RAG สามารถช่วยดึงนโยบายที่เกี่ยวข้องมากที่สุดสําหรับ บริษัท ของคุณเองแทนข้อมูลทั่วไปที่ LLM อาจให้มาเอง

ตําแหน่งที่ Azure Database for PostgreSQL พอดีกับไปป์ไลน์ RAG

Azure Database for PostgreSQL สามารถจัดการเลเยอร์การดึงข้อมูลของไปป์ไลน์นี้ได้ Azure Database for PostgreSQL มีการสนับสนุนในตัวสําหรับการฝังเวกเตอร์และการค้นหาความคล้ายคลึงกัน สิ่งนี้หมายความว่าคุณสามารถใช้ความสามารถของฐานข้อมูลเพื่อจัดการและสืบค้นการฝังตัวของคุณได้อย่างมีประสิทธิภาพ Azure Database for PostgreSQL มีส่วนขยายหลักสองรายการที่ทําให้กระบวนการนี้เป็นไปได้:

  • azure_ai ส่วนขยาย: เรียกใช้บริการ Azure AI เช่น Azure OpenAI โดยตรงจาก SQL เพื่อสร้างการฝัง นอกจากนี้ยังมี ตัวดําเนินการเชิงความหมาย ที่สามารถสร้างการตอบสนอง (azure_ai.generate) ประเมินคําสั่ง (azure_ai.is_true) แยกค่าที่มีโครงสร้าง (azure_ai.extract) และจัดอันดับเอกสารใหม่ (azure_ai.rank) ภายในฐานข้อมูล ความสามารถเหล่านี้เปิดใช้งานการสร้างขั้นสูงและเวิร์กโฟลว์การให้เหตุผลโดยไม่ต้องออกจากสภาพแวดล้อม SQL
  • vector ส่วนขยาย (pgvector): จัดเก็บการฝังในฐานข้อมูลและเรียกใช้การค้นหาความคล้ายคลึงกันอย่างมีประสิทธิภาพ

ดังนั้นจึงไม่จําเป็นต้องมีฐานข้อมูลเวกเตอร์แยกต่างหาก คุณสามารถเก็บทุกอย่างไว้ด้วยกัน ทั้งข้อมูลที่มีโครงสร้าง ข้อมูลเมตา และการฝังตัวไว้ในอินสแตนซ์ PostgreSQL ของคุณ ซึ่งช่วยลดความยุ่งยากในการกํากับดูแลและความปลอดภัย

ตัวอย่าง RAG อย่างง่าย

ตัวอย่างเช่น Azure Database for PostgreSQL สามารถใช้เพื่อใช้ไปป์ไลน์ RAG สําหรับฐานความรู้ภายในของบริษัทของคุณ แอปพลิเคชันใช้ Azure Database for PostgreSQL เพื่อคิวรีฐานข้อมูลสําหรับเอกสารที่เกี่ยวข้อง และใช้เป็นบริบทสําหรับการสร้างคําตอบ จากนั้นคุณป้อนบริบทนั้นลงในแบบจําลองภาษาเพื่อสร้างการตอบสนองภาษาธรรมชาติ

ตัวอย่างเช่น สมมติว่าคุณมีตารางนโยบายของบริษัทที่เรียกว่า company_policies. คุณสามารถใช้ azure_ai ส่วนขยายเพื่อสร้างการฝังสําหรับแต่ละนโยบายและจัดเก็บไว้ควบคู่ไปกับข้อความในตารางเดียวกัน ด้วยวิธีนี้ เมื่อพนักงานถามคําถาม คําถามนั้นจะเปลี่ยนเป็นการฝังตัว และคุณสามารถดึงนโยบายการจับคู่ได้ทันที คําสั่ง SQL ต่อไปนี้แสดงวิธีการตั้งค่านี้:

Note

ก่อนที่คุณจะสามารถเรียกใช้คําสั่ง CREATE EXTENSION เพื่อเปิดใช้งานส่วนขยายเหล่านี้ คุณต้องเพิ่ม azure_ai และ vector ไปยังพารามิเตอร์เซิร์ฟเวอร์azure.extensions บนฐานข้อมูล Azure สําหรับเซิร์ฟเวอร์ PostgreSQL ผ่านพอร์ทัล Azure หรือผ่านคําสั่ง CLI

-- Enable required extensions (to enable, only need to be run once per database)
CREATE EXTENSION IF NOT EXISTS azure_ai;
CREATE EXTENSION IF NOT EXISTS vector;

-- Configure Azure OpenAI endpoint and key (requires azure_ai_settings_manager role)
SELECT azure_ai.set_setting('azure_openai.endpoint', '<your-endpoint>');
SELECT azure_ai.set_setting('azure_openai.subscription_key', '<your-key>');

-- Create a table to store documents and embeddings
CREATE TABLE IF NOT EXISTS company_policies (
    id bigserial PRIMARY KEY,
    title text,
    policy_text text NOT NULL,
    embedding vector(1536) -- set to your model's dimension
);

-- Insert a sample row and generate its embedding in one step.
-- Obviously your table will have hundreds, thousands or millions of rows.
INSERT INTO company_policies (title, policy_text, embedding)
VALUES (
    'vacation policy',
    'Employees receive 15 vacation days per year. Unused days can roll over to the next year.',
    azure_openai.create_embeddings('<embedding-deployment-name>',
                                   'Employees receive 15 vacation days per year. Unused days can roll over to the next year.')
);

-- Run a quick test to retrieve the most similar chunk to a sample question.
-- Notice how you are converting the question into an embedding for the search,
-- then using that embedding to find the closest match in the database.
SELECT id, title, policy_text
FROM company_policies
ORDER BY embedding <-> azure_openai.create_embeddings('<embedding-deployment-name>',
                                                      'How many vacation days do employees get?')::vector
LIMIT 1;

-- This query returns the most relevant row that matches the query. 
-- The final step on a RAG is to pass 'both' the returned row(s) and the question back 
-- to your application. Your application then passes that context to the LLM
-- to generate a natural language answer.

ในตัวอย่างนี้ ตารางพร้อมที่จะจัดเก็บนโยบายและการฝังตัวแล้ว คุณสามารถแทรกนโยบายลงในตารางโดยใช้คําสั่ง SQL และการฝังจะถูกสร้างขึ้นโดยใช้บริการ Azure AI คุณครอบคลุมการจัดทําดัชนีและการสืบค้นการฝังเหล่านี้ในส่วนต่อๆ ไป

โดยไม่คํานึงถึงความซับซ้อนของโซลูชันของคุณเอง คุณก็ใช้วิธีการที่คล้ายกันในการตั้งค่าสภาพแวดล้อมของคุณเอง ขั้นแรก คุณเปิดใช้งานส่วนขยายที่จําเป็น จากนั้นสร้างตารางของคุณด้วยคอลัมน์เวกเตอร์ที่เกี่ยวข้อง จากนั้นเริ่มแทรกและฝังเนื้อหาของคุณเข้าด้วยกัน จากนั้นคุณถามคําถามของคุณว่าการฝังจะถูกเปรียบเทียบกับการฝังของตาราง สุดท้าย แถวที่ส่งคืนจากฐานข้อมูลจะใช้เพื่อให้บริบทแก่ LLM เพื่อสร้างคําตอบภาษาธรรมชาติ ขั้นตอนเหล่านี้ช่วยให้คุณสร้างแอปพลิเคชัน RAG บนฐานข้อมูล PostgreSQL ของคุณได้อย่างง่ายดาย

ประเด็นสำคัญ

Azure Database for PostgreSQL สามารถใช้รูปแบบ RAG ได้อย่างมีประสิทธิภาพโดยใช้ความสามารถในการค้นหา AI และเวกเตอร์ในตัว ส่วนขยายนี้ azure_ai ช่วยให้สามารถผสานรวมกับ Azure OpenAI และ Azure AI Services ได้อย่างราบรื่นสําหรับการสร้างการฝัง การสร้างการแชทให้เสร็จสมบูรณ์ และใช้ตัวดําเนินการเชิงความหมายสําหรับงานต่างๆ เช่น การสร้างข้อความ การแยกข้อมูล การประเมินความจริง และการจัดอันดับ—โดยตรงภายในคิวรี SQL vector ส่วนขยาย (pgvector) อํานวยความสะดวกในการจัดเก็บและดึงข้อมูลการฝังอย่างมีประสิทธิภาพ ทําให้สามารถทําการค้นหาความคล้ายคลึงกันได้โดยไม่ต้องใช้ฐานข้อมูลเวกเตอร์แยกต่างหาก เริ่มต้นเล็กๆ น้อยๆ เมื่อนําวิธีการเหล่านี้ไปใช้กับสถานการณ์ใหม่ ค่อยๆ ขยายขอบเขตเมื่อคุณปรับแต่งแนวทางของคุณในสภาพแวดล้อมของคุณเอง