{"id":547,"date":"2025-07-01T13:19:43","date_gmt":"2025-07-01T16:19:43","guid":{"rendered":"https:\/\/www.wagnersalvi.com.br\/?p=547"},"modified":"2025-07-01T13:25:00","modified_gmt":"2025-07-01T16:25:00","slug":"padroes-de-programacao-para-ia-generativa-como-estruturar-seu-codigo-para-integrar-com-llms","status":"publish","type":"post","link":"http:\/\/www.wagnersalvi.com.br\/?p=547","title":{"rendered":"Padr\u00f5es de Programa\u00e7\u00e3o para IA Generativa: Como Estruturar seu C\u00f3digo para Integrar com LLMs"},"content":{"rendered":"\n<p>Nos \u00faltimos anos, a Intelig\u00eancia Artificial Generativa (como o ChatGPT e outros modelos LLMs \u2014 <em>Large Language Models<\/em>) deixou de ser coisa de laborat\u00f3rio e passou a fazer parte do dia a dia de muitos sistemas e aplica\u00e7\u00f5es. Mas&#8230; como integrar esse tipo de tecnologia de forma organizada, segura e f\u00e1cil de manter?<\/p>\n\n\n\n<p>Se voc\u00ea \u00e9 dev e quer usar IA generativa no seu sistema (web, mobile, backend), aqui v\u00e3o boas pr\u00e1ticas e padr\u00f5es simples de programa\u00e7\u00e3o que v\u00e3o te ajudar a manter seu c\u00f3digo limpo e profissional.<\/p>\n\n\n\n<p>Integrar com IA Generativa n\u00e3o precisa virar uma bagun\u00e7a. Com alguns padr\u00f5es simples \u2014 como separa\u00e7\u00e3o de responsabilidades, uso de interfaces e adapters, e uma boa estrutura de prompts e logs \u2014 seu sistema vai estar pronto para evoluir com seguran\u00e7a e clareza.<\/p>\n\n\n\n<p>Lembre-se: a IA pode ser poderosa, mas o c\u00f3digo que a usa precisa ser ainda mais inteligente.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Separe bem as responsabilidades (princ\u00edpio da responsabilidade \u00fanica)<\/h3>\n\n\n\n<p>N\u00e3o misture chamada para a IA com l\u00f3gica de neg\u00f3cio ou controle de interface. Crie uma classe ou servi\u00e7o espec\u00edfico s\u00f3 para interagir com o modelo de IA.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Servi\u00e7o dedicado \u00e0 comunica\u00e7\u00e3o com IA\npublic class IAChatService {\n    public async Task&lt;string> EnviarPrompt(string prompt) {\n        \/\/ chamada \u00e0 API do OpenAI, Anthropic, etc.\n    }\n}<\/pre>\n\n\n\n<p>Assim, se voc\u00ea mudar de modelo (ex: trocar GPT pelo Claude), s\u00f3 precisar\u00e1 alterar esse ponto do c\u00f3digo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Use o padr\u00e3o <em>Adapter<\/em> para trocar facilmente o provedor de IA<\/h3>\n\n\n\n<p>O padr\u00e3o Adapter ajuda a padronizar a forma como seu sistema conversa com diferentes APIs. Imagine um &#8220;meio-campo&#8221; entre seu c\u00f3digo e o modelo de IA.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public interface IModeloIA {\n    Task&lt;string> Consultar(string prompt);\n}\n\npublic class OpenAIAdapter : IModeloIA {\n    public async Task&lt;string> Consultar(string prompt) {\n        \/\/ l\u00f3gica da API da OpenAI\n    }\n}<\/pre>\n\n\n\n<p>Com isso, voc\u00ea pode trocar o provedor de IA s\u00f3 mudando a implementa\u00e7\u00e3o da interface. Isso traz flexibilidade e independ\u00eancia.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. Trate o prompt como uma entidade importante<\/h3>\n\n\n\n<p>O prompt (a entrada que voc\u00ea envia ao modelo) n\u00e3o deve ser fixo no c\u00f3digo.<\/p>\n\n\n\n<p>Crie uma estrutura para organizar e versionar prompts:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public class Prompt {\n    public string Nome { get; set; }\n    public string Conteudo { get; set; }\n}<\/pre>\n\n\n\n<p>E salve os prompts em arquivos ou banco de dados. Isso facilita testes, ajustes e evita bugs dif\u00edceis de rastrear.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4. Sempre registre logs e respostas da IA<\/h3>\n\n\n\n<p>\u00c9 essencial guardar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>o que foi enviado ao modelo,<\/li>\n\n\n\n<li>o que ele respondeu,<\/li>\n\n\n\n<li>e quando isso aconteceu.<\/li>\n<\/ul>\n\n\n\n<p>Isso ajuda a:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Auditar comportamentos inesperados,<\/li>\n\n\n\n<li>Fazer debug de erros,<\/li>\n\n\n\n<li>Melhorar a qualidade dos prompts com base em exemplos reais.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">5. Teste com mocks e cen\u00e1rios fixos<\/h3>\n\n\n\n<p>IA \u00e9 imprevis\u00edvel. Para testar seu sistema, use mocks ou respostas simuladas, para n\u00e3o depender da IA em tempo real.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">ublic class MockIA : IModeloIA {\n    public Task&lt;string> Consultar(string prompt) {\n        return Task.FromResult(\"Esta \u00e9 uma resposta simulada.\");\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">6. Evite acoplamento direto com a API<\/h3>\n\n\n\n<p>Nunca jogue a chave da API direto no c\u00f3digo. Use vari\u00e1veis de ambiente ou servi\u00e7os de configura\u00e7\u00e3o seguros.<\/p>\n\n\n\n<p>E de prefer\u00eancia, encapsule a chamada externa num cliente dedicado (ex: <code>OpenAIClient<\/code>, <code>IAProxyService<\/code>) que isole todas as depend\u00eancias externas.<\/p>\n<p>Views: 0<\/p>","protected":false},"excerpt":{"rendered":"<p>Nos \u00faltimos anos, a Intelig\u00eancia Artificial Generativa (como o ChatGPT e outros modelos LLMs \u2014 Large Language Models) deixou de [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":549,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[30,73,49],"tags":[62,229,43],"class_list":["post-547","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desenvolvimento","category-inteligencia-artificial","category-programacao","tag-c","tag-inteligencia-artifical","tag-programacao"],"_links":{"self":[{"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=\/wp\/v2\/posts\/547","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=547"}],"version-history":[{"count":2,"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=\/wp\/v2\/posts\/547\/revisions"}],"predecessor-version":[{"id":550,"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=\/wp\/v2\/posts\/547\/revisions\/550"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=\/wp\/v2\/media\/549"}],"wp:attachment":[{"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=547"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=547"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=547"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}