채팅 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?