RAGFlow - 外部使用知识库 (五)

一般情况下应该是在你的页面中或通过 api 调用这个聊天。

一、页面调用 RAGFlow 聊天

1、点击 聊天 -> 嵌入网站

image

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

image

3、运行效果如下图

image 

二、api 调用 RAGFlow 聊天

1、调用前准备

A)生成 API KEY

这个 API KEY 很简单,就是只要访问这个 RAGFlow 服务器就要用到这个 key。

image

image 

B)复制 chat_id

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

image 

image

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 会结束会话,并从服务器上删除刚才的会话。

image

注意: 需要修改代码中的三个变量 BASE_URL、API_KEY、CHAT_ID

  

 

 

 

注意:由于 RAGFlow 是比较活跃的开源项目且变化较快,所以本文档内容不一定适用当前版本。具体参见官方 API 文档 https://ragflow.io/docs/dev/http_api_reference

posted @ 2025-08-24 08:30  rslai  阅读(183)  评论(0)    收藏  举报