21화 | [AI와 1인기업] AI 비즈니스 에이전트 이식: OpenAI Assistants API / LangChain 연동 및 데이터베이스 툴링 구현

 

AI 비즈니스 에이전트 이식: OpenAI Assistants API / LangChain 연동 및 데이터베이스 툴링 구현 (21화)

안녕하세요! AI 크루들과 무자본 IT 1인 기업을 꾸려가고 있는 크리에이티브 디렉터 DAVID입니다.

지난 20화에서는 로컬 개발 환경에서 무결성하게 검증된 Next.js 상용 플랫폼을 Vercel Edge Runtime CDN에 1분 만에 클라우드 배포하고, 우리만의 커스텀 도메인(SSL/HTTPS) 매핑과 환경변수 보안 구성을 성공적으로 마감하며 '1인 기업 무인 자동 판매기 웹 서비스 런칭'을 선언했습니다.

하지만 진정한 의미의 'AI 1인 기업'이 되기 위해서는, 웹사이트에 단순히 정적인 상품 설명이나 구매 링크만 던져놓는 수준을 넘어설 지능형 확장이 필요합니다. 밤낮으로 밀려드는 "언제 제 라이선스가 만료되나요?", "제 구매 내역이 맞나요?", "봇 세팅은 어떻게 하나요?"와 같은 반복적인 고객 CS 업무에 1인 창업가의 시간이 묶여버리면 비즈니스의 스케일업(확장)은 불가능해집니다. 오늘 이 난제를 끝낼 'OpenAI Assistants API 기반의 데이터베이스(Firestore) 조회 툴링(Function Calling)'을 결합한 든든한 스마트 인공지능 비서 탑재의 정석을 낱낱이 공개합니다!





1. 왜 단순 Chat Completion API가 아니라 'Assistants API'인가?

단순한 GPT-4o 챗봇 API(Chat Completion)는 사용자와의 대화 맥락(Context)을 백엔드 메모리에 매번 일일이 누적해서 다시 서버로 쏴줘야 하는 번잡한 세션 관리 코딩을 수반합니다. 반면 OpenAI의 **Assistants API**는 다음과 같은 비즈니스 자동화 최적화 기능을 기본 제공합니다.

  • 상태 보존형 대화 (Thread Management): 사용자별 대화 히스토리를 OpenAI 클라우드가 Thread ID를 기준으로 영구 관리하므로, 개발자가 데이터베이스에 챗 로그 세션을 관리할 부담이 사라집니다.
  • 동적 도구 호출 (Function Calling): 에이전트가 답변을 하다가 "사용자의 남은 라이선스 기간 확인"처럼 실시간 데이터 쿼리가 필요할 때, 스스로 미리 등록된 데이터베이스 조회용 자바스크립트 함수를 실행 신호로 쏘아 올립니다.
  • 벡터 검색 장착 (File Search): 우리 프로그램의 사용 설명서 PDF나 퀀트 봇 백테스트 기획서를 Assistants의 파일 저장소에 업로드해 두면, 별도의 임베딩(RAG) 인프라 구축 없이 정밀한 가이드라인 답변을 출력해 줍니다.

2. AI 에이전트의 데이터베이스 탐색(Function Calling) 3단계 라이프사이클

인공지능 비서가 독단적으로 대답을 지어내지 않고(환각 방지), 실제 우리 Firestore DB를 정확히 쿼리하여 유효성을 판독하는 비동기 3단계 아키텍처는 다음과 같습니다.

실행 시퀀스 에이전트 판단 및 도구 호출 백엔드 데이터 핸들링
1단계: 대화 인식 "내 라이선스 키 AG-KEY-XXXX 만료일 언제야?" 라고 유저가 묻습니다. 에이전트가 이 질문을 해결하기 위해서는 check_license_expiry 라는 함수를 써야 함을 감지하고, 인자값으로 유저의 키를 JSON 형태로 파싱하여 서버에 쏘아 올립니다.
2단계: DB 쿼리 실행 submit_tool_outputs 우리 Next.js 서버 백엔드는 에이전트의 중단 신호(Requires Action)를 감지하여 Firestore DB에 접속해 해당 라이선스 키의 expiredAt 정보를 쿼리하고, 그 실시간 결과값을 에이전트에게 2차 전달(Submit)합니다.
3단계: 검증된 최종 답변 "고객님의 라이선스 만료일은 2026년 8월 15일까지입니다." 에이전트는 백엔드가 넘겨준 정합성 100%의 실제 팩트 데이터를 최종 가공하여 자연어 형태로 고객에게 정중하게 답변해 줍니다.

3. OpenAI Assistants 및 Next.js API 기반 DB 툴링 구현 실전 코드

사용자 라이선스를 실시간 조회하여 에이전트 답변을 동기화시키는 Next.js Route Handler 핵심 백엔드 소스코드입니다.

import { NextResponse } from 'next/server';
import OpenAI from 'openai';
import { db } from '@/lib/firebase-admin';

const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });

// 1. OpenAI Assistants에 등록할 Function Tool의 JSON 규격 정의
const checkLicenseExpiryTool = {
    type: 'function',
    function: {
        name: 'check_license_expiry',
        description: '유저가 입력한 라이선스 키의 유효 기한 및 만료일을 데이터베이스에서 실시간 조회합니다.',
        parameters: {
            type: 'object',
            properties: {
                licenseKey: { type: 'string', description: '조회할 UUID 형태의 라이선스 키 (예: AG-KEY-XXXX)' }
            },
            required: ['licenseKey']
        }
    }
};

export async function POST(request) {
    try {
        const { message, threadId } = await request.json();
        
        // 2. OpenAI Thread에 사용자가 보낸 자연어 질문 추가
        await openai.beta.threads.messages.create(threadId, {
            role: 'user',
            content: message
        });

        // 3. 어시스턴트 실행 가동 (Run)
        let run = await openai.beta.threads.runs.create(threadId, {
            assistant_id: process.env.OPENAI_ASSISTANT_ID
        });

        // 4. 에이전트의 도구 실행 판단 대기 루프 (Polling)
        while (true) {
            run = await openai.beta.threads.runs.retrieve(threadId, run.id);

            // 에이전트가 DB 조회가 필요한 상태(requires_action)일 때
            if (run.status === 'requires_action') {
                const toolCalls = run.required_action.submit_tool_outputs.tool_calls;
                const toolOutputs = [];

                for (const toolCall of toolCalls) {
                    if (toolCall.function.name === 'check_license_expiry') {
                        const args = JSON.parse(toolCall.function.arguments);
                        
                        // [핵심] 실제 Firestore DB 쿼리 실행
                        const licenseDoc = await db.collection('licenses').doc(args.licenseKey).get();
                        let outputData = { verified: false, error: 'KEY_NOT_FOUND' };
                        
                        if (licenseDoc.exists) {
                            const data = licenseDoc.data();
                            outputData = { verified: true, expiredAt: data.expiredAt, status: data.status };
                        }

                        toolOutputs.push({
                            tool_call_id: toolCall.id,
                            output: JSON.stringify(outputData)
                        });
                    }
                }

                // 검증 결과를 에이전트에게 2차 융합 주입
                run = await openai.beta.threads.runs.submitToolOutputs(threadId, run.id, {
                    tool_outputs: toolOutputs
                });
            }

            if (run.status === 'completed') break;
            await new Promise((resolve) => setTimeout(resolve, 500));
        }

        // 5. 에이전트의 최종 답변 메시지 반환
        const messages = await openai.beta.threads.messages.list(threadId);
        const lastMessage = messages.data[0].content[0].text.value;

        return NextResponse.json({ reply: lastMessage }, { status: 200 });

    } catch (error) {
        return NextResponse.json({ error: 'INTERNAL_SERVER_ERROR' }, { status: 500 });
    }
}

4. 21화를 마치며: 백오피스마저 무인으로 녹아내리다

인공지능 Assistants API의 Function Calling과 데이터베이스의 실시간 연동이 매끄럽게 구축되었습니다. 이제 대장님의 무인 1인 쇼핑몰은 제품을 24시간 파는 것을 넘어, 고객들이 던지는 복잡한 기술 문의나 본인의 결제 라이선스 복구 조회마저도 인공지능 비서가 백그라운드에서 스스로 생각하고 DB를 조회하여 정답을 콕 짚어 대답하는 지능화 비즈니스 요새로 한 차원 더 진화했습니다.

고객 문의 대응 장벽이 인공지능으로 완전히 무너졌습니다. 하지만 이 에이전트 비서가 내 홈페이지에만 갇혀 있으면 접근성이 떨어집니다. 사용자들이 가장 많이 사용하는 카카오톡 채널이나 텔레그램 메신저를 통해, 언제 어디서나 대화 형태로 실시간 알림을 받고 에이전트와 대화하며 라이선스를 제어할 수 있는 '멀티채널 챗봇 인터페이스'가 연동되어야 합니다.

다음 22화에서는 텔레그램 봇 API와 OpenAI Assistants API를 연결하여, 유저가 스마트폰 텔레그램 방에서 챗봇으로 질문하면 서버 DB를 찔러 실시간 모바일 답변을 돌려주는 "AI 비즈니스 에이전트 이식: 텔레그램(Telegram) 챗봇 API 연동 및 모바일 라이선스 통합 관제 솔루션 개발"을 정석대로 지능적으로 마스터해 보겠습니다.

스스로 생각하고 DB를 탐색하는 똑똑한 AI 비서를 내 비즈니스에 직접 고용해 보세요. 다음 편에서 뵙겠습니다! 😊🚀


*글쓴이: AI와 함께 무한한 가치를 만들어가는 Creative Director, DAVID.*

댓글

이 블로그의 인기 게시물

프롤로그 | AI 1인 기업 창업 가이드: 코딩 없이 시작하는 IT 스타트업 20부작 로드맵

18화 | [AI와 1인기업] 유료 회원 멤버십 구축: Firebase Auth 연동을 통한 이메일 비밀번호 회원가입 및 마이페이지 라이선스 키 조회 화면 개발

23화 | [AI와 1인기업] AI 비즈니스 에이전트 이식: OpenAI Assistants RAG 엔진 기반의 텔레그램 무인 기술지원(CS) 자동 챗봇 구축