<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Nanaji G</title>
    <description>The latest articles on Forem by Nanaji G (@member_ff5e6602).</description>
    <link>https://forem.com/member_ff5e6602</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3314135%2F5977d447-c7f1-4e6c-9c66-b101bd3b547f.png</url>
      <title>Forem: Nanaji G</title>
      <link>https://forem.com/member_ff5e6602</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/member_ff5e6602"/>
    <language>en</language>
    <item>
      <title>Running Ollama Locally for Enterprise PDF Classification from SharePoint</title>
      <dc:creator>Nanaji G</dc:creator>
      <pubDate>Sun, 12 Oct 2025 08:03:29 +0000</pubDate>
      <link>https://forem.com/member_ff5e6602/running-ollama-locally-for-enterprise-pdf-classification-from-sharepoint-cci</link>
      <guid>https://forem.com/member_ff5e6602/running-ollama-locally-for-enterprise-pdf-classification-from-sharepoint-cci</guid>
      <description>&lt;h1&gt;
  
  
  Running Ollama Locally for Enterprise PDF Classification from SharePoint
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;In this comprehensive guide, we'll explore how to leverage &lt;strong&gt;Ollama&lt;/strong&gt; running locally to classify enterprise PDFs stored in SharePoint. This solution provides a cost-effective, privacy-focused approach to document intelligence without relying on cloud-based AI services.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvbtqysgruqwchoa70adr.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvbtqysgruqwchoa70adr.jpg" alt=" " width="784" height="1168"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Key Benefits:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;🔒 Privacy First&lt;/strong&gt;: Keep sensitive enterprise data on-premises&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;💰 Cost-Effective&lt;/strong&gt;: No per-API-call charges&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;⚡ Performance&lt;/strong&gt;: Low-latency processing for local documents&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🎛️ Control&lt;/strong&gt;: Full control over model selection and fine-tuning&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🛠️ Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before we begin, ensure you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Ollama&lt;/strong&gt; installed locally (&lt;a href="https://ollama.ai" rel="noopener noreferrer"&gt;Download here&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Python 3.8+&lt;/strong&gt; with pip&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;SharePoint&lt;/strong&gt; access with appropriate permissions&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Microsoft 365&lt;/strong&gt; credentials&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📦 Required Libraries
&lt;/h2&gt;

&lt;p&gt;Install the necessary Python packages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;ollama
pip &lt;span class="nb"&gt;install &lt;/span&gt;office365-rest-python-client
pip &lt;span class="nb"&gt;install &lt;/span&gt;PyPDF2
pip &lt;span class="nb"&gt;install &lt;/span&gt;python-dotenv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Architecture Overview
&lt;/h2&gt;

&lt;p&gt;Our solution follows this workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Connect&lt;/strong&gt; to SharePoint using Microsoft Graph API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Download&lt;/strong&gt; PDFs from specified document library&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extract&lt;/strong&gt; text content from PDFs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Classify&lt;/strong&gt; documents using Ollama's LLM&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Update&lt;/strong&gt; metadata/tags in SharePoint&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  💻 Implementation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Setting Up Ollama
&lt;/h3&gt;

&lt;p&gt;First, pull a suitable model for classification:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Pull a lightweight model&lt;/span&gt;
ollama pull llama2:7b

&lt;span class="c"&gt;# Or for better accuracy&lt;/span&gt;
ollama pull llama2:13b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: SharePoint Connection
&lt;/h3&gt;

&lt;p&gt;Create a &lt;code&gt;config.py&lt;/code&gt; file for credentials:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;dotenv&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;load_dotenv&lt;/span&gt;

&lt;span class="nf"&gt;load_dotenv&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;SHAREPOINT_SITE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;SHAREPOINT_SITE&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;CLIENT_ID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;CLIENT_ID&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;CLIENT_SECRET&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;CLIENT_SECRET&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;TENANT_ID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;TENANT_ID&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: PDF Classification Script
&lt;/h3&gt;

&lt;p&gt;Here's the main classification implementation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ollama&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;office365.sharepoint.client_context&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ClientContext&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;office365.runtime.auth.client_credential&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ClientCredential&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;PyPDF2&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;io&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PDFClassifier&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sharepoint_site&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;client_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;client_secret&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;site&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sharepoint_site&lt;/span&gt;
        &lt;span class="n"&gt;credentials&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ClientCredential&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;client_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;client_secret&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ClientContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sharepoint_site&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;with_credentials&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;credentials&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;extract_pdf_text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pdf_bytes&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Extract text from PDF bytes&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
        &lt;span class="n"&gt;pdf_file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;io&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;BytesIO&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pdf_bytes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;pdf_reader&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;PyPDF2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;PdfReader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pdf_file&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;pdf_reader&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;extract_text&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;  &lt;span class="c1"&gt;# Limit for prompt
&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;classify_document&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;text_content&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Classify document using Ollama&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
        &lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
        Analyze the following document excerpt and classify it into ONE of these categories:
        - Financial Report
        - Legal Contract
        - Technical Documentation
        - Marketing Material
        - HR Document
        - General Correspondence

        Document:
        &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;text_content&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;

        Respond with ONLY the category name, nothing else.
        &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ollama&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;llama2:7b&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;message&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;process_library&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;library_name&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Process all PDFs in a SharePoint library&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
        &lt;span class="n"&gt;library&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;web&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lists&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_by_title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;library_name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;library&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;execute_query&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

        &lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;

        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="nb"&gt;file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;execute_query&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;endswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;.pdf&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
                &lt;span class="c1"&gt;# Download PDF
&lt;/span&gt;                &lt;span class="n"&gt;pdf_content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

                &lt;span class="c1"&gt;# Extract text
&lt;/span&gt;                &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;extract_pdf_text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pdf_content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

                &lt;span class="c1"&gt;# Classify
&lt;/span&gt;                &lt;span class="n"&gt;category&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;classify_document&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

                &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
                    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;file&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;category&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;category&lt;/span&gt;
                &lt;span class="p"&gt;})&lt;/span&gt;

                &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;✅ Classified: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; → &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;category&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: Running the Classifier
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;config&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;

&lt;span class="c1"&gt;# Initialize classifier
&lt;/span&gt;&lt;span class="n"&gt;classifier&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;PDFClassifier&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;sharepoint_site&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;SHAREPOINT_SITE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;client_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;CLIENT_ID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;client_secret&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;CLIENT_SECRET&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Process documents
&lt;/span&gt;&lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;classifier&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;process_library&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Documents&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Display results
&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;📄 &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;file&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;category&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Advanced Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Custom Classification Categories
&lt;/h3&gt;

&lt;p&gt;You can easily adapt the categories to your needs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;CATEGORIES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Invoice&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Purchase Order&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Compliance Report&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Employee Handbook&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Project Proposal&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Batch Processing with Progress Bar
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;tqdm&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;tqdm&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;process_library_with_progress&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;library_name&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_library_items&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;library_name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;tqdm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;desc&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Processing PDFs&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="c1"&gt;# Classification logic here
&lt;/span&gt;        &lt;span class="k"&gt;pass&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔍 Best Practices
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Performance Optimization
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Batch Processing&lt;/strong&gt;: Process documents in batches during off-hours&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Caching&lt;/strong&gt;: Cache classifications to avoid re-processing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model Selection&lt;/strong&gt;: Balance between accuracy and speed&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Security Considerations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🔐 Use &lt;strong&gt;environment variables&lt;/strong&gt; for credentials&lt;/li&gt;
&lt;li&gt;🔐 Implement &lt;strong&gt;role-based access control&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🔐 Enable &lt;strong&gt;audit logging&lt;/strong&gt; for classification activities&lt;/li&gt;
&lt;li&gt;🔐 Consider &lt;strong&gt;encryption&lt;/strong&gt; for sensitive document content&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Monitoring &amp;amp; Logging
&lt;/h2&gt;

&lt;p&gt;Implement comprehensive logging:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;logging&lt;/span&gt;

&lt;span class="n"&gt;logging&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;basicConfig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;level&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;logging&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;INFO&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nb"&gt;format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;%(asctime)s - %(levelname)s - %(message)s&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;handlers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="n"&gt;logging&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;FileHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;classification.log&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;logging&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;StreamHandler&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;logger&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;logging&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getLogger&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;__name__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Common Issues &amp;amp; Solutions
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Issue&lt;/th&gt;
&lt;th&gt;Solution&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ollama not responding&lt;/td&gt;
&lt;td&gt;Check if service is running: &lt;code&gt;ollama serve&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SharePoint auth fails&lt;/td&gt;
&lt;td&gt;Verify app permissions in Azure AD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PDF extraction errors&lt;/td&gt;
&lt;td&gt;Use &lt;code&gt;pdfplumber&lt;/code&gt; as alternative to PyPDF2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Slow classification&lt;/td&gt;
&lt;td&gt;Use smaller model or implement caching&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This solution demonstrates how to:&lt;/p&gt;

&lt;p&gt;✅ Leverage &lt;strong&gt;local LLMs&lt;/strong&gt; for enterprise document classification&lt;br&gt;&lt;br&gt;
✅ Integrate with &lt;strong&gt;SharePoint&lt;/strong&gt; seamlessly&lt;br&gt;&lt;br&gt;
✅ Maintain &lt;strong&gt;data privacy&lt;/strong&gt; and control&lt;br&gt;&lt;br&gt;
✅ Build &lt;strong&gt;cost-effective&lt;/strong&gt; AI solutions&lt;/p&gt;




&lt;h2&gt;
  
  
  🔗 Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/ollama/ollama" rel="noopener noreferrer"&gt;Ollama Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/sharepoint/dev/sp-add-ins/get-to-know-the-sharepoint-rest-service" rel="noopener noreferrer"&gt;SharePoint REST API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pypdf2.readthedocs.io/" rel="noopener noreferrer"&gt;PyPDF2 Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Discussion
&lt;/h2&gt;

&lt;p&gt;Have you implemented similar solutions? What challenges did you face? Share your experiences in the comments below!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tags&lt;/strong&gt;: #AI #MachineLearning #SharePoint #Python #Ollama #EnterpriseAI #DocumentClassification&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>machinelearning</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>OpenAI's AgentKit and Agent Builder: The Future of AI Automation Workflows</title>
      <dc:creator>Nanaji G</dc:creator>
      <pubDate>Sun, 12 Oct 2025 07:47:01 +0000</pubDate>
      <link>https://forem.com/member_ff5e6602/openais-agentkit-and-agent-builder-the-future-of-ai-automation-workflows-2</link>
      <guid>https://forem.com/member_ff5e6602/openais-agentkit-and-agent-builder-the-future-of-ai-automation-workflows-2</guid>
      <description>&lt;p&gt;I've been using n8n for quite a while now, building all kinds of automation workflows: some simple, some pretty complex. But after OpenAI announced &lt;strong&gt;AgentKit&lt;/strong&gt;, and especially their new &lt;strong&gt;Agent Builder&lt;/strong&gt; tool, I couldn't help but check it out. It's been getting a lot of buzz lately, and honestly, it looks like it could shake up the entire automation space.&lt;/p&gt;

&lt;p&gt;In this post, I'll walk you through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What AgentKit actually is&lt;/li&gt;
&lt;li&gt;How Agent Builder works&lt;/li&gt;
&lt;li&gt;A hands-on demo I built&lt;/li&gt;
&lt;li&gt;A detailed comparison with n8n&lt;/li&gt;
&lt;li&gt;Who should use what&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's dive in! &lt;/p&gt;




&lt;h2&gt;
  
  
  What is OpenAI's AgentKit?
&lt;/h2&gt;

&lt;p&gt;OpenAI's &lt;strong&gt;AgentKit&lt;/strong&gt; is a new suite of tools built to help developers and teams create, deploy, and manage AI-powered agents with less friction.&lt;/p&gt;

&lt;p&gt;Until now, building agentic workflows meant:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Juggling multiple tools&lt;/li&gt;
&lt;li&gt;Writing complex orchestration logic&lt;/li&gt;
&lt;li&gt;Spending too much time on frontend work&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AgentKit changes that. It lets you design workflows visually and integrate agent-powered UIs much faster, thanks to &lt;strong&gt;three main components&lt;/strong&gt;:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;Agent Builder&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A visual canvas where you can design multi-agent workflows with simple drag-and-drop actions. It comes with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Built-in version control&lt;/li&gt;
&lt;li&gt;Live previews&lt;/li&gt;
&lt;li&gt;Safety guardrails to prevent errors, data leaks, or unsafe behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. &lt;strong&gt;Connector Registry&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Manages data and integrations across multiple workspaces and apps from one centralized place.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. &lt;strong&gt;ChatKit&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Handles the interface side, letting you embed conversational agents directly into your product without dealing with frontend complexity.&lt;/p&gt;

&lt;h3&gt;
  
  
  🎯 Evaluation Features
&lt;/h3&gt;

&lt;p&gt;OpenAI is also rolling out new evaluation features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Datasets&lt;/li&gt;
&lt;li&gt;Trace grading&lt;/li&gt;
&lt;li&gt;Automated prompt optimization&lt;/li&gt;
&lt;li&gt;Third-party model support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All aimed at helping teams monitor and improve agent performance more systematically.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ How Does Agent Builder Work?
&lt;/h2&gt;

&lt;p&gt;At the core of AgentKit is &lt;strong&gt;Agent Builder&lt;/strong&gt;, a visual canvas where you can design multi-agent workflows with simple drag-and-drop actions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features:
&lt;/h3&gt;

&lt;h4&gt;
  
  
  🎨 Visual Workflow Design
&lt;/h4&gt;

&lt;p&gt;Design complex multi-agent workflows visually without writing orchestration code.&lt;/p&gt;

&lt;h4&gt;
  
  
  🔄 Version Control
&lt;/h4&gt;

&lt;p&gt;Built-in versioning lets you track changes, roll back, and iterate safely.&lt;/p&gt;

&lt;h4&gt;
  
  
  🛡️ Safety Guardrails
&lt;/h4&gt;

&lt;p&gt;Modular guardrails for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Masking PII (Personally Identifiable Information)&lt;/li&gt;
&lt;li&gt;Jailbreak detection&lt;/li&gt;
&lt;li&gt;Safe behavior enforcement&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  🔌 Connector Registry
&lt;/h4&gt;

&lt;p&gt;Centralized management of integrations across workspaces.&lt;/p&gt;

&lt;h4&gt;
  
  
  💬 ChatKit Integration
&lt;/h4&gt;

&lt;p&gt;Embed chat-based agent experiences directly into your product with zero frontend work.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started with Agent Builder
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Time needed:&lt;/strong&gt; 2 minutes&lt;/p&gt;

&lt;p&gt;Here's how to access Agent Builder:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Log in&lt;/strong&gt; to your OpenAI account on their official website&lt;/li&gt;
&lt;li&gt;Visit the Agent Builder page and click on &lt;strong&gt;"Open Agent Builder"&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Once in, click on &lt;strong&gt;"Create workflow"&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Use the visual canvas to drag, drop, and connect components to create your agent workflows&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  💡 Demo: Building a Custom Agentic Workflow
&lt;/h2&gt;

&lt;p&gt;I built a custom agentic workflow using OpenAI's Agent Builder to see firsthand how simple it is to create and deploy agents.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Workflow:
&lt;/h3&gt;

&lt;p&gt;I designed a workflow that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Uses a &lt;strong&gt;FileSearchTool&lt;/strong&gt; to read and search through my YouTube video transcripts&lt;/li&gt;
&lt;li&gt;Answers user questions by intelligently searching those transcripts&lt;/li&gt;
&lt;li&gt;Leverages &lt;strong&gt;GPT-5's reasoning capabilities&lt;/strong&gt; to understand context and pull up accurate responses in seconds&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  How It Works:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Sample Agent Builder Workflow Structure&lt;/span&gt;
&lt;span class="na"&gt;agent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YouTube&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Transcript&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Assistant"&lt;/span&gt;
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-5"&lt;/span&gt;
  &lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;FileSearchTool&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;source&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;youtube_transcripts"&lt;/span&gt;
        &lt;span class="na"&gt;search_mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;semantic"&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;ResponseGenerator&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;temperature&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.7&lt;/span&gt;
        &lt;span class="na"&gt;max_tokens&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;500&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The Process:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;User asks a question&lt;/strong&gt; → The agent receives the query&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FileSearchTool activates&lt;/strong&gt; → Searches through transcript corpus&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPT-5 processes context&lt;/strong&gt; → Understands intent and pulls relevant information&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent responds&lt;/strong&gt; → Delivers accurate, contextual answer&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This approach illustrates the power of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agent Builder's drag-and-drop design&lt;/li&gt;
&lt;li&gt;Built-in AI orchestration&lt;/li&gt;
&lt;li&gt;Seamless tool integrations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All without heavy coding! 🎉&lt;/p&gt;

&lt;h3&gt;
  
  
  Sample Code: FileSearchTool Configuration
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agentkit&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;FileSearchTool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;

&lt;span class="c1"&gt;# Initialize FileSearchTool
&lt;/span&gt;&lt;span class="n"&gt;file_search&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;FileSearchTool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;transcript_search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;video1.txt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;video2.txt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;video3.txt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;embedding_model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text-embedding-3-large&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;search_strategy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;hybrid&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;# Combines semantic + keyword search
&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Create agent with the tool
&lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YouTube Assistant&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;file_search&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
    You are a helpful assistant that answers questions about 
    YouTube video content by searching through transcripts.
    Always cite the specific video when answering.
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Run the agent
&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;What topics were covered in the AI series?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Prompt Optimization Config
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"optimization"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"strategy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"automated"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"metrics"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"accuracy"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"latency"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"user_satisfaction"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"test_cases"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"input"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"What is discussed in video 3?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"expected_context"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"video_3_transcript"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"guardrails"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"pii_masking"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"jailbreak_detection"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"content_filtering"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"moderate"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  AgentKit vs n8n: The Ultimate Comparison
&lt;/h2&gt;

&lt;p&gt;While &lt;strong&gt;n8n&lt;/strong&gt; is a mature and popular no-code/low-code automation platform with thousands of integrations and a strong community, &lt;strong&gt;Agent Builder&lt;/strong&gt; takes a unique approach by integrating advanced AI agents with streamlined conversational UI and guardrails built-in.&lt;/p&gt;

&lt;h3&gt;
  
  
  Comparison Table
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;n8n&lt;/th&gt;
&lt;th&gt;Agent Builder&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Workflow Design&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Visual, node-based drag &amp;amp; drop&lt;/td&gt;
&lt;td&gt;Visual canvas with multi-agent orchestration, versioning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI Integration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Limited, reliant on external APIs&lt;/td&gt;
&lt;td&gt;Native AI agent orchestration with GPT-5 powered reasoning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Chat UI Embedding&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Requires custom frontend development&lt;/td&gt;
&lt;td&gt;Built-in ChatKit for embedding chat-based agent experiences&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Safety &amp;amp; Guardrails&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Manual implementation of data privacy and security&lt;/td&gt;
&lt;td&gt;Modular guardrails for masking PII, jailbreak detection, and safe behavior&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Connectors&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Extensive integrations, community-built&lt;/td&gt;
&lt;td&gt;Managed via Connector Registry, centralized control&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Evaluation &amp;amp; Monitoring&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Logs, executions, and some monitoring via plugins&lt;/td&gt;
&lt;td&gt;Integrated evals with automated grading, prompt optimization, and trace grading&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Version Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Basic workflow versioning&lt;/td&gt;
&lt;td&gt;Advanced built-in version control with rollback&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Open Source&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;td&gt;❌ No (Proprietary)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Community Support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Large, active community&lt;/td&gt;
&lt;td&gt;Growing, backed by OpenAI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Learning Curve&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Moderate (familiar to automation users)&lt;/td&gt;
&lt;td&gt;Low (AI-first, intuitive interface)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  ✅ Pros &amp;amp; Cons
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Agent Builder
&lt;/h3&gt;

&lt;h4&gt;
  
  
  ✅ Pros:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI-native design&lt;/strong&gt; - Built specifically for AI agent workflows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero frontend work&lt;/strong&gt; - ChatKit handles UI embedding&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in safety&lt;/strong&gt; - Guardrails for PII, jailbreak detection, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integrated evaluation&lt;/strong&gt; - Automated prompt optimization and trace grading&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise-ready&lt;/strong&gt; - SSO, RBAC, audit logs included&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPT-5 integration&lt;/strong&gt; - Advanced reasoning capabilities&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fast prototyping&lt;/strong&gt; - Visual builder accelerates development&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  ❌ Cons:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Proprietary&lt;/strong&gt; - Not open source&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Newer platform&lt;/strong&gt; - Smaller community compared to n8n&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenAI dependency&lt;/strong&gt; - Tied to OpenAI ecosystem&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pricing uncertainty&lt;/strong&gt; - Storage costs can add up&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Limited integrations&lt;/strong&gt; - Fewer third-party connectors (for now)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  n8n
&lt;/h3&gt;

&lt;h4&gt;
  
  
  ✅ Pros:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Open source&lt;/strong&gt; - Full control and customization&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Massive integration library&lt;/strong&gt; - Thousands of pre-built nodes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strong community&lt;/strong&gt; - Active support and custom nodes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-hosting&lt;/strong&gt; - Complete data control&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexible pricing&lt;/strong&gt; - Free for self-hosted&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mature platform&lt;/strong&gt; - Battle-tested in production&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workflow versatility&lt;/strong&gt; - Works for any automation, not just AI&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  ❌ Cons:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Limited native AI&lt;/strong&gt; - Requires external API integrations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend work required&lt;/strong&gt; - No built-in chat UI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manual safety implementation&lt;/strong&gt; - No built-in guardrails&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Complex AI orchestration&lt;/strong&gt; - More coding needed for agentic workflows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No integrated evals&lt;/strong&gt; - Must build your own monitoring&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💰 Pricing
&lt;/h2&gt;

&lt;h3&gt;
  
  
  AgentKit Pricing
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Billing starts:&lt;/strong&gt; November 1, 2025&lt;/p&gt;

&lt;h4&gt;
  
  
  Free Features:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Using Agent Builder to design and iterate (until you hit Run)&lt;/li&gt;
&lt;li&gt;Self-hosting ChatKit (you only pay for model-token usage)&lt;/li&gt;
&lt;li&gt;Enterprise controls: SSO, RBAC, and audit logs&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Paid Features:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Storage:&lt;/strong&gt; 1 GB free per account per month&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Beyond 1 GB:&lt;/strong&gt; $0.10 per GB-day&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model usage:&lt;/strong&gt; Standard OpenAI API pricing applies&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  What This Means:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Prototyping and design are free&lt;/li&gt;
&lt;li&gt;You only pay when running agents in production&lt;/li&gt;
&lt;li&gt;Storage costs apply to ChatKit file and image uploads&lt;/li&gt;
&lt;li&gt;Enterprise features included at no extra cost&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  n8n Pricing
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Self-hosted:&lt;/strong&gt; Free (open source)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud:&lt;/strong&gt; Starting at $20/month&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise:&lt;/strong&gt; Custom pricing&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Who Should Use What?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Choose &lt;strong&gt;Agent Builder&lt;/strong&gt; if you:
&lt;/h3&gt;

&lt;p&gt;✅ Want to build AI-first workflows with minimal code&lt;br&gt;
✅ Need embedded chat interfaces for your agents&lt;br&gt;
✅ Require enterprise-grade safety guardrails out of the box&lt;br&gt;
✅ Value integrated evaluation and prompt optimization&lt;br&gt;
✅ Are building conversational AI experiences&lt;br&gt;
✅ Want fast prototyping with visual tools&lt;br&gt;
✅ Need native GPT-5 integration with advanced reasoning&lt;br&gt;
✅ Prefer managed infrastructure over self-hosting&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; AI startups, SaaS products with conversational AI, teams building customer-facing agents, enterprise AI initiatives&lt;/p&gt;

&lt;h3&gt;
  
  
  Choose &lt;strong&gt;n8n&lt;/strong&gt; if you:
&lt;/h3&gt;

&lt;p&gt;✅ Need extensive third-party integrations (1000+ nodes)&lt;br&gt;
✅ Value open-source flexibility and customization&lt;br&gt;
✅ Want complete control with self-hosting&lt;br&gt;
✅ Are building general automation workflows (not just AI)&lt;br&gt;
✅ Have a limited budget (free self-hosted option)&lt;br&gt;
✅ Prefer community-driven development&lt;br&gt;
✅ Need to integrate with legacy systems&lt;br&gt;
✅ Want to avoid vendor lock-in&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Small businesses, automation enthusiasts, teams with DevOps expertise, general workflow automation, budget-conscious projects&lt;/p&gt;




&lt;h2&gt;
  
  
  🔥 My Take: Is It the End of n8n?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt; No, but it's definitely competition.&lt;/p&gt;

&lt;p&gt;Agent Builder is changing how we think about AI automation. Its visual, AI-native design, built-in safety guardrails, and integrated chat UI make it surprisingly easy to build intelligent agents without the usual technical hurdles.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;n8n&lt;/strong&gt;, on the other hand, still shines as a flexible, open-source automation platform with a massive integration library and a strong community behind it.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Verdict:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;If you're looking for &lt;strong&gt;streamlined, AI-first workflows&lt;/strong&gt; with enterprise-level control, Agent Builder feels like the next big step.&lt;/li&gt;
&lt;li&gt;If &lt;strong&gt;flexibility, community support, and open customization&lt;/strong&gt; matter more to you, n8n still holds its ground.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  💡 Pro Tip:
&lt;/h3&gt;

&lt;p&gt;You could even use both! Use n8n for general automation and integrations, and Agent Builder for AI-specific agentic workflows. They can complement each other beautifully.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;OpenAI's Agent Builder is a powerful new player in the automation space, especially for AI-powered workflows. Its combination of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visual workflow design&lt;/li&gt;
&lt;li&gt;Native AI orchestration&lt;/li&gt;
&lt;li&gt;Built-in chat UI&lt;/li&gt;
&lt;li&gt;Safety guardrails&lt;/li&gt;
&lt;li&gt;Integrated evaluation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;...makes it a strong contender for teams building conversational AI experiences.&lt;/p&gt;

&lt;p&gt;But n8n isn't going anywhere. Its open-source nature, massive integration ecosystem, and strong community make it irreplaceable for versatile automation needs.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's Next?
&lt;/h3&gt;

&lt;p&gt;I'll be diving deeper into both platforms, building more complex workflows, and sharing detailed tutorials. Stay tuned!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Have you tried Agent Builder or n8n?&lt;/strong&gt; Drop your thoughts in the comments! 👇&lt;/p&gt;




&lt;h2&gt;
  
  
  📚 Related Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://platform.openai.com/docs" rel="noopener noreferrer"&gt;OpenAI AgentKit Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://n8n.io" rel="noopener noreferrer"&gt;n8n Official Website&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/"&gt;Building Ethical Chatbots with OpenAI &amp;amp; LangChain&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/"&gt;Getting Started with AI Agents&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; #ai #automation #openai #agents #n8n #agentbuilder #workflow #chatgpt #gpt5 #nocode&lt;/p&gt;




&lt;p&gt;&lt;em&gt;What automation tool are you using right now? Let me know in the comments!&lt;/em&gt; 💬&lt;/p&gt;

</description>
      <category>workflow</category>
      <category>openai</category>
      <category>agentbuilder</category>
      <category>n8nbrightdatachallenge</category>
    </item>
  </channel>
</rss>
