Langchain의 Java 버전, BigData의 LLM에 권한을 부여합니다.
그것은 주로 Java 스택에서 빅 데이터 도메인 내에서 LLM 영역의 다리 역할을합니다.
관심이 있으시면 Wechat : Hamawhite에 나를 추가하거나 이메일을 보내주십시오.
이것은 Langchain의 Java Language 구현으로 LLM 기반 응용 프로그램을 개발하기가 쉽습니다.
Langchain-example의 다음 예.
API 문서는 다음 링크에서 확인할 수 있습니다.
https://hamawhitegg.github.io/langchain-java
건축 전제 조건 :
< dependency >
< groupId >io.github.hamawhitegg</ groupId >
< artifactId >langchain-core</ artifactId >
< version >0.2.1</ version >
</ dependency >
Langchain을 사용하면 일반적으로 하나 이상의 모델 제공 업체, 데이터 스토어, API 등과의 통합이 필요합니다.이 예에서는 OpenAI의 API를 사용합니다.
그런 다음 환경 변수를 설정해야합니다.
export OPENAI_API_KEY=xxx
# If a proxy is needed, set the OPENAI_PROXY environment variable.
export OPENAI_PROXY=http://host:port
API 키와 프록시를 동적으로 설정하려면 OpenAI 클래스를 시작할 때 OpenAiaPikey 및 OpenAiproxy 매개 변수를 사용할 수 있습니다.
var llm = OpenAI . builder ()
. openaiOrganization ( "xxx" )
. openaiApiKey ( "xxx" )
. openaiProxy ( "http://host:port" )
. requestTimeout ( 16 )
. build ()
. init ();
언어 모델에서 예측을 받으십시오. Langchain의 기본 빌딩 블록은 LLM으로 텍스트를 취하고 더 많은 텍스트를 생성합니다.
Openai 예제
var llm = OpenAI . builder ()
. temperature ( 0.9f )
. build ()
. init ();
var result = llm . predict ( "What would be a good company name for a company that makes colorful socks?" );
print ( result );
그리고 이제 우리는 텍스트를 전달하고 예측을 얻을 수 있습니다!
Feetful of Fun
채팅 모델은 언어 모델의 변형입니다. 채팅 모델은 후드 아래에서 언어 모델을 사용하지만 노출 된 인터페이스는 약간 다릅니다. "텍스트 인, 텍스트 아웃"API를 노출시키기보다는 "채팅 메시지"가 입력 및 출력 인 인터페이스를 노출시킵니다.
Openai 채팅 예제
var chat = ChatOpenAI . builder ()
. temperature ( 0 )
. build ()
. init ();
var result = chat . predictMessages ( List . of ( new HumanMessage ( "Translate this sentence from English to French. I love programming." )));
println ( result );
AIMessage{content= ' J ' adore la programmation. ' , additionalKwargs={}}
채팅 모델이 일반 LLM과 어떻게 다른지 이해하는 것이 유용하지만, 동일하게 처리 할 수있는 경우가 종종 있습니다. Langchain은 일반 LLM과 마찬가지로 채팅 모델과 상호 작용할 수있는 인터페이스를 노출시켜 쉽게 만들어줍니다. predict
인터페이스를 통해 이에 액세스 할 수 있습니다.
var output = chat . predict ( "Translate this sentence from English to French. I love programming." );
println ( output );
J ' adore la programmation.
이제 모델과 프롬프트 템플릿이 생겼으므로 두 가지를 결합하려고합니다. 체인은 우리에게 모델, 프롬프트 및 기타 체인과 같은 여러 가지 프리미티브를 연결하는 방법을 제공합니다.
가장 단순하고 가장 일반적인 유형의 체인은 LLMchain으로, 입력을 먼저 프롬프트 플레이트로 전달한 다음 LLM으로 전달합니다. 기존 모델과 프롬프트 템플릿에서 LLM 체인을 구성 할 수 있습니다.
LLM 체인 예제
var prompt = PromptTemplate . fromTemplate ( "What is a good name for a company that makes {product}?" );
var chain = new LLMChain ( llm , prompt );
var result = chain . run ( "colorful socks" );
println ( result );
Feetful of Fun
LLMChain
은 채팅 모델과 함께 사용할 수 있습니다.
LLM 채팅 체인 예제
var template = "You are a helpful assistant that translates {input_language} to {output_language}." ;
var systemMessagePrompt = SystemMessagePromptTemplate . fromTemplate ( template );
var humanMessagePrompt = HumanMessagePromptTemplate . fromTemplate ( "{text}" );
var chatPrompt = ChatPromptTemplate . fromMessages ( List . of ( systemMessagePrompt , humanMessagePrompt ));
var chain = new LLMChain ( chat , chatPrompt );
var result = chain . run ( Map . of ( "input_language" , "English" , "output_language" , "French" , "text" , "I love programming." ));
println ( result );
J ' adore la programmation.
LLM을 사용하면 자연어를 사용하여 SQL 데이터베이스와 상호 작용할 수 있으며 Langchain은 자연어 프롬프트를 기반으로 SQL 쿼리를 구축하고 실행하기위한 SQL 체인을 제공합니다.
SQL 체인 예
var database = SQLDatabase . fromUri ( "jdbc:mysql://127.0.0.1:3306/demo" , "xxx" , "xxx" );
var chain = SQLDatabaseChain . fromLLM ( llm , database );
var result = chain . run ( "How many students are there?" );
println ( result );
result = chain . run ( "Who got zero score? Show me her parent's contact information." );
println ( result );
There are 6 students.
The parent of the student who got zero score is Tracy and their contact information is 088124.
사용 가능한 언어는 다음과 같습니다.
언어 | 값 |
---|---|
영어 (기본값) | en_us |
포르투갈어 (브라질) | PT_BR |
영어 대신 다른 언어를 선택하려면 호스트에서 환경 변수를 설정하십시오. 설정하지 않으면 EN-US가 기본값이됩니다
export USE_LANGUAGE=pt_BR
우리의 첫 번째 체인은 사전 결정된 일련의 단계를 실행했습니다. 복잡한 워크 플로를 처리하려면 입력에 따라 동작을 동적으로 선택할 수 있어야합니다.
에이전트는이 작업을 수행합니다. 언어 모델을 사용하여 어떤 조치를 취해야하는지, 순서대로 결정합니다. 에이전트는 도구에 대한 액세스 권한이 부여되며 도구를 반복적으로 선택하고 도구를 실행하며 최종 답변이 나올 때까지 출력을 관찰합니다.
적절한 환경 변수를 설정하십시오.
export SERPAPI_API_KEY=xxx
검색 및 계산기 도구를 사용하여 2021 년 이후의 OpenAi의 지식과 계산 능력을 강화합니다.
Google 검색 에이전트 예제
// the 'llm-math' tool uses an LLM
var tools = loadTools ( List . of ( "serpapi" , "llm-math" ), llm );
var agent = initializeAgent ( tools , chat , AgentType . CHAT_ZERO_SHOT_REACT_DESCRIPTION );
var query = "How many countries and regions participated in the 2023 Hangzhou Asian Games?" +
"What is that number raised to the .023 power?" ;
agent . run ( query );
git clone https://github.com/HamaWhiteGG/langchain-java.git
cd langchain-java
# export JAVA_HOME=JDK17_INSTALL_HOME && mvn clean test
mvn clean test
이 프로젝트는 흠이없는 것을 사용하여 코드를 형식화합니다. 수정이 있으면 다음 명령을 사용하여 코드를 포맷해야합니다.
# export JAVA_HOME=JDK17_INSTALL_HOME && mvn spotless:apply
mvn spotless:apply
주저하지 말고 물어보십시오!
Langchain-Java에서 버그를 찾으면 문제를 엽니 다.
프로젝트가 도움이된다면 커피 한 잔으로 나를 대할 수 있습니다.
이것은 WeChat 감사 코드입니다.