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中找到错误,请打开问题。
如果该项目对您有所帮助,您可以将我送到一杯咖啡中。
这是微信升值代码。