paint-brush
Cómo desarrollé una aplicación Travel AI con ChatGPT como gerente de producto y no programadorpor@dinpd
4,451 lecturas
4,451 lecturas

Cómo desarrollé una aplicación Travel AI con ChatGPT como gerente de producto y no programador

por NPD PM8m2023/08/24
Read on Terminal Reader

Demasiado Largo; Para Leer

No solo pude crear (lo que creo que es) una aplicación útil, sino que también me familiaricé con los marcos modernos y tuve algo de tiempo práctico, sin ahogarme en el aprendizaje de la sintaxis y el marco, que es exactamente lo que quería. Creo que es un gran problema y abre la puerta al desarrollo de software para mucha más gente.
featured image - Cómo desarrollé una aplicación Travel AI con ChatGPT como gerente de producto y no programador
NPD PM HackerNoon profile picture
0-item
1-item

¡Lo hice! Me tomó alrededor de 100 horas, pero pude escribir e implementar una aplicación real con la ayuda de ChatGPT.


Desde entonces, he pasado otras 100 horas aproximadamente manteniendo y agregando funciones, por lo que se convirtió en un proyecto agradable y apasionante.


La premisa del experimento era "¿Puedo, como gerente de producto, que no he escrito código activamente durante mucho tiempo, diseñar, crear e implementar una aplicación usando ChatGPT?"


Tengo una base decente, ya que hice mi licenciatura en informática y estuve involucrado en varios aspectos de la tecnología (diseño de sistemas, desarrollo, desarrollo, alojamiento), pero no he realizado desarrollo práctico durante los últimos 10 años.


Tengo un buen sentido del producto, lo que se traduce en una comprensión de cómo construir productos de forma iterativa y cómo examinar la funcionalidad, lo que creo que ayudó.


Como es habitual en el desarrollo de software, más del 80% del tiempo se dedicó a solucionar problemas y depurar.

Por qué viajar con IA

En mi búsqueda por crear algo útil en torno a la API ChatGPT, pensé que GPT está especialmente calificado para abordar el problema de la planificación de viajes: descubrir lugares a donde ir, puntos de interés a visitar, itinerarios, etc. Hay muchas decisiones que tomar. hecho cuando viaja y tener a alguien que se encargue de todo esto según sus preferencias o circunstancias únicas, es algo que pensé que sería valioso.

Codificando con ChatGPT

Pasé aproximadamente 6 semanas trabajando noches y algunos fines de semana, tal vez un total de 100 horas. Tenía una cuenta ChatGPT+, lo que me dio una mejor estabilidad al acceder al bot y acceder a GPT4.


Estos fueron mis hallazgos a través de este proceso:


  • ChatGPT me ayudó a elegir las herramientas adecuadas para el trabajo (marco Vue.js para la aplicación de una sola página) y a generar el código en iteraciones. Definitivamente no podría haberlo hecho sin él. Dicho esto, definitivamente hubo complicaciones:


    1. Los límites que impone ChatGPT UI (4k tokens en entrada y salida y alrededor de lo que parecen ser 15k de contexto) son bastante restrictivos y terminas haciendo mucha segmentación en tus preguntas. Esto no es ideal y requiere un esfuerzo adicional. No había intentado acceder a través de CLI; solo leí en alguna parte que no impone los mismos límites; vale la pena echarle un vistazo.

    2. La calidad de "darle sentido al código" ha sido inconsistente: a veces funciona mejor y otras veces empeora. No estoy seguro de qué tiene que ver.

    3. Con eso, mi consejo sería comenzar a estructurar el código temprano (dividiendo el código en funciones más pequeñas), ya que ChatGPT no lo hará automáticamente por usted, pero lo hará si se lo solicita. Facilita la resolución de problemas en el futuro.

    4. GPT4 se corta después de 25 consultas durante 3 horas y lo cambia al modelo "predeterminado", que supongo que es 3.5. Curiosamente, se recupera bastante bien y casi quiero decir que funciona mejor que GPT4, pero porque no comencé. Con 3.5, no es una comparación de manzanas con manzanas.


      Actualización: los límites se han elevado recientemente a 50 consultas durante 3 horas.


Entornos de desarrollo e implementación

  • Utilicé Replit para el IDE de la nueva era. Es un buen concepto y probablemente sea el futuro, especialmente si pueden combinarlo con una integración significativa de Codex/ChatGPT. La IA que tienen actualmente no es tan útil ya que no utiliza el código del proyecto y requiere las mismas manipulaciones y ida y vuelta que estaba haciendo con ChatGPT. Sin embargo, realmente me gustó cómo Replit se integra con Github para el control de fuente y cómo se encarga de la puesta en escena.


  • Lo implementé con Cloudflare porque quería implementarlo como nativo de la nube. Utilicé páginas CF para la interfaz de usuario y trabajadores para el backend (puerta de enlace API). Me gustó cómo las páginas se integraban con Github para CICD; eso fue realmente genial; básicamente, la aplicación se volvería a implementar en cualquier confirmación en la rama principal.


    En general, CF es genial porque simplifica muchísimo el trabajo de networking.

Inmediato

Dediqué bastante tiempo y realicé muchas iteraciones en el mensaje, eliminándolo y tratando de abordar las idiosincrasias. Uno de los primeros puntos de decisión fue si hacer que la API ChatGPT devolviera una lista de texto que luego intentaría darle sentido y clasificar o hacer que devolviera JSON que ya tiene una estructura integrada. La perspectiva de tener que interpretar datos de texto en una estructura me asustó ya que las estructuras se volvían cada vez más complejas a medida que pedía más y más datos de ChatGPT (como lo demuestra este fragmento).


Itinerario de viaje de 10 días por Suiza


Debido a esto, he decidido optar por solicitar ChatGPT para JSON. Sin embargo, esto tuvo sus propios efectos secundarios: JSON no siempre estaba bien estructurado o había demasiada ambigüedad en el mensaje, donde ChatGPT arrojaba un resultado que no esperaba. Yo diría que pasé cerca del 25% del tiempo entre el ajuste rápido y el manejo de errores JSON. Fue toda una experiencia de aprendizaje. En última instancia, aquí está el mensaje con el que terminé:


 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" } ]`;


Nota: Al momento de escribir este artículo, OpenAI acaba de lanzar mejoras de ajuste que creo que pueden ser muy útiles para hacer que los datos estructurados JSON regresen de manera más sólida y consistente.

Lista de deseos

El elemento más importante en mi lista de deseos en este momento es la integración del entorno de desarrollo/generación de código AI. Pegar cosas de un lado a otro, buscando no estropear la estructura del código (especialmente a medida que la base del código se hace más grande) definitivamente deja mucho que desear.


Creo que el próximo gran paso en la generación de código de IA serán los editores de código inteligentes integrados que analizan el código en secciones internamente y pueden proporcionar y aceptar entradas relevantes hacia/desde el modelo sin que el usuario lo haga manualmente.


El siguiente paso sería la integración con el navegador para fines de depuración y, en última instancia, crear un ciclo de depuración iterativo de bucle cerrado.


¡Sería un proyecto genial en el que trabajar!


Nota: Tengo curiosidad por ver qué tiene Google bajo la manga con el proyecto IDX ; podría ser solo eso.

Resumen

En general, no solo pude crear (lo que creo que es) una aplicación útil, sino que también me familiaricé con los marcos modernos y tuve algo de tiempo práctico, sin ahogarme en el aprendizaje de la sintaxis y el marco, que es exactamente lo que quería. Creo que es un gran problema y abre la puerta al desarrollo de software para mucha más gente.


Puede encontrar la aplicación en VoyageAI.app . La aplicación es y seguirá siendo de uso gratuito, sin anuncios ni inicios de sesión (por lo tanto, sin uso de datos personales).