comments채팅 API 사용

보안

로그인

  • 채팅 API에 사용할 JWT (access token) 을 얻기 위해 로그인 합니다.

import requests

genos_url = 'GenOS 주소'

url = f"{genos_url}/app/api/chat"
body = {
    "user_id": "genos_user_01",
    "password": "<PASSWD>"
}
res = requests.post(f"{url}/auth/login",json=body)
print(res.json())
  • 정상 출력은 아래와 같습니다.

{
    "code": 0,
    "errMsg": "success",
    "data": {
        "access_token": "<JWT 1>",
        "refresh_token": "<JWT 2>",
        "user": {
            "id": 1,
            "user_id": "genos_user_01",
            "name": "GenOS 사용자  01",
            "email": "genos_user_01@mnc.ai",
            "image": "string",
            "group": null,
            "reset_required": null,
            "consent_date": null,
            "consent_required": false,
            "last_login_time": "2025-02-18T14:25:00",
            "is_active": true,
            "reg_date": "2025-01-03T14:24:58",
            "mod_date": "2025-02-18T14:25:00",
            "group_id": null,
            "group_name": null
        },
        "current_login_ip": "123.123.123.123",
        "last_login_ip": "192.168.74.172",
        "last_login_date": "2025-02-18 14:25:00"
    }
}
  • access_token, refresh token의 값을 저장합니다.

(Opt.) Access 토큰 재발급

  • Access 토큰 만료 시, 모든 요청에서 405 Unauthorized 에러가 발생합니다.

  • refresh token을 갖고 있다면, access token의 재발급을 요청할 수 있습니다.

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

채팅

  • 사용할 채팅 어플리케이션의 endpoint (jlig_i3hi_i743 형식) 가 필요합니다.

정보 조회

  • 해당 채팅의 주요 정보를 조회합니다.

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

  • chat_id, workflow_id의 값을 저장합니다.

기본 채팅요청

  • 채팅 응답을 요청합니다.

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

멀티 턴 대화

  • 대화 이력을 기반으로 대화하기 위해서는, 같은 세션에 있다는 정보를 알려주어야 합니다.

  • 따라서 새로고침 시나 세션 재시작 등 하나로 묶어줄 대화에서 유지할 무작위 uuid4 값을 생성하고 이를 이용하면 히스토리 기반 대화가 가능합니다.

첫번째 턴

  • body의 chatId는 Flowise에 전달하기 위해서 사용되며, headers의 x-genos-session-id 는 GenOS의로깅을 위해 사용합니다.

  • 원활한 로깅 및 피드백 기능을 위해 매 채팅 요청마다 uuid4를 생성하여 x-genos-trace-id 헤더에 전달합니다.

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

두번째 턴

  • 이전 대화 기록을 바탕으로 질의합니다.

  • session_id는 유지하며, trace id는 새로 생성합니다.

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

(Advanced) 토큰 별 출력

  • LLM 추론은 시간이 많이 걸리기 때문에, 한번에 응답을 받지 않고 토큰 별 응답을 받을 수 있습니다.

  • websocket 통신을 기반으로 하는 socket.io를 이용합니다.

워크플로우에 socket.io 연결

  • python-socketio 라이브러리가 필요합니다.

  • sid를 body에 포함하면, workflow에서 해당 sid를 가진 room에만 socket.io "token" 메시지를 emit하여 동시 요청에도 별개의 응답을 받을 수 있습니다.

  • 비동기를 지원하는 예시 코드로 작성되었습니다.

  • 정상 출력은 위와 동일합니다.

피드백

  • 채팅 요청 시 사용한 trace_id를 이용하여 피드백을 추가할 수 있습니다.

  • 부정 피드백의 경우, 채팅 정보 조회 시 얻은 피드백 타입에 따라 사양이 달라집니다.

긍정 피드백 · 삭제

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

부정 피드백

주관식

  • 채팅 정보 조회 시 feedback_type이 FILL_IN 이면 주관식 피드백으로 지정된 채팅입니다.

  • 정상 출력은 위와 동일합니다.

객관식

  • 채팅 정보 조회 시 feedback_type이 CHOICE 이면 객관식 피드백으로 지정된 채팅입니다.

  • 채팅 정보 조회 시 얻을 수 있는 기타 피드백 관련 정보는 아래와 같습니다.

    • feedback_questions: list[str], 객관식 피드백 종류

    • allow_other_feedback: bool, 정해진 객관식 피드백 외에 다른 의견으로 피드백을 추가할 수 있는지 여부

  • 요청 API

    • messages에서 question에는 얻은 채팅 정보 조회 시 얻은 feedback_questions의 값을 그대로 넣고, allow_other_feedback이 true이면 "기타" 를 추가합니다.

    • is_checked가 실제로 사용자가 해당 피드백을 체크했는지에 대한 여부입니다.

    • comment는 is_checked가 true일 때만 값이 유효하며, 사용자가 부가적으로 추가한 의견입니다.

  • 정상 출력은 위와 동일합니다.

Was this helpful?