Gen Ai - Springboot / Langchain4J 예제
제너레이티브 AI(Generative AI)는 입력 데이터를 기반으로 새로운 콘텐츠를 생성할 수 있는 인공지능의 하위 집합을 말한다. 여기에는 텍스트, 이미지, 음악, 심지어 비디오까지 만들 수 있는 모델이 포함됩니다. 생성 AI의 예로는 각각 텍스트 설명에서 인간과 유사한 텍스트와 이미지를 생성할 수 있는 OpenAI의 GPT-3 및 DALL-E와 같은 언어 모델이 있습니다.
생성적 AI 모델은 일반적으로 방대한 데이터 세트에서 교육을 받고 딥 러닝 기술을 사용하여 데이터의 패턴과 구조를 학습합니다. 다음을 포함하여 광범위한 응용 분야가 있습니다.
- 자연어 처리(NLP): 챗봇, 번역, 콘텐츠 생성을 위해 인간과 유사한 텍스트를 생성합니다.
- 창작 예술: 예술 작품, 음악, 디자인 요소 만들기.
- 데이터 증강: 다른 기계 학습 모델을 훈련하기 위한 추가 데이터를 생성합니다.
- 의료: 의료 영상을 지원하고 맞춤형 치료 계획을 수립합니다.
LangChain4J Gen AI API가 개발자가 Spring Boot AI 앱을 구축하는 데 어떻게 도움이 됩니까?
LangChain4J는 Spring Boot로 구축된 애플리케이션을 포함하여 대규모 언어 모델(LLM) 및 AI 기능을 Java 애플리케이션에 통합하는 작업을 단순화하도록 설계된 Java 라이브러리입니다. 개발자에게 도움이 되는 방법은 다음과 같습니다.
- LLM용 통합 API: LangChain4J는 OpenAI 및 Google Vertex AI와 같은 여러 LLM 공급자를 지원하는 통합 API를 제공합니다. 이 추상화를 통해 개발자는 코드베이스를 크게 변경하지 않고도 다양한 LLM 간에 전환할 수 있습니다.
- Embedding Store Integration: 다양한 Embedding Store와 통합되어 벡터화된 데이터를 효율적으로 처리할 수 있습니다. 이는 AI 응답을 향상시키기 위해 지식 기반에서 관련 정보를 가져오는 RAG(검색 증강 생성) 작업에 특히 유용합니다.
- 기능 도구 상자: 라이브러리에는 프롬프트 템플릿 작성, 메모리 관리 및 출력 구문 분석을 위한 포괄적인 도구 세트가 포함되어 있습니다. 이러한 도구는 높은 수준의 추상화와 즉시 사용 가능한 구성 요소를 제공하여 복잡한 AI 애플리케이션을 구축하는 데 도움이 됩니다.
- Spring Boot 통합: LangChain4J는 Spring Boot를 지원하므로 개발자가 강력하고 확장 가능한 AI 애플리케이션을 더 쉽게 만들 수 있습니다. 통합을 통해 Spring의 종속성 주입 및 구성 관리 기능을 활용하여 AI 서비스를 Spring Boot 애플리케이션에 원활하게 통합할 수 있습니다.
- 예제 및 문서화: LangChain4J는 광범위한 문서와 예제를 제공하여 개발자에게 다양한 사용 사례를 안내하고 애플리케이션에서 AI 기반 기능을 구현하는 방법을 보여줍니다.
사례 연구: 건강 관리 앱 - Gen Ai 지원 진단 마이크로서비스
Gen AI 예제: 엔터프라이즈 기능에 대한 8개 LLM(3개 클라우드 기반 및 5개 로컬) 비교
다음 비교는 LangChain4J API(OpenAI ChatGPT에서 지원)에서 사용할 수 있는 기능을 기반으로 합니다. 이러한 기능은 Gen AI 기반 엔터프라이즈 앱 개발에 필수적입니다.
# | 예 | GPT 4o | 메타라마3 | 미스트랄 | 마이크로소프트 파이-3 | 구글 젬마 | TII 팔콘 2 | 클로드 3 | 제미니 1.5 |
---|
1. | 안녕하세요 세계 | ? | ? | ? | ? | ? | ? | ? | ? |
2. | 복잡한 세계 | ? | ? | ? M1 | ? | ? | ? | ? | ? |
3. | 맞춤 데이터 | ? | ? | ? | ? | ? | ? F1 | ? | ? |
4. | 이미지 생성 | ? | ? L1 | ? M2 | ? P1 | ? | ? F2 | ? | ? |
5. | 프롬프트 템플릿 | ? | ? | ? M3 | ? | ? | ? | ? | ? |
6. | 도구 | ? | ? L2 | ? M4 | ? P2 | ? G1 | ? F3 | ? | ? G1 |
7. | 채팅 메모리 | ? | ? | ? | ? P3 | ? G2 | ? | ? | ? G2 |
8. | 퓨샷 | ? | ? | ? M5 | ? | ? | ? | ? | ? G3 |
9. | 언어 번역기 | ? | ? | ? M6 | ? | ? | ? | ? | ? |
10. | 감정 분석기 | ? | ? | ? | ? | ? | ? | ? | ? |
11. | 데이터 추출기 | ? O1 | ? L3 | ? M7 | ? P4 | ? G3 | ? F4 | ? | ? G4 |
12. | 영구 저장소 | ? | ? | ? M8 | ? P5 | ? G4 | ? | ? | ? |
8개 LLM의 검색 증강 생성(RAG) 예
# | 예 | GPT 4o | 메타라마3 | 미스트랄 | 마이크로소프트 파이-3 | 구글 젬마 | TII 팔콘 2 | 클로드 3 | 제미니 1.5 |
---|
51. | 단순한 | ? | ? | ? | ? | ? | ? | ? | ? |
52. | 세그먼트 | ? | ? | ? | ? | ? | ? | ? | ? |
53. | 쿼리 변환기 | ? | ? | ? | ? | ? | ? | ? | ? |
54. | 쿼리 라우터 | ? | ? L4 | ? M9 | ? P6 | ? G4 | ? F5 | ? | ? G5 |
55. | 재순위 | ? | ? | ? | ? | ? | ? | ? | ? |
56. | 메타데이터 | ? | ? | ? | ? | ? | ? | ? | ? |
57. | 다중 콘텐츠 검색기 | ? | ? | ? | ? | ? | ? | ? | ? |
58. | 콘텐츠 검색 건너뛰기 | ? | ? | ? | ? | ? | ? | ? | ? |
59. | 건강 관리 앱 | ? | ? | ? | ? | ? | ? | ? | ? |
엔터프라이즈 기능을 기반으로 한 최고의 LLM 순위
# | 계급 | 회사 | 법학대학원 | 점수 | 범주 |
---|
1 | 1 | 인류학 | 클로드 3 하이쿠 | 21/21 | 구름 |
2 | 2 | 개방형 AI | GPT 4o 채팅 | 20/21 | 구름 |
3 | 3 | 메타 | 라마 3 | 17/21 | 현지의 |
4 | 4 | TII | 팔콘 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은 5,000억 개 이상의 매개변수를 지원하는 반면, 로컬 LLM은 대부분 80억 개의 매개변수를 기반으로 합니다.
테스트 점수에 대한 자세한 내용을 확인하세요
로컬 LLM 설치
Ollama를 사용하여 로컬 LLM을 설치하려면
- 메타라마3
- 구글 젬마
- 마이크로소프트 PHI-3
- TII 팔콘 2
- 미스트랄
- 마법사 수학
설치 가이드를 확인하세요.
클라우드 LLM 테스트를 위한 키 받기
API 키를 받으려면 등록하세요
- 개방형 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)
- Rapid - (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
- 컨트롤러(예제 테스트를 위한 나머지 엔드포인트)
- 핵심
- 어시스턴트 (LangChain4J AiService 기반)
- 모델(코드에 사용되는 데이터 모델)
- 프롬프트(특정 출력을 갖는 구조화된 프롬프트)
- 서비스(모든 예에서 재사용되는 LLM 특정 비즈니스 로직.)
- 도구(LLM 검색을 기반으로 호출되는 기능)
- 예(Claude 3, Falcon 2, GPT 4o, Gemini, Gemma, Llama3, Mistral, Phi-3, Wizard Math)
- utils(ChatLanguageModel 및 구성, API 키 및 콘솔 실행기를 생성하는 일반 코드)
코드 구조
SpringBoot 앱 시작 후 빠른 테스트
ChatGPT 4o를 이용한 감성 분석
ChatGPT 4o를 사용한 콘텐츠 조정
RAG(사용자 정의 데이터)를 사용하는 ChatBot - 사례 연구: 자동차 렌탈 서비스
RAG 아키텍처
RAG(검색 증강 생성)는 권위 있는 외부 지식 기반을 통합하여 LLM(대형 언어 모델)의 출력을 향상시킵니다. LLM은 방대한 데이터세트에 대해 교육을 받고 수십억 개의 매개변수를 활용하여 질문 답변, 언어 번역, 텍스트 완성과 같은 작업에 대한 응답을 생성하는 반면, RAG는 모델 교육 데이터 이외의 특정 최신 정보 소스를 참조하여 이러한 출력을 최적화합니다. 이 프로세스는 LLM의 기능을 크게 확장하여 모델 재교육 없이 전문 영역이나 조직의 내부 지식을 충족시킵니다. 결과적으로 RAG는 생성된 콘텐츠가 관련성 있고 정확하며 상황에 맞게 적절하게 유지되도록 보장하는 비용 효율적인 솔루션을 제공합니다.
LLM(대형 언어 모델)은 다음과 같은 몇 가지 과제에 직면해 있습니다.
- 정답이 없을 경우 잘못된 정보를 제공할 수도 있습니다.
- 사용자가 구체적이고 현재의 응답을 기대하는 경우 오래되었거나 일반적인 정보를 전달할 수 있습니다.
- 신뢰할 수 없는 소스를 기반으로 응답을 생성할 수도 있습니다.
- 서로 다른 교육 소스가 서로 다른 개념을 설명하기 위해 동일한 용어를 사용하는 경우 용어 혼란으로 인해 부정확한 응답이 생성될 수 있습니다.
RAG(검색 증강 생성)는 모델이 권위 있고 미리 결정된 지식 소스에서 관련 정보를 가져오도록 지시하여 LLM과 관련된 여러 가지 문제를 해결합니다. 이 접근 방식을 통해 조직은 모델에서 생성된 콘텐츠에 대해 더 많은 제어권을 행사하여 정확성과 관련성을 보장할 수 있습니다. 또한 LLM이 응답을 공식화하는 데 사용하는 소스와 프로세스에 대한 보다 명확한 통찰력을 사용자에게 제공합니다.
(사용자 정의 데이터) 자동차 렌탈 서비스 계약과 함께 LLM을 사용한 대화
ChatGPT 4o를 사용한 데이터 추출
LangChain4J는 두 가지 추상화 수준에서 작동합니다.
- 낮은 수준. 이 수준에서는 ChatLanguageModel, UserMessage, AiMessage, EmbeddingStore, Embedding 등과 같은 모든 하위 수준 구성 요소에 가장 자유롭게 액세스할 수 있습니다. 이는 LLM 기반 응용 프로그램의 "기본 요소"입니다. 이들을 결합하는 방법을 완전히 제어할 수 있지만 더 많은 글루 코드를 작성해야 합니다.
- 높은 수준. 이 수준에서는 모든 복잡성과 상용구를 숨기는 AiServices 및 체인과 같은 고급 API를 사용하여 LLM과 상호 작용합니다. 동작을 조정하고 미세 조정할 수 있는 유연성은 여전히 있지만 선언적 방식으로 수행됩니다.
더 읽어보세요... LangChain4J 소개
패키지 구조
사전 요구 사항
- 스프링부트 3.2.4
- 자바 22
- 자카르타 EE 10(jakarta.servlet. , jakarta.persistence. , javax.validation.*)
- PostgreSQL 데이터베이스 14
- 올라마 0.1.38
기본적으로 앱은 H2 In-Memory 데이터베이스를 사용합니다. 이를 위해 데이터베이스 설정이 필요하지 않습니다.
1.1단계 - 시작하기
- 자식 클론 https://github.com/arafkarsh/ms-springboot-324-ai.git
- CD ms-springboot-324-ai
- CD 데이터베이스
- 데이터베이스(PostgreSQL 데이터베이스)를 설정하려면 README.md를 읽어보세요.
- 기본적으로(개발자 모드) 앱은 메모리 내 H2 데이터베이스를 사용합니다.
1.2단계 - 컴파일(코드가 준비되면)
1.2.1 코드 컴파일
ms-springboot-324-ai에서 "컴파일"을 실행하세요.
- compile OR ./compile (Linux 및 Mac OS에서 실행)
- mvn 청소; mvn -e 패키지; (모든 플랫폼)
- IDE 컴파일 옵션 사용
1.2.2 "컴파일" 스크립트가 수행하는 작업
- 대상 폴더 정리
- 빌드번호를 생성합니다. 및 빌드 날짜(application.properties 백업 필요)
- 최종 출력 SpringBoot fat jar 및 maven Thin jar 빌드
- jar 파일(및 종속성)을 src/docker 폴더에 복사합니다.
- application.properties 파일을 현재 폴더와 src/docker 폴더에 복사합니다.
1.2.2단계에서는 application.properties 파일이 "컴파일" 스크립트에 의해 자동 생성됩니다. 이것은 중요한 단계입니다. 생성된 application.properties 파일이 없으면 서비스가 실행되지 않습니다. 사전 빌드된 애플리케이션 속성 파일이 있습니다.
1.3단계 - 실행
1.3.1 서비스 시작
- run 또는 ./run(Linux 또는 Mac OS에서 실행)
- prod 실행(프로덕션 프로필을 실행하려면 기본값은 dev 프로필입니다)
- mvn spring-boot:run (모든 플랫폼 - 프로필 개발 H2 인 메모리 데이터베이스)
- mvn spring-boot:run -Dspring-boot.run.profiles=prod (모든 플랫폼 - 프로필 prod PostgreSQL DB)
1.3.2 서비스 테스트
- test OR ./test(Linux 또는 Mac OS에서 실행)
- (테스트 스크립트에서) 컬 명령을 직접 실행하십시오.
채팅 모델
- OpenAI(사용 가능한 예시)
- Ollama - 로컬 머신에서 AI 모델 실행(예제 사용 가능)
- Azure 개방형 AI
- 아마존 기반암
- 코히어의 명령
- AI21 연구소의 Jurassic-2
- 메타의 라마 2
- 아마존의 타이탄
- Google Vertex AI Palm
- 구글 제미니
- HuggingFace - Llama2와 같은 Meta 모델을 포함하여 수천 개의 모델에 액세스
- 미스트랄AI
텍스트-이미지 모델
- DALL-E를 사용한 OpenAI(사용 가능한 예시)
- 안정성AI
전사(오디오를 텍스트로) 모델
모델 임베딩
- 오픈AI
- 올라마
- Azure OpenAI
- ONNX
- 포스트그레스ML
- 베드록 코히어
- 기반암 타이탄
- 구글 버텍스AI
- 미스탈 AI
Vector Store API는 이식성을 유지하는 새로운 SQL과 유사한 메타데이터 필터링 API를 특징으로 하여 다양한 공급자 간에 이식성을 제공합니다.
벡터 데이터베이스
- Azure 벡터 검색
- 크로마
- 밀부스
- 네오4j
- PostgreSQL/PG벡터
- 솔방울
- 레디스
- 위비에이트
- Qdrant
지원되는 모델은 다음과 같습니다.
- 오픈AI
- Azure OpenAI
- VertexAI
- 미스트랄 AI
CRUD 작업 예제를 확인하세요
- 테스트를 위해 REST 끝점으로 Postman 설정
- CRUD 예
- JWT 토큰 예시
CRUD_Examples.md를 확인하세요.
(C) 저작권 2024 : Apache 2 라이센스 : 저자: Araf Karsh Hamid
* Apache 라이센스 버전 2.0("라이센스")에 따라 라이센스가 부여됩니다.
* 라이센스를 준수하는 경우를 제외하고는 이 파일을 사용할 수 없습니다.
* 라이센스 사본은 다음에서 얻을 수 있습니다.
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* 해당 법률에서 요구하거나 서면으로 동의하지 않는 한, 소프트웨어는
* 라이센스에 따라 배포되는 것은 "있는 그대로" 기반으로 배포됩니다.
* 명시적이든 묵시적이든 어떠한 종류의 보증이나 조건도 없습니다.
* 권한 및 권한을 관리하는 특정 언어는 라이센스를 참조하세요.
* 라이센스에 따른 제한 사항.