paint-brush
Como desenvolvi um aplicativo Travel AI com ChatGPT como gerente de produto e não programadorpor@dinpd
4,451 leituras
4,451 leituras

Como desenvolvi um aplicativo Travel AI com ChatGPT como gerente de produto e não programador

por NPD PM8m2023/08/24
Read on Terminal Reader

Muito longo; Para ler

Não só fui capaz de construir (o que penso ser) um aplicativo útil, mas também me acostumei com os frameworks modernos e tive algum tempo prático, sem me afogar no aprendizado de sintaxe e framework, que era exatamente o que eu queria. Acho que é um grande negócio e abre as portas para o desenvolvimento de software para muito mais pessoas.
featured image - Como desenvolvi um aplicativo Travel AI com ChatGPT como gerente de produto e não programador
NPD PM HackerNoon profile picture
0-item
1-item

Eu fiz isso! Levei cerca de 100 horas, mas consegui escrever e implantar um aplicativo real com a ajuda do ChatGPT.


Desde então, passei mais 100 horas mantendo e adicionando recursos, então me transformei em um belo projeto apaixonado.


A premissa do experimento era "Posso, como gerente de produto, que não escreve código ativamente há muito tempo, projetar, construir e implantar um aplicativo usando ChatGPT?"


Tenho uma base decente, tendo feito meu bacharelado em CS e lidando com vários aspectos da tecnologia (design de sistema, desenvolvimento, devops, hospedagem), mas não pratiquei desenvolvimento prático nos últimos mais de 10 anos.


Tenho um bom senso de produto, o que se traduz em uma compreensão de como construir produtos de forma iterativa e como examinar a funcionalidade, o que acho que ajudou.


Como é habitual no desenvolvimento de SW, mais de 80% do tempo foi gasto em solução de problemas e depuração.

Por que viajar com IA

Na minha busca para reunir algo útil em torno da API ChatGPT, pensei que o GPT é o único qualificado para resolver o problema de planejamento de viagens - descobrir lugares para ir, pontos de interesse para visitar, itinerários, etc. feito durante uma viagem e ter alguém cuidando de tudo isso para você com base em preferências ou circunstâncias únicas, é algo que achei que seria valioso.

Codificando com ChatGPT

Passei cerca de 6 semanas trabalhando à noite e alguns fins de semana, talvez um total de 100 horas. Eu tinha conta ChatGPT+, o que me deu melhor estabilidade no acesso ao bot e acesso ao GPT4.


Aqui estão minhas descobertas através deste processo:


  • ChatGPT me ajudou a escolher as ferramentas certas para o trabalho (estrutura Vue.js para o aplicativo de página única) e a gerar o código em iterações. Eu definitivamente não poderia ter feito isso sem ele. Com isso dito, definitivamente houve complicações:


    1. Os limites que a UI do ChatGPT impõe (4k tokens na entrada e saída e cerca de 15k de contexto) são bastante restritivos e você acaba fazendo muita segmentação em suas perguntas. Isso está abaixo do ideal e exige um esforço extra. Não tinha tentado acessar via CLI - só li em algum lugar que não impõe os mesmos limites - vale a pena conferir.

    2. A qualidade de "dar sentido ao código" tem sido inconsistente - às vezes funciona melhor e às vezes pior. Não tenho certeza do que isso tem a ver.

    3. Com isso, meu conselho seria começar a estruturar o código antecipadamente (dividindo o código em funções menores), pois o ChatGPT não fará isso automaticamente para você, mas fará se você solicitar. Isso torna a solução de problemas mais fácil no futuro.

    4. O GPT4 é interrompido após 25 consultas durante 3 horas e muda para o modelo "padrão", que presumo ser 3,5 - Curiosamente, ele funciona muito bem e quase quero dizer que é melhor que o GPT4, mas porque não comecei com 3,5, não é uma comparação igual.


      Atualização: os limites foram aumentados recentemente para 50 consultas em 3 horas.


Ambientes de desenvolvimento e implantação

  • Usei o Replit para o IDE da nova era. É um bom conceito e provavelmente é o futuro, especialmente se eles puderem combiná-lo com uma integração significativa do Codex/ChatGPT. A IA que eles possuem atualmente não é tão útil, pois não utiliza o código do projeto e requer todas as mesmas manipulações e idas e vindas que eu estava fazendo com o ChatGPT. Eu realmente gostei de como o Replit está se integrando ao Github para controle de origem e como ele cuida da preparação.


  • Implantei com Cloudflare porque queria implantar como nativo da nuvem. Usei páginas CF para a UI e trabalhadores para o back-end (gateway de API). Gostei de como as páginas estavam se integrando ao Github para CICD - isso foi muito legal - basicamente o aplicativo seria reimplantado em qualquer commit no branch principal.


    Em geral, CF é demais, pois simplifica uma tonelada de problemas de rede.

Incitar

Passei bastante tempo e fiz muitas iterações no prompt, eliminando-o e tentando resolver idiossincrasias. Um dos primeiros pontos de decisão foi fazer com que a API ChatGPT retornasse uma lista de texto que eu tentaria entender e classificar ou fazer com que ela retornasse JSON que já possui uma estrutura incorporada. A perspectiva de precisar interpretar dados de texto em uma estrutura me assustou, pois as estruturas estavam ficando cada vez mais complexas à medida que eu pedia mais e mais dados do ChatGPT (como é evidenciado por este trecho)


Itinerário de viagem de 10 dias na Suíça


Devido a isso, decidi solicitar o ChatGPT para JSON. Isso, no entanto, teve seus próprios efeitos colaterais: o JSON nem sempre estava bem estruturado ou havia muita ambigüidade no prompt, onde o ChatGPT retornaria um resultado que eu não esperava. Eu diria que passei cerca de 25% do tempo entre o ajuste fino imediato e o tratamento de erros JSON. Foi uma experiência de bastante aprendizado. Por fim, aqui está o prompt que recebi:


 SYSTEM_PROMPT = `You are a helpful travel assistant. You perform the requests with diligence and make the best attempt to answer the questions, never refusing due to complexity etc. Reset the conversation if I mention a new location in my user prompt. Return the results in JSON format as an array of objects. Make sure JSON format is complete and valid and does not include unescaped special characters. Please avoid escaping double quotes and instead use single quotes or another method to prevent JSON parsing issues. Do not use "\n" newline symbols in the middle of element text. Each object in the array should have the following keys: - "title" - "description" - "airportCode" (for the destination airport) - "poi" (array of points of interest) - "lodging" (array of lodging options) - "itinerary" (array of objects, each representing a day) - "considerations" - "history" (history related to the destination) - "key_local_phrases" (array of common local phrases) - "cost" The "itinerary" key should contain an array of objects, each object representing a day with the key "activities", which is itself an array of objects. Each activity object should have the following keys: - "description" - "waypoint" (name of the location, not coordinates) - "cost" - "travelTime" - "travelOptions" If travel is involved within the itinerary, include "Travel To" as part of the daily activity and provide the travel time, travel options, and associated cost. Each step in the itinerary should also suggest representative local "food" to try. Focus on most interesting points of interest, lodging, and activities. Consider activities that are popular, affordable, and recommended by the travelers. Make sure you cover the entire duration of the trip or outing. If it says "week-long", it has to cover the entire week. It's OK to group multiple days or weeks together if it's a longer trip. If it doesn't give a timeframe, take a guess based on the nature of a trip. Considerations should include travel restrictions and visa requirements, typical weather, criminogenic conditions including which areas to avoid, recommendations on visit timing, parking situation, and ways to save on travel costs. Here is an example of the desired output format: [ { "title": "Sample Title", "description": "Sample Description", "airportCode": "XYZ", "poi": ["Sample POI1", "Sample POI2"], "lodging": ["Sample Lodging1", "Sample Lodging2"], "itinerary": [ { "day": "Sample Day 1-2 - City or Place", "location": "Wikipedia identifiable name of the place in city,_country or city,_state format", "activities": [ { "description": "Sample Activity1", "waypoint": "Sample Waypoint1 connected to the activity", "cost": "$100", "travelTime": "30 minutes", "travelOptions": "Taxi or Bus" }, { "description": "Sample Activity2", "waypoint": "Sample Waypoint2 connected to the activity", "cost": "$50", "travelTime": "1 hour", "travelOptions": "Ferry or Bus" } ], "food": ["Sample Food1 with short description", "Sample Food2 with short description"] }, { "day": "Sample Day 3 - City or Place", ... }, { "week": "Sample Week 2 - City or Place", ... } ], "considerations": "Sample considerations text", "history": "Sample history text", "key_local_phrases": ["Sample phrase 1 - translation", "Sample phrase 2 - translation"], "cost": "Sample total cost" } ]`;


Observação: no momento em que este livro foi escrito, a OpenAI acabava de lançar melhorias de ajuste fino que acho que podem ser muito úteis para tornar o retorno de dados estruturados JSON mais robusto e consistente.

Lista de Desejos

O maior item da minha lista de desejos neste momento é a integração do ambiente de desenvolvimento/geração de código de IA. Colar coisas para frente e para trás, procurando não bagunçar a estrutura do código (especialmente à medida que a base de código fica maior) definitivamente deixa muito a desejar.


Acho que o próximo grande passo na geração de código de IA serão editores de código inteligentes integrados que analisam o código em seções internamente e podem fornecer e aceitar entradas relevantes de/para o modelo sem obrigar o usuário a fazer isso manualmente.


A próxima etapa seria a integração com o navegador para fins de depuração, criando, em última análise, um ciclo de depuração iterativo em circuito fechado.


Seria um projeto legal para trabalhar!


Observação: estou curioso para ver o que o Google tem na manga com o projeto IDX – pode ser apenas isso.

Resumo

No geral, não apenas fui capaz de construir (o que penso ser) um aplicativo útil, mas também me acostumei com as estruturas modernas e tive algum tempo prático, sem me afogar no aprendizado de sintaxe e estrutura, que era exatamente o que eu queria. Acho que é um grande negócio e abre as portas para o desenvolvimento de software para muito mais pessoas.


Você pode encontrar o aplicativo em VoyageAI.app . O aplicativo é e continuará sendo de uso gratuito, sem anúncios e sem logins (portanto, sem uso de dados pessoais).