[Question]: chat API Keeps Returning Error Message
Describe your problem
We run RAGFlow v0.9.0 with docker on Linux. Everything runs OK with the WebUI, but when we switch to the APIs we keep getting the following response:
{'data': None, 'retcode': 101, 'retmsg': 'required argument are missing: conversation_id, messages; '}
Here's how we set up the conversation:
def start_conversation(user_id='znj'):
url = base_url + 'api/new_conversation'
param = {
'user_id': user_id
}
response = requests.get(url, params=param, headers=headers)
conversation_id = None
msg = None
if response.status_code == 200:
content = response.json()
conversation_id = content['data']['id']
msg = content['data']['message'] # content role
else:
print(f"Request failed with status code: {response.status_code}")
return response.status_code, conversation_id, msg
def get_answer(conversation_id, msg, doc_ids, quote=False, stream=True):
url = base_url + 'api/completion'
params = {
"conversation_id": conversation_id, # 替代为你自己的对话ID
"messages": [{"role": "user", "content": msg}], # 替代为你的消息内容
"quote": False,
"stream": True,
"doc_ids": doc_ids # 如果有文档ID则替代为相应的值,否则删除或留空
}
headers_json = {"Content-Type": "application/json",
'Authorization': 'Bearer ' + api_key}
try:
response = requests.post(url=url, headers=headers_json, data=params)
print(response.json())
response.raise_for_status() # Raises an HTTPError for bad responses (4xx and 5xx)
except requests.exceptions.HTTPError as http_err:
print(f"HTTP error occurred: {http_err}")
return response.status_code, None, None
except Exception as err:
print(f"An error occurred: {err}")
return None, None, None
try:
content = response.json()
data = content.get('data', None)
retcode = content.get('retcode', None)
retmsg = content.get('retmsg', None)
if data:
answer = data.get('answer', None)
else:
answer = None
except ValueError:
print("Failed to parse JSON response")
return response.status_code, None, None
return response.status_code, answer, retmsg
def chat(document_id):
status_code, conversation_id, msg = start_conversation()
print(conversation_id)
# conversation_id = input("Enter conversation ID: ")
doc_ids = document_id
print("Chatbot initialized. Type 'exit' to end the conversation.")
while True:
user_message = input("You: ")
if user_message.lower() == 'exit':
print("Ending the conversation.")
break
status_code, answer, retmsg = get_answer(conversation_id, user_message, doc_ids)
if status_code is not None and status_code == 200 and answer:
print(f"Chatbot: {answer}")
elif retmsg:
print(f"Failed to get a response from the chatbot. Error message: {retmsg}")
else:
print("Failed to get a response from the chatbot.")
We checked the conversation_id returned from start_conversation() and it was not empty. We are really confused why the server keeps returning the error messages, as everything seems to be in place.
I suggest to use dev version of docker image and debug it with postman at first place.
I also encountered this same issue, and it’s present in the online demo version as well. And the docker image version is dev
Describe your problem
We run RAGFlow v0.9.0 with docker on Linux. Everything runs OK with the WebUI, but when we switch to the APIs we keep getting the following response:
{'data': None, 'retcode': 101, 'retmsg': 'required argument are missing: conversation_id, messages; '}
Here's how we set up the conversation:
def start_conversation(user_id='znj'): url = base_url + 'api/new_conversation' param = { 'user_id': user_id } response = requests.get(url, params=param, headers=headers) conversation_id = None msg = None if response.status_code == 200: content = response.json() conversation_id = content['data']['id'] msg = content['data']['message'] # content role else: print(f"Request failed with status code: {response.status_code}") return response.status_code, conversation_id, msg def get_answer(conversation_id, msg, doc_ids, quote=False, stream=True): url = base_url + 'api/completion' params = { "conversation_id": conversation_id, # 替代为你自己的对话ID "messages": [{"role": "user", "content": msg}], # 替代为你的消息内容 "quote": False, "stream": True, "doc_ids": doc_ids # 如果有文档ID则替代为相应的值,否则删除或留空 } headers_json = {"Content-Type": "application/json", 'Authorization': 'Bearer ' + api_key} try: response = requests.post(url=url, headers=headers_json, data=params) print(response.json()) response.raise_for_status() # Raises an HTTPError for bad responses (4xx and 5xx) except requests.exceptions.HTTPError as http_err: print(f"HTTP error occurred: {http_err}") return response.status_code, None, None except Exception as err: print(f"An error occurred: {err}") return None, None, None try: content = response.json() data = content.get('data', None) retcode = content.get('retcode', None) retmsg = content.get('retmsg', None) if data: answer = data.get('answer', None) else: answer = None except ValueError: print("Failed to parse JSON response") return response.status_code, None, None return response.status_code, answer, retmsg def chat(document_id): status_code, conversation_id, msg = start_conversation() print(conversation_id) # conversation_id = input("Enter conversation ID: ") doc_ids = document_id print("Chatbot initialized. Type 'exit' to end the conversation.") while True: user_message = input("You: ") if user_message.lower() == 'exit': print("Ending the conversation.") break status_code, answer, retmsg = get_answer(conversation_id, user_message, doc_ids) if status_code is not None and status_code == 200 and answer: print(f"Chatbot: {answer}") elif retmsg: print(f"Failed to get a response from the chatbot. Error message: {retmsg}") else: print("Failed to get a response from the chatbot.")We checked the conversation_id returned from start_conversation() and it was not empty. We are really confused why the server keeps returning the error messages, as everything seems to be in place.
you can try response = requests.post(url=url, headers=headers_json, data=json.dumps(params))