Versión Java de Langchain, mientras empodera a LLM para BigData.
Sirve como un puente para el reino de LLM dentro del dominio de Big Data, principalmente en la pila de Java.
Si está interesado, puede agregarme en WeChat: Hamawhite o enviarme un correo electrónico.
Esta es la implementación del lenguaje Java de Langchain, que hace que sea lo más fácil posible desarrollar aplicaciones con motor LLM.
El siguiente ejemplo en el ejemplo de langchain.
La documentación de la API está disponible en el siguiente enlace:
https://hamawhitegg.github.io/langchain-java
Prerrequisitos para la construcción:
< dependency >
< groupId >io.github.hamawhitegg</ groupId >
< artifactId >langchain-core</ artifactId >
< version >0.2.1</ version >
</ dependency >
El uso de Langchain generalmente requerirá integraciones con uno o más proveedores de modelos, tiendas de datos, API, etc. Para este ejemplo, utilizaremos las API de OpenAI.
Luego necesitaremos establecer la variable de entorno.
export OPENAI_API_KEY=xxx
# If a proxy is needed, set the OPENAI_PROXY environment variable.
export OPENAI_PROXY=http://host:port
Si desea establecer la tecla API y el proxy dinámicamente, puede usar el parámetro OpenAiaPikey y OpenAiproxy al iniciar la clase OpenAI.
var llm = OpenAI . builder ()
. openaiOrganization ( "xxx" )
. openaiApiKey ( "xxx" )
. openaiProxy ( "http://host:port" )
. requestTimeout ( 16 )
. build ()
. init ();
Obtenga predicciones de un modelo de idioma. El componente básico de Langchain es el LLM, que toma texto y genera más texto.
Ejemplo de 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 );
¡Y ahora podemos pasar por texto y obtener predicciones!
Feetful of Fun
Los modelos de chat son una variación en los modelos de idiomas. Si bien los modelos de chat usan modelos de idioma debajo del capó, la interfaz que exponen es un poco diferente: en lugar de exponer una API de "texto en, enviar mensajes de texto", exponen una interfaz donde los "mensajes de chat" son las entradas y salidas.
Ejemplo de chat de 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={}}
Es útil comprender cómo los modelos de chat son diferentes de un LLM normal, pero a menudo puede ser útil poder tratarlos igual. Langchain lo facilita al exponer una interfaz a través de la cual puede interactuar con un modelo de chat como lo haría con un LLM normal. Puede acceder a esto a través de la interfaz predict
.
var output = chat . predict ( "Translate this sentence from English to French. I love programming." );
println ( output );
J ' adore la programmation.
Ahora que tenemos un modelo y una plantilla rápida, queremos combinar los dos. Las cadenas nos dan una forma de unir (o encadenar) múltiples primitivas, como modelos, indicaciones y otras cadenas.
El tipo de cadena más simple y más común es una LLMCHAIN, que pasa primero una entrada a una placa de apuración y luego a un LLM. Podemos construir una cadena LLM a partir de nuestro modelo y plantilla de inmediato existentes.
Ejemplo de cadena 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
La LLMChain
también se puede usar con modelos de chat:
Ejemplo de cadena de chat de 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.
Los LLM permiten interactuar con bases de datos SQL utilizando lenguaje natural, y Langchain ofrece cadenas SQL para construir y ejecutar consultas SQL en función de las indicaciones de lenguaje natural.
Ejemplo de cadena 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.
Los idiomas disponibles son los siguientes.
Idioma | Valor |
---|---|
Inglés (predeterminado) | EN_US |
Portugués (Brasil) | PT_BR |
Si desea elegir otro idioma en lugar de inglés, simplemente configure la variable de entorno en su host. Si no está configurado, entonces EN-US será predeterminado
export USE_LANGUAGE=pt_BR
Nuestra primera cadena ejecutó una secuencia predeterminada de pasos. Para manejar flujos de trabajo complejos, necesitamos poder elegir dinámicamente acciones basadas en entradas.
Los agentes hacen exactamente esto: usan un modelo de idioma para determinar qué acciones tomar y en qué orden. Los agentes tienen acceso a herramientas, y eligen repetidamente una herramienta, ejecutan la herramienta y observan la salida hasta que se les ocurra una respuesta final.
Establezca las variables de entorno apropiadas.
export SERPAPI_API_KEY=xxx
Para aumentar el conocimiento de OpenAI más allá de 2021 y las habilidades computacionales mediante el uso de las herramientas de búsqueda y calculadora.
Ejemplo de agente de búsqueda de 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
Este proyecto usa Spotless para formatear el código. Si realiza alguna modificación, recuerde formatear el código utilizando el siguiente comando.
# export JAVA_HOME=JDK17_INSTALL_HOME && mvn spotless:apply
mvn spotless:apply
¡No dudes en preguntar!
Abra un problema si encuentra un error en Langchain-Java.
Si el proyecto le ha sido útil, puede tratarme a una taza de café.
Este es un código de apreciación de WeChat.