Java版本的Langchain,同時為BigData授權LLM。
它是通往大數據域內LLM領域的橋樑,主要是在Java堆棧中。
如果您有興趣,可以在微信上添加我:Hamawhite,或發送電子郵件給我。
這是Langchain的Java語言實現,這使得開發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類時使用Openaiaiapikey和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.
LLMS使使用自然語言與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
通過使用搜索和計算器工具來增強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中找到錯誤,請打開問題。
如果該項目對您有所幫助,您可以將我送到一杯咖啡中。
這是微信升值代碼。