RAG Adaptativo con LlamaIndex
Las consultas de los usuarios, en general, pueden ser complejas o simples. No siempre se necesita un sistema RAG complejo para manejar consultas simples. RAG Adaptativo propone un enfoque para manejar consultas complejas y simples.
En este notebook, implementaremos un enfoque similar al RAG Adaptativo, que diferencia entre el manejo de consultas complejas y simples. Nos centraremos en los informes 10k de la SEC de Lyft para los años 2020, 2021 y 2022.
Nuestro enfoque implicará el uso de las capacidades de RouterQueryEngine y FunctionCalling de MistralAI para llamar a diferentes herramientas o índices según la complejidad de la consulta.
- Consultas Complejas: Estas aprovecharán múltiples herramientas que requieren contexto de varios documentos.
- Consultas Simples: Estas utilizarán una sola herramienta que requiere contexto de un solo documento o usarán directamente un LLM para proporcionar una respuesta.
A continuación, se detallan los pasos que seguiremos aquí:
- Descargar datos.
- Cargar datos.
- Crear índices para 3 documentos.
- Crear motores de consulta con documentos y LLM.
- Inicializar un
FunctionCallingAgentWorkerpara consultas complejas. - Crear herramientas.
- Crear
RouterQueryEngine- Para enrutar consultas según su complejidad. - Consultar.
Instalación
!pip install llama-index
!pip install llama-index-llms-mistralai
!pip install llama-index-embeddings-mistralai
Configurar clave de API
import os
os.environ['MISTRAL_API_KEY'] = '<YOUR MISTRAL API KEY>'
Configurar LLM y modelo de embeddings
import nest_asyncio
nest_asyncio.apply()
from llama_index.core import SimpleDirectoryReader, VectorStoreIndex
from llama_index.llms.mistralai import MistralAI
from llama_index.embeddings.mistralai import MistralAIEmbedding
from llama_index.core import Settings
from llama_index.core.tools import QueryEngineTool, ToolMetadata
from llama_index.core.query_engine.router_query_engine import RouterQueryEngine
from llama_index.core.selectors.llm_selectors import LLMSingleSelector
# Note: Only `mistral-large-latest` supports function calling
llm = MistralAI(model='mistral-large-latest')
embed_model = MistralAIEmbedding()
Settings.llm = llm
Settings.embed_model = embed_model
Registro
# NOTE: This is ONLY necessary in jupyter notebook.
# Details: Jupyter runs an event-loop behind the scenes.
# This results in nested event-loops when we start an event-loop to make async queries.
# This is normally not allowed, we use nest_asyncio to allow it for convenience.
import nest_asyncio
nest_asyncio.apply()
import logging
import sys
# Set up the root logger
logger = logging.getLogger()
logger.setLevel(logging.INFO) # Set logger level to INFO
# Clear out any existing handlers
logger.handlers = []
# Set up the StreamHandler to output to sys.stdout (Colab's output)
handler = logging.StreamHandler(sys.stdout)
handler.setLevel(logging.INFO) # Set handler level to INFO
# Add the handler to the logger
logger.addHandler(handler)
from IPython.display import display, HTML
Descargar datos
Descargaremos los informes 10k de la SEC de Lyft para los años 2020, 2021 y 2022.
!wget "https://www.dropbox.com/scl/fi/ywc29qvt66s8i97h1taci/lyft-10k-2020.pdf?rlkey=d7bru2jno7398imeirn09fey5&dl=0" -q -O ./lyft_10k_2020.pdf
!wget "https://www.dropbox.com/scl/fi/lpmmki7a9a14s1l5ef7ep/lyft-10k-2021.pdf?rlkey=ud5cwlfotrii6r5jjag1o3hvm&dl=0" -q -O ./lyft_10k_2021.pdf
!wget "https://www.dropbox.com/scl/fi/iffbbnbw9h7shqnnot5es/lyft-10k-2022.pdf?rlkey=grkdgxcrib60oegtp4jn8hpl8&dl=0" -q -O ./lyft_10k_2022.pdf
Cargar datos
# Lyft 2020 docs
lyft_2020_docs = SimpleDirectoryReader(input_files=["./lyft_10k_2020.pdf"]).load_data()
# Lyft 2021 docs
lyft_2021_docs = SimpleDirectoryReader(input_files=["./lyft_10k_2021.pdf"]).load_data()
# Lyft 2022 docs
lyft_2022_docs = SimpleDirectoryReader(input_files=["./lyft_10k_2022.pdf"]).load_data()
Crear índices
# Index on Lyft 2020 Document
lyft_2020_index = VectorStoreIndex.from_documents(lyft_2020_docs)
# Index on Lyft 2021 Document
lyft_2021_index = VectorStoreIndex.from_documents(lyft_2021_docs)
# Index on Lyft 2022 Document
lyft_2022_index = VectorStoreIndex.from_documents(lyft_2022_docs)
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
Crear motores de consulta
# Query Engine on Lyft 2020 Docs Index
lyft_2020_query_engine = lyft_2020_index.as_query_engine(similarity_top_k=5)
# Query Engine on Lyft 2021 Docs Index
lyft_2021_query_engine = lyft_2021_index.as_query_engine(similarity_top_k=5)
# Query Engine on Lyft 2022 Docs Index
lyft_2022_query_engine = lyft_2022_index.as_query_engine(similarity_top_k=5)
Motor de consulta para LLM. Con esto, usaremos el LLM para responder la consulta.
from llama_index.core.query_engine import CustomQueryEngine
class LLMQueryEngine(CustomQueryEngine):
"""RAG String Query Engine."""
llm: llm
def custom_query(self, query_str: str):
response = self.llm.complete(query_str)
return str(response)
llm_query_engine = LLMQueryEngine(llm=llm)
Inicializar un FunctionCallingAgentWorker
# These tools are used to answer complex queries involving multiple documents.
query_engine_tools = [
QueryEngineTool(
query_engine=lyft_2020_query_engine,
metadata=ToolMetadata(
name="lyft_2020_10k_form",
description="Annual report of Lyft's financial activities in 2020",
),
),
QueryEngineTool(
query_engine=lyft_2021_query_engine,
metadata=ToolMetadata(
name="lyft_2021_10k_form",
description="Annual report of Lyft's financial activities in 2021",
),
),
QueryEngineTool(
query_engine=lyft_2022_query_engine,
metadata=ToolMetadata(
name="lyft_2022_10k_form",
description="Annual report of Lyft's financial activities in 2022",
),
)
]
from llama_index.core.agent import FunctionCallingAgentWorker
from llama_index.core.agent import AgentRunner
agent_worker = FunctionCallingAgentWorker.from_tools(
query_engine_tools,
llm=llm,
verbose=True,
allow_parallel_tool_calls=True,
)
agent = AgentRunner(agent_worker)
Crear herramientas
Crearemos herramientas usando el QueryEngines y FunctionCallingAgentWorker creados anteriormente.
query_engine_tools = [
QueryEngineTool(
query_engine=lyft_2020_query_engine,
metadata=ToolMetadata(
name="lyft_2020_10k_form",
description="Queries related to only 2020 Lyft's financial activities.",
),
),
QueryEngineTool(
query_engine=lyft_2021_query_engine,
metadata=ToolMetadata(
name="lyft_2021_10k_form",
description="Queries related to only 2021 Lyft's financial activities.",
),
),
QueryEngineTool(
query_engine=lyft_2022_query_engine,
metadata=ToolMetadata(
name="lyft_2022_10k_form",
description="Queries related to only 2022 Lyft's financial activities.",
),
),
QueryEngineTool(
query_engine=agent,
metadata=ToolMetadata(
name="lyft_2020_2021_2022_10k_form",
description=(
"Useful for queries that span multiple years from 2020 to 2022 for Lyft's financial activities."
)
)
),
QueryEngineTool(
query_engine=llm_query_engine,
metadata=ToolMetadata(
name="general_queries",
description=(
"Provides information about general queries other than lyft."
)
)
)
]
Crear RouterQueryEngine
RouterQueryEngine enrutará las consultas de los usuarios para seleccionar una de las herramientas según la complejidad de la consulta.
from llama_index.core.query_engine import RouterQueryEngine
from llama_index.core.selectors import LLMSingleSelector
query_engine = RouterQueryEngine(
selector=LLMSingleSelector.from_defaults(),
query_engine_tools=query_engine_tools,
verbose = True
)
Consultando
Consultas simples:
Consulta: ¿Cuál es la capital de Francia?
Puedes ver que usó la herramienta LLM ya que es una consulta general.
response = query_engine.query("What is the capital of France?")
display(HTML(f'<p style="font-size:20px">{response.response}</p>'))
HTTP Request: POST https://api.mistral.ai/v1/chat/completions "HTTP/1.1 200 OK"
Selecting query engine 4: This option is the most relevant as it mentions 'general queries other than Lyft'. The question about the capital of France is not related to Lyft's financial activities..
[1;3;38;5;200mSelecting query engine 4: This option is the most relevant as it mentions 'general queries other than Lyft'. The question about the capital of France is not related to Lyft's financial activities..
[0mHTTP Request: POST https://api.mistral.ai/v1/chat/completions "HTTP/1.1 200 OK"
<IPython.core.display.HTML object>
La capital de Francia es París. Conocida como la "Ciudad de la Luz", París es famosa por sus lugares emblemáticos como la Torre Eiffel, el Museo del Louvre, la Catedral de Notre-Dame y más. Es un centro global de arte, moda, gastronomía y cultura.
Consulta: ¿Qué hizo Lyft en I+D en 2022?
Puedes ver que usó la herramienta lyft_2022 para responder la consulta.
response = query_engine.query("What did Lyft do in R&D in 2022?")
display(HTML(f'<p style="font-size:20px">{response.response}</p>'))
HTTP Request: POST https://api.mistral.ai/v1/chat/completions "HTTP/1.1 200 OK"
Selecting query engine 2: This choice is most relevant to the question as it pertains to Lyft's financial activities in 2022, which could include information about their Research and Development (R&D) expenditures for that year..
[1;3;38;5;200mSelecting query engine 2: This choice is most relevant to the question as it pertains to Lyft's financial activities in 2022, which could include information about their Research and Development (R&D) expenditures for that year..
[0mHTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/chat/completions "HTTP/1.1 200 OK"
<IPython.core.display.HTML object>
En 2022, Lyft realizó inversiones enfocadas en investigación y desarrollo, aunque los detalles específicos de estas inversiones no se proporcionan en el contexto. Estas inversiones son parte de su compromiso continuo de lanzar nuevas innovaciones en su plataforma. Además, Lyft completó múltiples adquisiciones estratégicas, una de las cuales es PBSC Urban Solutions. Esta adquisición añadió más de 100,000 bicicletas a sus sistemas de bicicletas compartidas en 46 mercados de 15 países.
Consulta: ¿Qué hizo Lyft en I+D en 2021?
Puedes ver que usó la herramienta lyft_2021 para responder la consulta.
response = query_engine.query("What did Lyft do in R&D in 2021?")
display(HTML(f'<p style="font-size:20px">{response.response}</p>'))
HTTP Request: POST https://api.mistral.ai/v1/chat/completions "HTTP/1.1 200 OK"
Selecting query engine 1: This choice is most relevant to the question as it pertains to queries related to only 2021 Lyft's financial activities, which could potentially include information about Lyft's R&D activities during that year..
[1;3;38;5;200mSelecting query engine 1: This choice is most relevant to the question as it pertains to queries related to only 2021 Lyft's financial activities, which could potentially include information about Lyft's R&D activities during that year..
[0mHTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/chat/completions "HTTP/1.1 200 OK"
<IPython.core.display.HTML object>
En 2021, los gastos de investigación y desarrollo de Lyft aumentaron ligeramente en $2.8 millones. Este aumento se debió principalmente a un incremento de $51.6 millones en la compensación basada en acciones. Sin embargo, también hubo un beneficio de $25.4 millones de un evento de reestructuración en el el segundo trimestre de 2020, que incluyó un beneficio de compensación basada en acciones y costos de indemnización y beneficios que no se repitieron en 2021. Estos aumentos fueron compensados por una disminución de $37.5 millones en costos relacionados con el personal y una disminución de $4.6 millones en costos de investigación de vehículos autónomos.
Consulta: ¿Qué hizo Lyft en I+D en 2020?
Puedes ver que usó la herramienta lyft_2020 para responder la consulta.
response = query_engine.query("What did Lyft do in R&D in 2020?")
display(HTML(f'<p style="font-size:20px">{response.response}</p>'))
HTTP Request: POST https://api.mistral.ai/v1/chat/completions "HTTP/1.1 200 OK"
Selecting query engine 0: This choice is most relevant to the question as it pertains to queries related to only 2020 Lyft's financial activities, which could potentially include information about Lyft's R&D activities during that year..
[1;3;38;5;200mSelecting query engine 0: This choice is most relevant to the question as it pertains to queries related to only 2020 Lyft's financial activities, which could potentially include information about Lyft's R&D activities during that year..
[0mHTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/chat/completions "HTTP/1.1 200 OK"
<IPython.core.display.HTML object>
En 2020, Lyft continuó invirtiendo fuertemente en investigación y desarrollo como parte de su misión de revolucionar el transporte. La compañía realizó inversiones enfocadas para lanzar nuevas innovaciones en su plataforma. Un ejemplo notable es la adquisición de Flexdrive, LLC, un socio de larga data en el programa Express Drive de Lyft. Se espera que esta adquisición contribuya al crecimiento del negocio de Lyft y ayude a expandir el rango de sus casos de uso. Además, Lyft invirtió en la expansión de su red de vehículos ligeros y tecnología de plataforma abierta autónoma para mantenerse a la vanguardia de la innovación en el transporte. A pesar del impacto de COVID-19, Lyft planea seguir invirtiendo en el futuro, tanto orgánicamente como a través de adquisiciones de negocios complementarios.
Consultas complejas
Probemos consultas que requieren múltiples herramientas.
Consulta: ¿Qué hizo Lyft en I+D en 2022 vs 2020?
Puedes ver que usó las herramientas lyft_2020 y lyft_2022 con FunctionCallingAgent para responder la consulta.
response = query_engine.query("What did Lyft do in R&D in 2022 vs 2020?")
display(HTML(f'<p style="font-size:20px">{response.response}</p>'))
HTTP Request: POST https://api.mistral.ai/v1/chat/completions "HTTP/1.1 200 OK"
Selecting query engine 3: This choice is most relevant as it spans multiple years from 2020 to 2022, which would allow for a comparison of Lyft's R&D activities in 2022 versus 2020..
[1;3;38;5;200mSelecting query engine 3: This choice is most relevant as it spans multiple years from 2020 to 2022, which would allow for a comparison of Lyft's R&D activities in 2022 versus 2020..
[0mAdded user message to memory: What did Lyft do in R&D in 2022 vs 2020?
HTTP Request: POST https://api.mistral.ai/v1/chat/completions "HTTP/1.1 200 OK"
=== Calling Function ===
Calling function: lyft_2020_10k_form with args: {"input": "R&D expenses"}
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/chat/completions "HTTP/1.1 200 OK"
=== Calling Function ===
Calling function: lyft_2022_10k_form with args: {"input": "R&D expenses"}
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/chat/completions "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/chat/completions "HTTP/1.1 200 OK"
<IPython.core.display.HTML object>
assistant: En 2020, los gastos de Investigación y Desarrollo de Lyft fueron de $25,376 millones, después de contabilizar un beneficio de compensación basada en acciones de $37,082 millones y costos de indemnización y otros costos de empleados de $11,706 millones. En 2022, estos gastos disminuyeron a $856,777 mil, una disminución de $55.2 millones, o 6%. Esta disminución se debió principalmente a una reducción en los costos relacionados con el personal y la compensación basada en acciones, impulsada por una reducción de la plantilla después de una transacción con Woven Planet en el tercer trimestre de 2021. También hubo disminuciones en los costos de Nivel 5, tarifas de alojamiento web, costos de investigación de vehículos autónomos y costos de consultoría y asesoramiento. Sin embargo, estas disminuciones fueron parcialmente compensadas por los costos de reestructuración relacionados con un evento en el cuarto trimestre de 2022.
Consulta: ¿Qué hizo Lyft en I+D en 2021 vs 2020?
Puedes ver que usó las herramientas lyft_2020 y lyft_2021 con FunctionCallingAgent para responder la consulta.
response = query_engine.query("What did Lyft do in R&D in 2020 vs 2021?")
display(HTML(f'<p style="font-size:20px">{response.response}</p>'))
HTTP Request: POST https://api.mistral.ai/v1/chat/completions "HTTP/1.1 200 OK"
Selecting query engine 3: This choice is most relevant as it spans multiple years from 2020 to 2022, which would cover the comparison of Lyft's R&D activities in 2020 vs 2021..
[1;3;38;5;200mSelecting query engine 3: This choice is most relevant as it spans multiple years from 2020 to 2022, which would cover the comparison of Lyft's R&D activities in 2020 vs 2021..
[0mAdded user message to memory: What did Lyft do in R&D in 2020 vs 2021?
HTTP Request: POST https://api.mistral.ai/v1/chat/completions "HTTP/1.1 200 OK"
=== Calling Function ===
Calling function: lyft_2020_10k_form with args: {"input": "R&D activities"}
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/chat/completions "HTTP/1.1 200 OK"
=== Calling Function ===
Calling function: lyft_2021_10k_form with args: {"input": "R&D activities"}
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/chat/completions "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/chat/completions "HTTP/1.1 200 OK"
<IPython.core.display.HTML object>
assistant: En 2020, Lyft realizó importantes inversiones en investigación y desarrollo para lanzar nuevas innovaciones en su plataforma. Adquirieron Flexdrive, LLC, uno de sus socios de larga data en el programa Express Drive, lo que se espera que contribuya al crecimiento de su negocio y ayude a expandir el rango de sus casos de uso. También invirtieron en la expansión de su red de vehículos ligeros y tecnología de plataforma abierta autónoma. En 2021, las actividades de I+D de Lyft consistieron principalmente en costos de compensación relacionados con el personal y costos de instalaciones, incluidos los costos relacionados con las iniciativas de tecnología de vehículos autónomos. Sin embargo, después de una transacción con Woven Planet, una subsidiaria de Toyota Motor Corporation, ciertos costos relacionados con la iniciativa anterior de Lyft para desarrollar sistemas de autoconducción se eliminaron a partir del tercer trimestre de 2021. Esta transacción implicó la desinversión de ciertos activos relacionados con la división de vehículos autónomos de Lyft, Nivel 5.
Consulta: ¿Qué hizo Lyft en I+D en 2022 vs 2021 vs 2020?
Puedes ver que usó las herramientas lyft_2020, lyft_2021 y lyft_2022 con FunctionCallingAgent para responder la consulta.
response = query_engine.query("What did Lyft do in R&D in 2022 vs 2021 vs 2020?")
display(HTML(f'<p style="font-size:20px">{response.response}</p>'))
HTTP Request: POST https://api.mistral.ai/v1/chat/completions "HTTP/1.1 200 OK"
Selecting query engine 3: This choice is most relevant as it spans multiple years from 2020 to 2022, which would allow for a comparison of Lyft's R&D activities across these years..
[1;3;38;5;200mSelecting query engine 3: This choice is most relevant as it spans multiple years from 2020 to 2022, which would allow for a comparison of Lyft's R&D activities across these years..
[0mAdded user message to memory: What did Lyft do in R&D in 2022 vs 2021 vs 2020?
HTTP Request: POST https://api.mistral.ai/v1/chat/completions "HTTP/1.1 200 OK"
=== Calling Function ===
Calling function: lyft_2020_10k_form with args: {"input": "R&D"}
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/chat/completions "HTTP/1.1 200 OK"
=== Calling Function ===
Calling function: lyft_2021_10k_form with args: {"input": "R&D"}
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/chat/completions "HTTP/1.1 200 OK"
=== Calling Function ===
Calling function: lyft_2022_10k_form with args: {"input": "R&D"}
HTTP Request: POST https://api.mistral.ai/v1/embeddings "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/chat/completions "HTTP/1.1 200 OK"
HTTP Request: POST https://api.mistral.ai/v1/chat/completions "HTTP/1.1 200 OK"
<IPython.core.display.HTML object>
assistant: En 2020, Lyft realizó inversiones sustanciales en investigación y desarrollo, con un enfoque en el lanzamiento de nuevas innovaciones en su plataforma. Poseían 342 patentes estadounidenses emitidas y tenían 446 solicitudes de patentes estadounidenses pendientes, junto con 59 patentes emitidas en jurisdicciones extranjeras y 223 solicitudes pendientes en jurisdicciones extranjeras. En 2021, los gastos de I+D de Lyft consistieron principalmente en costos de compensación relacionados con el personal y costos de instalaciones. También tuvieron costos relacionados con iniciativas de tecnología de vehículos autónomos. Sin embargo, el 13 de julio de 2021, Lyft completó una transacción con Woven Planet, una subsidiaria de Toyota Motor Corporation, para la desinversión de ciertos activos relacionados con su división de vehículos autónomos, Nivel 5. Como resultado, ciertos costos relacionados con su iniciativa anterior para desarrollar sistemas de autoconducción se eliminaron a partir del tercer trimestre de 2021. En 2022, los gastos de I+D de Lyft disminuyeron en $55.2 millones, o 6%, en comparación con el año anterior. Esta disminución se debió principalmente a una reducción en los costos relacionados con el personal y la compensación basada en acciones, impulsada por una reducción de la plantilla después de la transacción con Woven Planet en el tercer trimestre de 2021. También hubo disminuciones en los costos de Nivel 5, tarifas de alojamiento web, costos de investigación de vehículos autónomos y costos de consultoría y asesoramiento. Sin embargo, estas disminuciones fueron parcialmente compensadas por los costos de reestructuración en el cuarto trimestre de 2022, que incluyeron costos por deterioro de los activos por derecho de uso de arrendamientos operativos, costos de indemnización y beneficios, y compensación basada en acciones.