Maison > Périphériques technologiques > IA > le corps du texte

Les programmeurs Java apprennent LangChain à partir de zéro : modéliser les composants

PHPz
Libérer: 2023-06-03 20:23:49
avant
1594 Les gens l'ont consulté

L'article précédent vous a présenté quelques connaissances de base sur LangChain. Les amis qui ne l'ont pas vu peuvent cliquer ici pour y jeter un œil. Aujourd'hui, nous allons vous présenter le premier modèle de composant très important de LangChain, Model.

Notez que le modèle mentionné ici fait référence au composant de modèle de LangChain, et non au modèle de langage similaire à OpenAI. La raison pour laquelle LangChain a des composants de modèle est qu'il existe trop de modèles de langage dans l'industrie, à l'exception du modèle de langage du. société OpenAI En outre, il existe de nombreux autres endroits.

LangChain comporte trois types de composants de modèle, à savoir le modèle de grand langage LLM, le modèle de chat et les modèles d'intégration de texte.

LLM Large Language Model

LLM est le composant de modèle le plus basique. L'entrée et la sortie ne prennent en charge que les chaînes, ce qui peut répondre à nos besoins dans la plupart des scénarios. Nous pouvons écrire du code Python directement sur Colab([https://colab.research.google.com)

À titre d'exemple

Ce qui suit est un cas, installez d'abord les dépendances, puis exécutez le code suivant.

pip install openaipip install langchain
Copier après la connexion
import os# 配置OpenAI 的 API KEYos.environ["OPENAI_API_KEY"] ="sk-xxx"# 从 LangChain 中导入 OpenAI 的模型from langchain.llms import OpenAI# 三个参数分别代表OpenAI 的模型名称,执行的次数和随机性,数值越大越发散llm = OpenAI(model_name="text-davinci-003", n=2, temperature=0.3)llm.generate(["给我讲一个故事", "给我讲一个笑话"])
Copier après la connexion

Les résultats de l'opération sont les suivants

Java 程序员从零开始学 LangChain —模型组件

Modèle de chat Le modèle de chat

Le modèle de chat est basé sur le modèle LLM, mais le modèle de chat est plus structuré que l'entrée et la sortie entre le modèle LLM composants, et les paramètres d'entrée et de sortie sont. Les types sont tous des modèles de discussion, pas de simples chaînes. Les types de modèles de chat couramment utilisés incluent les

  1. AIMessage suivants : utilisés pour enregistrer la réponse de LLM afin que ces informations puissent être renvoyées à LLM lors de la prochaine demande.
  2. HumanMessage : message d'invite envoyé aux LLM, tel que « Implémenter une méthode de tri rapide »
  3. SystemMessage : définissez le comportement et les objectifs du modèle LLM. Vous pouvez donner ici des instructions spécifiques, telles que « Soyez un expert en codage » ou « Renvoyer le format json ».
  4. ChatMessage : ChatMessage peut recevoir n'importe quelle forme de valeur, mais la plupart du temps, nous devrions utiliser les trois types ci-dessus.

Par exemple,

from langchain.chat_models import ChatOpenAIfrom langchain.schema import (AIMessage,HumanMessage,SystemMessage)chat = ChatOpenAI(temperature=0)messages = [SystemMessage(cnotallow="返回的数据markdown 语法进行展示,代码使用代码块包裹"),HumanMessage(cnotallow="用 Java 实现一个二分查找算法")]print(chat(messages))
Copier après la connexion

La forme de chaîne de contenu générée est la suivante

L'algorithme de recherche binaire est un algorithme de recherche utilisé pour trouver des éléments spécifiques dans un tableau ordonné, également connu sous le nom d'algorithme de recherche binaire. La complexité temporelle de cet algorithme est O(log n). nnCe qui suit est le code pour implémenter l'algorithme de recherche binaire en Java : nnjavanpublic class BinarySearch {n public static int binaireSearch(int[] arr, int target) {n int left = 0;n int right = arr.length - 1;n while (gauche <= droite) {n int mid = (gauche + droite) / 2;n if (arr[mid] == cible) {n return mid;n } else if (arr[mid] < target) {n gauche = milieu + 1;n } else {n droite = milieu - 1;n }n }n return -1;n }nn public static void main(String[] args) {n int[] arr = {1 , 3, 5, 7, 9};n int target = 5;n int index = binaireSearch(arr, target);n if (index != -1) {n System.out.println("élément cible" + cible + " in L'indice dans le tableau est " + index); n } else {n System.out.println("l'élément cible" + la cible + " n'est pas dans le tableau"); ci-dessus, la méthode binaireSearch Reçoit un tableau trié et un élément cible, renvoie l'indice de l'élément cible dans le tableau, ou -1 si l'élément cible n'est pas dans le tableau. nnDans la méthode binaireSearch, utilisez deux pointeurs gauche et droit pour pointer respectivement vers les extrémités gauche et droite du tableau, puis réduisez continuellement la plage de recherche dans une boucle while jusqu'à ce que l'élément cible soit trouvé ou que la plage de recherche soit vide. Dans chaque boucle, la position médiane est calculée, puis l'élément cible est comparé à l'élément en position médiane. S'ils sont égaux, l'indice de la position médiane est renvoyé si l'élément cible est plus grand que l'élément en position médiane. la position médiane, le pointeur gauche est déplacé vers la droite de la position médiane ; si l'élément cible est plus petit que l'élément de la position médiane, déplacez le pointeur droit vers la gauche de la position médiane. ' additionnel_kwargs={} example=False

Extraire le contenu dans content et affichez-le en utilisant une syntaxe markdown comme celle-ci

Java 程序员从零开始学 LangChain —模型组件

En utilisant ce composant de modèle, vous pouvez prédéfinir certains rôles, puis les personnaliser.

Prompts template

from langchain.chat_models import ChatOpenAIfrom langchain.prompts import (ChatPromptTemplate,PromptTemplate,SystemMessagePromptTemplate,AIMessagePromptTemplate,HumanMessagePromptTemplate,)from langchain.schema import (AIMessage,HumanMessage,SystemMessage)system_template="你是一个把{input_language}翻译成{output_language}的助手"system_message_prompt = SystemMessagePromptTemplate.from_template(system_template)human_template="{text}"human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])messages = chat_prompt.format_prompt(input_language="英语", output_language="汉语", text="I love programming.")print(messages)chat = ChatOpenAI(temperature=0)print(chat(messages.to_messages()))
Copier après la connexion

output

messages=[SystemMessage(cnotallow='Vous êtes un assistant qui traduit l'anglais vers le chinois', additionnel_kwargs={}), HumanMessage(cnotallow='J'adore programmer.',additional_kwargs = {}, example=False)] cnotallow='J'aime programmer. exemple=Faux, additionnel_kwargugs={}

文本嵌入模型 Text Embedding Models

文本嵌入模型组件相对比较难理解,这个组件接收的是一个字符串,返回的是一个浮点数的列表。在 NLP 领域中 Embedding 是一个很常用的技术,Embedding 是将高维特征压缩成低维特征的一种方法,常用于自然语言处理任务中,如文本分类、机器翻译、推荐系统等。它将文本中的离散数据如单词、短语、句子等,映射为实数向量,以更好地进行神经网络处理和学习。通过 Embedding,文本数据可以被更好地表示和理解,提高了模型的表现力和泛化能力。

举个栗子

from langchain.embeddings import OpenAIEmbeddingsembeddings = OpenAIEmbeddings()text = "hello world"query_result = embeddings.embed_query(text)doc_result = embeddings.embed_documents([text])print(query_result)print(doc_result)
Copier après la connexion

output

[-0.01491016335785389, 0.0013780705630779266, -0.018519161269068718, -0.031111136078834534, -0.02430146001279354, 0.007488010451197624,0.011340680532157421, 此处省略 .......

Java 程序员从零开始学 LangChain —模型组件

总结

今天给大家介绍了一下 LangChain 的模型组件,有了模型组件我们就可以更加方便的跟各种 LLMs 进行交互了。

参考资料

官方文档:https://python.langchain.com/en/latest/modules/models.html

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:51cto.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal