Gen Ai - ตัวอย่าง Springboot / Langchain4J
Generative AI หมายถึงชุดย่อยของปัญญาประดิษฐ์ที่สามารถสร้างเนื้อหาใหม่ตามข้อมูลอินพุต ซึ่งรวมถึงโมเดลที่สามารถสร้างข้อความ รูปภาพ เพลง และแม้แต่วิดีโอได้ ตัวอย่างของ generative AI ได้แก่ โมเดลภาษา เช่น GPT-3 และ DALL-E ของ OpenAI ซึ่งสามารถสร้างข้อความและรูปภาพที่เหมือนมนุษย์จากคำอธิบายที่เป็นข้อความได้ ตามลำดับ
โดยทั่วไปแล้ว โมเดล Generative AI จะได้รับการฝึกบนชุดข้อมูลขนาดใหญ่ และใช้เทคนิคการเรียนรู้เชิงลึกเพื่อเรียนรู้รูปแบบและโครงสร้างของข้อมูล มีการใช้งานที่หลากหลาย ได้แก่:
- การประมวลผลภาษาธรรมชาติ (NLP): การสร้างข้อความที่เหมือนมนุษย์สำหรับแชทบอท การแปล และการสร้างเนื้อหา
- ศิลปะสร้างสรรค์: การสร้างงานศิลปะ ดนตรี และองค์ประกอบการออกแบบ
- การเพิ่มข้อมูล: การสร้างข้อมูลเพิ่มเติมสำหรับการฝึกโมเดลการเรียนรู้ของเครื่องอื่นๆ
- การดูแลสุขภาพ: ช่วยเหลือในการถ่ายภาพทางการแพทย์และสร้างแผนการรักษาเฉพาะบุคคล
LangChain4J Gen AI API ช่วยนักพัฒนาสร้างแอป Spring Boot AI ได้อย่างไร
LangChain4J เป็นไลบรารี Java ที่ออกแบบมาเพื่อลดความซับซ้อนในการรวมโมเดลภาษาขนาดใหญ่ (LLM) และความสามารถ AI เข้ากับแอปพลิเคชัน Java รวมถึงแอปพลิเคชันที่สร้างด้วย Spring Boot นี่คือวิธีที่จะช่วยนักพัฒนา:
- Unified API สำหรับ LLM: LangChain4J มี API แบบรวมที่รองรับผู้ให้บริการ LLM หลายราย เช่น OpenAI และ Google Vertex AI นามธรรมนี้ช่วยให้นักพัฒนาสามารถสลับระหว่าง LLM ต่างๆ ได้โดยไม่ต้องเปลี่ยนฐานโค้ดอย่างมีนัยสำคัญ
- การผสานรวมร้านค้าแบบฝัง: ทำงานร่วมกับร้านค้าแบบฝังต่างๆ ช่วยให้สามารถจัดการข้อมูลเวกเตอร์ได้อย่างมีประสิทธิภาพ สิ่งนี้มีประโยชน์อย่างยิ่งสำหรับงานการดึงข้อมูล-เสริมการสร้าง (RAG) โดยที่ข้อมูลที่เกี่ยวข้องจะถูกดึงมาจากฐานความรู้เพื่อปรับปรุงการตอบสนองของ AI
- กล่องเครื่องมือของคุณสมบัติ: ไลบรารีประกอบด้วยชุดเครื่องมือที่ครอบคลุมสำหรับการสร้างเทมเพลตทันที การจัดการหน่วยความจำ และการแยกวิเคราะห์เอาต์พุต เครื่องมือเหล่านี้ช่วยในการสร้างแอปพลิเคชัน AI ที่ซับซ้อนโดยมอบนามธรรมระดับสูงและส่วนประกอบที่พร้อมใช้งาน
- การบูรณาการ Spring Boot: LangChain4J รองรับ Spring Boot ทำให้นักพัฒนาสามารถสร้างแอปพลิเคชัน AI ที่แข็งแกร่งและปรับขนาดได้ง่ายขึ้น การบูรณาการดังกล่าวช่วยให้สามารถรวมบริการ AI เข้ากับแอปพลิเคชัน Spring Boot ได้อย่างราบรื่น โดยใช้ประโยชน์จากฟีเจอร์การพึ่งพาและการจัดการการกำหนดค่าของ Spring
- ตัวอย่างและเอกสารประกอบ: LangChain4J นำเสนอเอกสารและตัวอย่างที่ครอบคลุม เพื่อชี้แนะนักพัฒนาผ่านกรณีการใช้งานต่างๆ และสาธิตวิธีการใช้ฟังก์ชันที่ขับเคลื่อนด้วย AI ในแอปพลิเคชันของพวกเขา
กรณีศึกษา: แอปการดูแลสุขภาพ - ไมโครเซอร์วิสการวินิจฉัยที่เปิดใช้งาน Gen Ai
ตัวอย่าง Gen AI: การเปรียบเทียบ 8 LLM (3 ระบบคลาวด์และ 5 ภายใน) บนคุณสมบัติระดับองค์กร
การเปรียบเทียบต่อไปนี้อิงตามฟีเจอร์ที่มีอยู่ใน LangChain4J API (ซึ่งรองรับโดย OpenAI ChatGPT) คุณสมบัติเหล่านี้จำเป็นสำหรับการพัฒนาแอพระดับองค์กรที่ใช้ Gen AI
- | ตัวอย่าง | จีพีที 4โอ | เมต้า ลามะ3 | มิสทรัล | ไมโครซอฟต์ Phi-3 | Google เจมม่า | ทีไอไอ ฟอลคอน 2 | โคลด 3 | ราศีเมถุน 1.5 |
---|
1. | สวัสดีชาวโลก | - | - | - | - | - | - | - | - |
2. | โลกที่ซับซ้อน | - | - | - ม1 | - | - | - | - | - |
3. | ข้อมูลที่กำหนดเอง | - | - | - | - | - | - F1 | - | - |
4. | การสร้างภาพ | - | - L1 | - M2 | - ป1 | - | - F2 | - | - |
5. | เทมเพลตพร้อมท์ | - | - | - ม3 | - | - | - | - | - |
6. | เครื่องมือ | - | - L2 | - ม4 | - ป2 | - G1 | - F3 | - | - G1 |
7. | หน่วยความจำแชท | - | - | - | - ป3 | - G2 | - | - | - G2 |
8. | ไม่กี่ช็อต | - | - | - ม5 | - | - | - | - | - G3 |
9. | นักแปลภาษา | - | - | - ม6 | - | - | - | - | - |
10. | เครื่องวิเคราะห์ความรู้สึก | - | - | - | - | - | - | - | - |
11. | ตัวแยกข้อมูล | - O1 | - L3 | - ม7 | - ป4 | - G3 | - F4 | - | - G4 |
12. | ร้านค้าถาวร | - | - | - ม8 | - ป5 | - G4 | - | - | - |
การดึงข้อมูล Augmented Generation (RAG) ตัวอย่าง 8 LLM
- | ตัวอย่าง | จีพีที 4โอ | เมต้า ลามะ3 | มิสทรัล | ไมโครซอฟต์ Phi-3 | Google เจมม่า | ทีไอ ฟอลคอน 2 | โคลด 3 | ราศีเมถุน 1.5 |
---|
51. | เรียบง่าย | - | - | - | - | - | - | - | - |
52. | เซ็กเมนต์ | - | - | - | - | - | - | - | - |
53. | แบบสอบถามหม้อแปลง | - | - | - | - | - | - | - | - |
54. | แบบสอบถามเราเตอร์ | - | - L4 | - M9 | - หน้า 6 | - G4 | - F5 | - | - G5 |
55. | การจัดอันดับใหม่ | - | - | - | - | - | - | - | - |
56. | เมตาดาต้า | - | - | - | - | - | - | - | - |
57. | ตัวดึงเนื้อหาหลายตัว | - | - | - | - | - | - | - | - |
58. | ข้ามการดึงเนื้อหา | - | - | - | - | - | - | - | - |
59. | แอพดูแลสุขภาพ | - | - | - | - | - | - | - | - |
การจัดอันดับ LLM อันดับต้นๆ ตามคุณลักษณะขององค์กร
- | อันดับ | บริษัท | นิติศาสตร์มหาบัณฑิต | คะแนน | หมวดหมู่ |
---|
1 | 1 | มานุษยวิทยา | คลอดด์ 3 ไฮกุ | 21/21 | คลาวด์ |
2 | 2 | เปิดเอไอ | แชท GPT 4o | 20/21 | คลาวด์ |
3 | 3 | เมตา | ลามะ 3 | 17/21 | ท้องถิ่น |
4 | 4 | ทีไอ | ฟอลคอน 2 | 16/21 | ท้องถิ่น |
5 | 4 | Google | เจมินี่ 1.5 โปร | 16/21 | คลาวด์ |
6 | 4 | Google | เจมม่า | 16/21 | ท้องถิ่น |
7 | 5 | ไมโครซอฟต์ | พี 3 | 15/21 | ท้องถิ่น |
8 | 6 | มิสทรัล | มิสทรัล | 12/21 | ท้องถิ่น |
หมายเหตุ: LLM ในระบบคลาวด์จะมีการรองรับพารามิเตอร์มากกว่า 500 พันล้านรายการ ในขณะที่ LLM ภายในส่วนใหญ่จะอิงตามพารามิเตอร์ 8 พันล้านรายการ
ชำระเงินรายละเอียดเพิ่มเติมเกี่ยวกับคะแนนการทดสอบ
ติดตั้ง LLM ท้องถิ่น
ในการติดตั้ง LLM ท้องถิ่นโดยใช้ Ollama
- เมต้า ลามะ3
- Google เจมม่า
- ไมโครซอฟต์ PHI-3
- ทีไอ ฟอลคอน 2
- มิสทรัล
- ตัวช่วยสร้างคณิตศาสตร์
ตรวจสอบคู่มือการติดตั้ง
รับคีย์สำหรับการทดสอบ Cloud LLM
ลงทะเบียนเพื่อรับคีย์ API
- Open AI - ChatGPT (สามารถสร้างคีย์ API ได้ที่นี่: https://platform.openai.com/api-keys)
- Anthropic - Claude 3 (สามารถสร้างคีย์ API ได้ที่นี่: https://console.anthropic.com/settings/keys)
- Google Cloud - (https://console.cloud.google.com/ - ตรวจสอบ AiConstants.java เพื่อดูคำแนะนำ)
- Cohere - (คีย์ API ที่นี่: https://dashboard.cohere.com/welcome/register)
- HuggingFace - (คีย์ API ที่นี่: https://huggingface.co/settings/tokens)
- รวดเร็ว - (คีย์ API ที่นี่: https://rapidapi.com/judge0-official/api/judge0-ce)
ตั้งค่าคีย์เหล่านี้ในสภาพแวดล้อมของคุณ
// API Keys -----------------------------------------------------------------------
// OpenAI API key here: https://platform.openai.com/account/api-keys
public static final String OPENAI_API_KEY = System.getenv("OPENAI_API_KEY");
// Cohere API key here: // https://dashboard.cohere.com/welcome/register
public static final String COHERE_API_KEY = System.getenv("COHERE_API_KEY");
// Anthropic API key here:: https://console.anthropic.com/settings/keys
public static final String ANTHROPIC_API_KEY = System.getenv("ANTHROPIC_API_KEY");
// HuggingFace API key here: https://huggingface.co/settings/tokens
public static final String HF_API_KEY = System.getenv("HF_API_KEY");
// Judge0 RapidAPI key here: https://rapidapi.com/judge0-official/api/judge0-ce
public static final String RAPID_API_KEY = System.getenv("RAPID_API_KEY");
Gen AI - โครงสร้างแพ็คเกจโค้ด
แพ็คเกจ io.fusion.air.microservice.ai.genai
- คอนโทรลเลอร์ (Rest Endpoints สำหรับการทดสอบตัวอย่าง)
- แกนกลาง
- ผู้ช่วย (อิงจาก LangChain4J AiService)
- โมเดล (โมเดลข้อมูลที่ใช้ในโค้ด)
- prompts (พรอมต์ที่มีโครงสร้างเพื่อให้มีเอาต์พุตเฉพาะ)
- บริการ (ลอจิกธุรกิจเฉพาะของ LLM นำมาใช้ใหม่ในทุกตัวอย่าง)
- เครื่องมือ (ฟังก์ชันที่เรียกใช้ตามการค้นหา LLM)
- ตัวอย่าง (Claude 3, Falcon 2, GPT 4o, Gemini, Gemma, Llama3, Mistral, Phi-3, Wizard Math)
- utils (โค้ดทั่วไปเพื่อสร้าง ChatLanguageModels และการกำหนดค่า, คีย์ API และตัวรันคอนโซล)
โครงสร้างรหัส
การทดสอบด่วนหลังจากเริ่มแอพ SpringBoot
การวิเคราะห์ความรู้สึกโดยใช้ ChatGPT 4o
การกลั่นกรองเนื้อหาโดยใช้ ChatGPT 4o
ChatBot โดยใช้ RAG (ข้อมูลที่กำหนดเอง) - กรณีศึกษา: บริการรถเช่า
สถาปัตยกรรม RAG
การดึงข้อมูล-Augmented Generation (RAG) ช่วยเพิ่มผลลัพธ์ของโมเดลภาษาขนาดใหญ่ (LLM) โดยการผสานรวมฐานความรู้ภายนอกที่เชื่อถือได้ ในขณะที่ LLM ได้รับการฝึกอบรมเกี่ยวกับชุดข้อมูลขนาดใหญ่และใช้พารามิเตอร์นับพันล้านเพื่อสร้างการตอบสนองต่องานต่างๆ เช่น การตอบคำถาม การแปลภาษา และการเติมข้อความให้สมบูรณ์ RAG จะเพิ่มประสิทธิภาพผลลัพธ์เหล่านี้โดยการอ้างอิงแหล่งข้อมูลเฉพาะและทันสมัย นอกเหนือจากข้อมูลการฝึกของโมเดล กระบวนการนี้ขยายขีดความสามารถของ LLM อย่างมากเพื่อรองรับโดเมนเฉพาะทางหรือความรู้ภายในขององค์กร โดยไม่ต้องมีการฝึกอบรมโมเดลใหม่ ด้วยเหตุนี้ RAG จึงมอบโซลูชันที่คุ้มค่าเพื่อให้แน่ใจว่าเนื้อหาที่สร้างขึ้นยังคงมีความเกี่ยวข้อง ถูกต้อง และเหมาะสมตามบริบท
โมเดลภาษาขนาดใหญ่ (LLM) เผชิญกับความท้าทายหลายประการ:
- พวกเขาอาจให้ข้อมูลเท็จเมื่อขาดคำตอบที่ถูกต้อง
- พวกเขาสามารถส่งข้อมูลที่ล้าสมัยหรือทั่วไปเมื่อผู้ใช้คาดหวังการตอบสนองเฉพาะในปัจจุบัน
- พวกเขาอาจสร้างการตอบกลับโดยอิงจากแหล่งที่มาที่ไม่ได้รับอนุญาต
- พวกเขาสามารถให้คำตอบที่ไม่ถูกต้องเนื่องจากความสับสนของคำศัพท์ โดยแหล่งการฝึกอบรมที่แตกต่างกันใช้คำเดียวกันเพื่ออธิบายแนวคิดที่แตกต่างกัน
การดึงข้อมูล-Augmented Generation (RAG) จัดการกับความท้าทายหลายประการที่เกี่ยวข้องกับ LLM โดยการกำกับแบบจำลองเพื่อดึงข้อมูลที่เกี่ยวข้องจากแหล่งความรู้ที่เชื่อถือได้และถูกกำหนดไว้ล่วงหน้า แนวทางนี้ช่วยให้องค์กรต่างๆ สามารถควบคุมเนื้อหาที่สร้างโดยแบบจำลองได้มากขึ้น ทำให้มั่นใจในความถูกต้องและความเกี่ยวข้อง นอกจากนี้ยังให้ข้อมูลเชิงลึกที่ชัดเจนยิ่งขึ้นแก่ผู้ใช้เกี่ยวกับแหล่งที่มาและกระบวนการที่ LLM ใช้เพื่อกำหนดการตอบสนอง
การสนทนาโดยใช้ LLM กับข้อตกลงบริการเช่ารถ (ข้อมูลที่กำหนดเอง)
การแยกข้อมูลโดยใช้ ChatGPT 4o
LangChain4J ดำเนินการบนนามธรรมสองระดับ:
- ระดับต่ำ. ในระดับนี้ คุณมีอิสระสูงสุดและเข้าถึงส่วนประกอบระดับต่ำทั้งหมดได้ เช่น ChatLanguageModel, UserMessage, AiMessage, EmbeddingStore, Embedding เป็นต้น สิ่งเหล่านี้คือ "พื้นฐาน" ของแอปพลิเคชันที่ขับเคลื่อนด้วย LLM ของคุณ คุณสามารถควบคุมวิธีรวมพวกมันได้อย่างสมบูรณ์ แต่คุณจะต้องเขียนโค้ดกาวเพิ่มเติม
- ระดับสูง. ในระดับนี้ คุณจะโต้ตอบกับ LLM โดยใช้ API ระดับสูง เช่น AiServices และ Chains ซึ่งจะซ่อนความซับซ้อนและต้นแบบทั้งหมดจากคุณ คุณยังคงมีความยืดหยุ่นในการปรับและปรับแต่งลักษณะการทำงาน แต่จะกระทำในลักษณะที่เปิดเผย
อ่านเพิ่มเติม... บทนำของ LangChain4J
โครงสร้างบรรจุภัณฑ์
ข้อกำหนดเบื้องต้น
- สปริงบูต 3.2.4
- ชวา 22
- Jakarta EE 10 (jakarta.servlet. , jakarta.persistence. , javax.validation.*)
- ฐานข้อมูล PostgreSQL 14
- โอลามา 0.1.38
ตามค่าเริ่มต้น แอปจะใช้ฐานข้อมูลในหน่วยความจำ H2 ไม่จำเป็นต้องตั้งค่าฐานข้อมูลสำหรับสิ่งนี้
ขั้นตอนที่ 1.1 - การเริ่มต้นใช้งาน
- โคลนคอมไพล์ https://github.com/arafkarsh/ms-springboot-324-ai.git
- ซีดี ms-springboot-324-ai
- ฐานข้อมูลซีดี
- อ่าน README.md เพื่อตั้งค่าฐานข้อมูลของคุณ (ฐานข้อมูล PostgreSQL)
- ตามค่าเริ่มต้น (โหมดการพัฒนา) แอปจะใช้ฐานข้อมูล H2 ในหน่วยความจำ
ขั้นตอนที่ 1.2 - คอมไพล์ (เมื่อโค้ดของคุณพร้อม)
1.2.1 รวบรวมรหัส
เรียกใช้ "คอมไพล์" จาก ms-springboot-324-ai
- คอมไพล์หรือ ./compile (รันใน Linux และ Mac OS)
- สะอาด; mvn -e แพ็คเกจ; (ทุกแพลตฟอร์ม)
- ใช้ตัวเลือกการคอมไพล์ IDE
1.2.2 สคริปต์ "คอมไพล์" จะทำอะไร
- ทำความสะอาดโฟลเดอร์เป้าหมาย
- สร้างหมายเลขบิลด์ และวันที่สร้าง (ใช้การสำรองข้อมูล application.properties)
- สร้างเอาต์พุตสุดท้ายขวดไขมัน SpringBoot และขวดบาง maven
- คัดลอกไฟล์ jar (และการอ้างอิง) ไปยังโฟลเดอร์ src/docker
- คัดลอกไฟล์ application.properties ไปยังโฟลเดอร์ปัจจุบันและโฟลเดอร์ src/docker
ในขั้นตอนที่ 1.2.2 ไฟล์ application.properties จะถูกสร้างขึ้นโดยอัตโนมัติโดยสคริปต์ "คอมไพล์" นี่เป็นขั้นตอนสำคัญ หากไม่มีไฟล์ application.properties ที่สร้างขึ้น บริการจะไม่ทำงาน มีไฟล์คุณสมบัติแอปพลิเคชันที่สร้างไว้ล่วงหน้า
ขั้นตอนที่ 1.3 - วิ่ง
1.3.1 เริ่มบริการ
- run หรือ ./run (รันใน Linux หรือ Mac OS)
- run prod (เพื่อรันโปรไฟล์การผลิต ค่าเริ่มต้นคือโปรไฟล์ dev)
- mvn spring-boot:run (ทุกแพลตฟอร์ม - โปรไฟล์ dev H2 ฐานข้อมูลในหน่วยความจำ)
- mvn spring-boot:run -Dspring-boot.run.profiles=prod (ทุกแพลตฟอร์ม - โปรไฟล์ prod PostgreSQL DB)
1.3.2 ทดสอบบริการ
- ทดสอบหรือ ./test (รันใน Linux หรือ Mac OS)
- ดำเนินการคำสั่ง curl โดยตรง (จากสคริปต์ทดสอบ)
โมเดลการแชท
- OpenAI (มีตัวอย่าง)
- Ollama - รันโมเดล AI บนเครื่องของคุณ (มีตัวอย่าง)
- เอซูร์ โอเพ่น เอไอ
- อเมซอน ข้อเท็จจริง
- คำสั่งของ Cohere
- Jurassic-2 ของ AI21 Labs
- ลามะของเมตา 2
- ไททันแห่งอเมซอน
- Google Vertex AI ปาล์ม
- Google ราศีเมถุน
- HuggingFace - เข้าถึงโมเดลนับพัน รวมถึงโมเดลจาก Meta เช่น Llama2
- มิสทรัลเอไอ
โมเดลข้อความเป็นรูปภาพ
- OpenAI พร้อม DALL-E (มีตัวอย่าง)
- ความเสถียรAI
แบบจำลองการถอดเสียง (เสียงเป็นข้อความ)
การฝังโมเดล
- OpenAI
- โอลามา
- อาซัวร์ โอเพ่นเอไอ
- สสส
- โพสต์เกรส ML
- ข้อมูลพื้นฐานร่วมที่นี่
- เบดร็อกไททัน
- Google VertexAI
- มิสทัล เอไอ
Vector Store API มอบความสามารถในการพกพาผ่านผู้ให้บริการต่างๆ โดยมี API การกรองเมตาดาต้าที่คล้ายกับ SQL แบบใหม่ที่รักษาความสามารถในการพกพา
ฐานข้อมูลเวกเตอร์
- การค้นหาเวกเตอร์ Azure
- โครมา
- มิลวัส
- นีโอ4เจ
- PostgreSQL/PGVector
- ไพน์โคน
- เรดิส
- วีเวียต
- คิวดรานท์
รุ่นที่รองรับได้แก่
- OpenAI
- อาซัวร์ โอเพ่นเอไอ
- VertexAI
- มิสทรัล เอไอ
ชำระเงินตัวอย่างการดำเนินการ CRUD
- การตั้งค่าบุรุษไปรษณีย์ด้วย REST Endpoints สำหรับการทดสอบ
- ตัวอย่าง CRUD
- ตัวอย่างโทเค็น JWT
ตรวจสอบ CRUD_Examples.md
(C) ลิขสิทธิ์ 2024 : ใบอนุญาต Apache 2 : ผู้แต่ง: Araf Karsh Hamid
* ได้รับอนุญาตภายใต้ Apache License เวอร์ชัน 2.0 ("ใบอนุญาต");
* คุณไม่สามารถใช้ไฟล์นี้ได้เว้นแต่จะเป็นไปตามใบอนุญาต
* คุณสามารถขอรับสำเนาใบอนุญาตได้ที่
-
* http://www.apache.org/licenses/LICENSE-2.0
-
* เว้นแต่กฎหมายที่ใช้บังคับกำหนดไว้หรือตกลงเป็นลายลักษณ์อักษร ซอฟต์แวร์
* เผยแพร่ภายใต้ใบอนุญาตนั้นเผยแพร่ตาม "ตามสภาพ"
* โดยไม่มีการรับประกันหรือเงื่อนไขใด ๆ ทั้งโดยชัดแจ้งหรือโดยนัย
* ดูใบอนุญาตสำหรับภาษาเฉพาะที่ควบคุมการอนุญาตและ
* ข้อจำกัดภายใต้ใบอนุญาต