<?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>DEV Community: Wildrik</title>
    <description>The latest articles on DEV Community by Wildrik (@wildrik).</description>
    <link>https://dev.to/wildrik</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4002742%2F0f71874b-920b-4a8e-a483-db899d930020.png</url>
      <title>DEV Community: Wildrik</title>
      <link>https://dev.to/wildrik</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/wildrik"/>
    <language>en</language>
    <item>
      <title>Qwen3.8-Flash-Next: Alibaba abre a arquitetura do Qwen4 (125B MoE, 6B ativos)</title>
      <dc:creator>Wildrik</dc:creator>
      <pubDate>Fri, 28 Aug 2026 04:55:21 +0000</pubDate>
      <link>https://dev.to/wildrik/qwen38-flash-next-alibaba-abre-a-arquitetura-do-qwen4-125b-moe-6b-ativos-12p5</link>
      <guid>https://dev.to/wildrik/qwen38-flash-next-alibaba-abre-a-arquitetura-do-qwen4-125b-moe-6b-ativos-12p5</guid>
      <description>&lt;p&gt;A Alibaba soltou nesta semana o &lt;strong&gt;Qwen3.8-Flash-Next&lt;/strong&gt;, novo modelo open-source da Qwen Team. O lançamento tem um peso a mais: segundo a equipe, ele é uma prévia da arquitetura que vai sustentar o &lt;strong&gt;Qwen4&lt;/strong&gt;, liberada antes da família completa justamente pra comunidade testar e adaptar tooling.&lt;/p&gt;

&lt;h2&gt;
  
  
  As specs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;MoE multimodal com &lt;strong&gt;125B de parâmetros totais e apenas 6B ativos por token&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Mais &lt;strong&gt;51B de N-gram embeddings&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Custo de treinamento estimado em cerca de &lt;strong&gt;1/9 do Qwen3.7-Plus&lt;/strong&gt; (TechNode)&lt;/li&gt;
&lt;li&gt;Pesos &lt;strong&gt;sem restrição de uso&lt;/strong&gt; no Hugging Face desde 24/08, com versão padrão e &lt;strong&gt;FP8&lt;/strong&gt; (também no ModelScope)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Por que importa pra quem desenvolve
&lt;/h2&gt;

&lt;p&gt;Dois pontos práticos se destacam:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;API compatível com as specs da OpenAI e da Anthropic.&lt;/strong&gt; Se sua stack já fala com GPT ou Claude, dá pra apontar o endpoint pro Qwen3.8-Flash-Next e comparar custo e qualidade sem reescrever integração.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inferência local viável.&lt;/strong&gt; Com só 6B ativos por token, o modelo roda em hardware bem mais modesto do que um denso de 100B+ pediria. Os GGUF quantizados já começaram a aparecer no Hugging Face, o que abre a porta pra llama.cpp e afins.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Pra quem constrói produto com LLM no Brasil, é mais uma opção de flash-tier aberto pra colocar no benchmark interno, principalmente em tarefas de alto volume onde o custo por token manda.&lt;/p&gt;

&lt;p&gt;Escrevi uma análise completa em português, com specs detalhadas, como baixar e comparação com o flash-tier de GPT, Claude e Gemini: &lt;a href="https://www.techknow.com.br/post/qwen-3-8-flash-next" rel="noopener noreferrer"&gt;https://www.techknow.com.br/post/qwen-3-8-flash-next&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>opensource</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Quando o RAG erra, quase nunca é o LLM: 4 falhas de recuperação e como logar cada uma</title>
      <dc:creator>Wildrik</dc:creator>
      <pubDate>Sat, 15 Aug 2026 02:09:44 +0000</pubDate>
      <link>https://dev.to/wildrik/quando-o-rag-erra-quase-nunca-e-o-llm-4-falhas-de-recuperacao-e-como-logar-cada-uma-3ljm</link>
      <guid>https://dev.to/wildrik/quando-o-rag-erra-quase-nunca-e-o-llm-4-falhas-de-recuperacao-e-como-logar-cada-uma-3ljm</guid>
      <description>&lt;p&gt;Todo problema de RAG parece problema do modelo. Quase nunca é.&lt;/p&gt;

&lt;p&gt;Demorei pra aceitar isso. Ficava trocando modelo de embedding, mexendo no prompt, achando que o Claude tava inventando coisa. O que estava quebrado era o que eu entregava pra ele, e só ficou óbvio quando comecei a logar o que voltava da recuperação.&lt;/p&gt;

&lt;p&gt;Depois que instrumentei, os erros se separaram em quatro tipos bem diferentes.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Score baixo, e o pipeline responde assim mesmo
&lt;/h2&gt;

&lt;p&gt;A pergunta simplesmente não tem resposta na base. Quase ninguém checa. Um piso resolve:&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;q_emb&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;vo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;embed&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;question&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;voyage-3.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;input_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;query&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;embeddings&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;cur&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SELECT content, 1 - (embedding &amp;lt;=&amp;gt; %s) AS score &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;FROM documents ORDER BY embedding &amp;lt;=&amp;gt; %s LIMIT %s&lt;/span&gt;&lt;span class="sh"&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;q_emb&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;q_emb&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;top_k&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;rows&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cur&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fetchall&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;rows&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mf"&gt;0.7&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Não tenho essa informação na base.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Feio, mas corta a maior parte das respostas inventadas com cara de certeza. O 0.7 não é sagrado: é o ponto onde, na minha base, o chunk deixava de ter relação com a pergunta. Loga o score por uma semana e você acha o teu.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Chunk vizinho
&lt;/h2&gt;

&lt;p&gt;"como resetar senha" trazendo "como resetar produto". Vetorialmente colado, na prática inútil.&lt;/p&gt;

&lt;p&gt;Esse foi o que mais me irritou, porque parece bug do modelo e não é: busca vetorial pura não separa as duas coisas. Os dois chunks falam de resetar algo, com estrutura de frase quase idêntica, e a diferença inteira mora numa palavra que o vetor dilui.&lt;/p&gt;

&lt;p&gt;Hybrid search (vetor + BM25) rendeu mais aqui do que qualquer troca de embedding que eu tinha tentado antes, porque o BM25 dá peso ao token literal "senha" — justamente o que o vetor perdeu. Reranker com cross-encoder na frente ataca o mesmo problema por outro lado.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Alucinação com o contexto certo na mão
&lt;/h2&gt;

&lt;p&gt;O retrieval acertou e o modelo extrapolou mesmo assim. Isso é instrução, não recuperação: o system prompt precisa proibir na cara dura e pedir citação do trecho.&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;SYSTEM&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;Responda APENAS com base no contexto fornecido. &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Cite o trecho que embasa cada afirmação. &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Se a resposta não estiver no contexto, diga que não sabe.&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;p&gt;Óbvio depois de escrito. Passei semanas culpando o retrieval por isso.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Chunk cortado no meio
&lt;/h2&gt;

&lt;p&gt;Tabela partida, bloco de código sem fechamento. Chunking por contagem de token faz isso o tempo todo:&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="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;chunk_text&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;size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;overlap&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;words&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;words&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;size&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;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;words&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;overlap&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Funciona pra prosa corrida e destrói documentação técnica. E o estrago é silencioso: o modelo responde bonito em cima de um pedaço mutilado, sem sinal nenhum de que faltou metade da tabela. Respeitar a estrutura do documento (header de markdown, seção do PDF) dá mais trabalho pra escrever e se paga na primeira semana.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que eu faria diferente
&lt;/h2&gt;

&lt;p&gt;Se fosse começar de novo, a primeira coisa que eu escreveria não era o pipeline, era o log. Score de cada chunk, quais entraram, tamanho de cada um. Sem isso você fica trocando peça no escuro, e trocar modelo de embedding é caro, demorado e quase nunca era o problema.&lt;/p&gt;

&lt;p&gt;Escrevi o passo a passo completo no blog, com o pipeline em Python usando pgvector, Voyage e Claude, as 4 estratégias de chunking e a comparação com fine-tuning: &lt;a href="https://www.techknow.com.br/post/o-que-e-rag" rel="noopener noreferrer"&gt;https://www.techknow.com.br/post/o-que-e-rag&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Quem já tem isso em produção: o ganho maior veio de mexer no chunking ou de botar um reranker na frente?&lt;/p&gt;

</description>
      <category>rag</category>
      <category>ai</category>
      <category>python</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Spec-Driven Development: quando a especificação vira a fonte da verdade (não o código)</title>
      <dc:creator>Wildrik</dc:creator>
      <pubDate>Tue, 21 Jul 2026 01:19:33 +0000</pubDate>
      <link>https://dev.to/wildrik/spec-driven-development-quando-a-especificacao-vira-a-fonte-da-verdade-nao-o-codigo-f7d</link>
      <guid>https://dev.to/wildrik/spec-driven-development-quando-a-especificacao-vira-a-fonte-da-verdade-nao-o-codigo-f7d</guid>
      <description>&lt;p&gt;Venho usando agentes de código (Claude Code, Cursor) e bati numa parede que todo mundo conhece: o &lt;strong&gt;vibe coding&lt;/strong&gt; — descrever a tarefa e deixar a IA cuspir código — escala mal. Funciona até a terceira mudança, quando ninguém mais lembra qual era a intenção original. O código virou a única fonte de verdade, e ele é péssimo pra contar &lt;em&gt;por que&lt;/em&gt; algo foi feito.&lt;/p&gt;

&lt;p&gt;Foi aí que caí no &lt;strong&gt;Spec-Driven Development (SDD)&lt;/strong&gt;: colocar a especificação &lt;em&gt;antes&lt;/em&gt; do código. Na prática, a "spec" é um markdown versionado no repo — requisitos + critérios de aceite — que a IA lê antes de gerar qualquer linha. Ela vira o artefato principal, não um doc que apodrece numa pasta.&lt;/p&gt;

&lt;p&gt;A tese que tirei: o gargalo de programar com IA deixou de ser "a IA escreve código bom?". Hoje é "a IA entende o que eu realmente quero?". A spec é o que fecha essa lacuna.&lt;/p&gt;

&lt;p&gt;Três coisas que me fizeram levar a sério:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Não é waterfall.&lt;/strong&gt; A spec é viva — você roda quatro fases em ciclos curtos: &lt;strong&gt;specify → plan → tasks → implement&lt;/strong&gt; (que em ferramentas como o Spec Kit viram comandos: &lt;code&gt;/speckit.specify&lt;/code&gt;, &lt;code&gt;/speckit.plan&lt;/code&gt;...). Mais perto de TDD do que de cascata.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A spec guia o agente.&lt;/strong&gt; Em vez de prompts soltos, a IA lê a especificação e o plano. No meu uso, errou menos — e me deixou revisar a &lt;em&gt;intenção&lt;/em&gt; antes de revisar 400 linhas de diff.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Já tem ferramenta de verdade.&lt;/strong&gt; Spec Kit (GitHub), Kiro (AWS), Tessl, OpenSpec — todas com repo aberto. E pra começar nem precisa de muito: um simples &lt;code&gt;CLAUDE.md&lt;/code&gt; (ou &lt;code&gt;AGENTS.md&lt;/code&gt;) na raiz do repo já é uma forma enxuta de aplicar a ideia.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Não é bala de prata. Pra script de 50 linhas, é overhead. O ganho aparece em código que vai ser mantido, em time, ou quando você delega pesado pra agentes autônomos.&lt;/p&gt;

&lt;p&gt;Escrevi um guia mais fundo com as 4 fases em detalhe, a comparação &lt;strong&gt;Spec Kit vs Kiro vs Tessl vs OpenSpec&lt;/strong&gt; (qual escolher) e o passo a passo rodando SDD com Claude Code na prática: &lt;strong&gt;&lt;a href="https://www.techknow.com.br/post/spec-driven-development" rel="noopener noreferrer"&gt;techknow.com.br/post/spec-driven-development&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Quem aqui já tá usando spec como fonte da verdade no fluxo com IA? Curioso pra saber qual ferramenta pegou — e onde travou.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>claudecode</category>
      <category>productivity</category>
    </item>
    <item>
      <title>OpenCode: a alternativa open source ao Claude Code (sem lock-in de modelo nem de nuvem)</title>
      <dc:creator>Wildrik</dc:creator>
      <pubDate>Thu, 25 Jun 2026 16:51:59 +0000</pubDate>
      <link>https://dev.to/wildrik/opencode-a-alternativa-open-source-ao-claude-code-sem-lock-in-de-modelo-nem-de-nuvem-iie</link>
      <guid>https://dev.to/wildrik/opencode-a-alternativa-open-source-ao-claude-code-sem-lock-in-de-modelo-nem-de-nuvem-iie</guid>
      <description>&lt;p&gt;Venho testando agentes de código (Claude Code, Cursor, Copilot) e o que mais me chamou atenção foi o &lt;strong&gt;OpenCode&lt;/strong&gt;: open-source, 160k+ stars, com duas decisões de design que mudam o jogo.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model-agnostic de verdade:&lt;/strong&gt; roda com Claude, GPT, Gemini, DeepSeek e modelos locais via Ollama (75+ providers). Você troca de modelo sem trocar de ferramenta, o oposto do lock-in do Claude Code (só Claude) ou Cursor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sem lock-in de nuvem:&lt;/strong&gt; com Ollama local e deploy air-gapped, dá pra rodar o agente sem o código sair da máquina. Relevante pra quem tem restrição de compliance (banco, gov, jurídico).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A tese: o eixo de competição saiu de "qual modelo é mais inteligente" pra "quem controla seu workflow e seus dados".&lt;/p&gt;

&lt;p&gt;Não é bala de prata. Em qualidade bruta de modelo o Claude Code ainda lidera. É um trade-off (liberdade, custo e controle dos dados vs qualidade no topo), não superioridade.&lt;/p&gt;

&lt;p&gt;Escrevi um comparativo completo (OpenCode x Claude Code x Cursor x Copilot, com setup e pra quem vale) aqui: &lt;a href="https://www.techknow.com.br/post/opencode-alternativa-claude-code" rel="noopener noreferrer"&gt;https://www.techknow.com.br/post/opencode-alternativa-claude-code&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Alguém já botou o OpenCode no fluxo de trabalho? Curioso sobre a experiência com modelos locais.&lt;/p&gt;

</description>
      <category>ia</category>
      <category>opensource</category>
      <category>devtools</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
