AI와 협업하여 오픈소스 프로젝트를 진행한 후기입니다.

소개

시도하고자 했던 것과 그 이유를 알려주세요.

(내용 입력)

🎤 AI와 협업하여 오픈소스 라이브러리를 개발한 이야기

처음 접하거나 조작이 어려운 서비스에 대해서 내가 원하는 일처리를 AI가 대신 해주는 것을 상상했습니다.

아이언맨이 아닌 평범한 사람이어도 자비스에게 부탁할 수는 있잖아요. 😅

안녕하세요! 여기 오시는 많은 개발자분들도 저처럼 업무에서 AI를 활용하고 계신 분들이 많으실 겁니다.

저는 이제 나이가 좀 있는 '올드'한 개발자이지만, AI 덕분에 개발이 정말 편해진 요즘입니다.

특히 자바 개발자로서 다양한 프레임워크와 API를 다루면서도 점점 기억력의 한계를 절감하곤 하는데요.

그럴 때마다 GPT나 Gemini에게 묻고 또 물으며 개발하고 있습니다.

이런 경험들을 통해 AI를 잘 활용하려면 '내가 모르는 것', '내가 알고 싶은 것'을 AI에게 얼마나 체계적으로 잘 설명하느냐가 정말 중요하다는 것을 깨달았습니다.

결국 프롬프트 엔지니어링 능력도 이제는 개발자의 중요한 역량 중 하나가 되었다고 생각합니다.

진행한 오픈소스 프로젝트는 아이디어와 기획, 설계, 실행 계획에 작업 진행에 대한 서포트까지 AI가 없었으면 불가능 했습니다.

기존 웹서비스에 라이브러리로 설치하면 시용자가 브라우저 화면에서 메뉴 선택과 결제 진행을 음성으로 조작할 수 있는 프로그램입니다.

그렇게 완성한 프로그램을 최근에 오픈소스로 공개하였습니다.

🔗 GitHub 저장소: https://github.com/kiunsea/smart-ux-api

이 라이브러리를 개발하면서 AI와 어떻게 협업했는지, 어떤 시행착오를 겪었는지 등의 개발 과정들을 지피터스에 공유합니다.

진행 방법

어떤 도구를 사용했고, 어떻게 활용하셨나요?

Tip: 사용한 프롬프트 전문을 꼭 포함하고, 내용을 짧게 소개해 주세요.

Tip: 활용 이미지나 캡처 화면을 꼭 남겨주세요.

Tip: 코드 전문은 코드블록에 감싸서 작성해주세요. ( / 을 눌러 '코드 블록'을 선택)

(내용 입력)

🛠️ RAG에서 프롬프트 엔지니어링 중심으로 (feat. 화면 음성 제어 데모)

smux-api의 현재 버전은 0.1.0입니다.

이제 막 첫걸음을 뗀 터라 아직은 ChatGPT하고만 연동되어 있는데요.

저의 목표는 Gemini, Anthropic, Meta 등 REST API를 지원하는 다양한 AI들을 연동하는 것입니다.

하지만 생업이 있다 보니 진도를 내기가 쉽지 않네요.

아이디어는 시간이 지날수록 가치를 잃는다고 생각해서, 틈틈이 시간을 내어 간신히 아이디어를 실체화한 '앙상한' 프로그램으로 오픈소스를 공개하게 되었습니다.

부끄럽지만 다음이 그 결과물입니다. 😅

음료에 대한 한국 광고 스크린 샷

보시는 것처럼, 화면이 로드되면 마이크 아이콘을 누르고 메뉴 선택 후 "결재해 줘"라고 말하면 AI가 그대로 동작합니다. 😉

이 기능을 구현하기 위해 AI 학습에 사용한 방법은 처음엔 RAG(Retrieval-Augmented Generation)였습니다.

개발 초기에는 Assistant API를 통해 RAG를 활용할 수 있어서 문서 파일을 작성해서 업로드하곤 했어요.

업로드한 문서의 내용은 JSON 포맷으로 작성했고, 문서의 역할과 내용의 의미를 description으로 상세하게 기술했습니다.

AI는 자연어도 찰떡같이 알아듣지만 구구절절 설명하는 규격화된 문서는 정말 잘 이해했습니다.

당시에 사용했던 JSON 문서는 아래 링크에서 확인하실 수 있습니다.

오픈소스라 코드나 텍스트를 캡처할 필요 없이 바로 링크로 연결했어요.

🔗 RAG 학습에 사용했던 JSON 문서: https://github.com/kiunsea/smart-ux-api/tree/main/smart-ux-api/docs

하지만 지금은 번거로움과 기능의 한계 때문에 RAG를 사용하지 않고 있어요.

재미난 것은 제가 RAG 사용의 불편함 때문에 AI에게 푸념을 하니 AI가 해당 데이터를 실시간으로 전송하는 방안에 대해 제안했습니다. 😅

이젠 너무나 똑똑한 개인 비서 같아요.

현재는 서비스 시작 시점에 대략적인 개요에 대한 프롬프트 문서를 전달해서 AI가 '마음의 준비'를 할 수 있게 하고,

화면이 전환될 때마다 현재 화면의 UI 정보를 스캔하여 AI에게 전달한 후에 사용자 프롬프트를 전하게 했습니다.

RAG라는 절차가 없어져서 프로그램도 간소화되고 생각보다 성능도 그리 나쁘지 않았습니다.

그리고 사용자가 바라보는 화면을 실시간으로 분석해내어 화면전환에 대한 프로세스 설계의 복잡도가 거의 없습니다.

AI가 아니었다면 배포할때까지도 미처 생각지 못할 부분이었습니다.

추후엔 Function Call로써 사용자에게 질문을 던져서 보다 더 정확한 지시를 확인하는 부분도 고려하고 있습니다.

결과와 배운 점

배운 점과 나만의 꿀팁을 알려주세요.

과정 중에 어떤 시행착오를 겪었나요?

도움이 필요한 부분이 있나요?

앞으로의 계획이 있다면 들려주세요.

(내용 입력)

🤯 로직과 프롬프트 사이, 혼돈 속에서 찾은 깨달음... AI 대화의 본질과 앞으로의 계획

저는 프로그램을 개발하면서 AI에게 무엇을 원하는지 프롬프트로 열심히 설명하는 과정을 '로직'으로 만들었어요.

처음에는 이것이 당연하다고 생각했습니다.

프로그래머라는 직업때문인지 늘 로직을 먼저 고민해 버렸네요.

하지만 개발을 진행하면서 저의 머릿속에 프로그램 로직과 프롬프트가 혼재되면서 엄청난 '혼돈의 카오스'에 빠졌던 적이 있습니다. 🤯

이 혼란 속에서 깨닫게 된 중요한 점은 바로 이것이었습니다.

"프로그램을 통해 AI와 데이터를 주고 받더라도, 결국 중요한 것은 내가 AI와 '대화'를 하는 것이구나!"

우리가 사람과 사람이 서로 교감하려면 원활한 대화 능력이 참 중요하듯이 AI도 마찬가지였습니다.

그래서 저는 내가 대화하는 AI의 특성을 잘 안다면, 더 쉽고 짧고 명료하게 프롬프트를 만들 수 있을 것 같다는 생각을 하게 되었습니다.

결국 프롬프트도 프로그램 로직 설계와 같다는 것을 진정으로 깨닫게 된 셈이죠.

이 깨달음은 저에게 전환점이 되어주고 있습니다.

이제는 이 깨달음을 바탕으로 계속해서 기능을 추가하며 smux-api 프로그램을 성장 시켜나갈 생각입니다.

살을 덧붙이듯 기능을 확장하고, 사용자 경험을 더욱 풍부하게 만들고 싶습니다.

그리고 혹시라도 저의 오픈소스를 통해 영감을 얻은 조력자가 나타난다면, smux-api에 새로운 시도들을 해보고 싶은 작은 바람도 가지고 있습니다. 🤝

도움 받은 글 (옵션)

참고한 지피터스 글이나 외부 사례를 알려주세요.

(내용 입력)

✨ 지피터스 덕분에 작은 시작을 이뤘습니다. 감사드립니다.

작년 하반기에 지피터스를 처음 알게 되었지만, 그동안 눈팅만 하다가 이제서야 이렇게 첫 기고를 하게 되었습니다. 😊

이곳에는 정말 다양한 분야에 계신 분들이 모여 계시다는 걸 늘 느낍니다.

컴퓨터를 다루는 직업임에도 불구하고, 여기에 올라와 있는 많은 내용들이 저에게는 굉장히 생소하고 신선했던 기억이 나네요.

덕분에 끊임없이 배우고 성장할 수 있었습니다.

다행히도 이제서야 그동안 여러분이 공유해주신 수많은 지식과 영감을 통해 이렇게 오픈소스라는 작은 성과를 만들어낼 수 있었습니다.

지피터스에 계신 모든 분들께 진심으로 감사드립니다.

지피터스 뉴스레터

이번 주 AI, 딱 쓸 것만

매주 월요일 오후,
읽고 바로 써먹을 AI 소식만