RAGFlow - 外部使用知识库 (五)
一般情况下应该是在你的页面中或通过 api 调用这个聊天。
一、页面调用 RAGFlow 聊天
1、点击 聊天 -> 嵌入网站

2、将给出代码插入到你的页面即可

3、运行效果如下图
二、api 调用 RAGFlow 聊天
1、调用前准备
A)生成 API KEY
这个 API KEY 很简单,就是只要访问这个 RAGFlow 服务器就要用到这个 key。

B)复制 chat_id
一个 RAGFlow 服务器有多个 chat_id,每个聊天一个 chat_id,你想跟那个聊天对话就复制那个聊天的 chat_id。

C)API 请求地址
地址见上图,我的是 http://172.31.21.75:9222
2、创建一个 python 文件,内容如下
import json
from math import fabs
from tkinter.constants import NO
import requests
BASE_URL = "http://172.31.21.75:9222/api/v1" # 基础 URL
API_KEY = "ragflow-hjZDcyZDM0ODA4NjExZjBhZGVhYWU3MT" # API KEY
CHAT_ID = "fb3f86167c1411f09c45ea6929404c73" # 聊天 ID
# 创建会话
def create_session(session_name):
url = f"{BASE_URL}/chats/{CHAT_ID}/sessions"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
params = {
"name": session_name
}
# print(f"创建会话 (sessions),请求参数: url: {url}, headers: {headers}, params: {params}")
session_id = None
msg = None
try:
response = requests.post(url, headers=headers, json=params)
content = response.json()
code = content['code']
if (code != 0):
print(f"创建会话 (sessions),失败: {content}")
return code, None, None
# print(f"创建会话,成功: {content}")
session_id = content['data']['id']
msg = content['data']['messages']
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"Other error occurred: {err}")
return None, None, None
return code, session_id, msg
# 删除会话
def delete_session(session_id):
url = f"{BASE_URL}/chats/{CHAT_ID}/sessions"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
params = {
"ids": [ session_id ]
}
# print(f"删除会话,请求参数: url: {url}, headers: {headers}, params: {params}")
try:
response = requests.delete(url, headers=headers, json=params)
content = response.json()
code = content['code']
if code != 0:
print(f"批量删除会话失败: {content}")
return code, content.get('message', None)
print(f"删除会话,成功。")
return code, None
except requests.exceptions.RequestException as e:
print(f"请求失败: {e}")
return None, None
# 与聊天助手对话
def converse(session_id, question, stream=True):
url = f"{BASE_URL}/chats/{CHAT_ID}/completions"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
params = {
"session_id": session_id,
"question": question,
"stream": stream
}
# print(f"与聊天助手对话 (completions),请求参数: url: {url}, headers: {headers}, params: {params}")
code = None
answer = None
try:
response = requests.post(url, headers=headers, json=params)
content = response.json()
code = content['code']
if (code != 0):
print(f"与聊天助手对话 (sessions),失败: {content}")
return code, None
# print(f"与聊天助手对话,成功: {content}")
answer = content['data']['answer']
except requests.exceptions.HTTPError as http_err:
print(f"HTTP error occurred: {http_err}")
return response.status_code, None
except Exception as err:
print(f"Other error occurred: {err}")
return None, None
return code, answer
# 聊天
def chat():
subject = input("请输入会话主题,直接回车使用默认主题: ")
if subject == '': # 如果用户没有输入主题,使用默认主题
code, session_id, msg = create_session("New session")
else: # 如果用户输入了主题
code, session_id, msg = create_session(subject)
if code != 0:
print(f"创建会话失败,失败信息: {msg}")
return
print(f"\n聊天机器人已初始化。键入 「exit」 结束对话。\n")
if msg and len(msg) > 0:
print(msg[0].get('content', None))
while True:
user_message = input("You: ")
if user_message.lower() == "exit":
print("Chatbot: 再见!")
break
ret_code, answer = converse(session_id, user_message, False)
if ret_code is not None and ret_code == 0 and answer:
print(f"Chatbot: {answer}")
else:
print("Failed to get a response from the chatbot")
delete_session(session_id)
return
if __name__ == "__main__":
chat()
3、测试如上代码
测试代码如下图,输入 exit 会结束会话,并从服务器上删除刚才的会话。

注意: 需要修改代码中的三个变量 BASE_URL、API_KEY、CHAT_ID
注意:由于 RAGFlow 是比较活跃的开源项目且变化较快,所以本文档内容不一定适用当前版本。具体参见官方 API 文档 https://ragflow.io/docs/dev/http_api_reference

浙公网安备 33010602011771号