โปรดเข้าร่วม #cdd-nim-anywhere slack channel หากคุณเป็นผู้ใช้ภายใน เปิดปัญหาหากคุณอยู่ภายนอกสำหรับคำถามและข้อเสนอแนะ
ประโยชน์หลักประการหนึ่งของการใช้ AI สำหรับองค์กรคือความสามารถในการทำงานและเรียนรู้จากข้อมูลภายในของตน การดึงข้อมูล-Augmented Generation (RAG) เป็นหนึ่งในวิธีที่ดีที่สุดในการดำเนินการดังกล่าว NVIDIA ได้พัฒนาชุดไมโครบริการที่เรียกว่า NIM micro-service เพื่อช่วยให้คู่ค้าและลูกค้าของเราสร้างไปป์ไลน์ RAG ที่มีประสิทธิภาพได้อย่างง่ายดาย
NIM Anywhere มีเครื่องมือทั้งหมดที่จำเป็นในการเริ่มบูรณาการ NIM สำหรับ RAG โดยจะขยายขนาดเป็นห้องปฏิบัติการขนาดเต็มและขึ้นอยู่กับสภาพแวดล้อมการผลิต นี่เป็นข่าวดีสำหรับการสร้างสถาปัตยกรรม RAG และเพิ่ม NIM ได้อย่างง่ายดายตามต้องการ หากคุณไม่คุ้นเคยกับ RAG ระบบจะดึงข้อมูลภายนอกที่เกี่ยวข้องแบบไดนามิกระหว่างการอนุมานโดยไม่ต้องแก้ไขโมเดล ลองนึกภาพคุณเป็นหัวหน้าฝ่ายเทคโนโลยีของบริษัทที่มีฐานข้อมูลท้องถิ่นที่มีข้อมูลที่เป็นความลับและเป็นปัจจุบัน คุณไม่ต้องการให้ OpenAI เข้าถึงข้อมูลของคุณ แต่คุณต้องมีโมเดลเพื่อทำความเข้าใจเพื่อตอบคำถามได้อย่างถูกต้อง วิธีแก้ไขคือการเชื่อมต่อโมเดลภาษาของคุณเข้ากับฐานข้อมูลและป้อนข้อมูลให้กับพวกเขา
หากต้องการเรียนรู้เพิ่มเติมว่าเหตุใด RAG จึงเป็นโซลูชันที่ยอดเยี่ยมในการเพิ่มความแม่นยำและความน่าเชื่อถือของโมเดล AI ทั่วไปของคุณ โปรดอ่านบล็อกนี้
เริ่มต้นใช้งาน NIM Anywhere ทันทีด้วยคำแนะนำเริ่มต้นอย่างรวดเร็ว และสร้างแอปพลิเคชัน RAG แรกของคุณโดยใช้ NIM!
หากต้องการอนุญาตให้ AI Workbench เข้าถึงทรัพยากรคลาวด์ของ NVIDIA คุณจะต้องจัดเตรียมรหัสส่วนตัวให้กับมัน คีย์เหล่านี้ขึ้นต้นด้วย nvapi-
ไปที่ตัวจัดการคีย์ส่วนบุคคลของ NGC หากคุณได้รับแจ้งให้ลงทะเบียนสำหรับบัญชีใหม่และลงชื่อเข้าใช้
คำแนะนำ คุณสามารถค้นหาเครื่องมือนี้ได้โดยเข้าสู่ระบบ ngc.nvidia.com ขยายเมนูโปรไฟล์ของคุณที่ด้านบนขวา เลือก ตั้งค่า จากนั้นเลือก สร้างรหัสส่วนตัว
เลือก สร้างรหัสส่วนบุคคล
ป้อนค่าใดๆ ที่เป็นชื่อคีย์ โดยสามารถหมดอายุได้ 12 เดือน และเลือกบริการทั้งหมด กด สร้างรหัสส่วนบุคคล เมื่อคุณดำเนินการเสร็จสิ้น
บันทึกรหัสส่วนตัวของคุณไว้ใช้ในภายหลัง Workbench จำเป็นต้องใช้และไม่มีทางเรียกคืนได้ในภายหลัง หากคีย์สูญหายจะต้องสร้างคีย์ใหม่ ป้องกันคีย์นี้เหมือนกับว่าเป็นรหัสผ่าน
โปรเจ็กต์นี้ออกแบบมาเพื่อใช้กับ NVIDIA AI Workbench แม้ว่านี่จะไม่ใช่ข้อกำหนด แต่การเรียกใช้การสาธิตนี้โดยไม่มี AI Workbench จะต้องอาศัยการทำงานด้วยตนเอง เนื่องจากระบบอัตโนมัติและการผสานรวมที่กำหนดค่าไว้ล่วงหน้าอาจไม่พร้อมใช้งาน
คู่มือเริ่มต้นใช้งานฉบับย่อนี้จะถือว่ามีการใช้เครื่องแล็บระยะไกลเพื่อการพัฒนา และเครื่องภายในนั้นเป็นธินไคลเอ็นต์สำหรับการเข้าถึงเครื่องพัฒนาจากระยะไกล ซึ่งช่วยให้ทรัพยากรการประมวลผลยังคงอยู่ในศูนย์กลาง และสำหรับนักพัฒนาสามารถพกพาได้มากขึ้น โปรดทราบว่าเครื่องแล็บระยะไกลต้องใช้ Ubuntu แต่ไคลเอ็นต์ในเครื่องสามารถเรียกใช้ Windows, MacOS หรือ Ubuntu ได้ หากต้องการติดตั้งโปรเจ็กต์นี้ในเครื่องเท่านั้น เพียงข้ามการติดตั้งระยะไกล
ผังงาน LR
ท้องถิ่น
สภาพแวดล้อมห้องปฏิบัติการกราฟย่อย
เครื่องห้องปฏิบัติการระยะไกล
จบ
ท้องถิ่น <-.ssh.-> เครื่องห้องปฏิบัติการระยะไกล
จำเป็นต้องใช้ Ubuntu หากไคลเอ็นต์ภายในเครื่องจะถูกใช้สำหรับการพัฒนาด้วย เมื่อใช้เครื่องแล็บระยะไกล ซึ่งอาจเป็น Windows, MacOS หรือ Ubuntu
สำหรับคำแนะนำแบบเต็ม โปรดดูคู่มือผู้ใช้ NVIDIA AI Workbench
ติดตั้งซอฟต์แวร์ข้อกำหนดเบื้องต้น
ดาวน์โหลดตัวติดตั้ง NVIDIA AI Workbench และดำเนินการ อนุญาต Windows เพื่ออนุญาตให้โปรแกรมติดตั้งทำการเปลี่ยนแปลง
ทำตามคำแนะนำในตัวช่วยสร้างการติดตั้ง หากคุณต้องการติดตั้ง WSL2 ให้อนุญาต Windows เพื่อทำการเปลี่ยนแปลงและรีบูตเครื่องท้องถิ่นเมื่อมีการร้องขอ เมื่อระบบรีสตาร์ท ตัวติดตั้ง NVIDIA AI Workbench ควรดำเนินการต่อโดยอัตโนมัติ
เลือก Docker เป็นรันไทม์คอนเทนเนอร์ของคุณ
ลงชื่อเข้าใช้บัญชี GitHub ของคุณโดยใช้ตัวเลือก ลงชื่อเข้าใช้ผ่าน GitHub.com
ป้อนข้อมูลผู้เขียน git ของคุณหากได้รับการร้องขอ
สำหรับคำแนะนำแบบเต็ม โปรดดูคู่มือผู้ใช้ NVIDIA AI Workbench
ติดตั้งซอฟต์แวร์ข้อกำหนดเบื้องต้น
ดาวน์โหลดอิมเมจดิสก์ NVIDIA AI Workbench (ไฟล์ .dmg ) แล้วเปิดขึ้นมา
ลาก AI Workbench ลงในโฟลเดอร์ Applications และเรียกใช้ NVIDIA AI Workbench จากตัวเรียกใช้งานแอปพลิเคชัน
เลือก Docker เป็นรันไทม์คอนเทนเนอร์ของคุณ
ลงชื่อเข้าใช้บัญชี GitHub ของคุณโดยใช้ตัวเลือก ลงชื่อเข้าใช้ผ่าน GitHub.com
ป้อนข้อมูลผู้เขียน git ของคุณหากได้รับการร้องขอ
สำหรับคำแนะนำแบบเต็ม โปรดดูคู่มือผู้ใช้ NVIDIA AI Workbench รันการติดตั้งนี้ในฐานะผู้ใช้ที่จะเป็นผู้ใช้ Workbench อย่ารันขั้นตอนเหล่านี้ในฐานะ root
ติดตั้งซอฟต์แวร์ข้อกำหนดเบื้องต้น
ดาวน์โหลดตัวติดตั้ง NVIDIA AI Workbench ทำให้สามารถเรียกใช้งานได้ จากนั้นจึงเรียกใช้งาน คุณสามารถทำให้ไฟล์ปฏิบัติการได้ด้วยคำสั่งต่อไปนี้:
chmod +x NVIDIA-AI-Workbench- * .AppImage
AI Workbench จะติดตั้งไดรเวอร์ NVIDIA ให้กับคุณ (หากจำเป็น) คุณจะต้องรีบูทเครื่องของคุณหลังจากติดตั้งไดรเวอร์แล้วรีสตาร์ทการติดตั้ง AI Workbench โดยดับเบิลคลิกที่ไอคอน NVIDIA AI Workbench บนเดสก์ท็อปของคุณ
เลือก Docker เป็นรันไทม์คอนเทนเนอร์ของคุณ
ลงชื่อเข้าใช้บัญชี GitHub ของคุณโดยใช้ตัวเลือก ลงชื่อเข้าใช้ผ่าน GitHub.com
ป้อนข้อมูลผู้เขียน git ของคุณหากได้รับการร้องขอ
รองรับเฉพาะ Ubuntu สำหรับเครื่องระยะไกล
สำหรับคำแนะนำแบบเต็ม โปรดดูคู่มือผู้ใช้ NVIDIA AI Workbench รันการติดตั้งนี้ในฐานะผู้ใช้ที่จะใช้ Workbench อย่ารันขั้นตอนเหล่านี้ในฐานะ root
ตรวจสอบให้แน่ใจว่าได้เปิดใช้งานการรับรองความถูกต้องตามคีย์ SSH จากเครื่องท้องถิ่นไปยังเครื่องระยะไกล หากไม่ได้เปิดใช้งานอยู่ในปัจจุบัน คำสั่งต่อไปนี้จะเปิดใช้งานในสถานการณ์ส่วนใหญ่ เปลี่ยน REMOTE_USER
และ REMOTE-MACHINE
เพื่อแสดงที่อยู่ระยะไกลของคุณ
ssh - keygen -f " C:Userslocal-user.sshid_rsa " - t rsa - N ' "" '
type $ env: USERPROFILE .sshid_rsa.pub | ssh REMOTE_USER @REMOTE - MACHINE " cat >> .ssh/authorized_keys "
if [ ! -e ~ /.ssh/id_rsa ] ; then ssh-keygen -f ~ /.ssh/id_rsa -t rsa -N " " ; fi
ssh-copy-id REMOTE_USER@REMOTE-MACHINE
SSH เข้าสู่โฮสต์ระยะไกล จากนั้น ใช้คำสั่งต่อไปนี้เพื่อดาวน์โหลดและดำเนินการโปรแกรมติดตั้ง NVIDIA AI Workbench
mkdir -p $HOME /.nvwb/bin &&
curl -L https://workbench.download.nvidia.com/stable/workbench-cli/ $( curl -L -s https://workbench.download.nvidia.com/stable/workbench-cli/LATEST ) /nvwb-cli- $( uname ) - $( uname -m ) --output $HOME /.nvwb/bin/nvwb-cli &&
chmod +x $HOME /.nvwb/bin/nvwb-cli &&
sudo -E $HOME /.nvwb/bin/nvwb-cli install
AI Workbench จะติดตั้งไดรเวอร์ NVIDIA ให้กับคุณ (หากจำเป็น) คุณจะต้องรีบูทเครื่องระยะไกลของคุณหลังจากติดตั้งไดรเวอร์แล้ว จากนั้นรีสตาร์ทการติดตั้ง AI Workbench โดยรันคำสั่งอีกครั้งในขั้นตอนก่อนหน้า
เลือก Docker เป็นรันไทม์คอนเทนเนอร์ของคุณ
ลงชื่อเข้าใช้บัญชี GitHub ของคุณโดยใช้ตัวเลือก ลงชื่อเข้าใช้ผ่าน GitHub.com
ป้อนข้อมูลผู้เขียน git ของคุณหากได้รับการร้องขอ
เมื่อการติดตั้งระยะไกลเสร็จสมบูรณ์ คุณจะสามารถเพิ่ม Remote Location ลงในอินสแตนซ์ AI Workbench ภายในเครื่องได้ เปิดแอปพลิเคชัน AI Workbench คลิก เพิ่มตำแหน่งระยะไกล จากนั้นป้อนข้อมูลที่จำเป็น เมื่อเสร็จแล้วให้คลิก เพิ่มตำแหน่ง
REMOTE-MACHINE
REMOTE_USER
/home/USER/.ssh/id_rsa
มีสองวิธีในการดาวน์โหลดโปรเจ็กต์นี้เพื่อใช้ในเครื่อง: การโคลนและการฟอร์ก
การโคลนที่เก็บนี้เป็นวิธีที่แนะนำในการเริ่มต้น การดำเนินการนี้จะไม่อนุญาตให้มีการแก้ไขในเครื่อง แต่เป็นการเริ่มต้นที่เร็วที่สุด นอกจากนี้ยังช่วยให้มีวิธีดึงการอัปเดตที่ง่ายที่สุดอีกด้วย
แนะนำให้ทำการฟอร์กที่เก็บนี้เพื่อการพัฒนา เนื่องจากจะสามารถบันทึกการเปลี่ยนแปลงได้ อย่างไรก็ตาม หากต้องการรับการอัปเดต ผู้ดูแล fork จะต้องดึงข้อมูลจาก upstream repo เป็นประจำ หากต้องการทำงานจากทางแยก ให้ทำตามคำแนะนำของ GitHub จากนั้นอ้างอิง URL ไปยังทางแยกส่วนตัวของคุณในส่วนที่เหลือของส่วนนี้
เปิดหน้าต่าง NVIDIA AI Workbench ในเครื่อง จากรายการสถานที่ที่แสดง ให้เลือกสถานที่ระยะไกลที่คุณเพิ่งตั้งค่าหรือในพื้นที่หากคุณจะไปทำงานในพื้นที่
เมื่อเข้าไปในสถานที่แล้ว ให้เลือก Clone Project
ในหน้าต่างป๊อปอัป 'Clone Project' ให้ตั้งค่า Repository URL เป็น https://github.com/NVIDIA/nim-anywhere.git
คุณสามารถปล่อยให้ Path เป็นค่าเริ่มต้นของ /home/REMOTE_USER/nvidia-workbench/nim-anywhere.git
คลิก โคลน .`
คุณจะถูกนำไปที่หน้าโครงการใหม่ Workbench จะบูตสภาพแวดล้อมการพัฒนาโดยอัตโนมัติ คุณสามารถดูความคืบหน้าแบบเรียลไทม์ได้โดยขยายเอาต์พุตจากด้านล่างของหน้าต่าง
ต้องกำหนดค่าโปรเจ็กต์ให้ทำงานกับทรัพยากรเครื่องในเครื่อง
ก่อนที่จะรันเป็นครั้งแรก จะต้องระบุการกำหนดค่าเฉพาะของโปรเจ็กต์ การกำหนดค่าโครงการเสร็จสิ้นโดยใช้แท็บ สภาพแวดล้อม จากแผงด้านซ้าย
เลื่อนลงไปที่ส่วน ตัวแปร และค้นหารายการ NGC_HOME ควรตั้งค่าเป็น ~/.cache/nvidia-nims
ค่าที่นี่ถูกใช้โดย workbench ตำแหน่งเดียวกันนี้จะปรากฏในส่วน Mounts ที่ต่อเชื่อมไดเร็กทอรีนี้ลงในคอนเทนเนอร์ด้วย
เลื่อนลงไปที่ส่วน ความลับ และค้นหารายการ NGC_API_KEY กด กำหนดค่า และระบุรหัสส่วนตัวสำหรับ NGC ที่สร้างไว้ก่อนหน้านี้
เลื่อนลงไปที่ส่วน Mounts ที่นี่ มีการเมานต์สองตัวที่ต้องกำหนดค่า
ก. ค้นหาการเมาท์สำหรับ /var/host-run ใช้เพื่ออนุญาตให้สภาพแวดล้อมการพัฒนาเข้าถึง Docker daemon ของโฮสต์ในรูปแบบที่เรียกว่า Docker จาก Docker กด Configure และระบุไดเร็กทอรี /var/run
ข. ค้นหาการเมานต์สำหรับ /home/workbench/.cache/nvidia-nims การเมาท์นี้ใช้เป็นรันไทม์แคชสำหรับ NIM ซึ่งสามารถแคชไฟล์โมเดลได้ การแชร์แคชนี้กับโฮสต์จะช่วยลดการใช้ดิสก์และแบนด์วิธเครือข่าย
หากคุณยังไม่มีแคช nim หรือคุณไม่แน่ใจ ให้ใช้คำสั่งต่อไปนี้เพื่อสร้างแคชที่ /home/USER/.cache/nvidia-nims
mkdir -p ~ /.cache/nvidia-nims
chmod 2777 ~ /.cache/nvidia-nims
การสร้างใหม่จะเกิดขึ้นหลังจากมีการเปลี่ยนแปลงการตั้งค่าเหล่านี้
เมื่อบิลด์เสร็จสมบูรณ์พร้อมข้อความ Build Ready แอปพลิเคชันทั้งหมดจะพร้อมใช้งานสำหรับคุณ
แม้แต่ LLM Chains ขั้นพื้นฐานที่สุดยังต้องอาศัยไมโครเซอร์วิสเพิ่มเติมอีกสองสามรายการ สิ่งเหล่านี้สามารถถูกละเว้นได้ในระหว่างการพัฒนาสำหรับทางเลือกในหน่วยความจำ แต่จำเป็นต้องเปลี่ยนแปลงโค้ดเพื่อไปสู่การใช้งานจริง โชคดีที่ Workbench จัดการไมโครเซอร์วิสเพิ่มเติมเหล่านั้นสำหรับสภาพแวดล้อมการพัฒนา
คำแนะนำ: สำหรับแต่ละแอปพลิเคชัน สามารถตรวจสอบเอาต์พุตการดีบักได้ใน UI โดยการคลิกลิงก์เอาต์พุตที่มุมซ้ายล่าง เลือกเมนูแบบเลื่อนลง และเลือกแอปพลิเคชันที่สนใจ
แอปพลิเคชันทั้งหมดที่รวมอยู่ในเวิร์กสเปซนี้สามารถควบคุมได้โดยไปที่ สภาพแวดล้อม > แอปพลิเคชัน
ขั้นแรก ให้สลับไปที่ Milvus Vector DB และ Redis Milvus ถูกใช้เป็นฐานความรู้ที่ไม่มีโครงสร้าง และ Redis ใช้เพื่อจัดเก็บประวัติการสนทนา
เมื่อบริการเหล่านี้เริ่มต้นแล้ว Chain Server ก็สามารถเริ่มต้นได้อย่างปลอดภัย ประกอบด้วยโค้ด LangChain ที่กำหนดเองสำหรับดำเนินการห่วงโซ่การให้เหตุผลของเรา ตามค่าเริ่มต้น จะใช้ Milvus และ Redis ในเครื่อง แต่ใช้ ai.nvidia.com สำหรับการอนุมานโมเดล LLM และ Embedding
[ทางเลือก]: ถัดไป เริ่มต้น LLM NIM ในครั้งแรกที่ LLM NIM เริ่มทำงาน จะใช้เวลาสักครู่ในการดาวน์โหลดอิมเมจและโมเดลที่ปรับให้เหมาะสม
ก. ในระหว่างการเริ่มต้นที่ยาวนาน เพื่อยืนยันว่า LLM NIM กำลังเริ่มต้น ความคืบหน้าสามารถสังเกตได้โดยการดูบันทึกโดยใช้บานหน้าต่าง เอาต์พุต ที่ด้านล่างซ้ายของ UI
ข. หากบันทึกบ่งชี้ถึงข้อผิดพลาดในการรับรองความถูกต้อง นั่นหมายความว่า NGC_API_KEY ที่ให้ไว้ไม่มีสิทธิ์เข้าถึง NIM โปรดตรวจสอบว่าสร้างขึ้นอย่างถูกต้องและในองค์กร NGC ที่รองรับหรือทดลองใช้ NVIDIA AI Enterprise
ค. หากดูเหมือนว่าบันทึกจะติดอยู่ที่ ..........: Pull complete
..........: Verifying complete
หรือ ..........: Download complete
; นี่เป็นเอาต์พุตปกติทั้งหมดจาก Docker ที่มีการดาวน์โหลดเลเยอร์ต่างๆ ของอิมเมจคอนเทนเนอร์แล้ว
ง. ความล้มเหลวอื่นๆ ใดๆ ที่นี่จำเป็นต้องได้รับการแก้ไข
เมื่อ Chain Server ใช้งานได้ อินเทอร์เฟซการแชท ก็สามารถเริ่มต้นได้ การเริ่มอินเทอร์เฟซจะเปิดขึ้นในหน้าต่างเบราว์เซอร์โดยอัตโนมัติ
เพื่อเริ่มต้นการพัฒนาการสาธิต ชุดข้อมูลตัวอย่างจะถูกจัดเตรียมไว้พร้อมกับ Jupyter Notebook ที่แสดงว่าข้อมูลถูกนำเข้าไปยังฐานข้อมูล Vector อย่างไร
หากต้องการนำเข้าเอกสาร PDF ลงในฐานข้อมูลเวกเตอร์ ให้เปิด Jupyter โดยใช้ตัวเปิดใช้แอปใน AI Workbench
ใช้ Jupyter Notebook ที่ code/upload-pdfs.ipynb
เพื่อนำเข้าชุดข้อมูลเริ่มต้น หากใช้ชุดข้อมูลเริ่มต้น ก็ไม่จำเป็นต้องเปลี่ยนแปลง
หากใช้ชุดข้อมูลที่กำหนดเอง ให้อัปโหลดไปยัง data/
ไดเร็กทอรีใน Jupyter และแก้ไขสมุดบันทึกที่ให้มาตามความจำเป็น
โปรเจ็กต์นี้มีแอปพลิเคชันสำหรับบริการสาธิตบางอย่างรวมถึงการผสานรวมกับบริการภายนอก ทั้งหมดนี้ควบคุมโดย NVIDIA AI Workbench
บริการสาธิตทั้งหมดอยู่ในโฟลเดอร์ code
ระดับรูทของโฟลเดอร์โค้ดมีสมุดบันทึกแบบโต้ตอบสองสามเล่มที่มีไว้สำหรับเจาะลึกทางเทคนิค Chain Server เป็นแอปพลิเคชันตัวอย่างที่ใช้ NIM กับ LangChain (โปรดทราบว่า Chain Server ที่นี่ให้ตัวเลือกแก่คุณในการทดลองโดยใช้และไม่มี RAG) โฟลเดอร์ Chat Frontend ประกอบด้วยเซิร์ฟเวอร์ UI แบบโต้ตอบสำหรับใช้งานเซิร์ฟเวอร์ลูกโซ่ สุดท้ายนี้ สมุดบันทึกตัวอย่างจะถูกจัดเตรียมไว้ในไดเร็กทอรีการประเมินผลเพื่อสาธิตการให้คะแนนและการตรวจสอบความถูกต้อง
แผนที่ความคิด
รูท ((AI Workbench))
บริการสาธิต
เซิร์ฟเวอร์ลูกโซ่<br />LangChain + NIM
ส่วนหน้า<br />UI สาธิตแบบโต้ตอบ
การประเมินผล<br />ตรวจสอบผลลัพธ์
โน้ตบุ๊ก<br />การใช้งานขั้นสูง
บูรณาการ
ทำซ้ำประวัติการสนทนา
ฐานข้อมูลเวกเตอร์ของมิลวัส
LLM NIM</br>LLM ที่ปรับให้เหมาะสม
Chain Server สามารถกำหนดค่าได้ด้วยไฟล์การกำหนดค่าหรือตัวแปรสภาพแวดล้อม
ตามค่าเริ่มต้น แอปพลิเคชันจะค้นหาไฟล์การกำหนดค่าในตำแหน่งต่อไปนี้ทั้งหมด หากพบไฟล์การกำหนดค่าหลายไฟล์ ค่าจากไฟล์ที่ต่ำกว่าในรายการจะมีความสำคัญกว่า
สามารถระบุพาธของไฟล์กำหนดค่าเพิ่มเติมได้ผ่านตัวแปรสภาพแวดล้อมชื่อ APP_CONFIG
ค่าในไฟล์นี้จะมีความสำคัญเหนือกว่าตำแหน่งไฟล์เริ่มต้นทั้งหมด
export APP_CONFIG=/etc/my_config.yaml
การกำหนดค่าสามารถตั้งค่าได้โดยใช้ตัวแปรสภาพแวดล้อม ชื่อตัวแปรจะอยู่ในรูปแบบ: APP_FIELD__SUB_FIELD
ค่าที่ระบุเป็นตัวแปรสภาพแวดล้อมจะมีความสำคัญเหนือกว่าค่าทั้งหมดจากไฟล์
# Your API key for authentication to AI Foundation.
# ENV Variables: NGC_API_KEY, NVIDIA_API_KEY, APP_NVIDIA_API_KEY
# Type: string, null
nvidia_api_key : ~
# The Data Source Name for your Redis DB.
# ENV Variables: APP_REDIS_DSN
# Type: string
redis_dsn : redis://localhost:6379/0
llm_model :
# The name of the model to request.
# ENV Variables: APP_LLM_MODEL__NAME
# Type: string
name : meta/llama3-8b-instruct
# The URL to the model API.
# ENV Variables: APP_LLM_MODEL__URL
# Type: string
url : https://integrate.api.nvidia.com/v1
embedding_model :
# The name of the model to request.
# ENV Variables: APP_EMBEDDING_MODEL__NAME
# Type: string
name : nvidia/nv-embedqa-e5-v5
# The URL to the model API.
# ENV Variables: APP_EMBEDDING_MODEL__URL
# Type: string
url : https://integrate.api.nvidia.com/v1
reranking_model :
# The name of the model to request.
# ENV Variables: APP_RERANKING_MODEL__NAME
# Type: string
name : nv-rerank-qa-mistral-4b:1
# The URL to the model API.
# ENV Variables: APP_RERANKING_MODEL__URL
# Type: string
url : https://integrate.api.nvidia.com/v1
milvus :
# The host machine running Milvus vector DB.
# ENV Variables: APP_MILVUS__URL
# Type: string
url : http://localhost:19530
# The name of the Milvus collection.
# ENV Variables: APP_MILVUS__COLLECTION_NAME
# Type: string
collection_name : collection_1
log_level :
ส่วนหน้าการแชทมีตัวเลือกการกำหนดค่าบางอย่างเช่นกัน สามารถตั้งค่าได้ในลักษณะเดียวกับเซิร์ฟเวอร์ลูกโซ่
# The URL to the chain on the chain server.
# ENV Variables: APP_CHAIN_URL
# Type: string
chain_url : http://localhost:3030/
# The url prefix when this is running behind a proxy.
# ENV Variables: PROXY_PREFIX, APP_PROXY_PREFIX
# Type: string
proxy_prefix : /
# Path to the chain server's config.
# ENV Variables: APP_CHAIN_CONFIG_FILE
# Type: string
chain_config_file : ./config.yaml
log_level :
ยินดีรับข้อเสนอแนะและการมีส่วนร่วมในโครงการนี้ เมื่อทำการเปลี่ยนแปลงโปรเจ็กต์นี้ ไม่ว่าจะเพื่อการใช้งานส่วนตัวหรือเพื่อการมีส่วนร่วม ขอแนะนำให้ทำงานแยกส่วนในโปรเจ็กต์นี้ เมื่อการเปลี่ยนแปลงบนทางแยกเสร็จสมบูรณ์แล้ว ควรเปิดคำขอรวม
โปรเจ็กต์นี้ได้รับการกำหนดค่าด้วย Linters ที่ได้รับการปรับแต่งเพื่อช่วยให้โค้ดยังคงความสอดคล้องในขณะที่ไม่เป็นภาระมากเกินไป เราใช้ Linters ต่อไปนี้:
สภาพแวดล้อม VSCode แบบฝังได้รับการกำหนดค่าให้เรียกใช้ Linting และการตรวจสอบแบบเรียลไทม์
หากต้องการรัน Linting ที่ทำโดยไปป์ไลน์ CI ด้วยตนเอง ให้ดำเนินการ /project/code/tools/lint.sh
/project code/tools/lint.sh [deps|pylint|mypy|black|docs|fix]
สามารถดำเนินการทดสอบแต่ละรายการได้โดยระบุชื่อ: การเรียกใช้เครื่องมือ Lint ในโหมดแก้ไขจะแก้ไขสิ่งที่สามารถทำได้โดยอัตโนมัติด้วยการเรียกใช้ Black อัปเดต README และการล้างเอาต์พุตของเซลล์บน Jupyter Notebooks ทั้งหมด
ส่วนหน้าได้รับการออกแบบเพื่อลดการพัฒนา HTML และ Javascript ที่จำเป็นให้เหลือน้อยที่สุด Application Shell ที่มีตราสินค้าและมีสไตล์นั้นจัดทำขึ้นด้วย HTML HTML, Javascript และ CSS ได้รับการออกแบบมาให้ปรับแต่งได้ง่าย แต่ไม่ควรจำเป็น ส่วนประกอบแบบโต้ตอบของส่วนหน้าทั้งหมดสร้างขึ้นใน Gradio และติดตั้งใน App Shell โดยใช้ iframe
ที่ด้านบนของเปลือกแอปคือเมนูที่แสดงมุมมองที่มีอยู่ แต่ละมุมมองอาจมีเค้าโครงของตัวเองซึ่งประกอบด้วยหนึ่งหรือสองสามหน้า
หน้าต่างๆ มีส่วนประกอบแบบโต้ตอบสำหรับการสาธิต โค้ดสำหรับเพจต่างๆ อยู่ในไดเร็กทอรี code/frontend/pages
หากต้องการสร้างเพจใหม่:
__init__.py
ในไดเรกทอรีใหม่ที่ใช้ Gradio เพื่อกำหนด UI ควรกำหนดโครงร่าง Gradio Blocks ในตัวแปรที่เรียกว่า page
chat
สำหรับตัวอย่างcode/frontend/pages/__init__.py
นำเข้าหน้าใหม่ และเพิ่มหน้าใหม่ในรายการ __all__
หมายเหตุ: การสร้างเพจใหม่จะไม่เพิ่มลงในส่วนหน้า จะต้องเพิ่มลงในมุมมองเพื่อให้ปรากฏบนส่วนหน้า
มุมมองประกอบด้วยหนึ่งหรือสองสามหน้า และควรทำงานแยกจากกัน มุมมองทั้งหมดถูกกำหนดไว้ในโมดูล code/frontend/server.py
มุมมองที่ประกาศทั้งหมดจะถูกเพิ่มลงในแถบเมนูของส่วนหน้าโดยอัตโนมัติและทำให้พร้อมใช้งานใน UI
หากต้องการกำหนดมุมมองใหม่ ให้แก้ไขรายการชื่อ views
นี่คือรายการของวัตถุ View
ลำดับของออบเจ็กต์จะกำหนดลำดับในเมนูส่วนหน้า มุมมองที่กำหนดครั้งแรกจะเป็นค่าเริ่มต้น
ดูออบเจ็กต์อธิบายชื่อมุมมองและเค้าโครง สามารถประกาศได้ดังนี้:
my_view = frontend . view . View (
name = "My New View" , # the name in the menu
left = frontend . pages . sample_page , # the page to show on the left
right = frontend . pages . another_page , # the page to show on the right
)
การประกาศเพจทั้งหมด View.left
หรือ View.right
เป็นทางเลือก หากไม่ได้รับการประกาศ iframe ที่เกี่ยวข้องในเค้าโครงเว็บจะถูกซ่อน iframe อื่นๆ จะขยายเพื่อเติมเต็มช่องว่าง ไดอะแกรมต่อไปนี้แสดงเค้าโครงต่างๆ
บล็อกเบต้า
คอลัมน์ 1
เมนู["แถบเมนู"]
ปิดกั้น
คอลัมน์ 2
ซ้ายขวา
จบ
บล็อกเบต้า
คอลัมน์ 1
เมนู["แถบเมนู"]
ปิดกั้น
คอลัมน์ 1
ซ้าย:1
จบ
ส่วนหน้าประกอบด้วยเนื้อหาที่มีแบรนด์บางส่วนที่สามารถปรับแต่งให้เหมาะกับกรณีการใช้งานที่แตกต่างกันได้
ส่วนหน้ามีโลโก้ที่ด้านซ้ายบนของหน้า หากต้องการแก้ไขโลโก้ จำเป็นต้องมี SVG ของโลโก้ที่ต้องการ จากนั้นคุณสามารถแก้ไข App Shell เพื่อใช้ SVG ใหม่ได้อย่างง่ายดายโดยการแก้ไขไฟล์ code/frontend/_assets/index.html
มี div
เดียวที่มีรหัส logo
กล่องนี้มี SVG เดียว อัปเดตสิ่งนี้เป็นคำจำกัดความ SVG ที่ต้องการ
< div id =" logo " class =" logo " >
< svg viewBox =" 0 0 164 30 " > ... </ svg >
</ div >
รูปแบบของ App Shell ถูกกำหนดไว้ใน code/frontend/_static/css/style.css
สีในไฟล์นี้อาจได้รับการแก้ไขอย่างปลอดภัย
การกำหนดสไตล์ของเพจต่างๆ ถูกกำหนดไว้ใน code/frontend/pages/*/*.css
ไฟล์เหล่านี้อาจต้องมีการแก้ไขชุดสีแบบกำหนดเอง
ธีม Gradio ถูกกำหนดไว้ในไฟล์ code/frontend/_assets/theme.json
สีในไฟล์นี้สามารถปรับเปลี่ยนให้เป็นตราสินค้าที่ต้องการได้อย่างปลอดภัย สไตล์อื่นๆ ในไฟล์นี้อาจเปลี่ยนแปลงได้เช่นกัน แต่อาจทำให้เกิดการเปลี่ยนแปลงส่วนหน้าที่เสียหาย เอกสารประกอบของ Gradio มีข้อมูลเพิ่มเติมเกี่ยวกับธีมของ Gradio
หมายเหตุ: นี่เป็นหัวข้อขั้นสูงที่นักพัฒนาส่วนใหญ่ไม่ต้องการ
ในบางครั้ง อาจจำเป็นต้องมีหลายเพจในมุมมองที่สื่อสารระหว่างกัน เพื่อจุดประสงค์นี้ จึงมีการใช้เฟรมเวิร์กการส่งข้อความ postMessage
ของ Javascript ข้อความที่เชื่อถือได้ใดๆ ที่โพสต์ไปยัง Application Shell จะถูกส่งต่อไปยังแต่ละ iframe ซึ่งเพจต่างๆ สามารถจัดการข้อความได้ตามต้องการ หน้า control
ใช้คุณสมบัตินี้เพื่อแก้ไขการกำหนดค่าของหน้า chat
ต่อไปนี้จะโพสต์ข้อความไปยัง app shell ( window.top
) ข้อความจะมีพจนานุกรมที่มีคีย์ use_kb
และค่าเป็น true การใช้ Gradio ทำให้ Javascript นี้สามารถดำเนินการโดยเหตุการณ์ Gradio ใดก็ได้
window . top . postMessage ( { "use_kb" : true } , '*' ) ;
ข้อความนี้จะถูกส่งไปยังทุกหน้าโดยอัตโนมัติโดยเชลล์แอป โค้ดตัวอย่างต่อไปนี้จะใช้ข้อความบนหน้าอื่น รหัสนี้จะทำงานแบบอะซิงโครนัสเมื่อได้รับ message
เหตุการณ์ หากข้อความเชื่อถือได้ คอมโพเนนต์ Gradio ที่มี elem_id
เป็น use_kb
จะได้รับการอัปเดตเป็นค่าที่ระบุในข้อความ ด้วยวิธีนี้ ค่าของคอมโพเนนต์ Gradio จึงสามารถทำซ้ำข้ามหน้าต่างๆ ได้
window . addEventListener (
"message" ,
( event ) => {
if ( event . isTrusted ) {
use_kb = gradio_config . components . find ( ( element ) => element . props . elem_id == "use_kb" ) ;
use_kb . props . value = event . data [ "use_kb" ] ;
} ;
} ,
false ) ;
README ถูกเรนเดอร์โดยอัตโนมัติ การแก้ไขโดยตรงจะถูกเขียนทับ ในการแก้ไข README คุณจะต้องแก้ไขไฟล์สำหรับแต่ละส่วนแยกกัน ไฟล์ทั้งหมดเหล่านี้จะถูกรวมเข้าด้วยกัน และ README จะถูกสร้างขึ้นโดยอัตโนมัติ คุณสามารถค้นหาไฟล์ที่เกี่ยวข้องทั้งหมดได้ในโฟลเดอร์ docs
เอกสารประกอบถูกเขียนใน Github Flavoured Markdown จากนั้นเรนเดอร์เป็นไฟล์ Markdown สุดท้ายโดย Pandoc รายละเอียดสำหรับกระบวนการนี้ถูกกำหนดไว้ใน Makefile ลำดับของไฟล์ที่สร้างขึ้นถูกกำหนดไว้ใน docs/_TOC.md
เอกสารสามารถดูแสดงตัวอย่างได้ในหน้าต่างเบราว์เซอร์ไฟล์ Workbench
ไฟล์ส่วนหัวเป็นไฟล์แรกที่ใช้ในการรวบรวมเอกสารประกอบ ไฟล์นี้สามารถพบได้ที่ docs/_HEADER.md
เนื้อหาของไฟล์นี้จะถูกเขียนแบบคำต่อคำไปยัง README ก่อนสิ่งอื่นใดโดยไม่มีการดัดแปลงใด ๆ
ไฟล์สรุปประกอบด้วยคำอธิบายโดยย่อและกราฟิกที่อธิบายโครงการนี้ เนื้อหาของไฟล์นี้จะถูกเพิ่มลงใน README ทันทีหลังจากส่วนหัวและก่อนสารบัญ ไฟล์นี้ได้รับการประมวลผลโดย Pandoc เพื่อฝังภาพก่อนที่จะเขียนลงใน README
ไฟล์ที่สำคัญที่สุดสำหรับเอกสารประกอบคือไฟล์สารบัญที่ docs/_TOC.md
ไฟล์นี้กำหนดรายการไฟล์ที่ควรต่อเข้าด้วยกันเพื่อสร้างคู่มือ README ขั้นสุดท้าย ไฟล์ต้องอยู่ในรายการนี้จึงจะรวมได้
บันทึกเนื้อหาคงที่ทั้งหมด รวมถึงรูปภาพ ลงในโฟลเดอร์ _static
ซึ่งจะช่วยในเรื่องการจัดระเบียบ
การมีเอกสารที่อัปเดตและเขียนเองอาจเป็นประโยชน์ หากต้องการสร้างเอกสารแบบไดนามิก เพียงสร้างไฟล์ปฏิบัติการที่เขียนเอกสารที่จัดรูปแบบ Markdown ไปที่ stdout ในระหว่างเวลาสร้าง หากรายการในไฟล์สารบัญสามารถเรียกใช้งานได้ รายการนั้นจะถูกดำเนินการและ stdout ของรายการจะถูกนำมาใช้แทน
เมื่อมีการส่งคอมมิตที่เกี่ยวข้องกับเอกสาร GitHub Action จะแสดงผลเอกสาร การเปลี่ยนแปลงใดๆ ใน README จะถูกคอมมิตโดยอัตโนมัติ
การกำหนดค่าสำหรับสภาพแวดล้อมการพัฒนาส่วนใหญ่เกิดขึ้นกับตัวแปรสภาพแวดล้อม หากต้องการเปลี่ยนแปลงตัวแปรสภาพแวดล้อมอย่างถาวร ให้แก้ไข variables.env
หรือใช้ Workbench UI
โปรเจ็กต์นี้ใช้สภาพแวดล้อม Python หนึ่งรายการที่ /usr/bin/python3
และการพึ่งพาได้รับการจัดการด้วย pip
เนื่องจากการพัฒนาทั้งหมดเสร็จสิ้นภายในคอนเทนเนอร์ การเปลี่ยนแปลงใดๆ ที่เกิดขึ้นกับสภาพแวดล้อม Python จึงเกิดขึ้นเพียงชั่วคราว หากต้องการติดตั้งแพ็กเกจ Python อย่างถาวร ให้เพิ่มลงในไฟล์ requirements.txt
หรือใช้ Workbench UI
สภาพแวดล้อมการพัฒนาใช้ Ubuntu 22.04 ผู้ใช้หลักมีสิทธิ์เข้าถึง sudo โดยไม่ต้องใช้รหัสผ่าน แต่การเปลี่ยนแปลงทั้งหมดที่เกิดขึ้นกับระบบจะเกิดขึ้นเพียงชั่วคราว หากต้องการเปลี่ยนแปลงแพ็คเกจที่ติดตั้งอย่างถาวร ให้เพิ่มลงในไฟล์ [ apt.txt
] เพื่อทำการเปลี่ยนแปลงอื่น ๆ ในระบบปฏิบัติการ เช่น การจัดการไฟล์ การเพิ่มตัวแปรสภาพแวดล้อม ฯลฯ ใช้ไฟล์ postBuild.bash
และ preBuild.bash
โดยทั่วไปแล้ว แนวทางปฏิบัติที่ดีในการอัปเดตการขึ้นต่อกันทุกเดือนเพื่อให้แน่ใจว่าไม่มีการเปิดเผย CVE ผ่านการขึ้นต่อกันที่ใช้ในทางที่ผิด กระบวนการต่อไปนี้สามารถใช้เพื่อแก้ไขโปรเจ็กต์นี้ได้ ขอแนะนำให้ทำการทดสอบการถดถอยหลังจากแพทช์เพื่อให้แน่ใจว่าไม่มีอะไรเสียหายในการอัพเดต
/project/code/tools/bump.sh
/project/code/tools/audit.sh
สคริปต์นี้จะพิมพ์รายงานแพ็คเกจ Python ทั้งหมดในสถานะคำเตือนและแพ็คเกจทั้งหมดในสถานะข้อผิดพลาด สิ่งใดก็ตามที่อยู่ในสถานะข้อผิดพลาดจะต้องได้รับการแก้ไข เนื่องจากจะมี CVE ที่ใช้งานอยู่และช่องโหว่ที่ทราบ