{"id":17061,"date":"2025-04-23T04:50:54","date_gmt":"2025-04-23T11:50:54","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=17061"},"modified":"2025-06-16T10:43:34","modified_gmt":"2025-06-16T17:43:34","slug":"couchbase-partners-arize-ai","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/couchbase-partners-arize-ai\/","title":{"rendered":"Couchbase se asocia con Arize AI para permitir aplicaciones de agentes de IA fiables y listas para la producci\u00f3n"},"content":{"rendered":"<p>A medida que las empresas buscan desplegar aplicaciones de agentes de IA listas para la producci\u00f3n, la observabilidad de Large Language Model (LLM) ha surgido como un requisito cr\u00edtico para garantizar tanto el rendimiento como la confianza. Las organizaciones necesitan visibilidad sobre c\u00f3mo interact\u00faan los agentes con los datos, toman decisiones y recuperan informaci\u00f3n para mantener la fiabilidad, la seguridad y el cumplimiento. Sin una observabilidad adecuada, las empresas corren el riesgo de implantar modelos que produzcan resultados incoherentes, imprecisos o sesgados, lo que se traduce en malas experiencias de usuario e ineficiencias operativas. La nueva asociaci\u00f3n entre <a href=\"https:\/\/www.couchbase.com\/blog\/es\/\" target=\"_blank\" rel=\"noopener\">Couchbase <\/a>y <a href=\"https:\/\/arize.com\/\" target=\"_blank\" rel=\"noopener\">Arize AI<\/a> desempe\u00f1a un papel vital a la hora de aportar s\u00f3lidas capacidades de supervisi\u00f3n, evaluaci\u00f3n y optimizaci\u00f3n a las aplicaciones basadas en IA.<\/p>\n<p>La integraci\u00f3n de Couchbase y Arize AI ofrece una potente soluci\u00f3n para construir y monitorizar Retrieval Augmented Generation (RAG) y aplicaciones de agentes a escala. Al aprovechar la base de datos vectorial de alto rendimiento de Couchbase y la plataforma de observabilidad Arize AI y las capacidades de monitorizaci\u00f3n mejoradas, las empresas pueden construir, desplegar y optimizar con confianza soluciones Agentic RAG en producci\u00f3n.<\/p>\n<p>En este blog, vamos a caminar a trav\u00e9s de la creaci\u00f3n de un chatbot Agentic RAG QA utilizando LangGraph y el Couchbase <a href=\"https:\/\/couchbaselabs.github.io\/agent-catalog\/index.html#\" target=\"_blank\" rel=\"noopener\">Cat\u00e1logo de agentes<\/a> de la recientemente anunciada <a href=\"https:\/\/www.couchbase.com\/blog\/es\/products\/ai-services\/\" target=\"_blank\" rel=\"noopener\">Servicios de IA de Capella<\/a> (en vista previa), y evaluando y optimizando su rendimiento con Arize AI. Este es un ejemplo tangible de c\u00f3mo Couchbase y Arize AI permiten a los desarrolladores mejorar los flujos de trabajo de recuperaci\u00f3n, mejorar la precisi\u00f3n de las respuestas y supervisar las interacciones impulsadas por LLM en tiempo real.<\/p>\n<h2>El valor de la asociaci\u00f3n entre Couchbase y Arize AI<\/h2>\n<p>Al unir fuerzas, Couchbase y Arize AI est\u00e1n revolucionando la forma en que los desarrolladores construyen y eval\u00faan aplicaciones de agentes de IA. Los desarrolladores pueden construir sofisticadas aplicaciones de agentes aprovechando Couchbase Capella como una \u00fanica plataforma de datos para el almacenamiento en cach\u00e9 LLM, memoria de agentes a largo y corto plazo, casos de uso de incrustaci\u00f3n de vectores, an\u00e1lisis y cargas de trabajo operativas junto con su marco de desarrollo de agentes favorito para orquestar flujos de trabajo de agentes.<\/p>\n<p>Couchbase Agent Catalog mejora a\u00fan m\u00e1s este sistema proporcionando un almac\u00e9n centralizado para flujos de trabajo multi-agente dentro de una organizaci\u00f3n que permite el almacenamiento, la gesti\u00f3n y el descubrimiento de varias herramientas de agente, el versionado r\u00e1pido y la depuraci\u00f3n de trazas LLM.<\/p>\n<p>Para garantizar una alta fiabilidad y transparencia, Arize AI ofrece funciones de observabilidad cr\u00edticas, entre las que se incluyen:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li aria-level=\"1\"><b>Rastreo de llamadas a funciones del agente<\/b>: Arize permite una supervisi\u00f3n detallada de las llamadas a funciones del agente, incluidos los pasos de recuperaci\u00f3n y las interacciones LLM, para hacer un seguimiento de c\u00f3mo se generan las respuestas.<\/li>\n<li aria-level=\"1\"><b>Comparaci\u00f3n de conjuntos de datos<\/b>: Los desarrolladores pueden crear un conjunto de datos estructurados para evaluar y comparar el rendimiento de los agentes a lo largo del tiempo.<\/li>\n<li aria-level=\"1\"><b>Evaluaci\u00f3n del rendimiento con LLM como juez<\/b>: Mediante evaluadores integrados, Arize aprovecha los LLM para evaluar la precisi\u00f3n de las respuestas, la pertinencia y la eficacia general del agente.<\/li>\n<li aria-level=\"1\"><b>Experimentar con estrategias de recuperaci\u00f3n<\/b>: Ajustando el tama\u00f1o de los trozos, los solapamientos y el n\u00famero de documentos recuperados (valor K), los desarrolladores pueden analizar su impacto en el rendimiento del agente.<\/li>\n<li aria-level=\"1\"><b>An\u00e1lisis comparativo en Arize<\/b>: La plataforma permite comparar diferentes estrategias de recuperaci\u00f3n, lo que ayuda a los equipos a determinar la configuraci\u00f3n \u00f3ptima para su agente.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3 style=\"font-size: 1.5em;\">La importancia de la observabilidad del LLM<\/h3>\n<p>Para garantizar que las aplicaciones de IA funcionen bien en producci\u00f3n, las empresas necesitan un marco de evaluaci\u00f3n s\u00f3lido. Las herramientas de observabilidad como Arize AI permiten a los desarrolladores:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li aria-level=\"1\">Evaluar los resultados del LLM en funci\u00f3n de factores como la pertinencia, los \u00edndices de alucinaci\u00f3n y la latencia.<\/li>\n<li aria-level=\"1\">Realizaci\u00f3n de evaluaciones sistem\u00e1ticas para medir el impacto de los cambios en los avisos, las modificaciones en la recuperaci\u00f3n y los ajustes de los par\u00e1metros.<\/li>\n<li aria-level=\"1\">Recopilar conjuntos de datos exhaustivos para evaluar el rendimiento en diferentes casos de uso.<\/li>\n<li aria-level=\"1\">Automatizar los procesos de evaluaci\u00f3n dentro de las canalizaciones CI\/CD, garantizando una fiabilidad constante de las aplicaciones.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Utilizando un LLM como juez, Arize AI permite a los desarrolladores medir la eficacia del agente utilizando evaluadores probados previamente, t\u00e9cnicas de evaluaci\u00f3n personalizadas de varios niveles y evaluaciones comparativas de rendimiento a gran escala. Mediante la ejecuci\u00f3n de miles de evaluaciones, los equipos pueden iterar r\u00e1pidamente y perfeccionar las indicaciones del LLM, los m\u00e9todos de recuperaci\u00f3n y los flujos de trabajo del agente para mejorar la calidad general de la aplicaci\u00f3n.<\/p>\n<h3 style=\"font-size: 1.5em;\">Creaci\u00f3n de un chatbot RAG Agentic QA<\/h3>\n<p>La RAG Agentic combina la potencia de la generaci\u00f3n tradicional de recuperaci\u00f3n aumentada con la toma de decisiones inteligente. En esta implementaci\u00f3n, permitimos que un LLM decida din\u00e1micamente si la recuperaci\u00f3n es necesaria en funci\u00f3n del contexto de la consulta.<\/p>\n<div id=\"attachment_17062\" style=\"width: 910px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-17062\" class=\"wp-image-17062 size-large\" style=\"border: 1px solid Gainsboro;\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/image1-1-1024x373.png\" alt=\"Arize AI for Agentic RAG with Couchbase\" width=\"900\" height=\"328\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/image1-1-1024x373.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/image1-1-300x109.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/image1-1-768x280.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/image1-1-1536x560.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/image1-1-1320x481.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/image1-1.png 1615w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><p id=\"caption-attachment-17062\" class=\"wp-caption-text\">Ilustraci\u00f3n que representa el flujo de trabajo del agente de <a href=\"https:\/\/github.com\/langchain-ai\/langgraph\/blob\/main\/examples\/rag\/langgraph_agentic_rag.ipynb\" target=\"_blank\" rel=\"noopener\">Ejemplo de RAG ag\u00e9ntico de Langgraph<\/a>.<\/p><\/div>\n<h2>Aplicaci\u00f3n paso a paso<\/h2>\n<p>El resto de este blog se basa en el <a href=\"https:\/\/github.com\/Arize-ai\/tutorials\/blob\/main\/python\/llm\/agents\/couchbase_langgraph_agentic_rag.ipynb\" target=\"_blank\" rel=\"noopener\">cuaderno tutorial<\/a>. Antes de crear y desplegar un agente de IA observable, tendr\u00e1 que configurar su entorno de desarrollo.<\/p>\n<h3 style=\"font-size: 1.5em;\">Requisitos previos:<\/h3>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\n<li aria-level=\"1\">Para seguir este tutorial, necesitar\u00e1s <a href=\"https:\/\/app.arize.com\/auth\/join\" target=\"_blank\" rel=\"noopener\">inscribirse en Arize<\/a> y obt\u00e9n tus claves Space, API y Developer. Puede ver las <a href=\"https:\/\/docs.arize.com\/arize\/llm-tracing\/quickstart-llm#get-your-api-keys\" target=\"_blank\" rel=\"noopener\">gu\u00eda aqu\u00ed<\/a>. Tambi\u00e9n necesitar\u00e1 un <a href=\"https:\/\/openai.com\/\" target=\"_blank\" rel=\"noopener\">Clave API de OpenAI<\/a>.<\/li>\n<li aria-level=\"1\">Tendr\u00e1s que configurar tu cl\u00faster Couchbase haciendo lo siguiente:\n<ol>\n<li aria-level=\"2\">Cree una cuenta en <a href=\"https:\/\/cloud.couchbase.com\/\" target=\"_blank\" rel=\"noopener\">Nube Couchbase<\/a><\/li>\n<li aria-level=\"2\">Cree un cl\u00faster libre con los servicios de datos, \u00edndices y b\u00fasqueda activados*.<\/li>\n<li aria-level=\"2\">Crear credenciales de acceso al cl\u00faster<\/li>\n<li aria-level=\"2\">Permitir el acceso al cl\u00faster desde su m\u00e1quina local<\/li>\n<li aria-level=\"2\">Crea un cubo para almacenar tus documentos<\/li>\n<li aria-level=\"2\">Crear un <a href=\"https:\/\/docs.couchbase.com\/cloud\/vector-search\/create-vector-search-index-ui.html\" target=\"_blank\" rel=\"noopener\">\u00edndice de b\u00fasqueda<\/a><\/li>\n<\/ol>\n<\/li>\n<li aria-level=\"1\">Cree herramientas y avisos requeridos por los agentes usando el Cat\u00e1logo de Agentes de Couchbase (para la instalaci\u00f3n y m\u00e1s instrucciones, explore la documentaci\u00f3n <a href=\"https:\/\/couchbaselabs.github.io\/agent-catalog\/index.html\" target=\"_blank\" rel=\"noopener\">aqu\u00ed<\/a>)<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p>*El Servicio de B\u00fasqueda se utilizar\u00e1 para realizar la B\u00fasqueda Sem\u00e1ntica m\u00e1s adelante cuando utilicemos el cat\u00e1logo de Agentes.<\/p>\n<hr \/>\n<h3 style=\"font-size: 1.5em;\">1) Crear un chatbot Agentic RAG usando LangGraph, Couchbase como almac\u00e9n de vectores y Cat\u00e1logo de Agentes para gestionar los agentes de IA.<\/h3>\n<h4 style=\"font-size: 1.25em;\">Configuraci\u00f3n de dependencias<\/h4>\n<pre class=\"nums:false wrap:true lang:python decode:true\">%pip install -qU langchain-openai langchain-community langchain langgraph langgraph.prebuilt openai langchain-couchbase agentc langchain-huggingface langchain_core\r\n\r\n%pip install -qq \"arize-phoenix[evals]&gt;=7.0.0\" \"arize-otel&gt;=0.7.0\" \"openinference-instrumentation-openai&gt;=0.1.18\" \"openinference-instrumentation-langchain&gt;=0.1.29\"<\/pre>\n<h4 style=\"font-size: 1.25em;\">Conexi\u00f3n a Couchbase<\/h4>\n<p>Usaremos Couchbase como nuestro almac\u00e9n de vectores. He aqu\u00ed c\u00f3mo configurar la conexi\u00f3n:<\/p>\n<pre class=\"nums:false wrap:true lang:python decode:true\">from datetime import timedelta\r\nfrom couchbase.auth import PasswordAuthenticator\r\nfrom couchbase.cluster import Cluster\r\nfrom couchbase.options import ClusterOptions\r\nfrom langchain_couchbase.vectorstores import CouchbaseSearchVectorStore\r\nfrom langchain_huggingface import HuggingFaceEmbeddings\r\n\r\nConfiguraci\u00f3n del cl\u00faster #\r\nCB_CONN_STRING = \"tu-cadena-de-conexi\u00f3n\"\r\nCB_USERNAME = \"tu-nombre-de-usuario\"\r\nCB_PASSWORD = \"tu-contrase\u00f1a\"\r\nBUCKET_NAME = \"tu-nombre-de-bucket\"\r\nSCOPE_NAME = \"su-nombre-de-\u00e1mbito\"\r\nCOLLECTION_NAME = \"su-nombre-de-colecci\u00f3n\"\r\nSEARCH_INDEX_NAME = \"su-nombre-del-\u00edndice-de-b\u00fasqueda\"\r\n\r\n# Conectarse al cl\u00faster couchbase\r\nauth = PasswordAuthenticator(CB_USERNAME, CB_PASSWORD)\r\noptions = ClusterOptions(auth)\r\noptions.apply_profile(\"wan_development\")\r\ncluster = Cluster(CB_CONN_STRING, options)\r\ncluster.wait_until_ready(timedelta(seconds=5))\r\n\r\n# Inicializar el almac\u00e9n de vectores\r\nembeddings = HuggingFaceEmbeddings(model_name=\"frase-transformadores\/todos-MiniLM-L12-v2\")\r\nvector_store = CouchbaseVectorStore(\r\n    cluster=cluster,\r\n    bucket_name=NOMBRE_BUCKET,\r\n    nombre_\u00e1mbito=NOMBRE_\u00c1MBITO,\r\n    collection_name=NOMBRE_COLECCI\u00d3N,\r\n    embedding=embeddings,\r\n    index_name=SEARCH_INDEX_NAME,\r\n)<\/pre>\n<h4 style=\"font-size: 1.25em;\">Introducci\u00f3n de documentos<\/h4>\n<p>Crearemos una funci\u00f3n de ayuda para cargar e indexar documentos con par\u00e1metros de fragmentaci\u00f3n configurables:<\/p>\n<pre class=\"nums:false wrap:true lang:python decode:true\">from langchain_community.document_loaders import WebBaseLoader\r\nfrom langchain_text_splitters import RecursiveCharacterTextSplitter\r\n\r\ndef reset_vector_store(vector_store, chunk_size=1024, chunk_overlap=20):\r\n    try:    \r\n        # Borrar documentos existentes\r\n        resultados = vector_store.similarity_search(\r\n            k=1000,\r\n            query=\"\",\r\n            search_options={\r\n                \"consulta\": {\"campo\": \"metadata.source\", \"match\": \"lilian_weng_blog\"}\r\n            },\r\n        )\r\n        si resultados:\r\n            deleted_ids = [result.id for result in results]\r\n            vector_store.delete(ids=id_eliminados)\r\n            \r\n        # Cargar documentos desde URLs\r\n        urls = [\r\n            \"https:\/\/lilianweng.github.io\/posts\/2024-07-07-hallucination\/\",\r\n\"https:\/\/lilianweng.github.io\/posts\/2023-03-15-prompt-engineering\/\",\r\n\"https:\/\/lilianweng.github.io\/posts\/2023-10-25-adv-attack-llm\/\",\r\n        ]\r\n        docs = [WebBaseLoader(url).load() para url en urls]\r\n        docs_list = [elemento para sublista en docs para elemento en sublista]\r\n\r\n        # Usar RecursiveCharacterTextSplitter con par\u00e1metros configurables\r\n        text_splitter = RecursiveCharacterTextSplitter(\r\n            chunk_size=tama\u00f1o_chunk,\r\n            chunk_overlap=chunk_overlap,\r\n            separators=[\"\\n\\n\", \"\\n\", \" \", \"\"],\r\n        )\r\n        doc_splits = text_splitter.split_documents(docs_list)\r\n        # A\u00f1adir metadatos a los documentos\r\n        para doc en doc_splits:\r\n            doc.metadata[\"source\"] = \"lilian_weng_blog\"\r\n            \r\n        # A\u00f1adir documentos al almac\u00e9n vectorial\r\n        vector_store.add_documents(doc_splits)\r\n        return vector_store\r\n    except ErrorValor as e:\r\n        print(f \"Error: {e}\")\r\n\r\n# Inicializar con la configuraci\u00f3n por defecto\r\nreset_vector_store(vector_store)<\/pre>\n<h4 style=\"font-size: 1.25em;\">Configuraci\u00f3n de la herramienta Retriever<\/h4>\n<p>Obtenga nuestra herramienta de recuperaci\u00f3n del Cat\u00e1logo de Agentes mediante la funci\u00f3n <code>agentec<\/code> proveedor. En el futuro, cuando se necesiten m\u00e1s herramientas (y\/o avisos) y la aplicaci\u00f3n sea m\u00e1s compleja, el SDK y la CLI del Cat\u00e1logo de Agentes podr\u00e1n utilizarse para obtener autom\u00e1ticamente las herramientas en funci\u00f3n del caso de uso (b\u00fasqueda sem\u00e1ntica) o por nombre.<\/p>\n<p>Para obtener instrucciones sobre c\u00f3mo se cre\u00f3 esta herramienta y m\u00e1s capacidades del cat\u00e1logo de agentes, consulte la documentaci\u00f3n <a href=\"https:\/\/couchbaselabs.github.io\/agent-catalog\/index.html\" target=\"_blank\" rel=\"noopener\">aqu\u00ed<\/a>.<\/p>\n<pre class=\"nums:false wrap:true lang:python decode:true\">importar agentc.langchain\r\nimport agentc\r\nfrom langchain_core.tools import tool\r\n\r\nprovider = agentc.Provider(\r\n    decorator=lambda t: tool(t.func),\r\n    secrets={\"CB_USERNAME\": CB_USERNAME\r\n            \"CB_PASSWORD\": CB_PASSWORD,\r\n            \"CB_CONN_STRING\": CB_CONN_STRING})\r\n\r\n# Obtener la herramienta retriever del Cat\u00e1logo de Agentes\r\nretriever_tool = provider.get_item(name=\"retriever_tool\", item_type=\"tool\")\r\ntools = herramienta_recuperador<\/pre>\n<h4 style=\"font-size: 1.25em;\">Definici\u00f3n del estado del agente<\/h4>\n<p>Definiremos un grafo de agentes para ayudar a todos los agentes implicados a comunicarse mejor entre s\u00ed. Los agentes se comunican a trav\u00e9s de un objeto `state` que se pasa a cada nodo y se modifica con la salida de ese nodo.<\/p>\n<p>Nuestro estado ser\u00e1 una lista de <em>mensajes<\/em> y cada nodo de nuestro grafo lo a\u00f1adir\u00e1 a \u00e9l:<\/p>\n<pre class=\"nums:false wrap:true lang:python decode:true\">from typing import Anotado, Secuencia, TypedDict\r\nfrom langchain_core.messages import BaseMessage\r\nfrom langgraph.graph.message import add_messages\r\n\r\nclase AgentState(TypedDict):\r\n    # La funci\u00f3n add_messages define c\u00f3mo debe procesarse una actualizaci\u00f3n\r\n    # Por defecto es reemplazar. add_messages dice \"append\"\r\n    mensajes: Anotado[Secuencia[MensajeBase], add_messages]<\/pre>\n<h4 style=\"font-size: 1.25em;\">Creaci\u00f3n de nodos de agente<\/h4>\n<p>Definiremos los componentes b\u00e1sicos de nuestro canal de agentes:<\/p>\n<p>Nodos: Funci\u00f3n de comprobaci\u00f3n de relevancia, Reescritura de consultas, Agente principal, Generaci\u00f3n de respuestas<\/p>\n<pre class=\"nums:false wrap:true lang:python decode:true\">from typing import Annotated, Literal, Sequence, TypedDict\r\nfrom langchain import hub\r\nfrom langchain_core.messages import BaseMessage, HumanMessage\r\nfrom langchain_core.output_parsers import StrOutputParser\r\nfrom langchain_core.prompts import PromptTemplate\r\nfrom langchain_core.pydantic_v1 import BaseModel, Field\r\nfrom langchain_openai import ChatOpenAI\r\nfrom langgraph.prebuilt import tools_condition\r\n\r\n### Relevance Checking Function\r\ndef grade_documents(state) -&gt; Literal[\"generate\", \"rewrite\"]:\r\n\u00a0\u00a0\u00a0\u00a0\"\"\"\r\n\u00a0\u00a0\u00a0\u00a0Determines whether the retrieved documents are relevant to the question.\r\n\u00a0\u00a0\u00a0\u00a0\"\"\"\r\n\u00a0\u00a0\u00a0\u00a0print(\"---CHECK RELEVANCE---\")\r\n\u00a0\u00a0\u00a0\u00a0# Data model\r\n\u00a0\u00a0\u00a0\u00a0class grade(BaseModel):\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"\"\"Binary score for relevance check.\"\"\"\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0binary_score: str = Field(description=\"Relevance score 'yes' or 'no'\")\r\n\u00a0\u00a0\u00a0\u00a0# LLM\r\n\u00a0\u00a0\u00a0\u00a0model = ChatOpenAI(temperature=0, model=\"gpt-4o\", streaming=True)\r\n\u00a0\u00a0\u00a0\u00a0llm_with_tool = model.with_structured_output(grade)\r\n\u00a0\u00a0\u00a0\u00a0#fetch a prompt from Agent Catalog\r\n\u00a0\u00a0\u00a0\u00a0grade_documents_prompt = PromptTemplate(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0template=provider.get_item(name=\"grade_documents\", item_type=\"prompt\").prompt.render(),\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0input_variables=[\"context\", \"question\"],\r\n\u00a0\u00a0\u00a0\u00a0)\r\n\u00a0\u00a0\u00a0\u00a0# Chain\r\n\u00a0\u00a0\u00a0\u00a0chain = grade_documents_prompt | llm_with_tool\r\n\u00a0\u00a0\u00a0\u00a0messages = state[\"messages\"]\r\n\u00a0\u00a0\u00a0\u00a0last_message = messages[-1]\r\n\u00a0\u00a0\u00a0\u00a0question = messages[0].content\r\n\u00a0\u00a0\u00a0\u00a0docs = last_message.content\r\n\r\n\u00a0\u00a0\u00a0\u00a0scored_result = chain.invoke({\"question\": question, \"context\": docs})\r\n\u00a0\u00a0\u00a0\u00a0score = scored_result.binary_score\r\n\u00a0\u00a0\u00a0\u00a0if score == \"yes\":\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0print(\"---DECISION: DOCS RELEVANT---\")\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \"generate\"\r\n\u00a0\u00a0\u00a0\u00a0else:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0print(\"---DECISION: DOCS NOT RELEVANT---\")\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0print(score)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return \"rewrite\"\r\n### Main Agent Node\r\ndef agent(state):\r\n\u00a0\u00a0\u00a0\u00a0\"\"\"\r\n\u00a0\u00a0\u00a0\u00a0Invokes the agent model to generate a response or use tools.\r\n\u00a0\u00a0\u00a0\u00a0\"\"\"\r\n\u00a0\u00a0\u00a0\u00a0print(\"---CALL AGENT---\")\r\n\u00a0\u00a0\u00a0\u00a0messages = state[\"messages\"]\r\n\u00a0\u00a0\u00a0\u00a0model = ChatOpenAI(temperature=0, streaming=True, model=\"gpt-4-turbo\")\r\n\u00a0\u00a0\u00a0\u00a0model = model.bind_tools(tools)\r\n\u00a0\u00a0\u00a0\u00a0response = model.invoke(messages)\r\n\u00a0\u00a0\u00a0\u00a0return {\"messages\": [response]}\r\n### Query Rewriting Node\r\ndef rewrite(state):\r\n\u00a0\u00a0\u00a0\u00a0\"\"\"\r\n\u00a0\u00a0\u00a0\u00a0Transform the query to produce a better question.\r\n\u00a0\u00a0\u00a0\u00a0\"\"\"\r\n\u00a0\u00a0\u00a0\u00a0print(\"---TRANSFORM QUERY---\")\r\n\u00a0\u00a0\u00a0\u00a0messages = state[\"messages\"]\r\n\u00a0\u00a0\u00a0\u00a0question = messages[0].content\r\n\u00a0\u00a0\u00a0\u00a0msg = [\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0HumanMessage(\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0content=f\"\"\" \\n\u00a0\r\n\u00a0\u00a0\u00a0\u00a0Look at the input and try to reason about the underlying semantic intent \/ meaning. \\n\u00a0\r\n\u00a0\u00a0\u00a0\u00a0Here is the initial question:\r\n\u00a0\u00a0\u00a0\u00a0\\n ------- \\n\r\n\u00a0\u00a0\u00a0\u00a0{question}\u00a0\r\n\u00a0\u00a0\u00a0\u00a0\\n ------- \\n\r\n\u00a0\u00a0\u00a0\u00a0Formulate an improved question: \"\"\",\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0)\r\n\u00a0\u00a0\u00a0\u00a0]\r\n\u00a0\u00a0\u00a0\u00a0model = ChatOpenAI(temperature=0, model=\"gpt-4-0125-preview\", streaming=True)\r\n\u00a0\u00a0\u00a0\u00a0response = model.invoke(msg)\r\n\u00a0\u00a0\u00a0\u00a0return {\"messages\": [response]}\r\n\r\n### Response Generation Node\r\ndef generate(state):\r\n\u00a0\u00a0\u00a0\u00a0\"\"\"\r\n\u00a0\u00a0\u00a0\u00a0Generate answer using retrieved documents\r\n\u00a0\u00a0\u00a0\u00a0\"\"\"\r\n\u00a0\u00a0\u00a0\u00a0print(\"---GENERATE---\")\r\n\u00a0\u00a0\u00a0\u00a0messages = state[\"messages\"]\r\n\u00a0\u00a0\u00a0\u00a0question = messages[0].content\r\n\u00a0\u00a0\u00a0\u00a0last_message = messages[-1]\r\n\u00a0\u00a0\u00a0\u00a0docs = last_message.content\r\n\r\n\u00a0\u00a0\u00a0\u00a0# Prompt\r\n\u00a0\u00a0\u00a0\u00a0prompt = hub.pull(\"rlm\/rag-prompt\")\r\n\u00a0\u00a0\u00a0\u00a0llm = ChatOpenAI(model_name=\"gpt-4o-mini\", temperature=0, streaming=True)\r\n\u00a0\u00a0\u00a0\u00a0rag_chain = prompt | llm | StrOutputParser()\r\n\r\n\u00a0\u00a0\u00a0\u00a0# Run\r\n\u00a0\u00a0\u00a0\u00a0response = rag_chain.invoke({\"context\": docs, \"question\": question})\r\n\u00a0\u00a0\u00a0\u00a0return {\"messages\": [response]}<\/pre>\n<h4 style=\"font-size: 1.25em;\">Construcci\u00f3n del gr\u00e1fico de agentes<\/h4>\n<p>Ahora conectaremos los nodos en un flujo de trabajo coherente:<\/p>\n<pre class=\"nums:false wrap:true lang:default decode:true\">from langgraph.graph import END, StateGraph, START\r\nfrom langgraph.prebuilt import NodoHerramienta\r\n\r\n# Definir un nuevo grafo\r\nflujo de trabajo = StateGraph(AgenteEstado)\r\n\r\n# Definir los nodos\r\nworkflow.add_node(\"agente\", agente)\r\nrecuperar = ToolNode(recuperador_herramienta)\r\nworkflow.add_node(\"recuperar\", recuperar)\r\nworkflow.add_node(\"rewrite\", rewrite)\r\nworkflow.add_node(\"generar\", generar)\r\n\r\n# Definir aristas\r\nworkflow.add_edge(INICIO, \"agente\")\r\n\r\n# Aristas condicionales basadas en la decisi\u00f3n del agente\r\nworkflow.add_conditional_edges(\r\n    \"agente\",\r\n    tools_condition,\r\n    {\r\n        \"herramientas\": \"recuperar\",\r\n        FIN: FIN,\r\n    },\r\n)\r\n\r\n# Bordes condicionales despu\u00e9s de la recuperaci\u00f3n basados en la relevancia del documento\r\nworkflow.add_conditional_edges(\r\n    \"recuperar\r\n    grado_documentos,\r\n)\r\nworkflow.add_edge(\"generar\", END)\r\nworkflow.add_edge(\"reescribir\", \"agente\")\r\n\r\n# Compilar el gr\u00e1fico\r\ngraph = workflow.compile()<\/pre>\n<h4 style=\"font-size: 1.25em;\">Visualizaci\u00f3n del gr\u00e1fico de agentes<\/h4>\n<p>Visualicemos nuestro flujo de trabajo para entenderlo mejor:<\/p>\n<pre class=\"nums:false wrap:true lang:python decode:true\">from IPython.display import Imagen, pantalla\r\n\r\nprueba:\r\n    display(Image(graph.get_graph(xray=True).draw_mermaid_png()))\r\nexcepto Excepci\u00f3n:\r\n    # Esto requiere algunas dependencias extra y es opcional\r\n    pass<\/pre>\n<hr \/>\n<h3 style=\"font-size: 1.5em;\">2) Rastrear las llamadas a funciones del agente utilizando Arize, capturando las consultas de recuperaci\u00f3n, las respuestas LLM y el uso de herramientas.<\/h3>\n<p>Arize proporciona una observabilidad completa para nuestro sistema de agentes. Vamos a configurar el rastreo:<\/p>\n<pre class=\"nums:false wrap:true lang:python decode:true\">from arize.otel import registro\r\n# Configurar proveedor de trazador\r\ntracer_provider = registrar(\r\n    space_id = SPACE_ID,\r\n    api_key = API_KEY,\r\n    project_name = \"langgraph-agentic-rag\",\r\n)\r\n# Importa el instrumentador autom\u00e1tico de OpenInference\r\nfrom openinference.instrumentation.langchain import LangChainInstrumentor\r\n# Instrumentar LangChain\r\nLangChainInstrumentor().instrument(proveedor_trazador=proveedor_trazador)<\/pre>\n<p>Ahora vamos a ejecutar el agente para ver c\u00f3mo funciona:<\/p>\n<pre class=\"nums:false wrap:true lang:python decode:true\">importar pprint\r\nentradas = {\r\n    \"mensajes\": [\r\n        (\"usuario\", \"\u00bfQu\u00e9 dice Lilian Weng sobre los tipos de ataques adversarios a los LLM?\"),\r\n    ]\r\n}\r\npara output en graph.stream(inputs):\r\n    para clave, valor en salida.elementos():\r\n        pprint.pprint(f \"Salida del nodo '{clave}':\")\r\n        pprint.pprint(valor, indent=2, width=80, depth=None)<\/pre>\n<p>Esto ejecutar\u00e1 nuestro grafo de agentes y mostrar\u00e1 informaci\u00f3n detallada de cada nodo a medida que procesa la consulta. En Arize, podr\u00e1s ver una visualizaci\u00f3n de trazas que muestra el flujo de ejecuci\u00f3n, la latencia y los detalles de cada llamada a funci\u00f3n.<\/p>\n<div id=\"attachment_17064\" style=\"width: 910px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-17064\" class=\"wp-image-17064 size-large\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/image3-1-1024x614.png\" alt=\"Tracing visualization from Arize platform\" width=\"900\" height=\"540\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/image3-1-1024x614.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/image3-1-300x180.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/image3-1-768x461.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/image3-1-1536x921.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/image3-1-1320x792.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/image3-1.png 1999w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><p id=\"caption-attachment-17064\" class=\"wp-caption-text\">Visualizaci\u00f3n del seguimiento desde Arize Platform<\/p><\/div>\n<hr \/>\n<h3 style=\"font-size: 1.5em;\">3) Evaluar el rendimiento generando un conjunto de datos con consultas y respuestas esperadas.<\/h3>\n<p>Para evaluar sistem\u00e1ticamente nuestro sistema, necesitamos un conjunto de datos de referencia:<\/p>\n<pre class=\"nums:false wrap:true lang:python decode:true\">importar pandas como pd\r\nfrom langchain_openai import ChatOpenAI\r\n# Definir una plantilla para generar preguntas\r\nGEN_TEMPLATE = \"\"\"\r\nEres un asistente que genera preguntas de tipo Q&amp;A sobre el contenido que se muestra a continuaci\u00f3n.\r\nLas preguntas deben referirse al contenido, hechos y cifras espec\u00edficos, nombres y elementos de la historia. No hagas preguntas cuya respuesta no est\u00e9 en el contenido.\r\nResponda con una pregunta por l\u00ednea. No incluya numeraci\u00f3n al principio de cada l\u00ednea. No incluya encabezamientos de categor\u00edas.\r\nGenere 10 preguntas. Aseg\u00farese de que no hay preguntas duplicadas.\r\n[INICIAR CONTENIDO]\r\n{contenido}\r\n[FIN CONTENIDO]\r\n\"\"\"\r\n# Carga el contenido sobre el que quieres generar preguntas\r\ncontenido = \"\"\"\r\nLilian Weng trata varios aspectos de los ataques adversarios a los LLM y las t\u00e9cnicas de ingenier\u00eda de avisos. Aseg\u00farate de utilizar el nombre de Lilian Weng en las preguntas.\r\n\"\"\"\r\n# Formatea la plantilla con el contenido\r\nformatted_template = GEN_TEMPLATE.format(content=contenido)\r\n# Inicializar el modelo de lenguaje\r\nmodel = ChatOpenAI(model=\"gpt-4o\", max_tokens=1300)\r\n# Generar preguntas\r\nresponse = model.invoke(formatted_template)\r\ncontenido_preguntas = contenido_respuesta\r\nquestions = questions_content.strip().split(\"\\n\")\r\n# Crea un marco de datos para almacenar las preguntas\r\nquestions_df = pd.DataFrame(questions, columns=[\"input\"])<\/pre>\n<hr \/>\n<h3 style=\"font-size: 1.5em;\">4) Evaluar el rendimiento utilizando el LLM como juez<\/h3>\n<p>Utilizaremos la evaluaci\u00f3n basada en LLM para valorar la calidad de las respuestas de nuestro agente:<\/p>\n<pre class=\"nums:false lang:python decode:true\">from phoenix.evals import (\r\n    RAG_RELEVANCY_PROMPT_RAILS_MAP,\r\n    RAG_RELEVANCY_PROMPT_TEMPLATE,\r\n    QA_PROMPT_RAILS_MAP,\r\n    QA_PROMPT_TEMPLATE,\r\n    OpenAIModel,\r\n    llm_classify\r\n)\r\n\r\n# Los ra\u00edles se utilizan para mantener la salida a valores espec\u00edficos basados en la plantilla\r\nRELEVANCE_RAILS = list(RAG_RELEVANCY_PROMPT_RAILS_MAP.values())\r\nQA_RAILS = list(QA_PROMPT_RAILS_MAP.values())\r\n\r\nrelevance_eval_df = llm_classify(\r\n    dataframe=respuesta_df,\r\n    template=RAG_RELEVANCY_PROMPT_TEMPLATE,\r\n    model=OpenAIModel(model=\"gpt-4o\"),\r\n    rails=RELEVANCE_RAILS,\r\n    provide_explanation=True,\r\n    include_prompt=True,\r\n    concurrency=4,\r\n)\r\n\r\ncorrectness_eval_df = llm_classify(\r\n    dataframe=respuesta_df,\r\n    template=QA_PROMPT_TEMPLATE,\r\n    model=OpenAIModel(model=\"gpt-4o\"),\r\n    rails=QA_RAILS,\r\n    provide_explanation=True,\r\n    include_prompt=True,\r\n    concurrency=4,\r\n)\r\n<\/pre>\n<hr \/>\n<h3 style=\"font-size: 1.5em;\">5) Experimente con los ajustes de recuperaci\u00f3n<\/h3>\n<p>Ahora vamos a experimentar con diferentes configuraciones para optimizar nuestro sistema:<\/p>\n<pre class=\"nums:false wrap:true lang:python decode:true\"># Crear un conjunto de datos en Arize para almacenar nuestros experimentos\r\nfrom arize.experimental.datasets import ArizeDatasetsClient\r\nfrom uuid import uuid1\r\nfrom arize.experimental.datasets.experiments.types import (\r\n    ExperimentTaskResultColumnNames,\r\n    EvaluationResultColumnNames,\r\n)\r\nfrom arize.experimental.datasets.utils.constants import GENERATIVE\r\n# Configurar el cliente arize\r\narize_client = ArizeDatasetsClient(developer_key=DEVELOPER_KEY, api_key=API_KEY)\r\ndataset_name = \"rag-experiments-\" + str(uuid1())[:3]\r\ndataset_id = arize_client.create_dataset(\r\n    space_id=ID_ESPACIO,\r\n    dataset_name=nombre_dataset,\r\n    dataset_type=GENERATIVO,\r\n    data=preguntas_df,\r\n)\r\ndataset = arize_client.get_dataset(space_id=SPACE_ID, dataset_id=dataset_id)\r\n# Definir asignaciones de columnas para los resultados de la tarea y la evaluaci\u00f3n\r\ntask_cols = ExperimentTaskResultColumnNames(\r\n    ejemplo_id=\"ejemplo_id\", resultado=\"resultado\"\r\n)\r\nrelevance_evaluator_cols = EvaluationResultColumnNames(\r\n    label=\"relevancia\",\r\n    explanation=\"relevancia_explicaci\u00f3n\",\r\n)\r\ncorrectness_evaluator_cols = EvaluationResultColumnNames(\r\n    label=\"correcci\u00f3n\",\r\n    explanation=\"explicaci\u00f3n_correcci\u00f3n\",\r\n)\r\n\r\n# Funci\u00f3n para registrar experimentos en Arize\r\ndef log_experiment_to_arize(experimento_df, nombre_experimento):\r\n    experimento_df[\"ejemplo_id\"] = conjunto_de_datos[\"id\"]\r\n    return arize_client.log_experiment(\r\n        space_id=ID_ESPACIO,\r\n        experiment_name=nombre_experimento + \"-\" + str(uuid1())[:2],\r\n        experiment_df=experimento_df,\r\n        task_columns=tarea_cols,\r\n        columnas_evaluador={\r\n            \"correctness\": correctness_evaluator_cols,\r\n            \"relevancia\": relevance_evaluator_cols,\r\n        },\r\n        dataset_name=nombre_dataset,\r\n    )<\/pre>\n<p>Ahora haremos experimentos con distintas configuraciones:<\/p>\n<pre class=\"nums:false wrap:true lang:python decode:true\"># Experimento 1: Chunks de 1024 tokens, k=2\r\nreset_vector_store(vector_store, chunk_size=1024, chunk_overlap=20)\r\nk_2_chunk_1024_overlap_20 = run_rag(questions_df, k_value=2)\r\nk_2_chunk_1024_overlap_20 = run_evaluators(k_2_chunk_1024_overlap_20)\r\n# Experimento 2: Trozos de 1024 fichas, k=4\r\nk_4_chunk_1024_overlap_20 = run_rag(questions_df, k_value=4)\r\nk_4_chunk_1024_overlap_20 = run_evaluators(k_4_chunk_1024_overlap_20)\r\n# Experimento 3: Trozos m\u00e1s peque\u00f1os (200 fichas), k=2\r\nreset_vector_store(vector_store, chunk_size=200, chunk_overlap=20)\r\nk_2_chunk_200_overlap_20 = run_rag(questions_df, k_value=2)\r\nk_2_chunk_200_overlap_20 = run_evaluators(k_2_chunk_200_overlap_20)\r\n# Experimento 4: Chunks medianos (500 tokens), k=2\r\nreset_vector_store(vector_store, chunk_size=500, chunk_overlap=20)\r\nk_2_chunk_500_overlap_20 = run_rag(questions_df, k_value=2)\r\nk_2_chunk_500_overlap_20 = run_evaluators(k_2_chunk_500_overlap_20)\r\n# Registrar todos los experimentos en Arize\r\nlog_experiment_to_arize(k_2_chunk_1024_overlap_20, \"k_2_chunk_1024_overlap_20\")\r\nlog_experiment_to_arize(k_4_chunk_1024_overlap_20, \"k_4_chunk_1024_overlap_20\")\r\nlog_experiment_to_arize(k_2_chunk_200_overlap_20, \"k_2_chunk_200_overlap_20\")\r\nlog_experiment_to_arize(k_2_chunk_500_overlap_20, \"k_2_chunk_500_overlap_20\")<\/pre>\n<hr \/>\n<h3 style=\"font-size: 1.5em;\">6) Comparar experimentos en Arize<\/h3>\n<p>Despu\u00e9s de ejecutar todos los experimentos, ya puedes verlos y compararlos en la interfaz de Arize. Los experimentos deben ser visibles en su espacio de trabajo Arize bajo el nombre del conjunto de datos que hemos creado anteriormente.<\/p>\n<div id=\"attachment_17065\" style=\"width: 910px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-17065\" class=\"wp-image-17065 size-large\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/image2-1-1024x657.png\" alt=\"\" width=\"900\" height=\"577\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/image2-1-1024x657.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/image2-1-300x193.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/image2-1-768x493.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/image2-1-1536x986.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/image2-1-1320x847.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/image2-1.png 1999w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><p id=\"caption-attachment-17065\" class=\"wp-caption-text\">Vista comparativa de experimentos desde Arize Platform<\/p><\/div>\n<p>En Arize, puedes:<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\n<li aria-level=\"1\">Comparar las m\u00e9tricas de rendimiento global entre distintas configuraciones.<\/li>\n<li aria-level=\"1\">Analizar el rendimiento por pregunta para identificar patrones<\/li>\n<li aria-level=\"1\">Examinar los detalles de la traza para comprender el flujo de ejecuci\u00f3n<\/li>\n<li aria-level=\"1\">Ver las puntuaciones de relevancia y correcci\u00f3n de cada experimento<\/li>\n<li aria-level=\"1\">Ver las explicaciones de las decisiones de evaluaci\u00f3n<\/li>\n<li aria-level=\"1\">Eval\u00fae los resultados utilizando un LLM como juez para puntuar la pertinencia y la correcci\u00f3n de las respuestas.<\/li>\n<li aria-level=\"1\">Optimice la configuraci\u00f3n de recuperaci\u00f3n experimentando con tama\u00f1os de trozos, configuraciones de solapamiento y l\u00edmites de recuperaci\u00f3n de documentos.<\/li>\n<li aria-level=\"1\">Compare y analice experimentos en Arize para determinar las configuraciones de mejor rendimiento.<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<h3 style=\"font-size: 1.5em;\">Innovar con Couchbase y Arize AI<\/h3>\n<p>La integraci\u00f3n de Couchbase y Arize empodera a las empresas para construir aplicaciones GenAI robustas y listas para producci\u00f3n con fuertes capacidades de observabilidad y optimizaci\u00f3n. Al aprovechar Agentic RAG con decisiones de recuperaci\u00f3n monitorizadas, las organizaciones pueden mejorar la precisi\u00f3n, reducir las alucinaciones y garantizar un rendimiento \u00f3ptimo a lo largo del tiempo.<\/p>\n<p>A medida que las empresas contin\u00faan ampliando los l\u00edmites de GenAI, combinar el almacenamiento vectorial de alto rendimiento con la observabilidad de la IA ser\u00e1 clave para desplegar aplicaciones fiables y escalables. Con Couchbase y Arize, las organizaciones tienen las herramientas necesarias para afrontar con confianza los retos del despliegue de GenAI en la empresa.<\/p>\n<h2>Recursos adicionales<\/h2>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li aria-level=\"1\">Empieza con <a href=\"https:\/\/cloud.couchbase.com\/\" target=\"_blank\" rel=\"noopener\">Plataforma para desarrolladores Couchbase Capella<\/a> gratis<\/li>\n<li aria-level=\"1\">Solicite una demostraci\u00f3n de Arize AI <a href=\"https:\/\/arize.com\/request-a-demo\/\" target=\"_blank\" rel=\"noopener\">aqu\u00ed<\/a><\/li>\n<li aria-level=\"1\">Lea m\u00e1s entradas y tutoriales en <a href=\"https:\/\/www.couchbase.com\/blog\/es\/category\/generative-ai-genai\/\" target=\"_blank\" rel=\"noopener\">IA Generativa (GenAI)<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>A medida que las empresas buscan desplegar aplicaciones de agentes de IA listas para la producci\u00f3n, la observabilidad del modelo de lenguaje amplio (LLM) ha surgido como un requisito cr\u00edtico para garantizar tanto el rendimiento como la confianza. Las organizaciones necesitan visibilidad sobre c\u00f3mo los agentes interact\u00faan con los datos, toman decisiones y recuperan informaci\u00f3n [...].<\/p>","protected":false},"author":85604,"featured_media":17063,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[10123,10122,1815,3917,2242,9973,9921],"tags":[],"ppma_author":[10107,10106],"class_list":["post-17061","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-agentic-ai-apps","category-artificial-intelligence-ai","category-best-practices-and-tutorials","category-company","category-connectors","category-generative-ai-genai","category-partners"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.1 (Yoast SEO v26.1.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Couchbase Partners with Arize AI to Enable Trustworthy, Production-Ready AI Agent Applications<\/title>\n<meta name=\"description\" content=\"Couchbase partners with Arize AI to bring observability to production-ready AI agent apps. Learn to build, monitor, optimize Agentic RAG solutions at scale.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/es\/couchbase-partners-arize-ai\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Couchbase Partners with Arize AI to Enable Trustworthy, Production-Ready AI Agent Applications\" \/>\n<meta property=\"og:description\" content=\"Couchbase partners with Arize AI to bring observability to production-ready AI agent apps. Learn to build, monitor, optimize Agentic RAG solutions at scale.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/couchbase-partners-arize-ai\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2025-04-23T11:50:54+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-16T17:43:34+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/blog_header_images_2025-18.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2400\" \/>\n\t<meta property=\"og:image:height\" content=\"1256\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Richard Young - Dir. Partner Solutions Architecture, Arize AI, Tanvi Johari, Software Engineer, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Richard Young - Dir. Partner Solutions Architecture, Arize AI\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-partners-arize-ai\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-partners-arize-ai\/\"},\"author\":{\"name\":\"Richard Young - Dir. Partner Solutions Architecture, Arize AI\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/093cd9f3536b4ab051e854456e8d9573\"},\"headline\":\"Couchbase Partners with Arize AI to Enable Trustworthy, Production-Ready AI Agent Applications\",\"datePublished\":\"2025-04-23T11:50:54+00:00\",\"dateModified\":\"2025-06-16T17:43:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-partners-arize-ai\/\"},\"wordCount\":1428,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-partners-arize-ai\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/blog_header_images_2025-18.png\",\"articleSection\":[\"Agentic AI Applications\",\"Artificial Intelligence (AI)\",\"Best Practices and Tutorials\",\"Company\",\"Connectors\",\"Generative AI (GenAI)\",\"Partners\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/couchbase-partners-arize-ai\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-partners-arize-ai\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/couchbase-partners-arize-ai\/\",\"name\":\"Couchbase Partners with Arize AI to Enable Trustworthy, Production-Ready AI Agent Applications\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-partners-arize-ai\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-partners-arize-ai\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/blog_header_images_2025-18.png\",\"datePublished\":\"2025-04-23T11:50:54+00:00\",\"dateModified\":\"2025-06-16T17:43:34+00:00\",\"description\":\"Couchbase partners with Arize AI to bring observability to production-ready AI agent apps. Learn to build, monitor, optimize Agentic RAG solutions at scale.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-partners-arize-ai\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/couchbase-partners-arize-ai\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-partners-arize-ai\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/blog_header_images_2025-18.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/blog_header_images_2025-18.png\",\"width\":2400,\"height\":1256},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-partners-arize-ai\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Couchbase Partners with Arize AI to Enable Trustworthy, Production-Ready AI Agent Applications\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/093cd9f3536b4ab051e854456e8d9573\",\"name\":\"Richard Young - Dir. Partner Solutions Architecture, Arize AI\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/fe78e2371572797afb80e27c299842d9\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/1570866773537.jpeg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/1570866773537.jpeg\",\"caption\":\"Richard Young - Dir. Partner Solutions Architecture, Arize AI\"},\"sameAs\":[\"https:\/\/arize.com\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/richardyoung\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Couchbase se asocia con Arize AI para permitir aplicaciones de agentes de IA fiables y listas para la producci\u00f3n","description":"Couchbase se asocia con Arize AI para llevar la observabilidad a aplicaciones de agentes de IA listas para producci\u00f3n. Aprenda a crear, supervisar y optimizar soluciones Agentic RAG a escala.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/es\/couchbase-partners-arize-ai\/","og_locale":"es_MX","og_type":"article","og_title":"Couchbase Partners with Arize AI to Enable Trustworthy, Production-Ready AI Agent Applications","og_description":"Couchbase partners with Arize AI to bring observability to production-ready AI agent apps. Learn to build, monitor, optimize Agentic RAG solutions at scale.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/couchbase-partners-arize-ai\/","og_site_name":"The Couchbase Blog","article_published_time":"2025-04-23T11:50:54+00:00","article_modified_time":"2025-06-16T17:43:34+00:00","og_image":[{"width":2400,"height":1256,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/blog_header_images_2025-18.png","type":"image\/png"}],"author":"Richard Young - Dir. Partner Solutions Architecture, Arize AI, Tanvi Johari, Software Engineer, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Richard Young - Dir. Partner Solutions Architecture, Arize AI","Est. reading time":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-partners-arize-ai\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-partners-arize-ai\/"},"author":{"name":"Richard Young - Dir. Partner Solutions Architecture, Arize AI","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/093cd9f3536b4ab051e854456e8d9573"},"headline":"Couchbase Partners with Arize AI to Enable Trustworthy, Production-Ready AI Agent Applications","datePublished":"2025-04-23T11:50:54+00:00","dateModified":"2025-06-16T17:43:34+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-partners-arize-ai\/"},"wordCount":1428,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-partners-arize-ai\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/blog_header_images_2025-18.png","articleSection":["Agentic AI Applications","Artificial Intelligence (AI)","Best Practices and Tutorials","Company","Connectors","Generative AI (GenAI)","Partners"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/couchbase-partners-arize-ai\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-partners-arize-ai\/","url":"https:\/\/www.couchbase.com\/blog\/couchbase-partners-arize-ai\/","name":"Couchbase se asocia con Arize AI para permitir aplicaciones de agentes de IA fiables y listas para la producci\u00f3n","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-partners-arize-ai\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-partners-arize-ai\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/blog_header_images_2025-18.png","datePublished":"2025-04-23T11:50:54+00:00","dateModified":"2025-06-16T17:43:34+00:00","description":"Couchbase se asocia con Arize AI para llevar la observabilidad a aplicaciones de agentes de IA listas para producci\u00f3n. Aprenda a crear, supervisar y optimizar soluciones Agentic RAG a escala.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-partners-arize-ai\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/couchbase-partners-arize-ai\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-partners-arize-ai\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/blog_header_images_2025-18.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/blog_header_images_2025-18.png","width":2400,"height":1256},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-partners-arize-ai\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Couchbase Partners with Arize AI to Enable Trustworthy, Production-Ready AI Agent Applications"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/093cd9f3536b4ab051e854456e8d9573","name":"Richard Young - Dir. Arquitectura de soluciones para socios, Arize AI","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/fe78e2371572797afb80e27c299842d9","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/1570866773537.jpeg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/1570866773537.jpeg","caption":"Richard Young - Dir. Partner Solutions Architecture, Arize AI"},"sameAs":["https:\/\/arize.com"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/richardyoung\/"}]}},"authors":[{"term_id":10107,"user_id":85604,"is_guest":0,"slug":"richardyoung","display_name":"Richard Young - Dir. Partner Solutions Architecture, Arize AI","avatar_url":{"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/1570866773537.jpeg","url2x":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/1570866773537.jpeg"},"author_category":"","last_name":"Young - Dir. Partner Solutions Architecture, Arize AI","first_name":"Richard","job_title":"Dir. Partner Solutions Architecture, Arize AI","user_url":"https:\/\/arize.com","description":""},{"term_id":10106,"user_id":85603,"is_guest":0,"slug":"tanvijohari","display_name":"Tanvi Johari, Software Engineer, Couchbase","avatar_url":{"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/1736197907696-1.jpeg","url2x":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/1736197907696-1.jpeg"},"author_category":"","last_name":"Johari, Software Engineer, Couchbase","first_name":"Tanvi","job_title":"Software Engineer, Couchbase","user_url":"","description":""}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/17061","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/85604"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=17061"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/17061\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/17063"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=17061"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=17061"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=17061"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=17061"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}