สร้างการค้นหาเนื้อหาโดย AI ด้วย Agent เอกสาร

การค้นหาข้อมูลเป็นหนึ่งในการใช้งานโมเดล Generative ของปัญญาประดิษฐ์ (AI) ที่พบบ่อยที่สุด การสร้างอินเทอร์เฟซการค้นหาแบบสนทนาสำหรับเนื้อหาโดยใช้ AI จะช่วยให้ผู้ใช้สามารถถามคำถามที่เฉพาะเจาะจงและรับคำตอบโดยตรง

บทแนะนำนี้จะแสดงวิธีสร้างอินเทอร์เฟซการค้นหาแบบสนทนาที่ทำงานด้วยระบบ AI สำหรับเนื้อหาของคุณ โดยอิงตาม Docs Agent ซึ่งเป็นโปรเจ็กต์โอเพนซอร์สที่ใช้ Google Gemini API เพื่อสร้างอินเทอร์เฟซการค้นหาแบบสนทนาโดยไม่ต้องฝึกโมเดล AI ใหม่หรือปรับแต่งโมเดลด้วยโมเดล Gemini ซึ่งหมายความว่าคุณจะสร้างความสามารถในการค้นหานี้ได้อย่างรวดเร็วและใช้กับชุดเนื้อหาขนาดเล็กและขนาดใหญ่ได้

ดูภาพรวมของโปรเจ็กต์และวิธีขยายการใช้งาน รวมถึงข้อมูลเชิงลึกจากทีมที่สร้างโปรเจ็กต์ได้ที่การค้นหาเนื้อหาด้วย AI | สร้างด้วย AI ของ Google หรือจะเริ่มต้นขยายโปรเจ็กต์โดยทำตามวิธีการด้านล่างก็ได้

ภาพรวม

โปรเจ็กต์ตัวแทนของเอกสารมีอินเทอร์เฟซการค้นหาแบบสนทนาสําหรับชุดเนื้อหาที่เฉพาะเจาะจง ซึ่งรองรับโดย Google Gemini API และโมเดล Generative ผู้ใช้สามารถถามคำถามแบบละเอียดในลักษณะการสนทนาและรับคำตอบแบบละเอียดโดยอิงตามชุดเนื้อหาที่เฉพาะเจาะจง เบื้องหลังคือ Agent ของเอกสารจะนำคำถามไปค้นหาในฐานข้อมูลเวกเตอร์ของเนื้อหา และสร้างพรอมต์แบบละเอียดสำหรับโมเดล Generative รวมถึงตัวอย่างข้อความที่เกี่ยวข้อง โมเดล Generative จะสร้างคำตอบสำหรับคำถาม และตัวแทนของ Google เอกสารจะจัดรูปแบบคำตอบและแสดงต่อผู้ใช้

แผนภาพการทำงานของตัวแทนเอกสาร รูปที่ 1 แผนภาพการทำงานของแอปโปรเจ็กต์ของตัวแทนเอกสาร

การสร้างฐานข้อมูลเวกเตอร์ของเนื้อหาเป็นกุญแจสำคัญที่จะทำให้ตัวแทนของเอกสารสามารถตอบคำถามเกี่ยวกับเนื้อหาของคุณได้ คุณแยกเนื้อหาออกเป็นกลุ่มข้อความที่สื่อความหมายและสร้างเวกเตอร์สำหรับแต่ละกลุ่ม เวกเตอร์เหล่านี้เป็นการแสดงข้อมูลที่เป็นตัวเลขในแต่ละกลุ่ม และสร้างขึ้นด้วยฟังก์ชัน การฝังข้อความ AI จากโมเดล Generative ของ Google

เมื่อผู้ใช้ถามคำถาม ตัวแทนของ Google เอกสารจะใช้ฟังก์ชันการฝังข้อความเดียวกันเพื่อสร้างการนำเสนอคำถามที่เป็นตัวเลข และจะใช้ค่านั้นเพื่อค้นหาฐานข้อมูลเวกเตอร์และค้นหาเนื้อหาที่เกี่ยวข้อง โดยระบบจะนำผลการค้นหาอันดับต้นๆ มาเพิ่มลงในพรอมต์สําหรับโมเดล Generative โมเดล AI จะนําคําถามและข้อมูลบริบทเพิ่มเติมมาสร้างคําตอบ

การตั้งค่าโปรเจ็กต์

วิธีการเหล่านี้จะแนะนำการตั้งค่าโปรเจ็กต์ตัวแทนเอกสารสําหรับการพัฒนาและการทดสอบ ขั้นตอนทั่วไปคือการติดตั้งซอฟต์แวร์ที่จำเป็นบางอย่าง การตั้งค่าตัวแปรสภาพแวดล้อม 2-3 รายการ การโคลนโปรเจ็กต์จากที่เก็บโค้ด และเรียกใช้การติดตั้งการกําหนดค่า โปรเจ็กต์โค้ดใช้ Python Poetry เพื่อจัดการแพ็กเกจและสภาพแวดล้อมรันไทม์ Python

ติดตั้งข้อกําหนดเบื้องต้น

โปรเจ็กต์ Docs Agent ใช้ Python 3 และ Python Poetry เพื่อจัดการแพ็กเกจและเรียกใช้แอปพลิเคชัน วิธีการติดตั้งต่อไปนี้มีไว้สำหรับเครื่องโฮสต์ Linux

วิธีติดตั้งซอฟต์แวร์ที่จำเป็น

  1. ติดตั้ง Python 3 และvenvแพ็กเกจสภาพแวดล้อมเสมือนสำหรับ Python
    sudo apt update
    sudo apt install git pip python3-venv
    
  2. ติดตั้ง Python Poetry เพื่อจัดการการอ้างอิงและการจัดแพ็กเกจสําหรับโปรเจ็กต์
    curl -sSL https://install.python-poetry.org | python3 -
    

คุณสามารถใช้ Python Poetry เพื่อเพิ่มไลบรารี Python อื่นๆ ได้หากขยายโปรเจ็กต์

ตั้งค่าตัวแปรสภาพแวดล้อม

ตั้งค่าตัวแปรสภาพแวดล้อม 2-3 รายการที่จําเป็นเพื่อให้โปรเจ็กต์โค้ดของตัวแทนของ Google ทำงานได้ ซึ่งรวมถึงการตั้งค่า คีย์ Google Gemini API และ Python Poetry คุณอาจต้องเพิ่มตัวแปรเหล่านี้ลงในไฟล์ $HOME/.bashrc หากใช้ Linux เพื่อให้เป็นการตั้งค่าเริ่มต้นสำหรับเซสชันเทอร์มินัล

วิธีตั้งค่าตัวแปรสภาพแวดล้อม

  1. รับคีย์ Google Gemini API และคัดลอกสตริงคีย์
  2. ตั้งค่าคีย์ API เป็นตัวแปรสภาพแวดล้อม ในโฮสต์ Linux ให้ใช้คำสั่งต่อไปนี้
    export API_KEY=<YOUR_API_KEY_HERE>
    
  3. แก้ไขปัญหาที่ทราบสำหรับ Python Poetry ด้วยการตั้งค่าพารามิเตอร์ PYTHON_KEYRING_BACKEND ในโฮสต์ Linux ให้ใช้คำสั่งต่อไปนี้
    export PYTHON_KEYRING_BACKEND=keyring.backends.null.Keyring
    

โคลนและกำหนดค่าโปรเจ็กต์

ดาวน์โหลดโค้ดโปรเจ็กต์และใช้คำสั่งการติดตั้ง Poetry เพื่อดาวน์โหลดข้อกำหนดที่จำเป็นและกำหนดค่าโปรเจ็กต์ คุณต้องมีซอฟต์แวร์ควบคุมแหล่งที่มา git เพื่อดึงข้อมูลซอร์สโค้ดของโปรเจ็กต์จากภายนอก หากต้องการดาวน์โหลดและกําหนดค่าโค้ดโปรเจ็กต์ ให้ทําดังนี้

  1. โคลนที่เก็บ Git โดยใช้คําสั่งต่อไปนี้
    git clone https://github.com/google/generative-ai-docs
    
  2. (ไม่บังคับ) กำหนดค่าที่เก็บ Git ในพื้นที่ให้ใช้การตรวจสอบแบบไม่สมบูรณ์เพื่อให้คุณมีเฉพาะไฟล์สำหรับโปรเจ็กต์ตัวแทนของเอกสาร
    cd generative-ai-docs/
    git sparse-checkout init --cone
    git sparse-checkout set examples/gemini/python/docs-agent/
    
  3. ย้ายไปที่ไดเรกทอรีรากของโปรเจ็กต์ docs-agent
    cd examples/gemini/python/docs-agent/
    
  4. เรียกใช้คำสั่งติดตั้ง Poetry เพื่อดาวน์โหลดส่วนที่ใช้อ้างอิงและกำหนดค่าโปรเจ็กต์
    poetry install
    

เตรียมเนื้อหา

โปรเจ็กต์ตัวแทนของเอกสารออกแบบมาเพื่อทำงานกับเนื้อหาข้อความ และมีเครื่องมือที่ทำงานร่วมกับเว็บไซต์ที่ใช้มาร์กดาวน์เป็นรูปแบบแหล่งที่มาโดยเฉพาะ หากคุณกำลังจัดการกับเนื้อหาเว็บไซต์ คุณควรเก็บรักษา (หรือทำซ้ำ) โครงสร้างไดเรกทอรีของเว็บไซต์ที่แสดงเพื่อให้งานประมวลผลเนื้อหาจับคู่และสร้างลิงก์ไปยังเนื้อหานั้นได้

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

วิธีเตรียมเนื้อหาให้พร้อมสำหรับการประมวลผล

  1. สร้างไดเรกทอรีสำหรับเนื้อหาที่ต้องการให้ตัวแทน AI ค้นหา
    mkdir docs-agent/content/
    
  2. คัดลอกเนื้อหาลงในไดเรกทอรี docs-agent/content/ หากเนื้อหาเป็นเว็บไซต์ ให้เก็บรักษา (หรือทำซ้ำ) โครงสร้างไดเรกทอรีของเว็บไซต์ที่แสดง
  3. ตรวจสอบหรือแก้ไขเนื้อหาตามที่จำเป็นเพื่อนำข้อมูลที่ไม่ใช่สาธารณะหรือข้อมูลอื่นๆ ที่ไม่ต้องการให้รวมอยู่ในผลการค้นหาออก

ใช้เอกสาร Flutter สำหรับการทดสอบ

หากต้องการชุดเนื้อหาสำหรับทดสอบ Docs Agent คุณสามารถใช้เอกสารสำหรับนักพัฒนาซอฟต์แวร์ Flutter ในการทดสอบ

วิธีดูเอกสารสำหรับนักพัฒนาแอป Flutter

  1. ไปที่ไดเรกทอรีเนื้อหาของเนื้อหาที่ต้องการให้ตัวแทน AI ค้นหา
    cd docs-agent/content/
    
  2. โคลนเอกสาร Flutter ไปยังไดเรกทอรี docs-agent/content/
    git clone --recurse-submodules https://github.com/flutter/website.git
    

ประมวลผลเนื้อหา

คุณต้องสร้างฐานข้อมูลเวกเตอร์ที่แสดงถึงเนื้อหาของคุณเพื่อให้ตัวแทนการค้นหาค้นหาเนื้อหาที่เกี่ยวข้องกับคำถามของผู้ใช้ได้อย่างมีประสิทธิภาพ ระบบจะสร้างเวกเตอร์โดยใช้ฟังก์ชันโมเดล Generative AI ที่เรียกว่าการฝังข้อความ การฝังข้อความคือการนําเสนอเนื้อหาข้อความเป็นตัวเลข โดยประมาณความหมายเชิงอรรถศาสตร์ของข้อความเป็นชุดตัวเลข การนําเสนอข้อมูลเป็นตัวเลขช่วยให้ระบบนําคําถามของผู้ใช้ไปประมาณความหมายโดยใช้ฟังก์ชันการฝังข้อความเดียวกัน จากนั้นค้นหาข้อมูลที่เชื่อมโยงกันเป็นการคํานวณทางคณิตศาสตร์โดยใช้อัลกอริทึม K-Nearest Neighbors (K-NN)

แยกเนื้อหาข้อความ

จำนวนข้อความที่เวกเตอร์การฝังข้อความแสดงได้อย่างมีประสิทธิภาพมีจำกัด โปรเจ็กต์นี้จะจำกัดข้อความที่แสดงในเวกเตอร์ไว้ที่ไม่เกิน 3, 000 อักขระ ซึ่งหมายความว่าคุณต้องแบ่งเนื้อหาออกเป็นส่วนๆ ที่มีจำนวนอักขระไม่เกินจำนวนดังกล่าว ส่วนนี้จะอธิบายวิธีใช้สคริปต์ที่มาพร้อมกับโปรเจ็กต์ Docs Agent เพื่อแยกไฟล์ Markdown ออกเป็นกลุ่มข้อความเล็กๆ ดูเคล็ดลับเกี่ยวกับการทำงานกับเนื้อหารูปแบบอื่นๆ ได้ที่จัดการรูปแบบอื่นๆ

วิธีแยกเนื้อหารูปแบบ Markdown

  1. กำหนดค่าพารามิเตอร์อินพุตสำหรับสคริปต์การประมวลผลโดยการแก้ไขไฟล์ docs-agent/config.yaml ตัวอย่างนี้กำหนดเป้าหมายไปยังเอกสาร Flutter บางส่วน
    input:
    - path: "content/website/src/ui"
      url_prefix: "https://docs.flutter.dev/ui"
  2. บันทึกการเปลี่ยนแปลงในไฟล์การกําหนดค่านี้
  3. ไปที่ไดเรกทอรีโปรเจ็กต์ docs-agent
    cd docs-agent/
    
  4. แยกเนื้อหาต้นฉบับมาร์กดาวน์โดยเรียกใช้คำสั่ง agent chunk:
    agent chunk
    

สคริปต์จะประมวลผลเนื้อหาอินพุตและสร้างไฟล์ข้อความเอาต์พุตในไดเรกทอรี docs-agent/data โดยแบ่งข้อความตามชื่อ หัวเรื่อง และย่อหน้าที่เกี่ยวข้อง การประมวลผลอาจใช้เวลาสักครู่ ทั้งนี้ขึ้นอยู่กับขนาดของเนื้อหา

สร้างเวกเตอร์การฝังข้อความ

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

วิธีสร้างการฝังข้อความและป้อนข้อมูลลงในฐานข้อมูลเวกเตอร์

  1. ไปที่ไดเรกทอรีโปรเจ็กต์ docs-agent
    cd docs-agent/
    
  2. ป้อนข้อมูลลงในฐานข้อมูลเวกเตอร์ด้วยเนื้อหาของคุณโดยใช้agent populate คำสั่ง
    agent populate
    

สคริปต์นี้ใช้ Google Gemini API เพื่อสร้างเวกเตอร์การฝังข้อความ จากนั้นบันทึกเอาต์พุตลงในฐานข้อมูลเวกเตอร์ การประมวลผลอาจใช้เวลาสักครู่ ทั้งนี้ขึ้นอยู่กับขนาดของเนื้อหา

จัดการรูปแบบอื่นๆ

โปรเจ็กต์ตัวแทนเอกสารออกแบบมาเพื่อทำงานกับเนื้อหาเว็บไซต์ในรูปแบบ Markdown ผู้เขียนโปรเจ็กต์ได้สร้างสคริปต์ตัวแปลง 2-3 รายการเพื่อสร้างเนื้อหาประเภทอื่นๆ เป็นรูปแบบ Markdown ซึ่งรวมถึง Google เอกสาร, รูปแบบเอกสารพกพา (PDF) และ Gmail ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้เครื่องมือแปลงเหล่านี้ได้ที่ไดเรกทอรี docs-agent/apps_script ของที่เก็บโค้ด

แปลงเนื้อหารูปแบบอื่นๆ

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

โค้ดหลักที่คุณต้องสร้างเพื่อรองรับรูปแบบเนื้อหาอื่นๆ คือสคริปต์ตัวแบ่ง เช่น สคริปต์ files_to_plain_text.py มุ่งสร้างสคริปต์หรือโปรแกรมที่สร้างเอาต์พุตที่คล้ายกับสคริปต์นี้ โปรดทราบว่าเอาต์พุตข้อความสุดท้ายควรมีการจัดรูปแบบและข้อมูลที่ไม่เกี่ยวข้องน้อยที่สุด หากคุณใช้รูปแบบเนื้อหา เช่น HTML หรือ JSON ให้นําการจัดรูปแบบที่ไม่เกี่ยวข้องกับข้อมูล (แท็ก สคริปต์ CSS) ออกให้มากที่สุด เพื่อไม่ให้ค่าของข้อความที่ฝังซึ่งคุณสร้างจากรูปแบบดังกล่าวบิดเบือน

เมื่อสร้างสคริปต์ตัวแยกสำหรับรูปแบบเนื้อหาแล้ว คุณควรจะสามารถเรียกใช้สคริปต์ populate_vector_database.py เพื่อป้อนข้อมูลลงในฐานข้อมูลเวกเตอร์ ดูข้อมูลเพิ่มเติมเกี่ยวกับการประมวลผลไฟล์เพื่อใช้กับ Docs Agent ได้ที่อ่านก่อนประมวลผลของ Docs Agent

ทดสอบแอป

เมื่อป้อนข้อมูลในฐานข้อมูลเวกเตอร์เสร็จแล้ว โปรเจ็กต์จะพร้อมสำหรับการทดสอบ โปรเจ็กต์มีฟังก์ชันการแพ็กเกจเพื่อให้คุณเรียกใช้โปรเจ็กต์ในเครื่องได้

วิธีเรียกใช้และทดสอบอินเทอร์เฟซเว็บของโปรเจ็กต์

  1. ไปที่ไดเรกทอรีโปรเจ็กต์ docs-agent
    cd docs-agent/
    
  2. เรียกใช้สคริปต์เปิดเว็บแอปพลิเคชัน
    agent chatbot
    
  3. ใช้เว็บเบราว์เซอร์เพื่อไปยังที่อยู่เว็บ URL ที่แสดงในเอาต์พุตของสคริปต์เปิดใช้งาน แล้วทดสอบแอปพลิเคชัน
    * Running on http://your-hostname-here:5000
    

รูปแบบการนำไปใช้

Gemini API มีเครื่องมือการเขียนโปรแกรมที่สามารถแทนที่คอมโพเนนต์ของการใช้งานตัวแทนของเอกสาร โดยเฉพาะตัวแปรโมเดลของ Gemini สำหรับการดึงข้อมูลเชิงความหมายและการตอบคำถามที่มีการระบุแหล่งที่มา (AQA) คุณสามารถใช้ฟีเจอร์การดึงข้อมูลเชิงความหมายของ Gemini API เพื่อแทนที่ฐานข้อมูลเวกเตอร์แยกต่างหากได้ ฟีเจอร์การดึงข้อมูลเชิงความหมายช่วยให้คุณสร้างการฝังสําหรับเนื้อหาและจัดเก็บเนื้อหานั้นได้ โมเดล Gemini ของ AQA ได้รับการปรับให้ตอบคำถามด้วยเนื้อหาต้นฉบับที่ให้ไว้ในพรอมต์ คุณใช้การดึงข้อมูลเชิงความหมายร่วมกับโมเดล AQA เพื่อตอบคําถามเกี่ยวกับเนื้อหาของคุณได้ภายใน Gemini API

ตัวแทนของเอกสารมีตัวเลือกการกำหนดค่าเพื่อใช้ฟีเจอร์ Semantic Retrieved API, โมเดล AQA Gemini หรือทั้ง 2 อย่าง ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบสำหรับตัวแทนของ Google เอกสาร

แหล่งข้อมูลเพิ่มเติม

ดูข้อมูลเพิ่มเติมเกี่ยวกับโปรเจ็กต์ Docs Agent ได้ที่ที่เก็บโค้ด หากต้องการความช่วยเหลือในการสร้างแอปพลิเคชันหรือกำลังมองหาผู้ทำงานร่วมกันที่เป็นนักพัฒนาซอฟต์แวร์ โปรดไปที่เซิร์ฟเวอร์ Discord ของชุมชนนักพัฒนาซอฟต์แวร์ Google

แอปพลิเคชันเวอร์ชันที่ใช้งานจริง

หากคุณวางแผนที่จะติดตั้งใช้งาน Docs Agent กับผู้ชมจำนวนมาก โปรดทราบว่าการใช้ Google Gemini API อาจอยู่ภายใต้การจำกัดอัตราและข้อจำกัดในการใช้งานอื่นๆ หากกำลังพิจารณาสร้างแอปพลิเคชันเวอร์ชันที่ใช้งานจริงด้วย Gemini API เช่น ตัวแทนของ Google เอกสาร โปรดดูบริการ Google Cloud Vertex AI เพื่อเพิ่มความยืดหยุ่นและความน่าเชื่อถือของแอป