현우봇 개발기: 좌충우돌 URL 요약 & AI 검색 기능 구축기 🚀

소개

시도하고자 했던 것과 그 이유

안녕하세요! 김현우입니다.

저는 정보의 홍수 속에서 원하는 내용을 빠르고 정확하게 파악하는 데 도움을 줄 수 있는 카카오톡 챗봇, '현우봇'을 만들고 싶었어요. 우리가 매일같이 카톡방에서 주고받는 수많은 링크들, 특히 긴 글이나 영상들을 일일이 확인하기란 여간 번거로운 일이 아니잖아요? 그래서 현우봇이 채팅방에 올라온 웹사이트 URL이나 유튜브 링크를 딱! 감지해서 핵심 내용만 쏙쏙 요약해주면 정말 편리하겠다 싶었죠.

거기에 더해서, 궁금한 점이 생겼을 때 바로 카톡방에서 "$키워드"나 "//자연스러운 질문" 형식으로 물어보면 현우봇이 웹 검색을 통해 똑똑하게 답변해주는 기능까지 있다면 금상첨화라고 생각했습니다. 궁극적으로는 정보 접근성을 높이고, 우리 모두의 소중한 시간을 아껴주는 똑똑한 AI 비서(요약/지능형검색)를 만드는 것이 목표였어요!

현우봇 프로필 이미지

도시 앞에 두 개의 휴대 전화를 들고있는 로봇

진행 방법

구성도

한국어의 구조를 보여주는 다이어그램

사용 도구 및 활용 방법

현우봇을 만들기 위해 정말 다양한 도구와 기술들을 활용했는데요, 마치 요리사가 최고의 요리를 위해 신선한 재료와 좋은 도구를 고르듯 신중하게 선택했습니다.

  • 메신저봇R + 안드로이드폰(공기계) : 안드로이드폰은 당근에서 6만원 주고 하나 샀구요. 이번 테스트를 위해서 우체국 알뜰요금제 월 3,000원 짜리를 약정 없이 신청해서 유심을 받았습니다. 메신저봇R은 이번에 시작할 때 잘 몰라서 구글 플레이 스토어에 있는 주황색 아이콘 모양의 '메신저봇'을 받았는데요. 만들고 나서 메신저봇 오픈채팅방에 물어보니 최신버전은 github에 올라가 있다고 하네요ㅋㅋㅋㅋㅋ

  • 메신저봇 깃허브 주소 : https://download.msgbot.app/

    현 보트 - 스크린 샷
  • 백엔드 서버 (API): Python 언어와 FastAPI 프레임워크를 사용해서 현우봇의 핵심 두뇌 역할을 하는 API 서버를 만들었어요. FastAPI는 개발 속도도 빠르고, 비동기 처리를 지원해서 여러 요청을 효율적으로 처리할 수 있다는 장점이 있었죠.

  • 개발도구로 vscode + Github Copilot을 사용하였고, 주로 Gemini 2.5 Pro (Preview)를 소환하여 많이 물어보면서 해결했습니다.

    한국어 앱의 스크린 샷
    검은 색 화면에 한국어 텍스트의 스크린 샷

  • 인공지능 모델 (LLM):

    • Google Gemini API: 웹사이트나 유튜브 영상의 내용을 요약하는 데 주로 활용했어요. 특히 gemini-1.5-flash-latest 모델은 빠르고 준수한 성능을 보여주었습니다.

    • Perplexity API: 사용자의 직접적인 검색어나 자연스러운 질문에 답변하고, 관련 웹 검색 결과를 제공하는 데 사용했어요. sonar-pro 모델을 통해 웹상의 최신 정보까지 반영할 수 있었습니다.

  • 웹 콘텐츠 추출 (스크래핑):

    • requests 라이브러리: 웹사이트의 HTML 내용을 가져오는 기본적인 역할을 담당했어요. 재시도 로직을 추가해서 네트워크 오류에도 좀 더 강인하게 만들었죠.

    • BeautifulSoup4: 가져온 HTML을 파싱해서 필요한 텍스트 정보만 추출하는 데 사용했어요. 마치 HTML 문서 속에서 보물찾기를 하는 것과 같았죠!

    • youtube_transcript_api: 유튜브 영상의 자막(스크립트)을 추출하는 데 아주 유용했습니다.

  • 비동기 HTTP 통신: httpx 라이브러리를 사용해서 Perplexity API처럼 외부 서비스와 비동기적으로 통신하며 응답을 기다리는 동안 다른 작업을 처리할 수 있도록 했어요.

  • 프록시 서버: Oxylabs의 프록시 서비스를 활용했어요. 웹사이트나 유튜브에서 정보를 가져올 때, 간혹 우리 집 IP 주소가 차단되는 경우가 있거든요. 프록시 서버는 이런 문제를 우회해서 안정적으로 데이터를 가져오는 데 큰 도움을 주었습니다.

  • 그 외: uvicorn (ASGI 서버), logging (문제 추적을 위한 로그 기록), lru_cache (자주 사용되는 함수의 결과를 임시 저장하여 속도 향상) 등도 알차게 사용했습니다.

본격적인 개발 여정: 시행착오와 극복기 (hyunubot v1.0 이전)

처음에는 모든 것이 순조로울 줄 알았지만, 현실은 녹록지 않았습니다. 특히 현우봇의 핵심 기능인 URL 콘텐츠를 가져와 요약하는 부분에서 정말 많은 시행착오를 겪었어요. 마치 험난한 산을 오르는 등반가처럼, 하나를 해결하면 또 다른 문제가 나타나곤 했죠.

🧗‍ 1단계: 웹사이트 콘텐츠 추출의 어려움

  • 문제의 시작: 단순하게 requests.get()으로 URL 내용을 가져와서 BeautifulSoup으로 텍스트만 뽑으면 될 줄 알았어요. 하지만...

    • 어떤 사이트는 "당신은 봇이군요! 접근 금지! (403 Forbidden)"라며 문전박대를 하기도 하고,

    • 어떤 사이트는 겉보기엔 멀쩡한데 실제 내용은 JavaScript가 한참 실행된 후에야 나타나서 빈 껍데기만 가져오기도 했어요.

    • 광고, 메뉴, 댓글 등 요약에 필요 없는 내용까지 잔뜩 딸려 와서 정작 중요한 알맹이를 찾기 어려웠죠.

  • 해결을 위한 몸부림:

    1. "저 사람인데요?" 헤더 설정: User-Agent 같은 HTTP 헤더를 일반 웹 브라우저처럼 설정해서 조금이나마 봇으로 덜 보이게 위장(?)했어요. (COMMON_HEADERS 변수 활용)

    2. 불필요한 부분 도려내기: BeautifulSoupdecompose() 기능을 사용해서 <script>, <style>, <nav>, <footer>처럼 요약에 방해되는 태그들을 과감히 제거했습니다.

    3. "진짜 본문은 어디냐!" 선택자 탐색: <article>, <main>처럼 본문일 가능성이 높은 태그들을 우선적으로 찾고, 그래도 없으면 <p><div> 태그에서라도 텍스트를 긁어모으려고 애썼습니다.

    4. IP 차단과의 전쟁, 프록시 서버 등판: 반복적인 요청으로 IP가 차단되는 문제를 해결하기 위해 Oxylabs 프록시 서버를 도입했어요. 마치 여러 개의 가면을 바꿔 쓰며 접근하는 것처럼요! (물론, 웹사이트 스크래핑 시에는 항상 해당 사이트의 robots.txt 정책을 존중하고 서버에 부담을 주지 않도록 조심해야 합니다.)

    5. 조선일보 같은 철옹성: 하지만... 아무리 노력해도 조선일보처럼 콘텐츠를 가져오기 정말 어려운 사이트들이 있었어요. 이런 사이트들은 Selenium 같은 브라우저 자동화 도구를 사용해야 할 수도 있지만, FastAPI 서버 내에서 관리하기가 복잡하고 리소스도 많이 필요해서 일단은 좀 더 일반적인 사이트에 집중하기로 했습니다. (이 부분은 지금도 계속 고민 중인 숙제랍니다!)

      로그 하이브 보트 v2 스크린 샷

    6. 웹사이트 요약 결과(예시)

      한국 문자 메시지의 스크린 샷

🧗‍ 2단계: 유튜브 스크립트 추출의 난관

  • 문제의 시작: youtube_transcript_api 라이브러리가 있어서 "오! 이건 쉽겠다!" 싶었죠. 하지만...

    • "이 영상은 자막을 제공하지 않아요 😥" (스크립트 없음)

    • "자동 생성된 자막이라 품질이 영... 😅"

    • 웹사이트와 마찬가지로, 너무 많은 요청을 보내면 유튜브가 "잠깐만요! IP가 수상한데요?"라며 막아버리는 경우가 발생했어요.

  • 해결을 위한 노력:

    1. "한국어 자막, 없으면 영어라도!" 전략: 먼저 한국어 자막(자동 생성 -> 직접 제작 순)을 찾고, 없으면 영어 자막이라도 가져오도록 설정했어요.

    2. 예외 처리 삼총사: TranscriptsDisabled (자막 비활성화), NoTranscriptFound (자막 없음), VideoUnavailable (영상 없음) 같은 예상 가능한 오류들은 미리미리 try-except로 잡아서 프로그램이 갑자기 멈추는 것을 막았습니다.

    3. 프록시, 여기서도 활약!: 유튜브 스크립트 요청 시에도 프록시 서버를 사용해서 IP 차단 위험을 줄였습니다.

🧗‍ 3단계: LLM 요약 품질 향상을 위한 프롬프트 엔지니어링

콘텐츠를 어렵게 가져왔더니, 이제는 Gemini에게 어떻게 요약을 시켜야 할지가 관건이었어요. 그냥 "이거 요약해줘"라고 하면 결과가 영 만족스럽지 않았거든요.

  • 문제의 시작:

    • 요약이 너무 길거나, 반대로 너무 짧아서 핵심이 빠지기도 하고...

    • 엉뚱한 내용을 요약하거나, 제가 원하지 않는 형식으로 답변하기도 했어요.

    • 가끔은 "정보가 부족해서 요약할 수 없어요 🤷" 같은 맥 빠지는 답변을 받기도 했죠.

  • 해결을 위한 프롬프트 대장정:

    1. 명확한 역할 부여와 구체적인 지시: Gemini에게 "당신은 이 내용을 아주 쉽고 명확하게 핵심만 요약해주는 전문가입니다." 와 같이 역할을 부여하고, 어떤 스타일로 요약해야 하는지 구체적으로 알려주는 것이 중요했어요.

    2. 원하는 결과물 형식 지정: 제가 원했던 요약 형식은 아래와 같았어요.

      👉 [제목]

      (이모지) (첫 번째 핵심 내용 문장)

      (이모지) (두 번째 핵심 내용 문장)

      (이모지) (세 번째 핵심 내용 문장)

      이 형식을 프롬프트에 명확하게 예시로 넣어주니, Gemini가 훨씬 더 제가 원하는 결과물을 내놓기 시작했습니다!

    3. "이런 말은 하지 마세요!"(불필요한 피드백 제거 프롬프트) : "웹사이트의 메뉴 구조나 버튼에 대한 설명은 빼고, 실제 내용의 핵심만 알려주세요." 또는 "'정보가 부족합니다' 같은 말 대신, 알아낸 사실만 간결하게 전달해주세요." 와 같이 원치 않는 내용은 언급하지 않도록 요청했어요.

    4. 부실 요약 걸러내기(불필요한 피드백 필터링) : 아무리 프롬프트를 잘 짜도 가끔은 부실한 요약이 나올 때가 있었어요. 그래서 요약 결과물의 길이가 너무 짧거나, "확인할 수 없습니다", "내용 없음" 같은 특정 키워드가 포함되면 사용자에게 보여주지 않고 "유의미한 내용을 요약할 수 없었습니다."라는 메시지를 대신 보여주도록 필터링 로직을 추가했습니다.

    요약 관련 프롬프트

    prompt = f"""
    다음 웹사이트 내용을 바탕으로, 아래 요청 양식에 맞춰 한국어로 요약해주세요.
    
    웹사이트 제목: {title}
    웹사이트 내용: {content[:8000]}
    
    요청 양식:
    👉 [{title}]
    (이모지) (첫 번째 핵심 내용 문장)
    (이모지) (두 번째 핵심 내용 문장, 정보가 충분하고 유의미하다면)
    (이모지) (세 번째 핵심 내용 문장, 정보가 충분하고 유의미하다면)
    
    규칙:
    - 요약은 1개에서 3개의 핵심 내용 문장을 포함할 수 있습니다. 제공된 내용에서 유의미한 정보를 찾기 어렵다면 더 적은 수의 문장(1개 또는 2개)으로 요약해주세요.
    - 각 핵심 내용 문장 앞에는 해당 내용의 핵심을 나타내는 서로 다른 적절한 이모지를 사용해야 합니다. (예: 긍정적 소식은 😊, 중요한 정보는 💡, 질문은 🤔 등)
    - 각 핵심 내용 문장은 완전한 문장으로 끝나야 합니다 (예: '...함.', '...음.').
    - 웹사이트의 구조나 탐색 방법(예: '메뉴 바로가기', '상세 내용 접근 가능')에 대한 언급보다는, 실제 콘텐츠의 핵심적인 정보를 중심으로 요약해주세요.
    - "정보가 부족합니다", "알 수 없습니다" 와 같이 요약 내용 자체에 정보 부족을 직접적으로 언급하기보다는, 파악된 사실만을 간결하게 전달해주세요.
    - 만약 웹사이트 내용에서 정말로 유의미한 정보를 찾을 수 없다면, 요약 생성을 최소화하거나 생략할 수 있습니다.
    - 요약은 반드시 위의 "요청 양식"을 따라야 합니다.
    """
    

    이 프롬프트는 웹사이트 제목과 추출된 내용을 Gemini에게 전달하면서, 제가 원하는 정확한 형식과 규칙에 따라 요약해달라고 요청하는 내용이에요. 특히 이모지 사용, 문장 수 조절, 불필요한 내용 배제 등을 명시했죠.

🧗‍ 4단계: Perplexity API 연동 및 활용

Perplexity API는 웹 검색 기능이 뛰어나서 사용자의 질문에 대한 답변이나 특정 키워드 검색에 활용했어요.

  • 문제의 시작:

    • API 응답이 JSON 형식인데, 여기서 제가 필요한 답변 내용과 출처 URL을 정확히 뽑아내는 것이 처음엔 헷갈렸어요.

    • 가끔 API 호출이 실패하거나 오류를 뱉어낼 때, 사용자에게 친절하게 안내하는 방법도 고민이었죠.

  • 해결을 위한 노력:

    1. 비동기 호출로 응답성 UP!: httpx 라이브러리를 사용해서 Perplexity API를 비동기(async/await)로 호출했어요. 덕분에 API 응답을 기다리는 동안 서버가 다른 요청을 처리할 수 있게 되었죠.

    2. 시스템 프롬프트 설정: Perplexity API에 요청을 보낼 때, "당신은 도움이 되는 AI 어시스턴트입니다. 답변은 한국어로 해주세요. 외부 정보를 사용했다면, 답변에 [숫자] 형식으로 출처를 표시하고, 가능하다면 출처 URL도 함께 제공해주세요." 와 같은 시스템 메시지를 함께 전달해서 답변의 스타일과 출처 표시를 유도했어요.

    3. 응답 파싱 및 오류 처리: API 응답에서 답변은 choices[0].message.content에, 출처 URL은 citations 필드에 있다는 것을 파악하고 정확히 추출했습니다. HTTPStatusErrorRequestError 같은 네트워크 관련 오류가 발생했을 때도, 사용자에게 "Perplexity API 오류가 발생했어요 😥" 와 같이 상황을 알려주고, 개발자는 로그를 통해 자세한 원인을 파악할 수 있도록 꼼꼼하게 예외 처리를 했습니다.

Perplexity API를 통한 답변 소환

한국어 문자 메시지의 스크린 샷
한국 단어 목록의 스크린 샷

🧗‍ 5단계: API 서버 안정성 확보 노력

챗봇이 갑자기 먹통이 되면 안 되잖아요? 그래서 API 서버 자체의 안정성을 높이기 위한 노력도 계속했습니다.

  • 재시도는 기본!: requests.SessionRetry 어댑터를 사용해서, 웹사이트 내용을 가져오거나 외부 API를 호출할 때 일시적인 네트워크 오류가 발생하면 자동으로 몇 번 더 재시도하도록 만들었어요.

  • 오류는 친절하게: FastAPI의 HTTPException을 사용해서, 문제가 생겼을 때 사용자(여기서는 카카오톡 봇 스크립트)에게 어떤 문제가 발생했는지 명확한 HTTP 상태 코드와 오류 메시지를 전달하도록 했습니다.

  • 자주 쓰는 건 저장해두자 (캐싱): lru_cache 데코레이터를 사용해서, 한 번 가져온 웹사이트 내용이나 페이지 제목 같은 정보는 일정 시간 동안 메모리에 저장해두고 다시 요청이 오면 빠르게 응답할 수 있도록 했어요. (물론, 너무 오래된 정보가 제공되지 않도록 캐시 크기나 유효 시간을 적절히 조절해야겠죠?)

  • 모든 것은 기록된다 (로깅): logging 모듈을 사용해서 현우봇이 어떤 요청을 받았고, 어떤 작업을 수행했으며, 혹시 오류가 발생했다면 그 원인이 무엇인지 상세하게 로그를 남기도록 했어요. 이건 마치 비행기의 블랙박스처럼, 문제가 생겼을 때 원인을 찾고 해결하는 데 정말 큰 도움이 됩니다!

코드 구성 개요

핵심 로직이 담긴 main.py 파일은 FastAPI를 기반으로 구현되었으며, 다음과 같은 주요 구조와 기능을 포함하고 있습니다:

  • FastAPI 앱 초기화: API 제목, 설명 등을 설정합니다.

  • API 키 및 프록시 설정: Gemini, Perplexity API 키 및 Oxylabs 프록시 정보를 환경 변수 또는 직접 설정을 통해 로드합니다. (보안을 위해 환경 변수 사용을 권장합니다.)

  • Pydantic 모델 정의: 요청 바디(URLRequest, SearchRequest 등)의 데이터 유효성 검사를 위해 사용됩니다.

  • 공통 함수:

    • get_session_with_retries(): 재시도 로직이 포함된 requests.Session 객체를 생성합니다.

    • get_website_content(url: str): 웹사이트 HTML을 가져와 BeautifulSoup으로 파싱하고 주요 텍스트를 추출합니다. (불필요 태그 제거, 본문 추정 로직 포함)

    • get_page_title(url: str): 웹사이트의 <title> 태그 내용을 추출합니다.

    • call_perplexity_api(query: str, model_name: str): Perplexity API를 비동기로 호출하여 검색 결과를 가져옵니다.

  • API 엔드포인트:

    • /summarize/website (POST): 웹사이트 URL을 받아 Gemini API로 요약합니다. (부실 요약 필터링 로직 포함)

    • /summarize/youtube (POST): 유튜브 URL을 받아 youtube_transcript_api로 스크립트를 추출하고 Gemini API로 요약합니다. (프록시 사용, 다양한 유튜브 URL 형식 처리)

    • /summarize/search (POST): 키워드를 받아 Perplexity API로 검색하고 결과를 반환합니다.

    • /summarize/natural_language_search (POST): 자연어 질문을 받아 Perplexity API로 검색하고 답변을 생성합니다.

  • 오류 처리: HTTPException을 사용해 각 엔드포인트 및 함수에서 발생할 수 있는 다양한 오류 (네트워크, API, 데이터 처리 등)를 처리하고 적절한 응답을 반환합니다.

  • 로깅: logging 모듈을 사용하여 요청, 처리 과정, 오류 등을 상세히 기록합니다.

  • 캐싱: lru_cache를 사용하여 자주 호출되는 함수의 결과를 캐싱하여 성능을 향상시킵니다.

  • Uvicorn 실행: 개발 및 배포 시 ASGI 서버인 uvicorn으로 FastAPI 앱을 실행합니다.

main.py

# 예시: FastAPI 앱 초기화 및 간단한 엔드포인트 구조
from fastapi import FastAPI, HTTPException, Request
from pydantic import BaseModel
import logging
# ... 기타 필요한 모듈 import ...

logger = logging.getLogger(__name__)
app = FastAPI(title="콘텐츠 요약 API")

# --- Pydantic 모델 정의 ---
class URLRequest(BaseModel):
    url: str

class SearchRequest(BaseModel):
    query: str

# --- 핵심 로직 함수 (예시) ---
async def get_website_content_summary(url: str):
    # 1. 웹사이트 내용 스크래핑 (get_website_content)
    # 2. Gemini API로 요약 요청
    # 3. 부실 요약 필터링
    # 4. 결과 반환
    pass

async def get_youtube_summary(url: str):
    # 1. 유튜브 스크립트 추출 (youtube_transcript_api)
    # 2. Gemini API로 요약 요청
    # 3. 결과 반환
    pass

async def search_with_perplexity(query: str):
    # 1. Perplexity API 호출 (call_perplexity_api)
    # 2. 결과 파싱 및 반환
    pass

# --- API 엔드포인트 ---
@app.post("/summarize/website")
async def summarize_website_endpoint(req: URLRequest):
    # logger.info(f"웹사이트 요약 요청: {req.url}")
    # summary = await get_website_content_summary(req.url)
    # return {"success": True, "summary": summary}
    pass # 실제 구현은 위 주석 참고

@app.post("/summarize/youtube")
async def summarize_youtube_endpoint(req: URLRequest):
    # summary = await get_youtube_summary(req.url)
    # return {"success": True, "summary": summary}
    pass # 실제 구현은 위 주석 참고

@app.post("/summarize/search")
async def summarize_search_endpoint(req: SearchRequest):
    # result = await search_with_perplexity(req.query)
    # return {"success": True, **result}
    pass # 실제 구현은 위 주석 참고

# ... 기타 엔드포인트 및 uvicorn 실행 코드 ...

위 코드는 main.py의 전체 구조와 주요 기능을 간략하게 보여주기 위한 예시이며, 실제 모든 코드를 포함하고 있지는 않습니다.

결과와 배운 점

배운 점

이 험난한 여정을 통해 정말 많은 것을 배우고 느꼈습니다.

  • 웹 스크래핑은 예술이자 과학: 단순히 코드를 짜는 것을 넘어, 각 웹사이트의 특성을 이해하고 그에 맞는 전략을 세우는 것이 중요하다는 것을 깨달았어요.

  • 외부 API는 언제든 배신할 수 있다 (견고한 오류 처리): 네트워크는 불안정하고, 외부 서비스는 언제든 예기치 않은 오류를 발생시킬 수 있어요. 최악의 상황을 가정하고, 오류 처리와 재시도 로직을 꼼꼼하게 준비~

  • 프록시는 든든한 방패: 특히 해외 서비스를 이용하거나 반복적인 요청을 보내야 할 때, 프록시 서버는 IP 차단이라는 강력한 공격으로부터 우리를 보호해주는 든든한 방패가 될 수 있다는 것을 알게 되었어요.

  • 비동기는 사랑입니다: FastAPI와 httpx를 통해 비동기 프로그래밍의 맛을 살짝 봤는데, I/O 작업이 많은 애플리케이션에서 응답성과 효율성을 크게 높일 수 있다는 것을 체감했습니다.

✨ 나만의 꿀팁 ✨

  1. 비개발자도 AI를 통한 나만의 루틴을 만들면 좋아요!
    Perplexity에서 개념 및 최신정보 파악 -> Claude를 통해 서버 구축 및 정보 정리 -> vscode(Github copilot) 내 에이전트(Gemini)를 통해 코딩

겪었던 시행착오 요약

앞서 "진행 방법"에서 구구절절 설명드렸듯이, 정말 많은 시행착오를 겪었습니다. 요약하자면...

  • 콘텐츠 추출과의 사투: 웹사이트나 유튜브에서 원하는 내용을 깨끗하게 가져오는 것이 생각보다 너무 어려웠어요. (403 접근 거부, IP 차단, JavaScript 동적 로딩, 스크립트 부재 등등...)

  • LLM의 변덕: Gemini나 Perplexity가 가끔 제가 원하지 않는 방식으로 요약하거나, "나도 잘 모르겠는데?" 스타일의 답변을 줘서 당황스러웠죠. 프롬프트를 수십 번 고쳐 쓴 것 같아요.

  • 프록시 설정의 번거로움: 프록시 서버를 사용하면 좋다는 건 알겠는데, 처음 설정하고 코드에 적용하는 과정이 생각보다 손이 많이 갔습니다.

도움이 필요한 부분

  • 어떤 카카오톡 봇이 있으면 좋을지 아이디어 있으면 댓글 달아주세요.

  • 조선일보처럼 스크래핑이 아주 어려운 사이트의 콘텐츠를 안정적으로 가져올 수 있는 더 좋은 방법이 있을까요?

앞으로의 계획

  • 이미지 첨부하면 OCR로 분석결과를 답변해 주는 것 해보고 싶어요.

  • 사용자와 좀 더 자연스럽게 대화하고 이전 대화 내용을 기억해서 답변하는 '메모리 기능'을 추가하고 싶어요!

  • 더 많은 종류의 정보와 서비스를 제공하는 카카오톡 봇으로 발전시키고 싶어요.

도움 받은 글 (참고 자료)

  • 솔론님 재능기부 강의(Thank to 솔론님, 여행가J님)

Q&A

  1. 제 휴대폰이 안드로이드폰인라 카카오톡 별도 계정을 생성하지 않고, 제 카카오톡 계정으로 봇 운용이 가능할까요?
    👉 네 가능합니다. 메신저봇R은 별도의 카카오톡 계정이 필요하지 않고, 본인의 현재 사용 중인 카카오톡 계정으로 바로 봇을 운용할 수 있습니다.

  2. 메신저봇R이 특정 카톡방에 대해서만 나의 멀티프로필(A가 오리지널 프로필, B가 봇 프로필)이 들어간 방에 대해서만 동작하도록 할 수 있나요?
    👉 직접적으로 멀티프로필이 적용된 방만을 자동으로 구분해서 작동하도록 하는 기능은 메신저봇R의 기본 기능에는 없습니다. 특정 방에서만 작동하도록 코드는 작성할 수 있습니다.

  3. Perplexity API를 검색에 사용하셨는데, Perplexity의 API 차감 방식이 궁금합니다.
    👉 Perplexity Pro 요금제를 사용하는 경우, pplx API에서 사용할 수 있는 크레딧이 매월 1일 기준 $5 상당의 API 크레딧이 자동 충전됩니다. 이 크레딧은 매월 새로 리필되며, 이전 달에 남은 잔액은 이월되지 않습니다.

  4. 메신저봇R과 Fastapi서버는 어떻게 호출하고 연결을 했나요?
    👉 메신저봇R(안드로이드폰)에서 Fastapi(외부서버)를 직접 실행하기 위해 사용하고자 하는 포트를 열고, API 엔드포인트(URL)로 API에 접근할 수 있습니다.

  5. 저는 비개발자라 Fastapi에 대해 잘 모르는데, 뭔지 쉽게 설명 부탁드립니다.
    👉 https://www.perplexity.ai/search/8c990ae8-3e89-4953-aecc-d6a92f756886#0


19
10개의 답글

👉 이 게시글도 읽어보세요