<?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: Gustavo A. Gutkoski</title>
    <description>The latest articles on Forem by Gustavo A. Gutkoski (@gutkoski).</description>
    <link>https://forem.com/gutkoski</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%2F336156%2F7881b378-35ca-4185-91f5-4cff3cd2c224.jpeg</url>
      <title>Forem: Gustavo A. Gutkoski</title>
      <link>https://forem.com/gutkoski</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/gutkoski"/>
    <language>en</language>
    <item>
      <title>Creating an AI Assistant for Technical Documentation – Part 2.1: Introduction to the Crawler</title>
      <dc:creator>Gustavo A. Gutkoski</dc:creator>
      <pubDate>Mon, 26 May 2025 11:30:39 +0000</pubDate>
      <link>https://forem.com/gutkoski/creating-an-ai-assistant-for-technical-documentation-part-21-introduction-to-the-crawler-4p51</link>
      <guid>https://forem.com/gutkoski/creating-an-ai-assistant-for-technical-documentation-part-21-introduction-to-the-crawler-4p51</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This post is also available in Portuguese: &lt;a href="https://dev.to/gutkoski/criando-um-assistente-com-ia-para-documentacao-tecnica-parte-21-introducao-ao-crawler-319i"&gt;Read in Portuguese&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In the &lt;a href="https://dev.to/gutkoski/criando-um-assistente-com-ia-para-documentacao-tecnica-parte-1-por-que-e-como-comecei-esse-29h8"&gt;previous post&lt;/a&gt;, I shared the motivation and idea behind &lt;strong&gt;Project Insight&lt;/strong&gt; — an open source project I'm developing with the goal of building an intelligent assistant capable of understanding and documenting source code interactively.&lt;/p&gt;

&lt;p&gt;In this post, we'll take a look at the first technical component of the project: the crawler.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is the crawler and why is it important?
&lt;/h2&gt;

&lt;p&gt;The crawler is the core of Project Insight’s static analysis phase. It’s responsible for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigating through Java project files.&lt;/li&gt;
&lt;li&gt;Identifying and extracting key information such as:

&lt;ul&gt;
&lt;li&gt;Class and method names.&lt;/li&gt;
&lt;li&gt;Modifiers (&lt;code&gt;public&lt;/code&gt;, &lt;code&gt;private&lt;/code&gt;, etc).&lt;/li&gt;
&lt;li&gt;Return types.&lt;/li&gt;
&lt;li&gt;The line where each item appears in the code.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;These details are stored in a local database and will later be used by the AI to answer project-related questions in a contextualized way.&lt;/p&gt;




&lt;h2&gt;
  
  
  Project structure overview
&lt;/h2&gt;

&lt;p&gt;To keep the project clean and maintainable from the start, I structured the crawler into separate modules, each with a clear responsibility:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;project-insight-crawler/
├── crawler/
│   ├── database/       &lt;span class="c"&gt;# Database creation and connection (SQLite)&lt;/span&gt;
│   ├── logger/         &lt;span class="c"&gt;# Centralized logger for the project&lt;/span&gt;
│   ├── models/         &lt;span class="c"&gt;# Models for Java classes and methods&lt;/span&gt;
│   ├── parser/         &lt;span class="c"&gt;# Parser that extracts data from .java files&lt;/span&gt;
│   ├── use_cases/      &lt;span class="c"&gt;# Use cases like saving data to the database&lt;/span&gt;
│   └── __init__.py
├── tests/              &lt;span class="c"&gt;# Unit tests for main modules&lt;/span&gt;
├── crawler.db          &lt;span class="c"&gt;# Local SQLite database&lt;/span&gt;
├── main.py             &lt;span class="c"&gt;# Project CLI interface&lt;/span&gt;
├── runner.py           &lt;span class="c"&gt;# Main script to execute the crawler&lt;/span&gt;
├── LICENSE
├── Makefile
├── poetry.lock
├── pyproject.toml
├── README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This structure allows each part to evolve independently, keeping the codebase modular and testable.&lt;/p&gt;




&lt;h2&gt;
  
  
  Initial architecture decisions
&lt;/h2&gt;

&lt;p&gt;From the beginning, I made some decisions to simplify development and ensure quality:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Language&lt;/strong&gt;: Python, for its familiarity and fast prototyping capabilities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database&lt;/strong&gt;: SQLite, lightweight and easy to set up — ideal for MVPs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dependency management&lt;/strong&gt;: &lt;code&gt;poetry&lt;/code&gt;, for streamlined installation and packaging.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code quality tools&lt;/strong&gt;: already set up with:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ruff&lt;/code&gt; (linter and formatter)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;mypy&lt;/code&gt; (type checking)&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;pre-commit&lt;/em&gt; hooks&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Automation and maintenance&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Actions&lt;/strong&gt;: for running tests on every push.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dependabot&lt;/strong&gt;: to keep dependencies safely up to date.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;All of this helps maintain consistent code quality and reduces future headaches.&lt;/p&gt;




&lt;h2&gt;
  
  
  What’s next
&lt;/h2&gt;

&lt;p&gt;In the next post (Part 2.2), I’ll dive deeper into how the parser works — reading &lt;code&gt;.java&lt;/code&gt; files line by line, detecting relevant code blocks, and extracting the information that feeds the database.&lt;/p&gt;




&lt;h2&gt;
  
  
  What do you think?
&lt;/h2&gt;

&lt;p&gt;If you enjoyed this post so far, feel free to follow me here on Dev.to to keep up with the rest of the Project Insight series. I'm building this in real-time, so any feedback, questions, or suggestions are more than welcome in the comments!&lt;/p&gt;

&lt;p&gt;Link to the project: &lt;a href="https://github.com/gustavogutkoski/project-insight-crawler" rel="noopener noreferrer"&gt;https://github.com/gustavogutkoski/project-insight-crawler&lt;/a&gt;&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;⚙️ &lt;strong&gt;This post was written with the help of an AI assistant for writing and editing. All ideas, project structure, and technical implementations are my own.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>python</category>
      <category>ai</category>
      <category>opensource</category>
      <category>programming</category>
    </item>
    <item>
      <title>Criando um assistente com IA para documentação técnica – Parte 2.1: Introdução ao Crawler</title>
      <dc:creator>Gustavo A. Gutkoski</dc:creator>
      <pubDate>Mon, 26 May 2025 11:27:18 +0000</pubDate>
      <link>https://forem.com/gutkoski/criando-um-assistente-com-ia-para-documentacao-tecnica-parte-21-introducao-ao-crawler-319i</link>
      <guid>https://forem.com/gutkoski/criando-um-assistente-com-ia-para-documentacao-tecnica-parte-21-introducao-ao-crawler-319i</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Este post também está disponível em inglês: &lt;a href="https://dev.to/gutkoski/creating-an-ai-assistant-for-technical-documentation-part-21-introduction-to-the-crawler-4p51"&gt;Leia em inglês&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No &lt;a href="https://dev.to/gutkoski/criando-um-assistente-com-ia-para-documentacao-tecnica-parte-1-por-que-e-como-comecei-esse-29h8"&gt;post anterior&lt;/a&gt;, compartilhei a ideia e motivação por trás do &lt;strong&gt;Project Insight&lt;/strong&gt; — um projeto open source que estou desenvolvendo com o objetivo de criar um assistente inteligente capaz de entender e documentar código-fonte de forma interativa.&lt;/p&gt;

&lt;p&gt;Neste post, vamos fazer uma breve análise na primeira parte técnica do projeto: o crawler.&lt;/p&gt;




&lt;h2&gt;
  
  
  O que é o crawler e por que ele é importante?
&lt;/h2&gt;

&lt;p&gt;O crawler é o coração da etapa de análise estática do Project Insight. Ele é responsável por:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navegar pelos arquivos de um projeto Java.&lt;/li&gt;
&lt;li&gt;Identificar e extrair informações importantes como:

&lt;ul&gt;
&lt;li&gt;Nome de classes e métodos.&lt;/li&gt;
&lt;li&gt;Modificadores (&lt;code&gt;public&lt;/code&gt;, &lt;code&gt;private&lt;/code&gt;, etc).&lt;/li&gt;
&lt;li&gt;Tipo de retorno.&lt;/li&gt;
&lt;li&gt;Linha em que cada item aparece no código.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Esses dados são armazenados em um banco local e futuramente utilizados pela IA para responder perguntas sobre o projeto de forma contextualizada.&lt;/p&gt;




&lt;h2&gt;
  
  
  Estrutura inicial do projeto
&lt;/h2&gt;

&lt;p&gt;Para manter o projeto bem organizado desde o início, estruturei o crawler em módulos separados, cada um com uma responsabilidade clara:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;project-insight-crawler/
├── crawler/
│   ├── database/       &lt;span class="c"&gt;# Criação e conexão com o banco (SQLite)&lt;/span&gt;
│   ├── logger/         &lt;span class="c"&gt;# Logger centralizado para o projeto&lt;/span&gt;
│   ├── models/         &lt;span class="c"&gt;# Modelos para classes e métodos Java&lt;/span&gt;
│   ├── parser/         &lt;span class="c"&gt;# Parser que extrai dados dos arquivos .java&lt;/span&gt;
│   ├── use_cases/      &lt;span class="c"&gt;# Casos de uso como salvar dados no banco&lt;/span&gt;
│   └── __init__.py
├── tests/              &lt;span class="c"&gt;# Testes unitários para os módulos principais&lt;/span&gt;
├── crawler.db          &lt;span class="c"&gt;# Banco de dados SQLite gerado localmente&lt;/span&gt;
├── main.py             &lt;span class="c"&gt;# Interface CLI do projeto&lt;/span&gt;
├── runner.py           &lt;span class="c"&gt;# Arquivo principal para execução do crawler&lt;/span&gt;
├── LICENSE
├── Makefile
├── poetry.lock
├── pyproject.toml
├── README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Essa organização permite que cada parte evolua de forma isolada, mantendo o código limpo e testável.&lt;/p&gt;




&lt;h2&gt;
  
  
  Decisões iniciais de arquitetura
&lt;/h2&gt;

&lt;p&gt;Desde o início, tomei algumas decisões para facilitar o desenvolvimento e garantir qualidade:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Linguagem&lt;/strong&gt;: Python, pela familiaridade e agilidade para prototipar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Banco de dados&lt;/strong&gt;: SQLite, por ser leve, simples de configurar e ideal para MVPs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gerenciador de dependências&lt;/strong&gt;: &lt;code&gt;poetry&lt;/code&gt;, para facilitar a instalação e empacotamento.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Qualidade de código&lt;/strong&gt;: já estão configuradas ferramentas como:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ruff&lt;/code&gt; (linter e formatter)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;mypy&lt;/code&gt; (type checking)&lt;/li&gt;
&lt;li&gt;Hooks de &lt;em&gt;pre-commit&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Automação e manutenção&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Actions&lt;/strong&gt;: para rodar testes automaticamente a cada push.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dependabot&lt;/strong&gt;: para manter as dependências sempre atualizadas de forma segura.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Isso tudo ajuda a manter o padrão do código consistente e evita surpresas no futuro.&lt;/p&gt;




&lt;h2&gt;
  
  
  Próximos passos
&lt;/h2&gt;

&lt;p&gt;No próximo post da série (Parte 2.2), vou mostrar em mais detalhes como funciona o parser que lê os arquivos &lt;code&gt;.java&lt;/code&gt; linha por linha, identificando os blocos relevantes do código e extraindo as informações que alimentam o banco de dados.&lt;/p&gt;




&lt;h2&gt;
  
  
  E aí, o que achou?
&lt;/h2&gt;

&lt;p&gt;Se curtiu o conteúdo até aqui, me segue aqui no Dev.to pra acompanhar os próximos posts sobre o Project Insight. Tô desenvolvendo tudo isso aos poucos e em tempo real, então qualquer sugestão, dúvida ou crítica é super bem-vinda nos comentários!&lt;/p&gt;

&lt;p&gt;Link para o repositório: &lt;a href="https://github.com/gustavogutkoski/project-insight-crawler" rel="noopener noreferrer"&gt;https://github.com/gustavogutkoski/project-insight-crawler&lt;/a&gt;&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;⚙️ &lt;strong&gt;Este texto foi escrito com o apoio de uma IA como assistente de escrita e revisão. Todas as ideias, estrutura do projeto e implementações técnicas são de autoria própria.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>python</category>
      <category>ai</category>
      <category>opensource</category>
      <category>programming</category>
    </item>
    <item>
      <title>Creating an AI Assistant for Technical Documentation – Part 1: Why and How I Started This Project</title>
      <dc:creator>Gustavo A. Gutkoski</dc:creator>
      <pubDate>Fri, 09 May 2025 13:18:40 +0000</pubDate>
      <link>https://forem.com/gutkoski/creating-an-ai-assistant-for-technical-documentation-part-1-why-and-how-i-started-this-project-bkh</link>
      <guid>https://forem.com/gutkoski/creating-an-ai-assistant-for-technical-documentation-part-1-why-and-how-i-started-this-project-bkh</guid>
      <description>&lt;p&gt;This post is also available in Portuguese: &lt;a href="https://dev.to/gutkoski/criando-um-assistente-com-ia-para-documentacao-tecnica-parte-1-por-que-e-como-comecei-esse-29h8"&gt;Read in Portuguese&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hello! I'm Gustavo — a back-end software developer with a passion for Java, Python, automation, software design, and more recently, using AI for practical application. I'm beginning my technical writing here, sharing some of the knowledge and experience derived from projects that I've been developing myself.&lt;/p&gt;

&lt;p&gt;I've also always been a learn-by-doing kind of person — break things, repair them, and work with actual issues. So in addition to picking up new tools, I thought I'd blog the experience along the way — perhaps it's helpful to someone out there, or at least provokes some interesting discussions in here.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Project: an AI Assistant for Technical Documentation
&lt;/h2&gt;

&lt;p&gt;Ever feel lost in oceans of technical documentation, or spend too much time wondering how a codebase really works?&lt;/p&gt;

&lt;p&gt;That's what surprised me — and made me curious to learn more about AI, automation, and architecture — and prompted me to begin a side project: a smart assistant that can comprehend the structure of a Java project and respond to questions in the style of an "internal team chat."&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I Started This Project
&lt;/h2&gt;

&lt;p&gt;The concept arose while developing the &lt;a href="https://github.com/gustavogutkoski/trustscore-api" rel="noopener noreferrer"&gt;TrustScore API&lt;/a&gt;, a Java Spring Boot product review application. I wondered how it was feasible to automate code base comprehension, besides discovering AI concepts applied to software development.&lt;/p&gt;

&lt;p&gt;It also served as a great opportunity to hone:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Python and FastAPI for real projects&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Data extraction and structuring&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Data-oriented architecture and API design&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Source code integration and AI&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;The plan is to create a system whereby an AI assistant can respond to inquiries regarding the code of a project. To this end, I laid out the following steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Crawler&lt;/strong&gt;: a script that crawls &lt;code&gt;.java&lt;/code&gt; files, extracting class names, methods, attributes, and their corresponding comments.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Storage&lt;/strong&gt;: all the data is organized and saved in a local SQLite database.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;API with FastAPI&lt;/strong&gt;: a REST API displays the data extracted in a well-formatted way.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;AI Agent&lt;/strong&gt;: an LLM will use the API data to respond in a natural way.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Interface&lt;/strong&gt;: a basic chat-style front-end to communicate with the AI.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  First Steps: Creating the Crawler
&lt;/h2&gt;

&lt;p&gt;Before any AI can respond to questions about a codebase, it must first &lt;strong&gt;know what's in there&lt;/strong&gt;. So I began by creating a &lt;strong&gt;basic Python crawler&lt;/strong&gt; to learn the layout of the Java application I had created (the TrustScore API).&lt;/p&gt;

&lt;p&gt;Its purpose was to obtain large amounts of information from &lt;code&gt;.java&lt;/code&gt; files, i.e.:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;names of classes and their locations;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;methods, their signatures, and related comments;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;applicable variables and attributes.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My idea was a straightforward line-by-line file read with some regular expressions. Nothing too complicated — just the goal was to &lt;strong&gt;get something working reasonably quickly and locally&lt;/strong&gt;, without needing to use larger external libraries.&lt;/p&gt;

&lt;p&gt;Data scraped is stored in a SQLite database, formatted in a way that will facilitate future querying. The database will act as the baseline for the future steps — particularly for the API and subsequent AI integration.&lt;/p&gt;

&lt;p&gt;Soon to come is a special post on &lt;strong&gt;how I constructed this crawler from scratch&lt;/strong&gt; — step-by-step process, challenges, and how I approached the data structure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub Repository: &lt;a href="https://github.com/gustavogutkoski/ProjectInsight" rel="noopener noreferrer"&gt;https://github.com/gustavogutkoski/ProjectInsight&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;p&gt;Currently, I am trying to create the &lt;strong&gt;API using FastAPI&lt;/strong&gt; to expose the code data obtained. The goal is to have this API prepared to be consumed by an AI agent in the near future.&lt;/p&gt;

&lt;p&gt;After that, I plan to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Add an &lt;strong&gt;LLM&lt;/strong&gt; to provide context-based answers&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a &lt;strong&gt;simple front-end&lt;/strong&gt; with a chat-like interface&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enrich the retrieved information to &lt;strong&gt;add question context&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;This project has been both a technical and artistic challenge — taking code scraping, REST APIs, and AI concepts and turning them into something that could be truly useful in the everyday workflow of any dev team.&lt;/p&gt;

&lt;p&gt;In future posts, I'll delve more into the way I'm constructing the API and then how I intend to add an AI model to it all.&lt;/p&gt;

&lt;p&gt;I'm always receptive to ideas, suggestions, and feedback!&lt;/p&gt;

&lt;p&gt;Follow me here on &lt;a href="https://dev.to/gutkoski"&gt;Dev.to&lt;/a&gt; to keep up to date for the next parts of this series.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;⚙️ &lt;em&gt;This text was written with the support of an AI assistant for writing and editing. All ideas, project structure, and technical implementations are my own.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>python</category>
      <category>fastapi</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Criando um assistente com IA para documentação técnica – Parte 1: Por que e como comecei esse projeto?</title>
      <dc:creator>Gustavo A. Gutkoski</dc:creator>
      <pubDate>Fri, 09 May 2025 13:14:55 +0000</pubDate>
      <link>https://forem.com/gutkoski/criando-um-assistente-com-ia-para-documentacao-tecnica-parte-1-por-que-e-como-comecei-esse-29h8</link>
      <guid>https://forem.com/gutkoski/criando-um-assistente-com-ia-para-documentacao-tecnica-parte-1-por-que-e-como-comecei-esse-29h8</guid>
      <description>&lt;p&gt;Este post também está disponível em inglês: &lt;a href="https://dev.to/gutkoski/creating-an-ai-assistant-for-technical-documentation-part-1-why-and-how-i-started-this-project-bkh"&gt;Leia em Inglês&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Oi! Eu sou o Gustavo — desenvolvedor back-end, apaixonado por Java, Python, automações, arquitetura de software e, mais recentemente, por aplicar IA em projetos práticos. Resolvi começar minha jornada de escrita técnica por aqui, compartilhando um pouco das experiências e aprendizados com os projetos que venho criando por conta própria.&lt;/p&gt;

&lt;p&gt;Sempre acreditei que a melhor forma de aprender é botando a mão na massa: errando, ajustando e resolvendo problemas do mundo real. Então, além de explorar novas ferramentas, decidi também documentar esse caminho — vai que isso ajuda alguém ou rende boas conversas por aqui.&lt;/p&gt;




&lt;h2&gt;
  
  
  O projeto: um assistente com IA para documentação técnica
&lt;/h2&gt;

&lt;p&gt;Já se sentiu perdido em meio a uma documentação extensa ou teve dificuldade para entender como uma base de código realmente funciona?&lt;/p&gt;

&lt;p&gt;Foi pensando nisso — e querendo aprender mais sobre IA, automações e arquitetura — que comecei a desenvolver um projeto pessoal: um assistente inteligente capaz de entender a estrutura de um projeto em Java e responder perguntas como se fosse um “chat interno” da equipe.&lt;/p&gt;




&lt;h2&gt;
  
  
  Por que criei esse projeto?
&lt;/h2&gt;

&lt;p&gt;A ideia surgiu durante o desenvolvimento da &lt;a href="https://github.com/gustavogutkoski/trustscore-api" rel="noopener noreferrer"&gt;TrustScore API&lt;/a&gt;, uma aplicação em Java com Spring Boot para avaliação de produtos. Eu queria explorar maneiras de automatizar o entendimento da base de código e, ao mesmo tempo, estudar conceitos de IA aplicada ao desenvolvimento de software.&lt;/p&gt;

&lt;p&gt;Também vi aí uma ótima oportunidade para praticar com:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;FastAPI e Python em projetos reais&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Estruturação e extração de dados&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Design de APIs e arquitetura orientada a dados&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Integração entre IA e código-fonte&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Visão geral do projeto
&lt;/h2&gt;

&lt;p&gt;O objetivo é criar um sistema em que um assistente com IA possa responder perguntas sobre o código de um projeto. Para isso, defini os seguintes passos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Crawler&lt;/strong&gt;: script que varre arquivos &lt;code&gt;.java&lt;/code&gt; e extrai nomes de classes, métodos, atributos e comentários relevantes.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Armazenamento&lt;/strong&gt;: os dados são organizados e salvos em um banco SQLite local.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API com FastAPI&lt;/strong&gt;: uma API REST que expõe os dados extraídos de forma estruturada.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agente de IA&lt;/strong&gt;: um modelo de linguagem (LLM) que utilizará os dados da API para responder perguntas de forma natural.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interface&lt;/strong&gt;: um front-end simples em formato de chat para interagir com a IA.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Primeiros passos: construindo o crawler
&lt;/h2&gt;

&lt;p&gt;Antes de qualquer IA começar a responder perguntas sobre um código, ela precisa &lt;strong&gt;entender o que existe ali dentro&lt;/strong&gt;. Por isso, comecei criando um &lt;strong&gt;crawler simples em Python&lt;/strong&gt; para analisar a estrutura da aplicação Java que desenvolvi (a TrustScore API).&lt;/p&gt;

&lt;p&gt;A ideia era extrair informações importantes dos arquivos &lt;code&gt;.java&lt;/code&gt;, como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;nomes de classes e onde aparecem
&lt;/li&gt;
&lt;li&gt;métodos, suas assinaturas e comentários associados
&lt;/li&gt;
&lt;li&gt;atributos e variáveis relevantes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A lógica foi implementada de forma simples: leitura linha a linha dos arquivos, utilizando expressões regulares. Nada sofisticado neste início — o foco era &lt;strong&gt;ter algo funcional rapidamente e que rodasse localmente&lt;/strong&gt;, sem depender de bibliotecas externas mais pesadas.&lt;/p&gt;

&lt;p&gt;Os dados extraídos são armazenados em um banco SQLite já estruturado para permitir consultas futuras. Essa base será essencial para os próximos passos do projeto — especialmente para alimentar a API e, depois, o modelo de IA.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Em breve, vou publicar um post detalhado explicando &lt;strong&gt;como criei esse crawler do zero&lt;/strong&gt; — incluindo o passo a passo, os desafios e como pensei a estrutura de dados.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Repositório do projeto no GitHub: &lt;a href="https://github.com/gustavogutkoski/ProjectInsight" rel="noopener noreferrer"&gt;https://github.com/gustavogutkoski/ProjectInsight&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Próximos passos
&lt;/h2&gt;

&lt;p&gt;Agora estou trabalhando na criação da &lt;strong&gt;API com FastAPI&lt;/strong&gt; para expor os dados extraídos do código. A ideia é deixá-la pronta para ser consumida por um agente de IA.&lt;/p&gt;

&lt;p&gt;Depois disso, pretendo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Integrar uma &lt;strong&gt;LLM&lt;/strong&gt; para gerar respostas contextuais
&lt;/li&gt;
&lt;li&gt;Criar um &lt;strong&gt;front-end básico&lt;/strong&gt; com interface de chat
&lt;/li&gt;
&lt;li&gt;Ajustar e enriquecer os dados extraídos para &lt;strong&gt;melhorar o contexto das respostas&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Esse projeto tem sido um desafio técnico e criativo — unindo scraping de código, API REST e conceitos de IA em algo que pode ser útil no dia a dia de qualquer time de desenvolvimento.&lt;/p&gt;

&lt;p&gt;Nos próximos posts, vou detalhar como estou implementando a API e, mais pra frente, como pretendo conectar um modelo de IA a tudo isso.&lt;/p&gt;

&lt;p&gt;Fico aberto a sugestões, ideias e feedbacks!&lt;/p&gt;

&lt;p&gt;Me segue aqui no &lt;a href="https://dev.to/gutkoski"&gt;Dev.to&lt;/a&gt; e acompanha os próximos capítulos dessa série.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;⚙️ &lt;em&gt;Este texto foi escrito com o apoio de uma IA como assistente de escrita e revisão. Todas as ideias, estrutura do projeto e implementações técnicas são de autoria própria.&lt;/em&gt;  &lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>python</category>
      <category>fastapi</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
