Version Java de Langchain, tout en autonomisant LLM pour Bigdata.
Il sert de pont vers le domaine de LLM dans le domaine Big Data, principalement dans la pile Java.
Si vous êtes intéressé, vous pouvez m'ajouter sur WeChat: Hamawhite, ou m'envoyer un e-mail.
Il s'agit de l'implémentation en langue Java de Langchain, qui facilite le développement d'applications alimentées par LLM.
L'exemple suivant dans l'exemple de Langchain.
La documentation de l'API est disponible sur le lien suivant:
https://hamawhitegg.github.io/langchain-java
Prérequis pour la construction:
< dependency >
< groupId >io.github.hamawhitegg</ groupId >
< artifactId >langchain-core</ artifactId >
< version >0.2.1</ version >
</ dependency >
L'utilisation de Langchain nécessitera généralement des intégrations avec un ou plusieurs fournisseurs de modèles, magasins de données, API, etc. Pour cet exemple, nous utiliserons les API d'OpenAI.
Nous devrons alors définir la variable d'environnement.
export OPENAI_API_KEY=xxx
# If a proxy is needed, set the OPENAI_PROXY environment variable.
export OPENAI_PROXY=http://host:port
Si vous souhaitez définir la clé API et le proxy dynamiquement, vous pouvez utiliser le paramètre Openaiapikey et Openaiproxy lors de l'initiation de la classe OpenAI.
var llm = OpenAI . builder ()
. openaiOrganization ( "xxx" )
. openaiApiKey ( "xxx" )
. openaiProxy ( "http://host:port" )
. requestTimeout ( 16 )
. build ()
. init ();
Obtenez des prédictions d'un modèle de langue. Le bloc de construction de base de Langchain est le LLM, qui prend du texte et génère plus de texte.
Exemple 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 );
Et maintenant, nous pouvons passer dans du texte et obtenir des prédictions!
Feetful of Fun
Les modèles de chat sont une variation des modèles de langue. Bien que les modèles de chat utilisent des modèles de langage sous le capot, l'interface qu'ils exposent est un peu différente: plutôt que d'exposer une API "texte, texte Out", ils exposent une interface où les "messages de chat" sont les entrées et les sorties.
Exemple de chat 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={}}
Il est utile de comprendre en quoi les modèles de chat sont différents d'un LLM normal, mais il peut souvent être pratique de simplement les traiter de la même manière. Langchain le rend facile en exposant également une interface à travers laquelle vous pouvez interagir avec un modèle de chat comme vous le feriez pour un LLM normal. Vous pouvez y accéder via l'interface predict
.
var output = chat . predict ( "Translate this sentence from English to French. I love programming." );
println ( output );
J ' adore la programmation.
Maintenant que nous avons un modèle et un modèle rapide, nous voulons combiner les deux. Les chaînes nous donnent un moyen de lier (ou de chaîner) ensemble plusieurs primitives, comme les modèles, les invites et autres chaînes.
Le type de chaîne le plus simple et le plus courant est un LLMCHAIN, qui passe d'abord une entrée à un standtemplate puis à un LLM. Nous pouvons construire une chaîne LLM à partir de notre modèle existant et de notre modèle d'invite.
Exemple de chaîne 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
Le LLMChain
peut également être utilisé avec des modèles de chat:
Exemple de chaîne de chat 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.
Les LLM permettent d'interagir avec les bases de données SQL en utilisant le langage naturel, et Langchain propose des chaînes SQL pour créer et exécuter des requêtes SQL basées sur des invites en langage naturel.
Exemple de chaîne 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.
Les langues disponibles sont les suivantes.
Langue | Valeur |
---|---|
Anglais (par défaut) | en_us |
Portugais (Brésil) | pt_br |
Si vous souhaitez choisir une autre langue au lieu de l'anglais, définissez simplement la variable d'environnement sur votre hôte. Si vous ne définissez pas, alors en-us sera par défaut
export USE_LANGUAGE=pt_BR
Notre première chaîne a exécuté une séquence d'étapes prédéterminée. Pour gérer des workflows complexes, nous devons être en mesure de choisir dynamiquement des actions en fonction des entrées.
Les agents font exactement ceci: ils utilisent un modèle de langue pour déterminer les actions à prendre et dans quel ordre. Les agents ont accès aux outils et ils choisissent à plusieurs reprises un outil, exécutent l'outil et observent la sortie jusqu'à ce qu'ils trouvent une réponse finale.
Définissez les variables d'environnement appropriées.
export SERPAPI_API_KEY=xxx
Pour augmenter les connaissances d'Openai au-delà de 2021 et les capacités de calcul grâce à l'utilisation des outils de recherche et de calculatrice.
Exemple d'agent de recherche 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
Ce projet utilise un point impeccable pour formater le code. Si vous apportez des modifications, n'oubliez pas de formater le code à l'aide de la commande suivante.
# export JAVA_HOME=JDK17_INSTALL_HOME && mvn spotless:apply
mvn spotless:apply
N'hésitez pas à demander!
Ouvrez un problème si vous trouvez un bug dans Langchain-Java.
Si le projet vous a été utile, vous pouvez m'offrir une tasse de café.
Il s'agit d'un code d'appréciation WeChat.