写点什么

LangChain Java-the Java implementation of LangChain

作者:HamaWhite
  • 2023-06-21
    浙江
  • 本文字数:3082 字

    阅读完需:约 10 分钟

https://github.com/HamaWhiteGG/langchain-java

1. What is this?

This is the Java language implementation of LangChain.


Large language models (LLMs) are emerging as a transformative technology, enabling developers to build applications that they previously could not. But using these LLMs in isolation is often not enough to create a truly powerful app - the real power comes when you can combine them with other sources of computation or knowledge.


This library is aimed at assisting in the development of those types of applications.


Looking for the Python version? Check out LangChain.

2. Quickstart Guide

This tutorial gives you a quick walkthrough about building an end-to-end language model application with LangChain.


View the Quickstart Guide on the LangChain official website.

2.1 Maven Repository

Prerequisites for building:


  • Java 17 or later

  • Unix-like environment (we use Linux, Mac OS X)

  • Maven (we recommend version 3.8.6 and require at least 3.5.4)


<dependency>    <groupId>io.github.hamawhitegg</groupId>    <artifactId>langchain-core</artifactId>    <version>0.1.6</version></dependency>
复制代码

2.2 Environment Setup

Using LangChain will usually require integrations with one or more model providers, data stores, apis, etc. For this example, we will be using OpenAI’s APIs.


We will then need to set the environment variable.


export OPENAI_API_KEY=xxx
# If a proxy is needed, set the OPENAI_PROXY environment variable.export OPENAI_PROXY=http://host:port
复制代码


If you want to set the API key and proxy dynamically, you can use the openaiApiKey and openaiProxy parameter when initiating OpenAI class.


var llm = OpenAI.builder()        .openaiApiKey("xxx")        .openaiProxy("http://host:port")        .build()        .init();
复制代码




The following test code can be used to view the QuickStart.java

2.3 LLMs: Get predictions from a language model

The most basic building block of LangChain is calling an LLM on some input. Let’s walk through a simple example of how to do this. For this purpose, let’s pretend we are building a service that generates a company name based on what the company makes.


var llm = OpenAI.builder()        .temperature(0.9f)        .build()        .init();
String text = "What would be a good company name for a company that makes colorful socks?";System.out.println(llm.call(text));
复制代码


Feetful of Fun
复制代码

2.4 Prompt Templates: Manage prompts for LLMs

Calling an LLM is a great first step, but it’s just the beginning. Normally when you use an LLM in an application, you are not sending user input directly to the LLM. Instead, you are probably taking user input and constructing a prompt, and then sending that to the LLM.


var prompt = new PromptTemplate(List.of("product"),        "What is a good name for a company that makes {product}?");
System.out.println(prompt.format(Map.of("product", "colorful socks")));
复制代码


What is a good name for a company that makes colorful socks?
复制代码

2.5 Chains: Combine LLMs and prompts in multi-step workflows

Up until now, we’ve worked with the PromptTemplate and LLM primitives by themselves. But of course, a real application is not just one primitive, but rather a combination of them.


A chain in LangChain is made up of links, which can be either primitives like LLMs or other chains.

2.5.1 LLM Chain

The most core type of chain is an LLMChain, which consists of a PromptTemplate and an LLM.


var llm = OpenAI.builder()        .temperature(0.9f)        .build()        .init();
var prompt = new PromptTemplate(List.of("product"), "What is a good name for a company that makes {product}?");
var chain = new LLMChain(llm, prompt);System.out.println(chain.run("colorful socks"));
复制代码


\n\nSocktastic!
复制代码

2.5.2 SQL Chain

This example demonstrates the use of the SQLDatabaseChain for answering questions over a database.


var database = SQLDatabase.fromUri("jdbc:mysql://127.0.0.1:3306/demo", "xxx", "xxx");
var llm = OpenAI.builder() .temperature(0) .build() .init();
var chain = SQLDatabaseChain.fromLLM(llm, database);System.out.println(chain.run("How many students are there?"));
复制代码


There are 6 students.
复制代码

2.6 Agents: Dynamically Call Chains Based on User Input

Agents no longer do: they use an LLM to determine which actions to take and in what order. An action can either be using a tool and observing its output, or returning to the user.


When used correctly agents can be extremely powerful. In this tutorial, we show you how to easily use agents through the simplest, highest level API.


Set the appropriate environment variables.


export SERPAPI_API_KEY=xxx
复制代码


Now we can get started!


var llm = OpenAI.builder()        .temperature(0)        .build()        .init();
// load some tools to use.var tools = loadTools(List.of("serpapi", "llm-math"), llm);
// initialize an agent with the tools, the language model, and the type of agentvar agent = initializeAgent(tools, llm, AgentType.ZERO_SHOT_REACT_DESCRIPTION);
// let's test it out!String text = "What was the high temperature in SF yesterday in Fahrenheit? What is that number raised to the .023 power?";System.out.println(agent.run(text));
复制代码


I need to find the temperature first, then use the calculator to raise it to the .023 power.
Action: SearchAction Input: "High temperature in SF yesterday"Observation: San Francisco Weather History for the Previous 24 Hours ; 60 °F · 60 °F · 61 °F ...
Thought: I now have the temperature, so I can use the calculator to raise it to the .023 power.Action: CalculatorAction Input: 60^.023Observation: Answer: 1.09874643447
Thought: I now know the final answerFinal Answer: 1.09874643447
1.09874643447
复制代码

3. Run Test Cases from Source

git clone https://github.com/HamaWhiteGG/langchain-java.gitcd langchain-java
# export JAVA_HOME=JDK17_INSTALL_HOME && mvn clean testmvn clean test
复制代码

4. Apply Spotless

cd langchain-java
# export JAVA_HOME=JDK17_INSTALL_HOME && mvn spotless:applymvn spotless:apply
复制代码

5. Support

Don’t hesitate to ask!


Open an issue if you find a bug in Flink.

6. Fork and Contribute

This is an active open-source project. We are always open to people who want to use the system or contribute to it.


Contact me if you are looking for implementation tasks that fit your skills.


发布于: 刚刚阅读数: 2
用户头像

HamaWhite

关注

还未添加个人签名 2018-01-13 加入

专注分享Flink、Hadoop、Spark等大数据及AI技术,爱好原创

评论

发布
暂无评论
LangChain Java-the Java implementation of LangChain_openai_HamaWhite_InfoQ写作社区