🌟 Automatando cartas de cobertura com Portia AI: My AgentHack 2025 Journey
Uma história pessoal de como os agentes movidos a IA podem transformar fluxos de trabalho freelancers e economizar inúmeras horas. 💡 Introdução Bem -vindo a desenvolvedores 👋 ao mundo da IA e da automação. Neste blog, compartilharei minha experiência de construir um agente de IA que escreve cartas de cobertura personalizadas para meus shows freelancers – alimentados por Portia AI e Gêmeos. Como freelancer em tempo integral, escrever cartas de apresentação para cada projeto geralmente parece repetitivo e demorado. É exatamente aí que nasceu essa ideia. A jornada de fazer esse projeto estava cheia de refluxos e fluxos – erros de depuração, testes de testes, ajustes de trabalho – mas, no final, valeu a pena. O maior argumento? 🤔 Se você usa os agentes de IA com sabedoria, eles poderão economizar inúmeras horas toda semana, mantendo seu trabalho pessoal e profissional. Então, sem mais delongas, vamos mergulhar em como eu construí este projeto, quais desafios que enfrentei e como Portia me ajudou a automatizar uma das partes mais cansativas do freelancer: escrever cartas de cobertura. 💡 Demoção do YouTube 💡 O problema como freelancer em tempo integral, uma das partes mais demoradas do meu fluxo de trabalho está escrevendo cartas de cobertura personalizadas para cada nova oportunidade. Não me interpretem mal – ser atencioso e específico em uma proposta é importante. Ele mostra esforço e aumenta as chances de conseguir o show. Mas depois de fazê -lo repetidamente, ele se torna rapidamente: eu me vi passando horas toda semana apenas escrevendo cartas de cobertura – tempo que poderia ter sido usado para realmente trabalhar em projetos. Foi quando percebi que precisava de uma solução mais inteligente. Uma ferramenta que poderia: ler documentos que contêm a descrição do trabalho junto com meu portfólio. Gerar uma carta de apresentação personalizada com base nessas informações. Envie a carta de apresentação por e -mail diretamente para o pôster do trabalho. E se nenhum email for fornecido, basta enviar para mim mesmo para mantê -lo seguro. Isso se tornou a faísca para construir meu próprio assistente freelancer de IA 🚀. 🚀 A viagem depois de decidir construir meu gerador de carta de apresentação movido a IA, enrolei minhas mangas e mergulhei nos documentos de Portia AI. No começo, admito – parecia esmagador. Há muito o que absorver quando você está apenas começando com os agentes da IA. Mas depois de mexer por um tempo, comecei a pegar o jeito. Meu primeiro passo foi criar uma chave da API do Google usando o Google AI Studio para o modelo Gemini -2.0-Flash. Eu pensei em começar simples, então executei um teste básico de 2 + 2. Para minha surpresa … falhou. 🙃 O erro? Algo sobre a falta de chaves da API – mesmo que eu as tenha fornecido corretamente. Foi quando eu entrei em contato com a equipe de Portia em Discord. E aqui está a parte legal: ninguém menos que Emma Burrows, co-fundador e CTO de Portia, pessoalmente me ajudou a solucionar isso. Acontece que não foi a API – era uma questão de dependência. Depois que eu consertei isso, tudo se encaixou no lugar. Essa foi minha primeira pequena vitória ✅. Em seguida, eu queria ver como a Portia funciona com aplicativos do Google como Gmail e Calendário. Então, eu passei por seus exemplos oficiais no Github. Isso me deu clareza sobre como estruturar o uso da ferramenta e começar a construir meu próprio agente. A partir daí, criei a primeira versão do meu programa (App.py). Tinha todas as peças que eu precisava: lendo o trabalho Doc + meu portfólio Doc. Extraindo e -mails de destinatários. Gerando uma carta de apresentação personalizada. Enviando -o via Gmail automaticamente. De dotenv importar load_dotenv importar os do portia importar (config, defaultToolRegistry, Portia, llmprovider, actionClarification, inputclarification, multipleChoiceclarificação, planRunState,) load_dotenv (substituição = true) job_doc_title (os.getenv (“JOBT_DOTENV (substituição) portfolio_doc_title = os.getEnv (“portfolio_doc_title”, “portfolio”). strip () output_doc_title = os.getenv (“output_doc_title”, “cobertura-letter”). strip () self_email = os.tenv (“self_email”, “). Input (“Digite o e -mail de Fallback (Self_Email): \ n”). Strip () socials_block = os.getenv (“socials”, “”) .strip () se não socials_block: partes = []
Para chave, etiqueta em [
(“LINKEDIN_URL”, “LinkedIn”),
(“TWITTER_URL”, “X/Twitter”),
(“YOUTUBE_URL”, “YouTube”),
(“WEBSITE_URL”, “Website”),
]: v = os.getenv (key, “”) .strip () se v: peças.append (f “{label}: {v}”) socials_block = “\ n” .Join (partes) se as partes mais “(adicione seus sociais aqui)” restrições: listar:[str] = []
def Task_Text () -> str: “” “Descrevemos * o que * fazer. Portia escolherá as ferramentas certas: – Google Drive: Arquivos de pesquisa – Google Docs: Leia Conteúdo – Gmail: Rascunho/Enviar email – (Tentativa) Crie um novo Doc para o Google Doc para a letra de cobertura” “{job_doc_title}” – título do documento do portfólio: “{portfolio_doc_title}” – saída do google docum title: “{output_doc_title}” – emails de falto que você precisa de que não houve que o que não houve, o que não houve, o que não houve, o que não há, o que não há, o que não há para o que não há, o que não há para o que não há, o que não há para o que não há, o que não há, o que não há, o que não há, o que se faz Isso corresponde ao cargo e que corresponde ao meu portfólio 2 – 3 Achedas que conectam minhas habilidades com os requisitos de trabalho. Docs, Gmail), responda apenas com a ferramenta correta JSON (sem explicações, sem marcação). llm_provider = llmprovider.google, default_model = “google/gemini-14.0-flash”, # Fast + capaz de escrever forforce_schema = true,) ferramenta_registry =) PrintToolRegistry (config) portia = portia (config = config, (ferramenta (ferramenta_registry_registry) “plantia. Plano: \ n “) print (plan.pretty_print ()) enquanto verdadeiro: yn = input (” \ nare você está feliz com o plano? (y/n): \ n “). strip (). inferior () se yn ==” y “: quebra extra = entrada (” alguma orientação adicional para o planejador?: \ n “). Print (“\ NUPDATED PLAN: \ n”) print (plan.pretty_print ()) print (“\ n🚀 executando o plano … \ n”) plan_run_clon_clin_lan_plan (plan) while plan_run.state == PlanRunTer.NED_LARLATIFICATILIFICATILIFICATIONF (Plan) While Plan_Run.State == PlanRunTer.Need_Larin Se isinsance (esclarecimento, (INPUTCLARIFICATION, MULTELCHOICECLARIFICATION)): Prompt = Clarificação.User_Guidance ou “Por favor, forneça um valor” # Algumas esclarecimentos de múltipla escolha exponham opções de opções = getAttr (esclarecimento, “opções”, nenhuma) se opções: + = “\ n” + “\ n” “\ n”) plan_run = portia.resolve_clarification (esclarecimento, user_input, plan_run) elif isinsinStance (esclarecimento, actionClarification): # normalmente oauth. Você receberá um link para clicar. Imprima (“\ n🔐 Autorização necessária. Abra este link para continuar:”) print (esclarecimento.action_url) print (“aguardando a autorização completar … \ n”) plan_run = portia.wait_for_ready (plan_run) plan_run = portia.resume (plan_run) PRIM (“\ n✅ Plan Run. print (plan_run.model_dump_json (indent = 2)) Digite Modo de tela cheia Modo de tela cheia Eu salvei todas as minhas informações confidenciais em um arquivo .env (chaves da API, e -mails de fallback, sociais), tornando a configuração limpa e flexível. PORTIA_API_KEY=”your-portia-key” GOOGLE_API_KEY=”your-gemini-key” # Optional (defaults shown in code) JOB_DOC_TITLE=”Job” PORTFOLIO_DOC_TITLE=”Portfolio” OUTPUT_DOC_TITLE=”Cover-letter” # Email handling SELF_EMAIL=”example@gmail.com” # used if Job doc has no email # Socials — either provide a single Bloco social ou links individuais LinkedIn_url = “Your-LinkedIn” twitter_url = “your-twitter” youtube_url = “your-youtube” site_url = “your-website” Digite o modo de tela completa. Ao longo do caminho, atingi limites de cotas de serviço, tentei diferentes LLMs como OpenAi, Antrópico e Mistral – nenhum deles funcionou perfeitamente. Eventualmente, gerei uma nova chave da API do Google em uma conta diferente, que corrigiu o problema da cota. Mas então veio a verdadeira rotina: acertar a tarefa. Portia é poderosa, mas requer instruções claras. Eu tive que refatorar o prompt mais de 25 vezes antes do fluxo de execução ser suave. Finalmente, a mágica aconteceu: Portia leu o emprego + documentos de portfólio, gerou uma carta de apresentação nítida e enviou um e -mail diretamente para o cliente. Vendo que o email aterrar na caixa de entrada sentiu -se … narcótico. 😎 ⚙️ Como funciona agora que o agente estava finalmente em funcionamento, eis como é o fluxo em ação: estágio de entrada – Documos de emprego e portfólio 📂 O agente inicia lendo dois arquivos: um documento de descrição do trabalho (a oportunidade que eu quero me candidatar). Meu portfólio Doc (habilidades, projetos anteriores e realizações relevantes). Isso garante que cada carta de apresentação seja adaptada, não genérica. Estágio de processamento – Gemini + Portia Magic ✨ Portia passa os documentos para o modelo Gemini. Gêmeos analisa os requisitos de trabalho ao lado do meu portfólio. A saída? Uma carta de apresentação personalizada que parece atenciosa, não cópia. Manuseio por e -mail 📧 Se o email do cliente estiver disponível no documento, a carta de apresentação será enviada diretamente a eles. Se nenhum email for encontrado, o agente enviará a carta de apresentação para o meu e -mail de fallback (salvo em .env), para que eu possa reutilizá -lo mais tarde. Smart Fails-SABEs 🛡️ Todos os dados confidenciais (chaves da API, e-mails de fallback, sociais) são armazenados com segurança em .env. Se um email falhar, a carta não será perdida – eu ainda a recebo na minha caixa de entrada. Automação em ação 🚀 Não há mais descrições de trabalho de cópia. Chega de encarar uma página em branco, imaginando como iniciar uma carta. Tudo é automatizado: Leia → Gere → email → feito. Aqui está um fluxo visual simples para clareza: Job Doc + Portfolio → Gêmeos via Portia → Carta de apresentação → Gmail → Cliente/eu O que costumava levar de 30 a 40 minutos por trabalho agora leva menos de 30 segundos. Esse é o tipo de eficiência que os freelancers sonham. 📄 Portfólio Doc 📄 Doc Doc 💡 O impacto que esse pequeno projeto acabou criando um enorme impacto no meu fluxo de trabalho como freelancer. O que já levava horas por semana agora acontece em segundos. Em vez de desperdiçar energia na escrita repetitiva, posso me concentrar mais no trabalho do cliente e na construção de habilidades. A melhor parte? Cada carta de apresentação ainda parece personalizada e humana, não como um modelo de IA sem graça. Não se trata apenas de economizar tempo – trata -se de trabalhar mais inteligente. Agentes de IA como este dão aos freelancers a alavancagem para escalar seus esforços sem queimar. 🚀 Conclusão A construção deste projeto com Portia AI e Gemini foi mais do que apenas uma entrada de hackathon – foi uma lição sobre como os agentes da IA podem redefinir a produtividade para freelancers. Como freelancer em tempo integral, conheço a agitação de fazer malabarismos com vários shows, propostas e prazos. Com a Portia, transformei uma tarefa repetitiva e demorada em algo rápido, eficiente e sem estresse. Este é apenas o começo – os agentes da IA não estão aqui para nos substituir, mas para nos capacitar. Se aprendermos a aproveitá -los com sabedoria, eles podem nos libertar do trabalho de rotina e nos concentrar no que realmente importa: criar, resolver e agregar valor. Obrigado por ler minha jornada! 💙 Se você achou este projeto inspirador ou deseja se conectar, fique à vontade para me alcançar:
Fonte