Introducción a LangChain

1

Desarrollo de aplicaciones con LLM utilizando LangChain

2

Estructura y módulos de LangChain

3

Uso de modelos Open Source de Hugging Face

4

Uso de modelos de OpenAI API

5

Prompt templates de LangChain

6

Cadenas en LangChain

7

Utility chains

8

RetrievalQA chain

9

Foundational chains

Quiz: Introducción a LangChain

Casos de uso de LangChain

10

Casos de uso de LangChain

11

¿Cómo utilizar LangChain en mi equipo?

Quiz: Casos de uso de LangChain

Manejo de documentos con índices

12

¿Cómo manejar documentos con índices en LangChain?

13

La clase Document

14

Document Loaders: PDF

15

Document Loaders: CSV con Pandas DataFrames

16

Document Loaders: JSONL

17

Document Transformers: TextSplitters

18

Proyecto de Chatbot: configuración de entorno para LangChain y obtención de datos

19

Proyecto de Chatbot: creación de documents de Hugging Face

Quiz: Manejo de documentos con índices

Embeddings y bases de datos vectoriales

20

Uso de embeddings y bases de datos vectoriales con LangChain

21

¿Cómo usar embeddings de OpenAI en LangChain?

22

¿Cómo usar embeddings de Hugging Face en LangChaing?

23

Chroma vector store en LangChain

24

Proyecto de Chatbot: ingesta de documents en Chroma

25

RetrievalQA: cadena para preguntar

26

Proyecto de Chatbot: cadena de conversación

27

Proyecto de Chatbot: RetrievalQA chain

Quiz: Embeddings y bases de datos vectoriales

Chats y memoria con LangChain

28

¿Para qué sirve la memoria en cadenas y chats?

29

Uso de modelos de chat con LangChain

30

Chat prompt templates

31

ConversationBufferMemory

32

ConversationBufferWindowMemory

33

ConversationSummaryMemory

34

ConversationSummaryBufferMemory

35

Entity memory

36

Proyecto de Chatbot: chat history con ConversationalRetrievalChain

Quiz: Chats y memoria con LangChain

Evolución del uso de LLM

37

LangChain y LLM en evolución constante

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de LangChain

Curso de LangChain

Omar Espejel

Omar Espejel

Chat prompt templates

30/37
Recursos

Aportes 2

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

📝 Chats con Plantillas Dinámicas

.

ℹ️ Summary

Esta guía proporciona un caso de uso sobre “Chat Dynamic Prompts”, donde partiendo de un prompt dinámico, proveer la información necesaria para dar un contexto a un chat.
.

🗂️ Background

Muchas veces las cadenas toman o devuelven múltiples claves de entrada/salida. En estos casos, ¿cómo podemos saber qué claves queremos guardar en el historial de mensajes de chat? En general, esto se puede controlar mediante los parámetros input_key y output_key de los tipos de memoria. Estos por defecto son undefined.
.
Al operar con un formato entre entrada/salida en los contextos de un prompt, se requiere especificar el nombre del que se va a utilizar como input o entrada del prompt como identificador de la memorización.
.
Enlaces auxiliares:

.

🎯 Problem

Implementar un “Chat Dynamic Prompts” utilizando TypeScript para generar un chat con un contexto dinámico a partir de una entrada de la cadena conversacional.
.

🚧 Solution

LanChain provee de ChatPromptTemplate para poder darle formato a partir de una plantilla. Una vez establecida las plantillas según el origen (user, AI, etc.), se genera un contexto para que el chat.

import {
	SystemMessagePromptTemplate,
	HumanMessagePromptTemplate,
	ChatPromptTemplate,
} from 'langchain/prompts'

const prompt = ChatPromptTemplate.fromMessages([
	SystemMessagePromptTemplate.fromTemplate(
		'You are a product expert who must provide detailed information about products from the brand {brand}.',
	),
	HumanMessagePromptTemplate.fromTemplate('{input}'),
])

En el prompt dinámico, generamos las variables de las cuales se embeberán en la creación del contexto.
.
Debido a que se proveerá de una memorización para proveer del contexto a partir del prompt, BufferMemory requiere que se le indique el inputKey para encadenar el contexto.

const memory = new BufferMemory({ inputKey: 'input' })

Finalmente, generamos una cadena conversacional e ingresamos las variables de entrada y dinámicas.

const chain = new ConversationChain({
	llm,
	memory,
	prompt,
})

const response = await chain.call({
	input: 'What features does the newest phone have?',
	brand: 'Apple',
})

🍻 Discussion

Un sistema de memoria necesita soportar dos acciones básicas: lectura y escritura. Recordemos que cada cadena define un núcleo lógico de ejecución que espera ciertas entradas. Algunas de estas entradas vienen directamente del usuario, pero otras pueden venir de la memoria. Una cadena interactuará con su sistema de memoria dos veces en una ejecución dada.
.

  1. DESPUÉS de recibir las entradas iniciales del usuario pero ANTES de ejecutar la lógica del núcleo, una cadena LEERÁ de su sistema de memoria y aumentará las entradas del usuario.
  2. DESPUÉS de ejecutar la lógica central pero ANTES de devolver la respuesta, una cadena ESCRIBIRÁ las entradas y salidas de la ejecución actual en la memoria, para que puedan ser consultadas en futuras ejecuciones.

.

import { ConversationChain } from 'langchain/chains'
import { ChatOpenAI } from 'langchain/chat_models/openai'
import { BufferMemory } from 'langchain/memory'
import {
	SystemMessagePromptTemplate,
	HumanMessagePromptTemplate,
	ChatPromptTemplate,
} from 'langchain/prompts'

const API_TOKEN = // 👈 Enter the API Token from OpenAI

const llm = new ChatOpenAI({
	maxTokens: -1,
	modelName: 'gpt-4',
	temperature: 0,
	openAIApiKey: API_TOKEN,
})

const prompt = ChatPromptTemplate.fromMessages([
	SystemMessagePromptTemplate.fromTemplate(
		'You are a product expert who must provide detailed information about products from the brand {brand}.',
	),
	HumanMessagePromptTemplate.fromTemplate('{input}'),
])

const memory = new BufferMemory({ inputKey: 'input' })

const chain = new ConversationChain({
	llm,
	memory,
	prompt,
})

const response = await chain.call({
	input: 'What features does the newest phone have?',
	brand: 'Apple',
})
console.log(response)
los message template van relacionados a su tipo de mensaje: * SystemMessage: SystemMessagePromptTemplate * HumanMessage: HumanMessagePromptTemplate * AIMessage: ChatPromptTemplate