¿Alguna vez te has antagónico mirando la índice de ingredientes de un producto y buscando en Google nombres químicos desconocidos para descubrir qué significan? Es una lucha popular: descifrar información compleja del producto en el acto puede resultar abrumador y tolerar mucho tiempo. Los métodos tradicionales, como inquirir cada ingrediente individualmente, a menudo conducen a resultados fragmentados y confusos. Pero, ¿qué pasaría si existiera una forma más inteligente y rápida de analizar los ingredientes de los productos y obtener información clara y procesable al instante? En este artículo, lo guiaremos en la construcción de un analizador de ingredientes de productos usando Géminis 2.0Phidata y Tavily Web Search. ¡Profundicemos y demos sentido a esas listas de ingredientes de una vez por todas!
Objetivos de estudios
- Diseñe una cimentación de agente de IA multimodal utilizando Phidata y Gemini 2.0 para tareas de visión y jerga.
- Integre Tavily Web Search en los flujos de trabajo de los agentes para obtener un mejor contexto y recuperación de información.
- Cree un agente analizador de ingredientes de productos que combine procesamiento de imágenes y búsqueda web para obtener información detallada sobre el producto.
- Descubra cómo las indicaciones y las instrucciones del sistema guían el comportamiento de los agentes en tareas multimodales.
- Desarrolle una interfaz de usufructuario Streamlit para descomposición de imágenes en tiempo efectivo, detalles nutricionales y sugerencias basadas en la salubridad.
Este artículo fue publicado como parte del Blogatón de ciencia de datos.
¿Qué son los sistemas multimodales?
Los sistemas multimodales procesan y comprenden múltiples tipos de datos de entrada, como texto, imágenes, audio y video, simultáneamente. Los modelos de jerga de visión, como Gemini 2.0 Flash, GPT-4o, Claude Sonnet 3.5 y Pixtral-12B, destacan en la comprensión de las relaciones entre estas modalidades y extraen información significativa de entradas complejas.
En este contexto, nos centramos en modelos de visión y jerga que analizan imágenes y generan información textual. Estos sistemas combinan visión por computadora y procesamiento del jerga natural para interpretar información visual basándose en las indicaciones del usufructuario.
Casos de uso multimodales del mundo efectivo
Los sistemas multimodales están transformando las industrias:
- Finanzas: Los usuarios pueden tomar capturas de pantalla de términos desconocidos en formularios en columna y obtener explicaciones instantáneas.
- Comercio electrónico: Los compradores pueden fotografiar las etiquetas de los productos para tomar descomposición detallados de los ingredientes e información sobre la salubridad.
- Educación: Los estudiantes pueden capturar diagramas de libros de texto y tomar explicaciones simplificadas.
- Cuidado de la salubridad: Los pacientes pueden escanear informes médicos o etiquetas de recetas para obtener explicaciones simplificadas de los términos e instrucciones de dosificación.
¿Por qué agente multimodal?
El cambio de la IA monomodo a agentes multimodales marca un gran brinco en la forma en que interactuamos con los sistemas de IA. Esto es lo que hace que los agentes multimodales sean tan efectivos:
- Procesan información visual y textual simultáneamente, brindando respuestas más precisas y conscientes del contexto.
- Simplifican información compleja, haciéndola accesible para los usuarios que pueden tener dificultades con términos técnicos o contenido detallado.
- En ocupación de inquirir manualmente componentes individuales, los usuarios pueden cargar una imagen y tomar un descomposición completo en un solo paso.
- Al combinar herramientas como la búsqueda web y el descomposición de imágenes, proporcionan información más completa y confiable.
Agente analizador de ingredientes de productos de construcción

Analicemos la implementación de un Agente de Exploración de Ingredientes del Producto:
Paso 1: configurar las dependencias
- Gemini 2.0 Flash: maneja el procesamiento multimodal con capacidades de visión mejoradas
- Tavily Search: proporciona integración de búsqueda web para contexto adicional
- Phidata: organiza el sistema de agentes y gestiona los flujos de trabajo
- Streamlit: Desarrollar el prototipo en aplicaciones basadas en web.
!pip install phidata google-generativeai tavily-python streamlit pillow
Paso 2: Configuración y configuración de API
En este paso, configuraremos las variables de entorno y recopilaremos las credenciales de API necesarias para ejecutar este caso de uso.
from phi.agent import Agent
from phi.model.google import Gemini # needs a api key
from phi.tools.tavily import TavilyTools # also needs a api key
import os
TAVILY_API_KEY = ""
GOOGLE_API_KEY = ""
os.environ('TAVILY_API_KEY') = TAVILY_API_KEY
os.environ('GOOGLE_API_KEY') = GOOGLE_API_KEY
Paso 3: Aviso del sistema e instrucciones
Para obtener mejores respuestas de los modelos de jerga, es necesario escribir mejores indicaciones. Esto implica especificar claramente la función y proporcionar instrucciones detalladas en el mensaje del sistema para el LLM.
Definamos el rol y responsabilidades de un Agente con experiencia en descomposición de ingredientes y alimento. Las instrucciones deben ejemplarizar al Agente para analizar sistemáticamente productos alimenticios, evaluar ingredientes, considerar restricciones dietéticas y evaluar implicaciones para la salubridad.
SYSTEM_PROMPT = """
You are an expert Food Product Analyst specialized in ingredient analysis and nutrition science.
Your role is to analyze product ingredients, provide health insights, and identify potential concerns by combining ingredient analysis with scientific research.
You utilize your nutritional knowledge and research works to provide evidence-based insights, making complex ingredient information accessible and actionable for users.
Return your response in Markdown format.
"""
INSTRUCTIONS = """
* Read ingredient list from product image
* Remember the user may not be educated about the product, break it down in simple words like explaining to 10 year kid
* Identify químico additives and preservatives
* Check against major dietary restrictions (vegan, halal, kosher). Include this in response.
* Rate nutritional value on scale of 1-5
* Highlight key health implications or concerns
* Suggest healthier alternatives if needed
* Provide brief evidence-based recommendations
* Use Search tool for getting context
"""
Paso 4: especificar el objeto del agente
El Agente, creado con Phidata, está configurado para procesar el formato de rebajas y proceder según el indicador del sistema y las instrucciones definidas anteriormente. El maniquí de razonamiento utilizado en este ejemplo es Gemini 2.0 Flash, conocido por su capacidad superior para comprender imágenes y vídeos en comparación con otros modelos.
Para la integración de herramientas, utilizaremos Tavily Search, un motor de búsqueda web liberal que proporciona contexto relevante directamente en respuesta a las consultas de los usuarios, evitando descripciones, URL y parámetros irrelevantes innecesarios.
agent = Agent(
model = Gemini(id="gemini-2.0-flash-exp"),
tools = (TavilyTools()),
markdown=True,
system_prompt = SYSTEM_PROMPT,
instructions = INSTRUCTIONS
)
Paso 5: Multimodal: comprensión de la imagen
Una vez instalados los componentes del Agente, el sucesivo paso es proporcionar información al usufructuario. Esto se puede hacer de dos maneras: pasando la ruta de la imagen o la URL, contiguo con un mensaje de usufructuario que especifica qué información se debe extraer de la imagen proporcionada.
Enfoque: 1 Usando la ruta de la imagen

agent.print_response(
"Analyze the product image",
images = ("images/bournvita.jpg"),
stream=True
)
Producción:

Enfoque: 2 Usando URL
agent.print_response(
"Analyze the product image",
images = ("https://beardo.in/cdn/shop/products/9_2ba7ece4-0372-4a34-8040-5dc40c89f103.jpg?v=1703589764&width=1946"),
stream=True
)
Producción:

Paso 6: desarrolle la aplicación web usando Streamlit
Ahora que sabemos cómo ejecutar el Agente multimodal, construyamos la parte de la interfaz de usufructuario usando Streamlit.
import streamlit as st
from PIL import Image
from io import BytesIO
from tempfile import NamedTemporaryFile
st.title("🔍 Product Ingredient Analyzer")
Para optimizar el rendimiento, defina la inferencia del Agente en una función almacenada en gusto. El interiorista de gusto ayuda a mejorar la eficiencia al reutilizar la instancia del Agente.
Entregado que estamos usando Streamlit, que actualiza toda la página posteriormente de cada tirabuzón de evento o activación de widget, juntar st.cache_resource garantiza que la función no se actualice y la vigilante en el gusto.
@st.cache_resource
def get_agent():
return Agent(
model=Gemini(id="gemini-2.0-flash-exp"),
system_prompt=SYSTEM_PROMPT,
instructions=INSTRUCTIONS,
tools=(TavilyTools(api_key=os.getenv("TAVILY_API_KEY"))),
markdown=True,
)
Cuando el usufructuario proporciona una nueva ruta de imagen, la función analizar_imagen se ejecuta y ejecuta el objeto Agente definido en get_agent. Para la captura en tiempo efectivo y la opción de cargar imágenes, el archivo cargado debe protegerse temporalmente para su procesamiento.
La imagen se almacena en un archivo temporal y, una vez completada la ejecución, el archivo temporal se elimina para liberar capital. Esto se puede hacer usando la función NamedTemporaryFile de la biblioteca tempfile.
def analyze_image(image_path):
agent = get_agent()
with st.spinner('Analyzing image...'):
response = agent.run(
"Analyze the given image",
images=(image_path),
)
st.markdown(response.content)
def save_uploaded_file(uploaded_file):
with NamedTemporaryFile(dir=".", suffix='.jpg', delete=False) as f:
f.write(uploaded_file.getbuffer())
return f.name
Para una mejor interfaz de usufructuario, cuando un usufructuario selecciona una imagen, es probable que tenga diferentes resoluciones y tamaños. Para prolongar un diseño consistente y mostrar correctamente la imagen, podemos cambiar el tamaño de la imagen cargada o capturada para asegurarnos de que encaje claramente en la pantalla.
El operación de remuestreo de LANCZOS proporciona un cambio de tamaño de incorporación calidad, lo que resulta especialmente benefactor para imágenes de productos donde la claridad del texto es crucial para el descomposición de ingredientes.
MAX_IMAGE_WIDTH = 300
def resize_image_for_display(image_file):
img = Image.open(image_file)
aspect_ratio = img.height / img.width
new_height = int(MAX_IMAGE_WIDTH * aspect_ratio)
img = img.resize((MAX_IMAGE_WIDTH, new_height), Image.Resampling.LANCZOS)
buf = BytesIO()
img.save(buf, format="PNG")
return buf.getvalue()
Paso 7: Funciones de la interfaz de usufructuario para Streamlit
La interfaz está dividida en tres pestañas de navegación donde el usufructuario puede designar sus intereses:
- Pestaña-1: Productos de ejemplo que los usuarios pueden decantarse para probar la aplicación
- Pestaña-2: Subir una imagen de tu dilema si ya está guardado.
- Pestaña 3: Capturar o Toma una foto en vivo y analizar el producto.
Repetimos el mismo flujo metódico para las 3 pestañas:
- Primero, elija la imagen de su dilema y cambie su tamaño para mostrarla en la interfaz de usufructuario de Streamlit usando imagen st..
- En segundo ocupación, guarde esa imagen en un directorio temporal para procesarla en el objeto Agente.
- En tercer ocupación, analice la imagen donde se llevará a extremo la ejecución del Agente utilizando Gemini 2.0 LLM y la aparejo Tavily Search.
La dirección del estado se maneja a través del estado de la sesión de Streamlit, rastreando los ejemplos seleccionados y el estado del descomposición.

def main():
if 'selected_example' not in st.session_state:
st.session_state.selected_example = None
if 'analyze_clicked' not in st.session_state:
st.session_state.analyze_clicked = False
tab_examples, tab_upload, tab_camera = st.tabs((
"📚 Example Products",
"📤 Upload Image",
"📸 Take Photo"
))
with tab_examples:
example_images = {
"🥤 Energy Drink": "images/bournvita.jpg",
"🥔 Potato Chips": "images/lays.jpg",
"🧴 Shampoo": "images/shampoo.jpg"
}
cols = st.columns(3)
for idx, (name, path) in enumerate(example_images.items()):
with cols(idx):
if st.button(name, use_container_width=True):
st.session_state.selected_example = path
st.session_state.analyze_clicked = False
with tab_upload:
uploaded_file = st.file_uploader(
"Upload product image",
type=("jpg", "jpeg", "png"),
help="Upload a clear image of the product's ingredient list"
)
if uploaded_file:
resized_image = resize_image_for_display(uploaded_file)
st.image(resized_image, caption="Uploaded Image", use_container_width=False, width=MAX_IMAGE_WIDTH)
if st.button("🔍 Analyze Uploaded Image", key="analyze_upload"):
temp_path = save_uploaded_file(uploaded_file)
analyze_image(temp_path)
os.unlink(temp_path)
with tab_camera:
camera_photo = st.camera_input("Take a picture of the product")
if camera_photo:
resized_image = resize_image_for_display(camera_photo)
st.image(resized_image, caption="Captured Photo", use_container_width=False, width=MAX_IMAGE_WIDTH)
if st.button("🔍 Analyze Captured Photo", key="analyze_camera"):
temp_path = save_uploaded_file(camera_photo)
analyze_image(temp_path)
os.unlink(temp_path)
if st.session_state.selected_example:
st.divider()
st.subheader("Selected Product")
resized_image = resize_image_for_display(st.session_state.selected_example)
st.image(resized_image, caption="Selected Example", use_container_width=False, width=MAX_IMAGE_WIDTH)
if st.button("🔍 Analyze Example", key="analyze_example") and not st.session_state.analyze_clicked:
st.session_state.analyze_clicked = True
analyze_image(st.session_state.selected_example)
Enlaces importantes
- Puedes encontrar el código completo. aquí.
- Reemplace el «
”señalador de posición con tus claves. - Para tab_examples, debe tener una imagen de carpeta. Y vigilante las imágenes allí. Aquí está la URL de GitHub con el directorio de imágenes. aquí.
- Si está interesado en utilizar el caso de uso, aquí está la aplicación implementada. aquí.
Conclusión
Los agentes de IA multimodal representan un gran avance en la forma en que podemos interactuar y comprender información compleja en nuestra vida diaria. Al combinar el procesamiento de la visión, la comprensión del jerga natural y las capacidades de búsqueda web, estos sistemas, como el analizador de ingredientes del producto, pueden proporcionar un descomposición instantáneo y completo de los productos y sus ingredientes, haciendo que la toma de decisiones informadas sea más accesible para todos.
Conclusiones secreto
- Los agentes de IA multimodal mejoran la forma en que entendemos la información del producto. Combinan descomposición de texto e imágenes.
- Con Phidata, un ámbito de código extenso, podemos crear y tramitar sistemas de agentes. Estos sistemas utilizan modelos como GPT-4o y Gemini 2.0.
- Los agentes utilizan herramientas como el procesamiento de visión y la búsqueda web. Esto hace que su descomposición sea más completo y preciso. Los LLM tienen conocimientos limitados, por lo que los agentes utilizan herramientas para manejar mejor las tareas complejas.
- Streamlit facilita la creación de aplicaciones web para herramientas basadas en LLM. Los ejemplos incluyen RAG y agentes multimodales.
- Los buenos mensajes e instrucciones del sistema guían al agente. Esto garantiza respuestas enseres y precisas.
Preguntas frecuentes
A. LLaVA (Large Language and Vision Assistant), Pixtral-12B de Mistral.AI, Multimodal-GPT de OpenFlamingo, NVILA de Nvidia y el maniquí Qwen son algunos modelos de jerga de visión multimodal de código extenso o ponderados que procesan texto e imágenes para tareas. como respuesta visual a preguntas.
R. Sí, Pira 3 es multimodal y asimismo los modelos Pira 3.2 Vision (parámetros 11B y 90B) procesan texto e imágenes, lo que permite tareas como subtítulos de imágenes y razonamiento visual.
R. Un maniquí multimodal de jerga conspicuo (LLM) procesa y genera datos en varias modalidades, como texto, imágenes y audio. Por el contrario, un Agente Multimodal utiliza dichos modelos para interactuar con su entorno, realizar tareas y tomar decisiones basadas en entradas multimodales, a menudo integrando herramientas y sistemas adicionales para ejecutar acciones complejas.
Los medios que se muestran en este artículo no son propiedad de Analytics Vidhya y se utilizan a discreción del autor.