Skip to content

namest504/web-graph-agent

Repository files navigation

Web Graph Agent

1. 프로젝트 개요

이 프로젝트는 사용자의 질문을 분석하여 답변을 제공하는 FastAPI 기반의 웹 애플리케이션입니다. LangGraph를 사용하여 복잡한 로직 흐름을 그래프 기반으로 제어합니다. 웹 기반 검색이 필요한 경우 TAVILY API 를 사용하여 응답하며, 필요하지 않을 경우 일반적인 LLM 응답을 합니다.

  • 다국어 지원 및 동적 LLM 모델 선택
  • LLM 기반의 지능형 작업 라우팅
  • 웹 검색을 통한 최신 정보 반영
  • LLM을 이용한 답변 품질 자동 검증 및 자체 수정 (Self-Correction)

2. 주요 기능

  • 다국어 지원 및 동적 모델 선택: 사용자의 질문 언어(한국어/그 외)를 감지하여, 한국어 질문에는 exaone3.5:2.4b 모델을, 그 외 언어에는 deepseek-r1:1.5b 모델을 동적으로 선택하여 사용
  • 지능형 작업 라우팅: LLM을 사용하여 질문의 의도를 파악하고, 최신 정보가 필요한 경우 '웹 검색'으로, 자체 답변이 가능한 경우 '직접 답변'으로 작업을 분기
  • 웹 검색 연동: 최신 정보가 필요한 경우, Tavily 웹 검색 API를 호출하여 관련 정보를 수집합
  • 답변 품질 검증 및 자체 수정: 생성된 답변이 사용자의 질문에 충분하지 않거나 부적절하다고 LLM 스스로 판단할 경우, 작업을 자동으로 다시 실행하여 더 나은 품질의 답변을 생성하려고 시도
  • 확장 가능한 프로젝트 구조: 표준 FastAPI 프로젝트 구조를 채택하여 API, 서비스, 설정, 스키마 등 각 기능의 관심사를 명확하게 분리함으로써 유지보수와 확장성을 높임
  • 흐름 로깅: 각 노드가 실행될 때마다 콘솔에 로그를 출력하여, 요청이 어떤 흐름으로 처리되는지 쉽게 추적할 수 있음

3. LangGraph 워크플로우

graph TD
    A[Start] --> B(detect_language);
    B --> C{router};
    C -->|web_search| D[web_search];
    C -->|direct_answer| E[direct_answer];
    D --> F[synthesize_answer];
    E --> G(verify_answer);
    F --> G;
    G --> H{decide_after_verification};
    H -->|finish| I([End]);
    H -->|retry_with_web_search| C;
Loading
  1. detect_language: langdetect 라이브러리로 사용자 질문의 언어를 감지하고 사용할 LLM 모델을 결정
  2. router: 선택된 LLM이 질문을 분석하여 웹 검색이 필요한지(web_search), 직접 답변할지(direct_answer) 결정
  3. web_search / direct_answer: 결정된 경로에 따라 웹 검색을 수행하거나 LLM이 직접 답변을 생성
  4. synthesize_answer: 웹 검색 결과를 바탕으로 LLM이 최종 답변을 종합하여 생성
  5. verify_answer: 생성된 답변을 LLM이 직접 평가하여 품질이 좋은지("good"), 나쁜지("bad") 판단
  6. decide_after_verification: 검증 결과, 답변 품질이 "good"이면 흐름을 종료합니다. 만약 "bad"이면, 흐름을 다시 **router**로 되돌려 보내 다른 방법(주로 웹 검색 강제)으로 더 나은 답변을 생성하도록 재시도

4. 설치 및 실행

4.1. 환경 변수 설정

먼저, 프로젝트 루트의 .env.example 파일을 .env 파일로 복사합니다.

cp .env.example .env

그 다음, 생성된 .env 파일을 열어 자신의 환경에 맞게 TAVILY_API_KEYOLLAMA_BASE_URL 값을 수정합니다.

  • 로컬 Ollama 사용 시: OLLAMA_BASE_URLhttp://localhost:11434로 설정합니다.
  • 원격 Ollama 사용 시: OLLAMA_BASE_URLhttp://your-domain와 같이 실제 원격 주소로 설정합니다.

4.2. Docker Compose 실행

Mode 1: 로컬 환경 (FastAPI 앱 + Ollama 모두 Docker로 실행)

.env 파일의 OLLAMA_BASE_URLhttp://localhost:11434로 설정되었는지 확인하세요.

# 로컬 환경으로 실행
docker-compose -f docker-compose.yml -f docker-compose.local.yml up --build
  • 이 명령어는 FastAPI 앱, Ollama 서버, 모델 다운로더를 모두 실행합니다.

Mode 2: 원격 환경 (FastAPI 앱만 Docker로 실행)

.env 파일의 OLLAMA_BASE_URL이 설정되었는지 확인하세요.

docker-compose up --build
  • 이 명령어는 FastAPI 앱만 실행하며, 앱은 .env에 설정된 원격 Ollama 서버에 연결됩니다.

5. API 사용법

  • Endpoint: POST /api/v1/chat

  • Request Body:

    {
      "query": "여기에 질문 내용을 작성"
    }
  • Example (curl):

    curl -X 'POST' \
      'http://localhost:8000/api/v1/chat' \
      -H 'accept: application/json' \
      -H 'Content-Type: application/json' \
      -d '{
      "query": "2025년 10월 15일 원화와 달러의 가치를 비교해서 알려줘"
    }'

6. 요구 LLM 모델

  • exaone3.5:2.4b
  • deepseek-r1:1.5b

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published