워크플로우 API 사용

인증키 입력

import requests
import re
import json

workflow_id = 251
bearer_token = 'GenOS에서 발급한 인증키'
genos_url = 'GenOS 주소'

url = f"{genos_url}/api/gateway/workflow/{workflow_id}"
headers = dict(Authorization=f"Bearer {bearer_token}")

res = requests.get(f"{url}/healthcheck", headers=headers)
print(res.json())
  • 인증키 입력 후 API 호출 가능 여부확인을 위해 healthcheck 호출 진행하였습니다.

  • 정상 출력은 아래와 같습니다.

{'status': 'ok'}

인증키(bearer_token) 생성 참고

  • 에이전트 > 워크플로우 > 워크플로우 상세> 인증 키 탭에서 인증 키 생성 버튼을 클릭합니다.

  • 인증 키 생성

    • 허용 IP: 키가 작동 가능한 IP를 입력 후 + 버튼을 클릭하여 추가합니다.

    • 만료 일자: 인증 키의 유효 기간 종료일시를 선택합니다.

    • 분당 사용 한도: 해당 키를 통한 분당 사용 한도를 입력합니다.

    • 사용자: 사용자를 선택합니다.

    • 메모: 사용 목적, 제약 조건 등 해당 키에 대한 메모를 입력합니다.

워크플로우 API 호출

body = {
    'question': '1 + 1은?'
}

res = requests.post(f'{url}/run/v2', json=body, headers=headers)
print(res.json())
  • API 호출 후 예상되는 정상 출력은 아래와 같습니다.

{
    'code': 0,
    'errMsg': 'success',
    'data': {
        'question': '1 + 1은?',
        'text': '1과 1을 더하면 2가 됩니다.',
        'sourceDocuments': [...], // Optional
        'chatId': '131a7da2-1ebf-41ec-bafe-6aed3be5f08c',
        'chatMessageId': '212571bd-43d1-4dd0-b81d-0bcd4c0a050b',
        'sessionId': '131a7da2-1ebf-41ec-bafe-6aed3be5f08c',
    }
}

스트리밍 요청

  • 토큰별로 응답을 받고 싶을 경우 아래와 같이 stream=True를 body와 옵션에 추가합니다.

  • 토큰별 응답은 token: 으로 시작하며, 최종 결과는 result: 로 시작합니다.

body = {
    'question': '3 + 3은?',
    "stream": True
}
res = requests.post(f'{url}/run/v2', json=body, headers=headers, stream=True)

result = None
for line in res.iter_lines():
    if line:
        data = line.decode('utf-8')
        if token := re.search(r'^token: (.*)$', data, flags=re.DOTALL):
            print(token.group(1), end='', flush=True)
        elif result := re.search(r'^result: (.*)$', data, flags=re.DOTALL):
            result = json.loads(result.group(1))

print('='*20)
print('최종 출력:')
print(result)
  • 예상되는 정상 출력은 아래와 같습니다.

3 + 3 은 6 입니다.
====================
최종 출력:
{
    'question': '3 + 3은?',
    'text': '3 + 3 은 6 입니다.',
    'sourceDocuments': [...], // Optional
    'chatId': '7db9f59b-b67e-454a-bf9e-e1b3f2e00ac6',
    'chatMessageId': '9aa04675-8422-4e53-bca3-c1135e3c6949',
    'sessionId': '7db9f59b-b67e-454a-bf9e-e1b3f2e00ac6'
}

부가 기능

멀티턴 대화

  • 멀티턴 대화 (히스토리 기반 응답)를 활성화하려면 요청 시 uuid4를 포함합니다.

session_id = '02f4bbfb-5624-436f-9144-2e2dfda7253d'

body['chatId'] = session_id
headers['x-genos-session-id'] = session_id
  • session_id는 워크플로우 API를 호출한 뒤, 이어서 진행할 수 있습니다. (참고)

body = {
    'question': '1 + 1은?'
}
res = requests.post(f'{url}/run/v2', json=body, headers=headers)
session_id = res.json()['data']['sessionId']

next_body = {
    'question': '영어로 다시 대답해줘.',
    'chatId': session_id
}
headers['x-genos-session-id'] = session_id

Trace Id

  • Trace Id를 활성화하려면 요청 시 uuid4를 포함합니다. Trace Id와 관련된 내용은 멀티 턴 대화 API 호출 문서에서 확인할 수 있습니다.

  • 같은 Trace ID를 가진 요청은 GenOS의 이용 로그 페이지에서 묶여서 표시됩니다.

headers['x-genos-trace-id'] = 'b35aec2c-d390-4ce2-9cb1-f7658be37d74'

사용자 정보

  • GenOS의 사용자 정보를 이용 로그 에서 확인하려면 user_id를 포함합니다.

  • 해당 정보는 GenOS에 로그인 요청을 보내거나 JWT 토큰을 검증하여 얻을 수 있습니다.

headers['x-genos-user-id'] = 653

Last updated

Was this helpful?