🦜️ LangChain Java
LangChain的Java版本,同时为大数据赋能LLM。
它作为一座桥梁,连接大数据领域与LLM世界,主要应用于Java技术栈。
如果您感兴趣,可以添加我的微信:HamaWhite,或发送邮件至我的邮箱。
1. 这是什么?
这是LangChain的Java语言实现,旨在使开发基于LLM的应用程序变得尽可能简单。
以下是langchain-example中的示例。
2. 集成
2.1 LLMs
2.2 向量存储
3. 快速入门指南
API文档可在以下链接获取:
https://hamawhitegg.github.io/langchain-java
3.1 Maven仓库
构建prerequisites:
- Java 17或更高版本
- 类Unix环境(我们使用Linux、Mac OS X)
- Maven(我们推荐3.8.6版本,至少需要3.5.4版本)
<dependency>
<groupId>io.github.hamawhitegg</groupId>
<artifactId>langchain-core</artifactId>
<version>0.2.1</version>
</dependency>
3.2 环境设置
使用LangChain通常需要与一个或多个模型提供商、数据存储、API等进行集成。 在本例中,我们将使用OpenAI的API。
然后,我们需要设置环境变量。
export OPENAI_API_KEY=xxx
# 如果需要代理,请设置OPENAI_PROXY环境变量。
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();
3.3 LLMs
从语言模型获取预测。LangChain的基本构建块是LLM,它接收文本并生成更多文本。
var llm = OpenAI.builder()
.temperature(0.9f)
.build()
.init();
var result = llm.predict("为一家生产彩色袜子的公司想一个好名字?");
print(result);
现在我们可以输入文本并获得预测!
欢乐足间
3.4 聊天模型
聊天模型是语言模型的一种变体。虽然聊天模型在底层使用语言模型,但它们暴露的接口略有不同:它们不是暴露"文本输入,文本输出"的API,而是暴露一个接口,其中"聊天消息"是输入和输出。
var chat = ChatOpenAI.builder()
.temperature(0)
.build()
.init();
var result = chat.predictMessages(List.of(new HumanMessage("将这句话从英语翻译成法语。I love programming.")));
println(result);
AIMessage{content='J'adore la programmation.', additionalKwargs={}}
了解聊天模型与普通LLM的区别很有用,但通常能够以相同的方式与它们交互会更方便。LangChain通过暴露一个接口使这变得简单,您可以像与普通LLM交互一样与聊天模型交互。您可以通过predict
接口访问这个功能。
var output = chat.predict("将这句话从英语翻译成法语。I love programming.");
println(output);
J'adore la programmation.
3.5 链
现在我们有了模型和提示模板,我们会想要将两者结合起来。链给了我们一种方式来链接多个原语,如模型、提示和其他链。
3.5.1 LLMs
最简单和最常见的链类型是LLMChain,它首先将输入传递给PromptTemplate,然后传递给LLM。我们可以从现有的模型和提示模板构建一个LLM链。
var prompt = PromptTemplate.fromTemplate("为一家生产{product}的公司想一个好名字?");
var chain = new LLMChain(llm, prompt);
var result = chain.run("彩色袜子");
println(result);
欢乐足间
3.5.2 聊天模型
LLMChain
也可以与聊天模型一起使用:
var template = "你是一个有帮助的助手,可以将{input_language}翻译成{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", "英语", "output_language", "法语", "text", "I love programming."));
println(result);
J'adore la programmation.
3.5.1 SQL链示例
LLMs使得使用自然语言与SQL数据库交互成为可能,LangChain提供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("有多少名学生?");
println(result);
result = chain.run("谁的得分为零?显示她父母的联系信息。");
println(result);
有6名学生。
得分为零的学生的家长是Tracy,他们的联系信息是088124。
可用的语言如下。
语言 | 值 |
---|---|
英语(默认) | en_US |
葡萄牙语(巴西) | pt_BR |
如果您想选择英语以外的其他语言,只需在主机上设置环境变量。如果未设置,则en-US将为默认值
export USE_LANGUAGE=pt_BR
3.6 代理
我们的第一个链运行了预定的步骤序列。为了处理复杂的工作流程,我们需要能够根据输入动态选择行动。
代理正是做这个的:它们使用语言模型来决定采取哪些行动以及以什么顺序。代理可以使用工具,它们重复选择工具、运行工具并观察输出,直到得出最终答案。
设置适当的环境变量。
export SERPAPI_API_KEY=xxx
3.6.1 Google搜索代理示例
通过使用搜索和计算器工具来增强OpenAI的知识(超越2021年)和计算能力。
// 'llm-math'工具使用LLM
var tools = loadTools(List.of("serpapi", "llm-math"), llm);
var agent = initializeAgent(tools, chat, AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION);
var query = "有多少个国家和地区参加了2023年杭州亚运会?" +
"将这个数字提高到0.023次方是多少?";
agent.run(query);
4. 从源代码运行测试用例
git clone https://github.com/HamaWhiteGG/langchain-java.git
cd langchain-java
# export JAVA_HOME=JDK17_INSTALL_HOME && mvn clean test
mvn clean test
这个项目使用Spotless来格式化代码。如果您进行了任何修改,请记得使用以下命令格式化代码。
# export JAVA_HOME=JDK17_INSTALL_HOME && mvn spotless:apply
mvn spotless:apply
5. 支持
不要犹豫,尽管问!
如果您在langchain-java中发现bug,请提出issue。
6. 赞赏
如果项目对您有帮助,您可以请我喝杯咖啡。
这是微信赞赏码。