본문으로 건너뛰기

챗봇 구현 위한 컨플루언스 검색 API 연동 가이드

image-20241104-070152.png

이 가이드는 컨플루언스 검색 API와 LaaS API를 연동하여 챗봇이 사용자에게 검색 결과를 제공할 수 있도록 구현하는 방법을 설명합니다. 해당 예제는 라스(LaaS)컨플루언스 검색 API를 활용해 검색 요청을 처리하며, 이를 통해 실시간으로 정확한 정보를 제공하는 챗봇 기능을 구현할 수 있습니다.


왜 LaaS와 외부 API를 결합해야 하는가?


배경 및 목적

  • 제한된 데이터: LaaS의 기본 언어 모델은 사전에 학습된 데이터에 의존하며, 실시간 또는 최신 정보 제공이 어렵습니다.

  • 정확도 향상: 외부 API 연동을 통해 LaaS가 최신 데이터와 실시간 정보에 접근할 수 있습니다.

  • 업무 효율화: 사용자 요청에 따라 외부 API 데이터를 처리하고, 이를 기반으로 LaaS에서 고도화된 응답을 생성할 수 있습니다.


이 가이드는 LaaS에서 제공하는 기본 API를 활용하면서 외부 API 데이터와 통합하여 정보를 가공하고, 챗봇 응답으로 전달하는 과정을 자세히 다룹니다.



구현 개요


  • 컨플루언스 검색 API 호출

    • 사용자가 입력한 검색 키워드(text)를 기반으로 API를 호출합니다.

    • API 호출 시 검색 범위(space, ancestor)를 고정 값으로 설정합니다.

  • LaaS API 활용

    • 검색 API의 응답을 LaaS로 전달하여 최적화된 응답을 생성합니다.

    • LaaS는 사용자 요청과 API 응답 데이터를 결합해 최종 응답을 반환합니다.

  • 구현 필요 요소

    • LaaS API를 호출하는 클라이언트 로직.

    • 컨플루언스 API 호출 및 응답 가공 로직.




API 호출 프로세스 및 상세 설명

1. 사용자 요청 파악 및 초기 처리

사용자 메시지 예시

컨플루언스에서 'RAG' 키워드로 문서를 검색해주세요.

작업 흐름

  1. 사용자 메시지 분석
  • LaaS 모델이 text 파라미터(검색 키워드)를 자동으로 추출합니다.

  • space(스페이스 키)와 ancestor(부모 페이지 ID)는 고정 값으로 설정합니다.

  1. 펑션콜링을 통한 검색 파라미터 생성
  • 펑션콜링 기능을 사용해 필요한 API 파라미터(space, ancestor, text)를 자동 생성합니다.


펑션 정의 및 호출

펑션 정의 예시

{
"functions": [
{
"name": "search_confluence_pages",
"description": "Confluence API를 사용하여 특정 스페이스와 부모 페이지 하위에서 문서를 검색합니다.",
"parameters": {
"type": "object",
"properties": {
"space": {
"type": "string",
"description": "검색할 스페이스 키. 고정값: 'GT'."
},
"ancestor": {
"type": "integer",
"description": "부모 페이지 ID. 고정값: 3263758774."
},
"text": {
"type": "string",
"description": "검색 키워드. 사용자의 입력에서 추출."
},
"type": {
"type": "string",
"description": "검색 대상 타입. 고정값: 'page'.",
"enum": ["page"]
},
"order": {
"type": "string",
"description": "검색 결과 정렬 방식. 고정값: 'lastmodified DESC'."
},
"limit": {
"type": "integer",
"description": "검색 결과 최대 반환 개수. 고정값: 10."
},
"expand": {
"type": "string",
"description": "응답에 확장할 필드. 고정값: 'body.editor'."
}
},
"required": ["space", "ancestor", "text", "type"]
}
}
]
}


펑션콜링 호출 예시

{
"model": "gpt-4o",
"messages": [
{
"role": "system",
"content": "Confluence 검색 API와 연동하여 검색 요청을 처리하세요."
},
{
"role": "user",
"content": "컨플루언스에서 'RAG' 키워드로 문서를 검색해주세요."
}
],
"function_call": {
"name": "search_confluence_pages",
"arguments": {
"space": "GT",
"ancestor": 3263758774,
"text": "RAG",
"type": "page",
"order": "lastmodified DESC",
"limit": 10,
"expand": "body.editor"
}
}
}

작동 방식

  • 사용자가 입력한 메시지에서 text 파라미터만 동적으로 추출됩니다.

  • space, ancestor, type, order, limit, expand는 사전 설정된 고정값으로 자동 적용됩니다.

  • 펑션콜링 결과는 외부 API 호출에 필요한 파라미터로 사용됩니다.



2. 컨플루언스 API 호출

  • 펑션콜링에서 생성된 파라미터를 사용해 컨플루언스 검색 API를 호출합니다.

컨플루언스 API 호출 URL

GET https://wantedlab.atlassian.net/wiki/rest/api/content/search?cql=space=GT AND ancestor=3263758774 AND type=page AND text~"RAG" ORDER BY lastmodified DESC&limit=10&expand=body.editor

API 호출 Python 예제

import requests
from requests.auth import HTTPBasicAuth

url = "https://wantedlab.atlassian.net/wiki/rest/api/content/search"
params = {
"cql": "space=GT AND ancestor=3263758774 AND type=page AND text~'RAG' ORDER BY lastmodified DESC",
"limit": 10,
"expand": "body.editor"
}

auth = HTTPBasicAuth("your_email@domain.com", "your_api_token")

response = requests.get(url, params=params, auth=auth)

if response.status_code == 200:
print("검색 결과:", response.json())
else:
print("API 호출 실패:", response.status_code, response.text)

결과

컨플루언스 API에서 반환된 JSON 데이터는 페이지 ID, 제목, 본문 등의 정보를 포함합니다.




3. LaaS API 호출 및 응답 처리

  • 컨플루언스 API 응답을 LaaS로 전달해 최종 결과를 생성합니다.

LaaS API 호출 예시

{
"model": "gpt-4o",
"messages": [
{
"role": "system",
"content": "Confluence 검색 결과를 요약해 사용자에게 전달하세요."
},
{
"role": "user",
"content": "컨플루언스에서 'RAG' 키워드로 문서를 검색해주세요."
},
{
"role": "function",
"name": "search_confluence_pages",
"content": {
"results": [
{"title": "RAG 개요 문서", "url": "https://wantedlab.atlassian.net/wiki/spaces/GT/pages/12345"},
{"title": "RAG 기술 문서", "url": "https://wantedlab.atlassian.net/wiki/spaces/GT/pages/67890"}
]
}
}
]
}



4. 최종 응답 반환

사용자에게 반환되는 메시지 예시

검색 결과:
1. [RAG 개요 문서](https://wantedlab.atlassian.net/wiki/spaces/GT/pages/12345)
2. [RAG 기술 문서](https://wantedlab.atlassian.net/wiki/spaces/GT/pages/67890)

추가 가이드: 펑션콜링이 중요한 이유


  1. 자동화된 파라미터 생성
  • 펑션콜링을 통해 검색 파라미터를 자동으로 구성하여 사용자의 입력을 효과적으로 처리할 수 있습니다.
  1. 유연한 응답 처리
  • 검색 결과를 유저 메시지로 통합하거나, 필요한 경우 추가 데이터를 요청할 수 있습니다.
  1. 정확한 검색 결과 제공
  • 사전 정의된 검색 범위와 정렬 방식으로 신뢰성을 높이고, 유저 입력만으로 필요한 정보를 정확히 제공할 수 있습니다.

위 과정은 LaaS와 외부 API를 결합하여 보다 신뢰성 있고 효율적인 챗봇 응답을 생성하는 데 도움을 줍니다.



5. 고급 구현 방안

컨플루언스 API와 LaaS의 통합은 기본 검색뿐 아니라, 확장된 기능 구현도 가능합니다. 예를 들어

  1. 멀티 키워드 검색
  • 사용자 요청에 여러 키워드가 포함된 경우, 각각을 OR 조건으로 조합하여 검색합니다.

  • 예: text~"RAG" OR text~"FAQ"

예시 CQL 쿼리

space=GT AND ancestor=3263758774 AND type=page AND (text~"RAG" OR text~"FAQ") ORDER BY lastmodified DESC

  1. 결과 필터링 및 사용자화
  • 검색 결과 중 특정 조건에 맞는 항목만 반환합니다.

  • 예: 마지막 수정일이 최근 7일 이내인 문서만 표시.

예시 CQL 쿼리

space=GT AND ancestor=3263758774 AND type=page AND text~"RAG" AND lastmodified --> startOfDay(-7d)