<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="rss.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Dr. Falken's Notebook Blog</title>
        <link>https://falkenslab.github.io/falkens-notebook/experiments</link>
        <description>Dr. Falken's Notebook Blog</description>
        <lastBuildDate>Sun, 05 Apr 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>es</language>
        <item>
            <title><![CDATA[Búsqueda semántica con ChromaDB]]></title>
            <link>https://falkenslab.github.io/falkens-notebook/experiments/chromadb-busqueda-semantica</link>
            <guid>https://falkenslab.github.io/falkens-notebook/experiments/chromadb-busqueda-semantica</guid>
            <pubDate>Sun, 05 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Indexar textos en ChromaDB con embeddings automáticos y recuperar los más relevantes para una consulta, sin escribir una línea de código de vectorización.]]></description>
            <content:encoded><![CDATA[<p>Indexar textos en ChromaDB con embeddings automáticos y recuperar los más relevantes para una consulta, sin escribir una línea de código de vectorización.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="experimento-búsqueda-semántica-con-chromadb">Experimento: búsqueda semántica con ChromaDB<a href="https://falkenslab.github.io/falkens-notebook/experiments/chromadb-busqueda-semantica#experimento-b%C3%BAsqueda-sem%C3%A1ntica-con-chromadb" class="hash-link" aria-label="Enlace directo al Experimento: búsqueda semántica con ChromaDB" title="Enlace directo al Experimento: búsqueda semántica con ChromaDB" translate="no">​</a></h2>
<p><strong>Contexto:</strong> indexar 5 textos en ChromaDB con embeddings automáticos y recuperar el más relevante para una consulta.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">pip install chromadb</span><br></span></code></pre></div></div>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> chromadb</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">client </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> chromadb</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Client</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">collection </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> client</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">create_collection</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"fragmentos"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Indexar documentos (ChromaDB genera embeddings automáticamente)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">collection</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">add</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    documents</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token string" style="color:#e3116c">"Los transformers son la arquitectura dominante en NLP."</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token string" style="color:#e3116c">"Ollama permite ejecutar LLMs en local sin coste por token."</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token string" style="color:#e3116c">"La cuantización reduce el tamaño del modelo con pérdida mínima de calidad."</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token string" style="color:#e3116c">"RAG combina recuperación de documentos con generación de texto."</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token string" style="color:#e3116c">"El fine-tuning adapta un modelo a un dominio específico."</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    ids</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"doc1"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"doc2"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"doc3"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"doc4"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"doc5"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Consulta semántica</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">resultados </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> collection</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">query</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    query_texts</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"¿Cómo ejecuto un modelo de IA en mi ordenador?"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    n_results</span><span class="token operator" style="color:#393A34">=</span><span class="token number" style="color:#36acaa">2</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> doc</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> dist </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> </span><span class="token builtin">zip</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">resultados</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"documents"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> resultados</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"distances"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-interpolation string" style="color:#e3116c">f"[</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">{</span><span class="token string-interpolation interpolation">dist</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">:</span><span class="token string-interpolation interpolation format-spec">.3f</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">}</span><span class="token string-interpolation string" style="color:#e3116c">] </span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">{</span><span class="token string-interpolation interpolation">doc</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">}</span><span class="token string-interpolation string" style="color:#e3116c">"</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre></div></div>
<p><strong>Resultado:</strong></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">[0.312] Ollama permite ejecutar LLMs en local sin coste por token.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[0.489] La cuantización reduce el tamaño del modelo con pérdida mínima de calidad.</span><br></span></code></pre></div></div>
<p><strong>Qué aprender:</strong> ChromaDB genera los embeddings internamente y devuelve distancias (menor = más similar). Sin escribir una sola línea de código de vectorización, ya tienes búsqueda semántica funcional. Para proyectos pequeños y prototipos es más que suficiente.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="referencias">Referencias<a href="https://falkenslab.github.io/falkens-notebook/experiments/chromadb-busqueda-semantica#referencias" class="hash-link" aria-label="Enlace directo al Referencias" title="Enlace directo al Referencias" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://docs.trychroma.com/" target="_blank" rel="noopener noreferrer" class="">ChromaDB — Documentación</a></li>
<li class=""><a href="https://github.com/chroma-core/chroma" target="_blank" rel="noopener noreferrer" class="">ChromaDB — GitHub</a></li>
<li class=""><a class="" href="https://falkenslab.github.io/falkens-notebook/notes/tools/vector-databases/chromadb">Notas: ChromaDB</a></li>
</ul>]]></content:encoded>
            <category>ChromaDB</category>
            <category>Embeddings</category>
            <category>RAG</category>
        </item>
        <item>
            <title><![CDATA[Generar CLAUDE.md con /init]]></title>
            <link>https://falkenslab.github.io/falkens-notebook/experiments/claude-code-init</link>
            <guid>https://falkenslab.github.io/falkens-notebook/experiments/claude-code-init</guid>
            <pubDate>Sun, 05 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Usar /init para que Claude Code analice el proyecto automáticamente y genere un fichero de contexto listo para usar.]]></description>
            <content:encoded><![CDATA[<p>Usar <code>/init</code> para que Claude Code analice el proyecto automáticamente y genere un fichero de contexto listo para usar.</p>
<p>Este <strong>built-in slash command</strong> de Claude Code nos ahorra tiempo analizando el proyecto automáticamente y produciendo un fichero de contexto útil desde el primer momento.</p>
<ol>
<li class="">Ejecutamos <code>claude</code> en nuestro proyecto existente y ejecutamos el comando <code>/init</code>:</li>
</ol>
<p><img decoding="async" loading="lazy" alt="alt text" src="https://falkenslab.github.io/falkens-notebook/assets/images/image-1250482b3c2ff5c1274695001022759c.png" width="1252" height="441" class="img_ev3q"></p>
<ol start="2">
<li class="">Claude analizará nuestro proyecto para generar el fichero <code>CLAUDE.md</code>:</li>
</ol>
<p><img decoding="async" loading="lazy" alt="alt text" src="https://falkenslab.github.io/falkens-notebook/assets/images/image-1-e06f261f48ac620e252b540202691086.png" width="1225" height="614" class="img_ev3q"></p>
<ol start="3">
<li class="">Tras la ejecución de <code>/init</code>, Claude Code tendrá mayor contexto para trabajar en el proyecto:</li>
</ol>
<p><img decoding="async" loading="lazy" alt="alt text" src="https://falkenslab.github.io/falkens-notebook/assets/images/image-2-7f3992754dee2572ee6eec605ccca32f.png" width="1229" height="958" class="img_ev3q"></p>
<blockquote>
<p>🤓 Podemos editar el fichero <code>CLAUDE.md</code> generado para añadir restricciones o convenciones específicas de tu proyecto.</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="referencias">Referencias<a href="https://falkenslab.github.io/falkens-notebook/experiments/claude-code-init#referencias" class="hash-link" aria-label="Enlace directo al Referencias" title="Enlace directo al Referencias" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://docs.anthropic.com/es/docs/claude-code/memory" target="_blank" rel="noopener noreferrer" class="">Configuración de CLAUDE.md</a></li>
<li class=""><a class="" href="https://falkenslab.github.io/falkens-notebook/notes/tools/ai-coding/claude-code/claude-md">Notas: CLAUDE.md y directorio .claude</a></li>
</ul>]]></content:encoded>
            <category>Claude Code</category>
        </item>
        <item>
            <title><![CDATA[RAG sobre documentos propios con AnythingLLM]]></title>
            <link>https://falkenslab.github.io/falkens-notebook/experiments/anythingllm-rag-documentos</link>
            <guid>https://falkenslab.github.io/falkens-notebook/experiments/anythingllm-rag-documentos</guid>
            <pubDate>Sun, 05 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Queremos hacer preguntas a un modelo sobre documentos privados sin enviarlos a servicios externos, y para ello usaremos AnythingLLM con Ollama como LLM runtime local.]]></description>
            <content:encoded><![CDATA[<p>Queremos hacer preguntas a un modelo sobre documentos privados sin enviarlos a servicios externos, y para ello usaremos <a href="https://anythingllm.com/" target="_blank" rel="noopener noreferrer" class="">AnythingLLM</a> con Ollama como LLM runtime local.</p>
<ol>
<li class="">
<p><a class="" href="https://falkenslab.github.io/falkens-notebook/notes/tools/llm-runtimes/ollama/instalacion">Instalamos Ollama</a> y <a class="" href="https://falkenslab.github.io/falkens-notebook/notes/tools/llm-runtimes/ollama/modelos#descargar-un-modelo">descargamos el modelo</a> que queramos usar para analizar los documentos.</p>
</li>
<li class="">
<p>Instalamos <a href="https://anythingllm.com/desktop" target="_blank" rel="noopener noreferrer" class="">AnythingLLM</a> y lo ejecutamos.</p>
</li>
</ol>
<p><img decoding="async" loading="lazy" alt="alt text" src="https://falkenslab.github.io/falkens-notebook/assets/images/image-6d708986f29b2c7337e3c8209f66ccfe.png" width="995" height="724" class="img_ev3q"></p>
<p>Si pulsamos "Comenzar", nos sugiere un modelo adecuado a nuestros recursos hardware, pero lo que queremos es usar Ollama como proveedor de modelos.</p>
<p><img decoding="async" loading="lazy" alt="alt text" src="https://falkenslab.github.io/falkens-notebook/assets/images/image-1-e85256fef569059f332b681e9b052118.png" width="995" height="724" class="img_ev3q"></p>
<ol start="3">
<li class="">Seleccionamos "Configuración manual" y localizamos "Ollama":</li>
</ol>
<p><img decoding="async" loading="lazy" alt="alt text" src="https://falkenslab.github.io/falkens-notebook/assets/images/image-2-58035c28ad018509113fe181cc8e9f26.png" width="995" height="724" class="img_ev3q"></p>
<ol start="4">
<li class="">Elegimos un modelo de entre los que tenemos disponibles en Ollama y terminamos el proceso de configuración inicial:</li>
</ol>
<p><img decoding="async" loading="lazy" alt="alt text" src="https://falkenslab.github.io/falkens-notebook/assets/images/image-3-a428ff88aac2ab036f8aea12aaf0260a.png" width="995" height="724" class="img_ev3q"></p>
<ol start="5">
<li class="">Creamos un espacio de trabajo (workspace) al que adjuntar documentos y preguntarle a nuestro modelo local:</li>
</ol>
<p><img decoding="async" loading="lazy" alt="alt text" src="https://falkenslab.github.io/falkens-notebook/assets/images/image-4-aa115cf258471e2860e7bab7a71e830a.png" width="1268" height="887" class="img_ev3q"></p>
<ol start="6">
<li class="">Subimos un PDF al espacio de trabajo y lo pineamos:</li>
</ol>
<p><img decoding="async" loading="lazy" alt="alt text" src="https://falkenslab.github.io/falkens-notebook/assets/images/image-5-c6bf687ca2a261dfd3574189e219fbd2.png" width="1464" height="931" class="img_ev3q"></p>
<ol start="7">
<li class="">Y finalmente podemos hacerle preguntas sobre el contenido adjunto al espacio de trabajo:</li>
</ol>
<p><img decoding="async" loading="lazy" alt="alt text" src="https://falkenslab.github.io/falkens-notebook/assets/images/image-6-e9ca29695b50e140500d733af3bbaee1.png" width="1464" height="931" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="referencias">Referencias<a href="https://falkenslab.github.io/falkens-notebook/experiments/anythingllm-rag-documentos#referencias" class="hash-link" aria-label="Enlace directo al Referencias" title="Enlace directo al Referencias" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://anythingllm.com/" target="_blank" rel="noopener noreferrer" class="">AnythingLLM — Sitio oficial</a></li>
<li class=""><a href="https://docs.anythingllm.com/" target="_blank" rel="noopener noreferrer" class="">AnythingLLM — Documentación</a></li>
<li class=""><a class="" href="https://falkenslab.github.io/falkens-notebook/notes/tools/llm-runtimes/anythingllm/overview">Notas: AnythingLLM</a></li>
</ul>]]></content:encoded>
            <category>AnythingLLM</category>
            <category>RAG</category>
            <category>Ollama</category>
        </item>
        <item>
            <title><![CDATA[Crear una skill de commit en Claude Code]]></title>
            <link>https://falkenslab.github.io/falkens-notebook/experiments/claude-code-skill-commit</link>
            <guid>https://falkenslab.github.io/falkens-notebook/experiments/claude-code-skill-commit</guid>
            <pubDate>Sun, 05 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Automatizar el flujo de commit con Conventional Commits creando una skill reutilizable en Claude Code.]]></description>
            <content:encoded><![CDATA[<p>Automatizar el flujo de commit con Conventional Commits creando una skill reutilizable en Claude Code.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="experimento-crear-una-skill-de-commit">Experimento: crear una skill de commit<a href="https://falkenslab.github.io/falkens-notebook/experiments/claude-code-skill-commit#experimento-crear-una-skill-de-commit" class="hash-link" aria-label="Enlace directo al Experimento: crear una skill de commit" title="Enlace directo al Experimento: crear una skill de commit" translate="no">​</a></h2>
<p><strong>Contexto:</strong> automatizar el flujo de commit con Conventional Commits para no tener que recordar el formato cada vez.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">mkdir -p .claude/commands</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">cat &gt; .claude/commands/commit.md &lt;&lt; 'EOF'</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Revisa los cambios en staging con `git diff --cached`.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Redacta un mensaje de commit siguiendo Conventional Commits (feat/fix/docs/refactor...).</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Muéstrame el mensaje propuesto y espera confirmación antes de hacer el commit.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">EOF</span><br></span></code></pre></div></div>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">/commit</span><br></span></code></pre></div></div>
<p><strong>Resultado:</strong></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Cambios en staging:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  M src/auth/login.ts — añadida validación de email</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Mensaje propuesto:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  feat(auth): añadir validación de formato de email en login</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">¿Confirmas el commit? (s/n)</span><br></span></code></pre></div></div>
<p><strong>Qué aprender:</strong> las skills convierten instrucciones largas y repetitivas en un comando de una palabra, manteniendo consistencia entre sesiones y miembros del equipo.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="referencias">Referencias<a href="https://falkenslab.github.io/falkens-notebook/experiments/claude-code-skill-commit#referencias" class="hash-link" aria-label="Enlace directo al Referencias" title="Enlace directo al Referencias" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://docs.anthropic.com/es/docs/claude-code/cli-usage" target="_blank" rel="noopener noreferrer" class="">Referencia de comandos y atajos</a></li>
<li class=""><a class="" href="https://falkenslab.github.io/falkens-notebook/notes/tools/ai-coding/claude-code/skills">Notas: Skills y comandos</a></li>
</ul>]]></content:encoded>
            <category>Claude Code</category>
            <category>Skills</category>
        </item>
        <item>
            <title><![CDATA[Definir restricciones de proyecto con AGENTS.md]]></title>
            <link>https://falkenslab.github.io/falkens-notebook/experiments/codex-agents-md</link>
            <guid>https://falkenslab.github.io/falkens-notebook/experiments/codex-agents-md</guid>
            <pubDate>Sun, 05 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[AGENTS.md es un archivo de configuración para Codex CLI, donde le dices al agente cómo debe trabajar sobre tu proyecto. En este experimento vamos a evitar que Codex toque los ficheros que son generados o ignore convenciones del proyecto definiendo restricciones.]]></description>
            <content:encoded><![CDATA[<p><code>AGENTS.md</code> es un archivo de configuración para Codex CLI, donde le dices al agente cómo debe trabajar sobre tu proyecto. En este experimento vamos a evitar que Codex toque los ficheros que son generados o ignore convenciones del proyecto definiendo restricciones.</p>
<p>Sin <code>AGENTS.md</code>, Codex puede tocar ficheros generados o ignorar convenciones del proyecto, así que creamos este archivo en la raíz de nuestro proyecto:</p>
<div class="language-markdown codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-markdown codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token title important punctuation" style="color:#393A34">#</span><span class="token title important"> AGENTS.md</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token title important punctuation" style="color:#393A34">##</span><span class="token title important"> Comandos</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">```bash</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">npm test</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">npm run build</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="restricciones">Restricciones<a href="https://falkenslab.github.io/falkens-notebook/experiments/codex-agents-md#restricciones" class="hash-link" aria-label="Enlace directo al Restricciones" title="Enlace directo al Restricciones" translate="no">​</a></h2>
<ul>
<li class="">No modifiques ficheros en src/generated/ ni en dist/</li>
<li class="">Usa siempre async/await, nunca .then()</li>
<li class="">Los tests van en <strong>tests</strong>/ junto al fichero que prueban</li>
</ul>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">## Referencias</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">- [Codex CLI — Repositorio oficial](https://github.com/openai/codex)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">- [Notas: AGENTS.md](/notes/tools/ai-coding/codex/agents-md)</span><br></span></code></pre></div></div>]]></content:encoded>
            <category>Codex</category>
            <category>Agente</category>
        </item>
        <item>
            <title><![CDATA[Codex CLI con Ollama en local]]></title>
            <link>https://falkenslab.github.io/falkens-notebook/experiments/codex-ollama-local</link>
            <guid>https://falkenslab.github.io/falkens-notebook/experiments/codex-ollama-local</guid>
            <pubDate>Sun, 05 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Usar Codex CLI sin enviar código a servidores externos, conectándolo a Ollama para inferencia completamente local.]]></description>
            <content:encoded><![CDATA[<p>Usar Codex CLI sin enviar código a servidores externos, conectándolo a Ollama para inferencia completamente local.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="experimento-codex-con-ollama-en-local">Experimento: Codex con Ollama en local<a href="https://falkenslab.github.io/falkens-notebook/experiments/codex-ollama-local#experimento-codex-con-ollama-en-local" class="hash-link" aria-label="Enlace directo al Experimento: Codex con Ollama en local" title="Enlace directo al Experimento: Codex con Ollama en local" translate="no">​</a></h2>
<p><strong>Contexto:</strong> usar Codex sin enviar código a servidores externos, útil para proyectos privados o con restricciones de privacidad.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">ollama pull qwen2.5-coder:7b</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">export OPENAI_BASE_URL="http://localhost:11434/v1"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">export OPENAI_API_KEY="ollama"</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">codex --model qwen2.5-coder:7b "explica qué hace la función main en src/index.ts"</span><br></span></code></pre></div></div>
<p><strong>Resultado:</strong></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Leyendo src/index.ts...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">La función `main` inicializa el servidor Express, registra los middlewares de</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">autenticación y logging, monta las rutas desde src/routes/, y arranca el servidor</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">en el puerto definido en la variable de entorno PORT (por defecto 3000).</span><br></span></code></pre></div></div>
<p><strong>Qué aprender:</strong> con <code>qwen2.5-coder:7b</code> y 8 GB de RAM obtienes un agente de código completamente local. La velocidad es menor que con la API de OpenAI, pero suficiente para tareas de análisis y edición de ficheros.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="referencias">Referencias<a href="https://falkenslab.github.io/falkens-notebook/experiments/codex-ollama-local#referencias" class="hash-link" aria-label="Enlace directo al Referencias" title="Enlace directo al Referencias" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://github.com/openai/codex" target="_blank" rel="noopener noreferrer" class="">Codex CLI — Repositorio oficial</a></li>
<li class=""><a href="https://ollama.com/" target="_blank" rel="noopener noreferrer" class="">Ollama — Sitio oficial</a></li>
<li class=""><a class="" href="https://falkenslab.github.io/falkens-notebook/notes/tools/ai-coding/codex/modelos">Notas: Codex CLI — Modelos</a></li>
</ul>]]></content:encoded>
            <category>Codex</category>
            <category>Ollama</category>
            <category>Agente</category>
            <category>Local</category>
        </item>
        <item>
            <title><![CDATA[Ejecutar un LLM sin instalar nada con llamafile]]></title>
            <link>https://falkenslab.github.io/falkens-notebook/experiments/llamafile-sin-instalacion</link>
            <guid>https://falkenslab.github.io/falkens-notebook/experiments/llamafile-sin-instalacion</guid>
            <pubDate>Sun, 05 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Descargar y ejecutar un modelo de lenguaje completo en cualquier máquina con un solo fichero ejecutable, sin npm, pip ni Docker.]]></description>
            <content:encoded><![CDATA[<p>Descargar y ejecutar un modelo de lenguaje completo en cualquier máquina con un solo fichero ejecutable, sin npm, pip ni Docker.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="experimento-ejecutar-un-llm-sin-instalar-nada">Experimento: ejecutar un LLM sin instalar nada<a href="https://falkenslab.github.io/falkens-notebook/experiments/llamafile-sin-instalacion#experimento-ejecutar-un-llm-sin-instalar-nada" class="hash-link" aria-label="Enlace directo al Experimento: ejecutar un LLM sin instalar nada" title="Enlace directo al Experimento: ejecutar un LLM sin instalar nada" translate="no">​</a></h2>
<p><strong>Contexto:</strong> llamafile es la forma más rápida de probar un modelo en cualquier máquina, sin configuración.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">wget https://huggingface.co/Mozilla/Llama-3.2-1B-Instruct-llamafile/resolve/main/Llama-3.2-1B-Instruct.Q6_K.llamafile</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">chmod +x Llama-3.2-1B-Instruct.Q6_K.llamafile</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">./Llama-3.2-1B-Instruct.Q6_K.llamafile --cli -p "¿Qué es un transformer?"</span><br></span></code></pre></div></div>
<p><strong>Resultado:</strong></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Un transformer es una arquitectura de red neuronal basada en el mecanismo de atención,</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">introducida en el paper "Attention Is All You Need" (2017). Es la base de la mayoría</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">de los modelos de lenguaje modernos como GPT, BERT y LLaMA.</span><br></span></code></pre></div></div>
<p><strong>Qué aprender:</strong> sin <code>npm install</code>, sin <code>pip install</code>, sin Docker. Descarga, permiso, ejecuta. El flag <code>--cli</code> activa el modo de línea de comandos en lugar de abrir el navegador.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="referencias">Referencias<a href="https://falkenslab.github.io/falkens-notebook/experiments/llamafile-sin-instalacion#referencias" class="hash-link" aria-label="Enlace directo al Referencias" title="Enlace directo al Referencias" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://github.com/mozilla-oai/llamafile" target="_blank" rel="noopener noreferrer" class="">llamafile — GitHub (Mozilla)</a></li>
<li class=""><a href="https://huggingface.co/Mozilla" target="_blank" rel="noopener noreferrer" class="">Modelos llamafile en HuggingFace</a></li>
<li class=""><a class="" href="https://falkenslab.github.io/falkens-notebook/notes/tools/llm-runtimes/llamafile/overview">Notas: llamafile</a></li>
</ul>]]></content:encoded>
            <category>llamafile</category>
            <category>LLM</category>
            <category>Local</category>
        </item>
        <item>
            <title><![CDATA[LM Studio como backend de la API de OpenAI]]></title>
            <link>https://falkenslab.github.io/falkens-notebook/experiments/lmstudio-api-openai</link>
            <guid>https://falkenslab.github.io/falkens-notebook/experiments/lmstudio-api-openai</guid>
            <pubDate>Sun, 05 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Reutilizar código escrito para la API de OpenAI apuntando a un modelo local en LM Studio, sin coste por token.]]></description>
            <content:encoded><![CDATA[<p>Reutilizar código escrito para la API de OpenAI apuntando a un modelo local en LM Studio, sin coste por token.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="experimento-usar-lm-studio-como-backend-de-la-api-de-openai">Experimento: usar LM Studio como backend de la API de OpenAI<a href="https://falkenslab.github.io/falkens-notebook/experiments/lmstudio-api-openai#experimento-usar-lm-studio-como-backend-de-la-api-de-openai" class="hash-link" aria-label="Enlace directo al Experimento: usar LM Studio como backend de la API de OpenAI" title="Enlace directo al Experimento: usar LM Studio como backend de la API de OpenAI" translate="no">​</a></h2>
<p><strong>Contexto:</strong> LM Studio permite reutilizar código escrito para la API de OpenAI apuntando a un modelo local sin coste por token.</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">from</span><span class="token plain"> openai </span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> OpenAI</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">client </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> OpenAI</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">base_url</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"http://localhost:1234/v1"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> api_key</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"lm-studio"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">response </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> client</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">chat</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">completions</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">create</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    model</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"llama3.2"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    messages</span><span class="token operator" style="color:#393A34">=</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">{</span><span class="token string" style="color:#e3116c">"role"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"user"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"content"</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Explica qué es la cuantización en una frase."</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">response</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">choices</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">message</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">content</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre></div></div>
<p><strong>Resultado:</strong></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">La cuantización reduce la precisión numérica de los pesos de un modelo (por ejemplo,</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">de 32 bits a 4 bits) para disminuir su tamaño en memoria y acelerar la inferencia,</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">con una pequeña pérdida de calidad.</span><br></span></code></pre></div></div>
<p><strong>Qué aprender:</strong> con LM Studio arrancado en modo servidor, el mismo código que usas con la API de OpenAI funciona en local sin modificaciones, solo cambiando <code>base_url</code>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="referencias">Referencias<a href="https://falkenslab.github.io/falkens-notebook/experiments/lmstudio-api-openai#referencias" class="hash-link" aria-label="Enlace directo al Referencias" title="Enlace directo al Referencias" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://lmstudio.ai/" target="_blank" rel="noopener noreferrer" class="">LM Studio — Sitio oficial</a></li>
<li class=""><a class="" href="https://falkenslab.github.io/falkens-notebook/notes/tools/llm-runtimes/lmstudio/overview">Notas: LM Studio</a></li>
</ul>]]></content:encoded>
            <category>LM Studio</category>
            <category>OpenAI</category>
            <category>API</category>
            <category>Local</category>
        </item>
        <item>
            <title><![CDATA[Embeddings locales con nomic-embed-text]]></title>
            <link>https://falkenslab.github.io/falkens-notebook/experiments/ollama-embeddings-locales</link>
            <guid>https://falkenslab.github.io/falkens-notebook/experiments/ollama-embeddings-locales</guid>
            <pubDate>Sun, 05 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Generar embeddings sin enviar datos a ningún servicio externo usando Ollama y nomic-embed-text, útil para RAG privado.]]></description>
            <content:encoded><![CDATA[<p>Generar embeddings sin enviar datos a ningún servicio externo usando Ollama y nomic-embed-text, útil para RAG privado.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="experimento-embeddings-locales-con-nomic-embed-text">Experimento: embeddings locales con nomic-embed-text<a href="https://falkenslab.github.io/falkens-notebook/experiments/ollama-embeddings-locales#experimento-embeddings-locales-con-nomic-embed-text" class="hash-link" aria-label="Enlace directo al Experimento: embeddings locales con nomic-embed-text" title="Enlace directo al Experimento: embeddings locales con nomic-embed-text" translate="no">​</a></h2>
<p><strong>Contexto:</strong> generar embeddings sin enviar datos a ningún servicio externo, útil para RAG privado.</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> ollama</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">textos </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token string" style="color:#e3116c">"Ollama permite ejecutar LLMs en local."</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token string" style="color:#e3116c">"Los embeddings son representaciones vectoriales del texto."</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> texto </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> textos</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    result </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> ollama</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">embeddings</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">model</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"nomic-embed-text"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> prompt</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">texto</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-interpolation string" style="color:#e3116c">f"Dimensiones: </span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">{</span><span class="token string-interpolation interpolation builtin">len</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">(</span><span class="token string-interpolation interpolation">result</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">[</span><span class="token string-interpolation interpolation string" style="color:#e3116c">'embedding'</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">]</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">)</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">}</span><span class="token string-interpolation string" style="color:#e3116c">"</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre></div></div>
<p><strong>Resultado:</strong></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Dimensiones: 768</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Dimensiones: 768</span><br></span></code></pre></div></div>
<p><strong>Qué aprender:</strong> <code>nomic-embed-text</code> genera vectores de 768 dimensiones, compatibles con la mayoría de bases de datos vectoriales como ChromaDB o Qdrant.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="referencias">Referencias<a href="https://falkenslab.github.io/falkens-notebook/experiments/ollama-embeddings-locales#referencias" class="hash-link" aria-label="Enlace directo al Referencias" title="Enlace directo al Referencias" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://github.com/ollama/ollama-python" target="_blank" rel="noopener noreferrer" class="">Librería Python de Ollama</a></li>
<li class=""><a href="https://ollama.com/library" target="_blank" rel="noopener noreferrer" class="">Catálogo de modelos</a></li>
<li class=""><a class="" href="https://falkenslab.github.io/falkens-notebook/notes/tools/llm-runtimes/ollama/casos-de-uso">Notas: Casos de uso de Ollama</a></li>
</ul>]]></content:encoded>
            <category>Ollama</category>
            <category>Embeddings</category>
            <category>RAG</category>
        </item>
        <item>
            <title><![CDATA[Crear un asistente personalizado con Modelfile]]></title>
            <link>https://falkenslab.github.io/falkens-notebook/experiments/ollama-modelfile</link>
            <guid>https://falkenslab.github.io/falkens-notebook/experiments/ollama-modelfile</guid>
            <pubDate>Sun, 05 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Fijar un system prompt y ajustar parámetros en Ollama para crear un asistente especializado sin repetirlos en cada sesión.]]></description>
            <content:encoded><![CDATA[<p>Fijar un system prompt y ajustar parámetros en Ollama para crear un asistente especializado sin repetirlos en cada sesión.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="experimento-crear-un-asistente-personalizado-con-modelfile">Experimento: crear un asistente personalizado con Modelfile<a href="https://falkenslab.github.io/falkens-notebook/experiments/ollama-modelfile#experimento-crear-un-asistente-personalizado-con-modelfile" class="hash-link" aria-label="Enlace directo al Experimento: crear un asistente personalizado con Modelfile" title="Enlace directo al Experimento: crear un asistente personalizado con Modelfile" translate="no">​</a></h2>
<p><strong>Contexto:</strong> fijar un system prompt y ajustar parámetros evita tener que repetirlos en cada sesión.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">cat &gt; Modelfile &lt;&lt;'EOF'</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">FROM llama3.2</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">SYSTEM "Eres un asistente técnico especializado en Python. Responde siempre en español y sé conciso."</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">PARAMETER temperature 0.3</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">PARAMETER num_ctx 4096</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">EOF</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">ollama create asistente-python -f Modelfile</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">ollama run asistente-python "¿Cuál es la diferencia entre list y tuple?"</span><br></span></code></pre></div></div>
<p><strong>Resultado:</strong></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Lista (list): mutable, puedes añadir, eliminar o modificar elementos.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Tupla (tuple): inmutable, no se puede modificar tras su creación.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Usa tuple cuando los datos no deben cambiar; es ligeramente más rápida y consume menos memoria.</span><br></span></code></pre></div></div>
<p><strong>Qué aprender:</strong> con <code>temperature 0.3</code> las respuestas son más deterministas y directas, ideal para asistentes técnicos.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="referencias">Referencias<a href="https://falkenslab.github.io/falkens-notebook/experiments/ollama-modelfile#referencias" class="hash-link" aria-label="Enlace directo al Referencias" title="Enlace directo al Referencias" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://github.com/ollama/ollama/blob/main/docs/modelfile.md" target="_blank" rel="noopener noreferrer" class="">Referencia de Modelfile</a></li>
<li class=""><a class="" href="https://falkenslab.github.io/falkens-notebook/notes/tools/llm-runtimes/ollama/configuracion">Notas: Configuración de Ollama</a></li>
</ul>]]></content:encoded>
            <category>Ollama</category>
            <category>Modelfile</category>
        </item>
        <item>
            <title><![CDATA[Levantar Open WebUI con Ollama en un comando]]></title>
            <link>https://falkenslab.github.io/falkens-notebook/experiments/open-webui-docker</link>
            <guid>https://falkenslab.github.io/falkens-notebook/experiments/open-webui-docker</guid>
            <pubDate>Sun, 05 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Tener un ChatGPT local completo con Ollama integrado usando un solo comando Docker.]]></description>
            <content:encoded><![CDATA[<p>Tener un ChatGPT local completo con Ollama integrado usando un solo comando Docker.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="experimento-levantar-open-webui-con-ollama-en-un-comando">Experimento: levantar Open WebUI con Ollama en un comando<a href="https://falkenslab.github.io/falkens-notebook/experiments/open-webui-docker#experimento-levantar-open-webui-con-ollama-en-un-comando" class="hash-link" aria-label="Enlace directo al Experimento: levantar Open WebUI con Ollama en un comando" title="Enlace directo al Experimento: levantar Open WebUI con Ollama en un comando" translate="no">​</a></h2>
<p><strong>Contexto:</strong> la imagen <code>ollama</code> de Open WebUI incluye Ollama, por lo que no hace falta tenerlo instalado previamente.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">docker run -d -p 8080:8080 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -v ollama:/root/.ollama \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  -v open-webui:/app/backend/data \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ghcr.io/open-webui/open-webui:ollama</span><br></span></code></pre></div></div>
<p><strong>Resultado:</strong></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Unable to find image 'ghcr.io/open-webui/open-webui:ollama' locally</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">ollama: Pulling from open-webui/open-webui</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Status: Downloaded newer image for ghcr.io/open-webui/open-webui:ollama</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">a3f1c2d8e9b0...</span><br></span></code></pre></div></div>
<p>Abre <code>http://localhost:8080</code>, crea una cuenta de administrador y ya puedes descargar modelos desde la interfaz.</p>
<p><strong>Qué aprender:</strong> con un solo comando tienes un ChatGPT local completo. El volumen <code>ollama</code> persiste los modelos entre reinicios del contenedor.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="referencias">Referencias<a href="https://falkenslab.github.io/falkens-notebook/experiments/open-webui-docker#referencias" class="hash-link" aria-label="Enlace directo al Referencias" title="Enlace directo al Referencias" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://docs.openwebui.com/" target="_blank" rel="noopener noreferrer" class="">Open WebUI — Documentación</a></li>
<li class=""><a href="https://github.com/open-webui/open-webui" target="_blank" rel="noopener noreferrer" class="">Open WebUI — GitHub</a></li>
<li class=""><a class="" href="https://falkenslab.github.io/falkens-notebook/notes/tools/llm-runtimes/open-webui/overview">Notas: Open WebUI</a></li>
</ul>]]></content:encoded>
            <category>Open WebUI</category>
            <category>Ollama</category>
            <category>Docker</category>
        </item>
        <item>
            <title><![CDATA[Búsqueda semántica en PostgreSQL con pgvector]]></title>
            <link>https://falkenslab.github.io/falkens-notebook/experiments/pgvector-busqueda-semantica</link>
            <guid>https://falkenslab.github.io/falkens-notebook/experiments/pgvector-busqueda-semantica</guid>
            <pubDate>Sun, 05 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Añadir búsqueda semántica a una base de datos PostgreSQL existente con una sola extensión, sin infraestructura adicional.]]></description>
            <content:encoded><![CDATA[<p>Añadir búsqueda semántica a una base de datos PostgreSQL existente con una sola extensión, sin infraestructura adicional.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="experimento-búsqueda-semántica-en-postgresql">Experimento: búsqueda semántica en PostgreSQL<a href="https://falkenslab.github.io/falkens-notebook/experiments/pgvector-busqueda-semantica#experimento-b%C3%BAsqueda-sem%C3%A1ntica-en-postgresql" class="hash-link" aria-label="Enlace directo al Experimento: búsqueda semántica en PostgreSQL" title="Enlace directo al Experimento: búsqueda semántica en PostgreSQL" translate="no">​</a></h2>
<p><strong>Contexto:</strong> añadir búsqueda semántica a una base de datos PostgreSQL existente con una sola extensión.</p>
<div class="language-sql codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-sql codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">-- Habilitar extensión</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">CREATE</span><span class="token plain"> EXTENSION vector</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">-- Tabla con columna de embedding</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">CREATE</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">TABLE</span><span class="token plain"> fragmentos </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  id </span><span class="token keyword" style="color:#00009f">SERIAL</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">PRIMARY</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">KEY</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  texto </span><span class="token keyword" style="color:#00009f">TEXT</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  embedding vector</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">-- 3 dimensiones para el ejemplo</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">-- Insertar datos con embeddings</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">INSERT</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">INTO</span><span class="token plain"> fragmentos </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">texto</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> embedding</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">VALUES</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Los transformers dominan el NLP'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'[0.1, 0.8, 0.3]'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'Ollama ejecuta LLMs en local'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">    </span><span class="token string" style="color:#e3116c">'[0.9, 0.1, 0.2]'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'RAG mejora la precisión del LLM'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'[0.4, 0.6, 0.7]'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">-- Buscar el más similar a un vector de consulta</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">SELECT</span><span class="token plain"> texto</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> embedding </span><span class="token operator" style="color:#393A34">&lt;=&gt;</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'[0.85, 0.15, 0.25]'</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">AS</span><span class="token plain"> distancia</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">FROM</span><span class="token plain"> fragmentos</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">ORDER</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">BY</span><span class="token plain"> distancia</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">LIMIT</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p><strong>Resultado:</strong></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">texto                           | distancia</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">--------------------------------+----------</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Ollama ejecuta LLMs en local    | 0.018</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Los transformers dominan el NLP | 0.412</span><br></span></code></pre></div></div>
<p><strong>Qué aprender:</strong> <code>&lt;=&gt;</code> es el operador de distancia coseno. Con un índice HNSW (<code>CREATE INDEX ON fragmentos USING hnsw (embedding vector_cosine_ops)</code>) la búsqueda escala a millones de filas sin degradación notable.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="referencias">Referencias<a href="https://falkenslab.github.io/falkens-notebook/experiments/pgvector-busqueda-semantica#referencias" class="hash-link" aria-label="Enlace directo al Referencias" title="Enlace directo al Referencias" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://github.com/pgvector/pgvector" target="_blank" rel="noopener noreferrer" class="">pgvector — GitHub</a></li>
<li class=""><a href="https://www.postgresql.org/docs" target="_blank" rel="noopener noreferrer" class="">PostgreSQL — Documentación</a></li>
<li class=""><a class="" href="https://falkenslab.github.io/falkens-notebook/notes/tools/vector-databases/pgvector">Notas: pgvector</a></li>
</ul>]]></content:encoded>
            <category>pgvector</category>
            <category>PostgreSQL</category>
            <category>Embeddings</category>
            <category>RAG</category>
        </item>
        <item>
            <title><![CDATA[Búsqueda híbrida con Weaviate]]></title>
            <link>https://falkenslab.github.io/falkens-notebook/experiments/weaviate-busqueda-hibrida</link>
            <guid>https://falkenslab.github.io/falkens-notebook/experiments/weaviate-busqueda-hibrida</guid>
            <pubDate>Sun, 05 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Combinar búsqueda vectorial y BM25 en Weaviate para obtener resultados más relevantes que con un solo método.]]></description>
            <content:encoded><![CDATA[<p>Combinar búsqueda vectorial y BM25 en Weaviate para obtener resultados más relevantes que con un solo método.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="experimento-búsqueda-híbrida-con-weaviate">Experimento: búsqueda híbrida con Weaviate<a href="https://falkenslab.github.io/falkens-notebook/experiments/weaviate-busqueda-hibrida#experimento-b%C3%BAsqueda-h%C3%ADbrida-con-weaviate" class="hash-link" aria-label="Enlace directo al Experimento: búsqueda híbrida con Weaviate" title="Enlace directo al Experimento: búsqueda híbrida con Weaviate" translate="no">​</a></h2>
<p><strong>Contexto:</strong> combinar búsqueda vectorial y BM25 para obtener resultados más relevantes que con un solo método.</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> weaviate</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">client </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> weaviate</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">connect_to_local</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">collection </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> client</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">collections</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"Documento"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Búsqueda híbrida: vectorial + BM25</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">results </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> collection</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">query</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">hybrid</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    query</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"modelos de lenguaje en local"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    alpha</span><span class="token operator" style="color:#393A34">=</span><span class="token number" style="color:#36acaa">0.5</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic"># 0 = solo BM25, 1 = solo vectorial</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    limit</span><span class="token operator" style="color:#393A34">=</span><span class="token number" style="color:#36acaa">3</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> obj </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> results</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">objects</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">obj</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">properties</span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"contenido"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">client</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">close</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre></div></div>
<p><strong>Resultado:</strong></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Ollama permite ejecutar LLMs en local sin coste por token.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">La cuantización reduce el tamaño del modelo con pérdida mínima de calidad.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">LM Studio incluye un servidor local compatible con la API de OpenAI.</span><br></span></code></pre></div></div>
<p><strong>Qué aprender:</strong> el parámetro <code>alpha</code> controla el balance entre búsqueda semántica y textual. <code>alpha=0.5</code> suele dar mejores resultados que cualquiera de los dos métodos por separado.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="referencias">Referencias<a href="https://falkenslab.github.io/falkens-notebook/experiments/weaviate-busqueda-hibrida#referencias" class="hash-link" aria-label="Enlace directo al Referencias" title="Enlace directo al Referencias" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://weaviate.io/developers/weaviate" target="_blank" rel="noopener noreferrer" class="">Weaviate — Documentación</a></li>
<li class=""><a href="https://github.com/weaviate/weaviate" target="_blank" rel="noopener noreferrer" class="">Weaviate — GitHub</a></li>
<li class=""><a class="" href="https://falkenslab.github.io/falkens-notebook/notes/tools/vector-databases/weaviate">Notas: Weaviate</a></li>
</ul>]]></content:encoded>
            <category>Weaviate</category>
            <category>Embeddings</category>
            <category>RAG</category>
        </item>
        <item>
            <title><![CDATA[¿Qué modelo es mejor?]]></title>
            <link>https://falkenslab.github.io/falkens-notebook/experiments/comparacion-modelos</link>
            <guid>https://falkenslab.github.io/falkens-notebook/experiments/comparacion-modelos</guid>
            <pubDate>Sat, 04 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Con tantos modelos disponibles actualmente se hace difícil elegir el modelo más adecuado para ciertas tareas.]]></description>
            <content:encoded><![CDATA[<p>Con tantos modelos disponibles actualmente se hace difícil elegir el modelo más adecuado para ciertas tareas.</p>
<p><strong>Chatbot Arena</strong> es una plataforma de evaluación colaborativa de modelos desarrollada por <a href="https://lmsys.org/" target="_blank" rel="noopener noreferrer" class="">LMSYS</a> que nos permite comparar respuestas de dos modelos y votar la mejor.</p>
<p>Para comparar dos modelos podemos seguir los siguientes pasos:</p>
<ol>
<li class="">Accedemos a la web de <a href="https://arena.ai/" target="_blank" rel="noopener noreferrer" class=""><strong>Chatbot Arena</strong></a>.</li>
<li class="">Elegimos el modo <strong>Side by Side</strong>: Comparar dos modelos de nuestra elección.</li>
</ol>
<p><img decoding="async" loading="lazy" alt="alt text" src="https://falkenslab.github.io/falkens-notebook/assets/images/image-58aee1e53746e80d7c337fb89058cb64.png" width="1019" height="706" class="img_ev3q"></p>
<blockquote>
<p>Hay otros dos modos:</p>
<ul>
<li class=""><strong>Battle Mode</strong>: Comparar dos modelos aleatorios.</li>
<li class=""><strong>Direct</strong>: Chatear con un modelo directamente.</li>
</ul>
</blockquote>
<ol start="3">
<li class="">Le hacemos una consulta.</li>
</ol>
<p><img decoding="async" loading="lazy" alt="alt text" src="https://falkenslab.github.io/falkens-notebook/assets/images/image-1-473180371eef5e6b39a3767df7f85dca.png" width="1028" height="715" class="img_ev3q"></p>
<ol start="4">
<li class="">Elegimos qué respuesta consideramos que es la mejor (pueden ser ambas o ninguna).</li>
</ol>
<p><img decoding="async" loading="lazy" alt="alt text" src="https://falkenslab.github.io/falkens-notebook/assets/images/image-2-9f655503a16b8fb7dd9cd9a2fb2180ce.png" width="1028" height="715" class="img_ev3q"></p>
<ol start="5">
<li class="">Nuestro voto actualiza el ranking Elo.</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="el-leaderboard">El leaderboard<a href="https://falkenslab.github.io/falkens-notebook/experiments/comparacion-modelos#el-leaderboard" class="hash-link" aria-label="Enlace directo al El leaderboard" title="Enlace directo al El leaderboard" translate="no">​</a></h2>
<p>El resultado acumulado de todos los votos genera un <a href="https://arena.ai/leaderboard" target="_blank" rel="noopener noreferrer" class="">ranking Elo público</a> que refleja preferencia humana real, no benchmarks de laboratorio. Es la métrica más usada como referencia para comparar la calidad percibida de los modelos frontier.</p>
<p><img decoding="async" loading="lazy" alt="alt text" src="https://falkenslab.github.io/falkens-notebook/assets/images/image-3-b228b2444dfb76c1317842c08c60a5db.png" width="1137" height="715" class="img_ev3q"></p>]]></content:encoded>
            <category>Chatbot Arena</category>
            <category>Comparar</category>
            <category>Modelos</category>
        </item>
        <item>
            <title><![CDATA[Ejecutar un modelo en local]]></title>
            <link>https://falkenslab.github.io/falkens-notebook/experiments/ejecutar-modelo-local</link>
            <guid>https://falkenslab.github.io/falkens-notebook/experiments/ejecutar-modelo-local</guid>
            <pubDate>Thu, 28 Aug 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[En este experimento vamos a ejecutar un modelo en local, para poder hablar con un LLM en nuestra máquina.]]></description>
            <content:encoded><![CDATA[<p>En este experimento vamos a ejecutar un modelo en local, para poder hablar con un LLM en nuestra máquina.</p>
<p>Para poder ejecutar un modelo (LLM), necesitamos un motor de ejecución (runtime), y para en este experimento usaremos <strong>Ollama</strong>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-instalamos-ollama">1. Instalamos Ollama<a href="https://falkenslab.github.io/falkens-notebook/experiments/ejecutar-modelo-local#1-instalamos-ollama" class="hash-link" aria-label="Enlace directo al 1. Instalamos Ollama" title="Enlace directo al 1. Instalamos Ollama" translate="no">​</a></h2>
<p>Sigue estas <a class="" href="https://falkenslab.github.io/falkens-notebook/notes/tools/llm-runtimes/ollama/instalacion">instrucciones para instalar Ollama</a> en tu sistema.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-descargamos-un-modelo">2. Descargamos un modelo<a href="https://falkenslab.github.io/falkens-notebook/experiments/ejecutar-modelo-local#2-descargamos-un-modelo" class="hash-link" aria-label="Enlace directo al 2. Descargamos un modelo" title="Enlace directo al 2. Descargamos un modelo" translate="no">​</a></h2>
<p>Se descarga el modelo del repositorio de modelos de Ollama:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ ollama pull llama3.2</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-lo-ejecutamos">3. Lo ejecutamos<a href="https://falkenslab.github.io/falkens-notebook/experiments/ejecutar-modelo-local#3-lo-ejecutamos" class="hash-link" aria-label="Enlace directo al 3. Lo ejecutamos" title="Enlace directo al 3. Lo ejecutamos" translate="no">​</a></h2>
<p>Chateamos con el modelo:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ ollama run llama3.2</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">&gt;&gt;&gt; ¿Qué es un modelo de lenguaje en una frase?</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Un modelo de lenguaje es un sistema informático que utiliza algoritmos y técnicas de procesamiento del lenguaje natural para entender, </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">generar y interactuar con texto. Estos modelos están diseñados para aprender patrones y estructuras del lenguaje a partir de grandes </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">conjuntos de datos y luego utilizar esta información para realizar tareas específicas como la traducción automática, la pregunta respuesta </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">o la generación de contenido.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">&gt;&gt;&gt; /bye</span><br></span></code></pre></div></div>
<p>En cuestión de minutos tenemos un LLM corriendo en local, sin cuenta, sin API key, sin coste por token.</p>]]></content:encoded>
            <category>Ollama</category>
            <category>LLM</category>
            <category>Primeros pasos</category>
        </item>
    </channel>
</rss>