Cómo elegir un LLM
Tags: python, aws, bedrock, ai
Published: 2023-12-06 12:51:46

🇻🇪🇨🇱 [Dev.to](https://dev.to/elizabethfuentes12) [Linkedin](https://www.linkedin.com/in/lizfue/) [GitHub](https://github.com/elizabethfuentes12/) [Twitter](https://twitter.com/elizabethfue12) [Instagram](https://www.instagram.com/elifue.tech) [Youtube](https://www.youtube.com/channel/UCr0Gnc-t30m4xyrvsQpNp2Q)
[Linktr](https://linktr.ee/elizabethfuentesleone)

---

> ✅ **Original Blog:** [Working With Your Live Data Using LangChain](https://community.aws/posts/how-to-choose-your-llm)

---


Large language models (LLM) pueden generar nuevas historias, resumir textos e incluso realizar tareas avanzadas como el razonamiento y la resolución de problemas, lo que no solo es impresionante sino también notable debido a su accesibilidad y fácil integración en las aplicaciones. En este blog, te proporcionaré las herramientas para entender cómo funcionan los LLM y seleccionar el que mejor se adapte a tus necesidades.


---

La inteligencia artificial generativa (IA generativa) ha logrado avances notables en 2022, ampliando los límites con su capacidad de generar contenido que imita la creatividad humana en texto, imágenes, audio y vídeo.

Las capacidades de la IA generativa se derivan de los modelos de aprendizaje profundo (figura 1), que se entrenan con grandes cantidades de datos. Los modelos de aprendizaje profundo, tras una amplia formación con miles de millones de ejemplos, se convierten en lo que se denomina «foundation models» (FM). Los LLMs son un tipo de FM que aprovecha estos modelos básicos para desarrollar capacidades generativas como el razonamiento, la resolución de problemas y la expresión creativa a nivel humano. Son capaces de entender el lenguaje y realizar tareas complejas a través de una conversación natural.

![Where does Gen AI come from?](https://community.aws/_next/image?url=https%3A%2F%2Fcommunity.aws%2Fraw-post-images%2Fposts%2Fhow-to-choose-your-llm%2Fimages%2Ffig_01.png&w=1920&q=75) Fig 1. Where does Gen AI come from?

Durante las últimas décadas, la inteligencia artificial ha avanzado de manera constante. Sin embargo, lo que hace que los avances recientes en la IA generativa sean notables es su accesibilidad y su fácil integración en las aplicaciones. 

En este blog, le proporcionaré las herramientas para comprender el funcionamiento de las LLM y seleccionar la que mejor se adapte a sus necesidades.

## Cómo funcionan los LLM

Hay [muchos LLM populares] (https://aws.amazon.com/what-is/large-language-model/), algunos de esos LLM más avanzados se han capacitado con muchos más datos que otros. La formación adicional les permite abordar tareas complejas y entablar conversaciones avanzadas. 

Sin embargo, su funcionamiento sigue siendo el mismo: los usuarios proporcionan instrucciones o tareas en lenguaje natural, y el LLM genera una respuesta basada en lo que el modelo «cree» que podría ser la continuación del mensaje. (Fig. 2).

![ How LLMs Work](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/spj09juv7jn6g46opjw0.png)
 Fig 2.  Cómo funcionan los LLM

El arte de crear un buen prompt se llama [prompt engineering] (https://aws.amazon.com/what-is/prompt-engineering/). Es una disciplina con técnicas específicas para desarrollar y refinar las indicaciones que permiten que los modelos lingüísticos tengan resultados efectivos. La prompt engineering se centra en optimizar las indicaciones para obtener respuestas eficaces y útiles a partir de language models.

Con un prompt bien diseñado, las capacidades previamente entrenadas del modelo pueden aprovecharse para atender consultas novedosas dentro de su ámbito de aplicación. Dos de las técnicas de Prompt Engineer más conocidas son:

### Zero-shot Learning:

Para tareas que no requieren ejemplos previos para comprender el contexto de la tarea requerida. Por ejemplo, clasificación.

![ How LLMs Work](https://community.aws/_next/image?url=https%3A%2F%2Fcommunity.aws%2Fraw-post-images%2Fposts%2Fhow-to-choose-your-llm%2Fimages%2Fgif_01.gif&w=1920&q=75) Example of Zero-shot Learning.

### Few-shot Learning:

Las capacidades de Zero-shot se refieren a la capacidad de los LLM para completar tareas en las que no los entrenaron. Sin embargo, siguen teniendo limitaciones a la hora de realizar tareas complejas con solo un breve aviso inicial sin orientación. Few-Shot Learning mejora el rendimiento de los modelos en tareas difíciles mediante la incorporación de demostraciones o el aprendizaje en contexto.

>📚 **Tip:** Entregale al LLM el contexto de cuál es su función, por ejemplo: «Eres un asistente de viajes».

![ How LLMs Work](https://community.aws/_next/image?url=https%3A%2F%2Fcommunity.aws%2Fraw-post-images%2Fposts%2Fhow-to-choose-your-llm%2Fimages%2Fgif_02.gif&w=1920&q=75) Example of Few-shot Learning.

Obtenga más información sobre prompt engineering: 

- [What is prompt engineering?](https://aws.amazon.com/what-is/prompt-engineering/)

- [Prompt engineering for foundation models](https://docs.aws.amazon.com/sagemaker/latest/dg/jumpstart-foundation-models-customize-prompt-engineering.html)

- [Prompt Engineering Guide](https://www.promptingguide.ai/)

- [Guide to Anthropic's prompt engineering resources](https://docs.anthropic.com/claude/docs)

- [Prompt Engineering for Developers: How AI Can Help With Architecture Decisions](https://community.aws/posts/prompt-engineering-for-developers/how-ai-can-help-with-architecture-decisions)

- [Fun on a Friday with Prompt Engineering and thinking about re:Invent 2023](https://community.aws/posts/friday-fun-style-changing-reinvent-guide)


## ¿Cómo elegir el mejor LLM?

Para tomar esta decisión, voy a enumerar algunos aspectos que considero más importantes:

### La misión del LLM en la aplicación:

Cuál será la necesidad que el LLM va a resolver en la solicitud. Las funcionalidades con mayor uso son:

- Resumir
- Clasificación
- Respuesta a preguntas
- Generación de código
- Redacción de contenido
- Seguimiento de instrucciones
- Tarea multilingüe
- [Embedding:](https://docs.aws.amazon.com/bedrock/latest/userguide/embeddings.html) translate the text into a vector representation.

Como mencioné antes, existen modelos avanzados capaces de manejar tareas complejas y realizar múltiples tareas. Por ejemplo, [Llama-2-13B-chat] (https://aws.amazon.com/es/bedrock/llama-2/) es un poderoso LLM para gestionar conversaciones, pero solo en inglés.

Puede seleccionar un modelo que satisfaga todos sus requisitos a la vez o crear aplicaciones desacopladas con varios modelos especializados para cada tarea. 

> 📚 **Remember:** Usa prompt engineer para generar los outputs deseadas.

## El idioma:

Hay LLM especializados en ciertas tareas, capaces de hablar un idioma o más de uno. Es importante definir si tu solicitud hablará solo un idioma o más de uno antes de elegir el LLM. Por ejemplo, [Titan Text Express] (https://aws.amazon.com/es/bedrock/titan/) es multilingüe, a diferencia de [Titan Text Lite](https://aws.amazon.com/es/bedrock/titan/), que solo habla en inglés. 

> 📚 **Tip:** : Si el LLM que necesitas no tiene la función de idioma deseada, intenta usar un LLM multilingüe para la traducción o Amazon Translate antes de enviar el prompt. 


### Longitud de la "Context Window" 

La "context window" hace referencia a la longitud del texto que un modelo de IA puede gestionar y responder a la vez. Este texto, en la mayoría de los LLM, se mide en tokens. 

![ Context Window](https://community.aws/_next/image?url=https%3A%2F%2Fcommunity.aws%2Fraw-post-images%2Fposts%2Fhow-to-choose-your-llm%2Fimages%2Ffig_03.png&w=1200&q=75) Fig 3.  Context Window

En cuanto a los «tokens», son como los bloques de construcción individuales que forman las palabras. Por ejemplo:

- En inglés, un único token suele tener alrededor de 4 caracteres.

- Un símbolo es aproximadamente 3/4 de una palabra.

- 100 fichas equivalen aproximadamente a 75 palabras.

Este fragmento de código muestra cómo determinar el recuento de token con Jurassic-2 Ultra con Amazon Bedrock.

```python
import boto3
import json
bedrock_runtime = boto3.client(
    service_name='bedrock-runtime', 
    region_name='us-east-1'
)
model_id = "ai21.j2-ultra-v1"

prompt="Hola Mundo"

kwargs = {
  "modelId": model_id,
  "contentType": "application/json",
  "accept": "*/*",
  "body": "{\"prompt\":\""+ prompt +"\",\"maxTokens\":200,\"temperature\":0.7,\"topP\":1,\"stopSequences\":[],\"countPenalty\":{\"scale\":0},\"presencePenalty\":{\"scale\":0},\"frequencyPenalty\":{\"scale\":0}}"
}

response = bedrock_runtime.invoke_model(**kwargs)
```

Desglosando la respuesta:

```python
response_body = json.loads(response.get("body").read())
completion = response_body.get("completions")[0].get("data").get("text")
print(completion)
```
```
Bonjourno! How can I assist you today?
```
Let's find out the token count in both the Prompt Input and Generated Output(completion):

**Prompt Input:**

```
tokens_prompt = response_body.get('prompt').get('tokens')
df_tokens_prompt = json_normalize(tokens_prompt)[["generatedToken.token"]]
```
![Prompt Tokens count](https://community.aws/_next/image?url=https%3A%2F%2Fcommunity.aws%2Fraw-post-images%2Fposts%2Fhow-to-choose-your-llm%2Fimages%2Fdf_tokens_prompt.jpg&w=828&q=75) Prompt Tokens count.


**Generated Output:**

```
tokens_completion = response_body.get("completions")[0].get('data')["tokens"]
df_tokens_completion = json_normalize(tokens_completion)[["generatedToken.token"]]
```

![Completion Tokens count](https://community.aws/_next/image?url=https%3A%2F%2Fcommunity.aws%2Fraw-post-images%2Fposts%2Fhow-to-choose-your-llm%2Fimages%2Fdf_tokens_completion.png&w=828&q=75)
Completion Tokens count.

### Precios

Como existen LLM de código abierto, existen otros pagos, según el proveedor, la modalidad y el modelo, sin embargo, todos tienen en cuenta la cantidad de Tokens.

Refiriéndose a la modalidad de LLM pagos:

**✅ Only Inference:** Al invocar el modelo como una API, el precio corresponde a la cantidad de tokens entrantes y salientes (Fig. 5). [Amazon Bedrock](https://aws.amazon.com/es/bedrock/) este servicio totalmente gestionado ofrece la opción de utilizar [LLM a través de una llamada a la API] (https://docs.aws.amazon.com/bedrock/latest/userguide/using-api.html), con la opción de elegir entre bajo demanda o [Provisioned Throughput]](https://docs.aws.amazon.com/bedrock/latest/userguide/prov-throughput.html) para ahorrar costos, revisa [el precio acá](https://aws.amazon.com/es/bedrock/pricing/) y [Ejemplos de precios acá](https://aws.amazon.com/bedrock/pricing/?refid=8a3219f5-3219-4b0e-aca1-a209523015e8#:~:text=on%20Amazon%20Bedrock.-,Pricing%20examples,-AI21%20labs).


![Only Inference Modality](https://community.aws/_next/image?url=https%3A%2F%2Fcommunity.aws%2Fraw-post-images%2Fposts%2Fhow-to-choose-your-llm%2Fimages%2Ffig_05.jpg&w=1200&q=75) Fig 5. Only Inference Modality


**✅ Customization (fine-tuning):** cuando es necesario ajustar el modelo a una necesidad específica (Fig. 6). en este tipo de precios al valor anterior, debe añadir el nuevo modelo y el almacenamiento de este. [Amazon Bedrock](https://aws.amazon.com/es/bedrock/) también ofrece un modo para [customization (fine-tuning)](https://docs.aws.amazon.com/bedrock/latest/userguide/custom-models.html).  

![Only Inference Modality](https://community.aws/_next/image?url=https%3A%2F%2Fcommunity.aws%2Fraw-post-images%2Fposts%2Fhow-to-choose-your-llm%2Fimages%2Ffig_04.png&w=1920&q=75)"Fig 6. Customization (fine-tuning) Modality

Para aquellos que necesitan experimentar más, esta [Amazon SageMaker JumpStart](https://aws.amazon.com/sagemaker/jumpstart/), lo que le permite, con varias funcionalidades, entrenar y ajustar los modelos antes de desplegarlos con un jupyter notebook. Amazon SageMaker JumpStart tiene disponibles [estos modelos](https://aws.amazon.com/sagemaker/jumpstart/getting-started/?sagemaker-jumpstart-cards.sort-by=item.additionalFields.priority&sagemaker-jumpstart-cards.sort-order=asc&awsf.sagemaker-jumpstart-filter-product-type=product-type%23foundation-model&awsf.sagemaker-jumpstart-filter-text=*all&awsf.sagemaker-jumpstart-filter-vision=*all&awsf.sagemaker-jumpstart-filter-tabular=*all&awsf.sagemaker-jumpstart-filter-audio-tasks=*all&awsf.sagemaker-jumpstart-filter-multimodal=*all&awsf.sagemaker-jumpstart-filter-RL=*all&awsm.page-sagemaker-jumpstart-cards=1), y revisa los precios [acá.](https://aws.amazon.com/sagemaker/pricing/)



## Comparación de LLMs y características

Eche un vistazo a este cuadro de algunos modelos [Amazon Bedrock] (https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) tiene disponibles para obtener una perspectiva más amplia a la hora de realizar comparaciones.  

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3eigc555cha61uheshnc.jpg)

## Conclusión

Gracias por unirte a esta lectura en la que explico cómo funcionan los LLM y cómo mejorar la respuesta utilizando la técnica de ingeniería rápida. Donde aprendiste a elegir la mejor para tu aplicación en función de características tales como:


- La misión del LLM en la aplicación: ¿qué problema me ayudará a resolver el LLM?

- El idioma: ¿Necesito el LLM para entender en varios idiomas?

- Largo de la Context Window: La cantidad de texto de la solicitud de entrada y de la salida generada.

- Precios: donde necesito saber el costo del LLM que se ajusta a mis necesidades y también preguntarme: ¿Los LLM disponibles son suficientes para lo que necesito? Si no es así, ¿tengo que hacer fine-tuning?

Por último, has visto cómo se ve un cuadro comparativo creado con algunos de los modelos disponibles de Amazon Bedrock.  


🚀 Algunos enlaces para que sigas aprendiendo y desarrollando:

- [Integrating Foundation Models into Your Code with Amazon Bedrock](https://www.youtube.com/watch?v=ab1mbj0acDo)

- [Amazon Bedrock Workshop](https://github.com/aws-samples/amazon-bedrock-workshop)

- [AWS Kendra LangChain Extensions](https://github.com/aws-samples/amazon-kendra-langchain-extensions/tree/main)

- [Prompt Engineering Techniques](https://www.promptingguide.ai/techniques)

- [Learn the fundamentals of generative AI for real-world applications](https://www.deeplearning.ai/courses/generative-ai-with-llms/)

- [LangChain for LLM Application Development](https://www.deeplearning.ai/short-courses/langchain-for-llm-application-development/)

- [The Cohere Platform](https://docs.cohere.com/docs)

- [Context Window in LLMs](https://ai.plainenglish.io/context-window-in-llms-198e8079d3c8)


---
¡Gracias!

🇻🇪🇨🇱 [Dev.to](https://dev.to/elizabethfuentes12) [Linkedin](https://www.linkedin.com/in/lizfue/) [GitHub](https://github.com/elizabethfuentes12/) [Twitter](https://twitter.com/elizabethfue12) [Instagram](https://www.instagram.com/elifue.tech) [Youtube](https://www.youtube.com/channel/UCr0Gnc-t30m4xyrvsQpNp2Q)
[Linktr](https://linktr.ee/elizabethfuentesleone)

---