当前位置:首页>python>7python之删除会话接口及客户端连socket发消息

7python之删除会话接口及客户端连socket发消息

  • 2026-08-26 05:38:54
7python之删除会话接口及客户端连socket发消息

写在前面的话

你不爱我。昨天,去翡翠图书馆,下午大宝打来视频,刚接通,看我在翡翠就挂了。一会后,骑自行车来找我了,我住的地方离翡翠图书馆也就几百米,所以,大宝来得很快。大宝刚坐下不到五分钟,说渴了,要喝饮料,这也是他的一惯操作,每次来找我,指定要到旁边的物美超市买点东西。我说,你妈老说我乱花钱,你给你妈说说。大宝给媳妇打电话,得到允许后,我就带他去物美了,买了雪糕与饮料,就回图书馆,给他找了耳机,他就坐我旁边看手机,越看身体越不像样,最后,把脚敲到我座位的把手上,鞋底很脏,蹬着我的衣服。我说,你把脚放下去。他看了我一眼,摇了摇头。我一把把他的脚拍下去,他身体一晃,抖了一下。之后,就坐旁边其它地方了。我看他情绪不对,就过去安慰他,他说,你不爱你。我说,爸爸爱你,但不会宠你,你自己品吧。

[327]-------->底部有张生活照片和昨日花销

【关键词】python、删除会话、websocket、客户端发消息、

一、chat_serve相关

1.删除会话接口

描述:需要写一个删除会话接口,传一个会话id就可以。

开工:

第一步:分析原接口

a.找原接口地址
http://localhost:9222/v1/conversation/rm

注:是post请求,传参数如下:

图7a-1

注:这个接口设计的是一个用户下的多个会话删除,接下来,研究下源码。

b.ragflow源码研究

20241210时间段:2330-2340

源码如下:

@manager.route('/rm', methods=['POST'])
@login_required
def rm():
    conv_ids = request.json["conversation_ids"]
    try:
        for cid in conv_ids:
            exist, conv = ConversationService.get_by_id(cid)
            if not exist:
                return get_data_error_result(retmsg="Conversation not found!")
            tenants = UserTenantService.query(user_id=current_user.id)
            for tenant in tenants:
                if DialogService.query(tenant_id=tenant.tenant_id, id=conv.dialog_id):
                    break
            else:
                return get_json_result(
                    data=False, retmsg=f'Only owner of conversation authorized for this operation.',
                    retcode=RetCode.OPERATING_ERROR)
            ConversationService.delete_by_id(cid)
        return get_json_result(data=True)
    except Exception as e:
        return server_error_response(e)

注:不用看直接干过去调一下。

c.chat_sev调代码

20241210时间段:2332-2340

对上述删除会话代码,进行调试,修改代码如下:

图7a-2

注:这个测试还可以,接下来代码上线。

第二步:代码上线

代码上线,测试一下,还可以,写下文档。接下来,就是连socket发消息了。

2.客户端连websocket发消息

描述:需要起一个客户端,通过websocket向服务端发消息,服务端来接收消息。

开工:

第一步:分析原接口

a.找原接口地址

20241211时间段:1016-1020

20241211时间段:1020-1040

http://localhost:9222/v1/conversation/completion

传参:

{"conversation_id":"39a7672db76711ef8bdbf020ff63f4c4","messages":[{"content":"你好! 我是专业宠物医生,有什么可以帮到你的吗?","role":"assistant"},{"id":"6b616117-c3cc-4788-a451-64c24d161418","content":"我家狗感冒了","role":"user","doc_ids":[]}]}

注:这个要把聊天记录都传过去。这个接口是流式返回的,

截图如下:

图7a-3

注:先让客户端发个消息,服务端能接收。

b.客户端发消息

20241211时间段:1118-1120

20241211时间段:1120-1140

实现了,先写个接口,如下:

代码如下:

@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
    await websocket.accept()
    try:
        while True:
            data = await websocket.receive_text()
            print(data)
            await websocket.send_text(f"Message text was: {data}")
    except WebSocketDisconnect:
        print("Client disconnected")

截图如下:

图7a-4

注:这个是服务端代码,客户端代码如下:

from fastapi import FastAPI, WebSocket, WebSocketDisconnect
from fastapi.responses import HTMLResponse

app = FastAPI()

html = """
<!DOCTYPE html>
<html>
    <head>
        <title>WebSocket Test</title>
    </head>
    <body>
        <h1>WebSocket Test</h1>
        <form action="" onsubmit="sendMessage(event)">
            <input type="text" id="messageText" autocomplete="off"/>
            <button>Send</button>
        </form>
        <ul id='messages'>
        </ul>
        <script>
            var ws = new WebSocket("ws://localhost:6789/ws");
            ws.onmessage = function(event) {
                var messages = document.getElementById('messages')
                var message = document.createElement('li')
                var content = document.createTextNode(event.data)
                message.appendChild(content)
                messages.appendChild(message)
            };
            function sendMessage(event) {
                var input = document.getElementById("messageText")
                ws.send(input.value)
                input.value = ''
                event.preventDefault()
            }
        </script>
    </body>
</html>
"""

@app.get("/")
async def get():
    return HTMLResponse(html)

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8082)

截图如下:

图7a-5

注:把客户端main.py跑起来,服务端跑起来,这样,在浏览器中就可以访问了,如下:

图7a-6

注:就是说客户端给服务端发的消息,服务端能收到,并能打印出来,之后,服务端把消息返回客户端,客户端也能收到,并在浏览器上展示出来。

接下来,高能时刻来了,客户端向服务端发送json串,服务端请求接口,并流式返回数据。

第二步:客户端向服务端发json数据

发的数据为:

{"conversation_id":"39a7672db76711ef8bdbf020ff63f4c4","messages":[{"content":"你好! 我是专业宠物医生,有什么可以帮到你的吗?","role":"assistant"},{"id":"6b616117-c3cc-4788-a451-64c24d161418","content":"我家狗感冒了","role":"user","doc_ids":[]}]}

注:现在不明白,它这个【我家狗感冒了】,前面这个id是怎么来的。看下代码。

a.id如何来

20241211时间段:1219-1240

研究发现是前端自己搞的。先不管,接下来,研究前端请求的接口。

b.客户端发json数据

20241211时间段:1456-1500  1500-1520

修改客户端代码如下:

图7a-7

注:服务端接收数据如下:

图7a-8

注:接收之后,转化为json对象,这样就可以请求接口了,接下来,处理接口方法流式返回数据。

c.客户端流式接收数据

服务端获取数据,这个要调ragflow封装的方法,接下来,看下怎么调封装的方法,本地先调下试试。

http://localhost:9222/v1/api/conversation/39a7672db76711ef8bdbf020ff63f4c4

测试结果如下:

图7a-9

注:这说明是可以调通的,只是token失效了。更新下代码。接下来,调通这个接口。

d.调通外连接口-40
20241211时间段:2114-2120
20241211时间段:2120-2140
20241211时间段:2140-2200

看下,token为什么失效,追踪下代码,如下:

图7a-10

注:经测试就是这个方法,现在报错,说是【Conversatio1111n not found!】,但数据库是有这个东东的,追踪下是怎么回事,是不是数据库搞错了。

e.追查数据库
20241211时间段:2154-2200

先追踪下sql,如下:

SELECT `t1`.`id`, `t1`.`create_time`, `t1`.`create_date`, `t1`.`update_time`, `t1`.`update_date`, `t1`.`dialog_id`, `t1`.`user_id`, `t1`.`message`, `t1`.`reference`, `t1`.`tokens`, `t1`.`source`, `t1`.`duration`, `t1`.`round`, `t1`.`thumb_up` 
FROM `api_4_conversation` AS `t1` 
WHERE (`t1`.`id` = '39a7672db76711ef8bdbf020ff63f4c4')

注:这个可以看出是一个新的表。

二、生活照片

拍摄于‎2025‎年‎8‎月‎3‎日,‏‎18:05:02,带孩子去海淀公园看水雾,当时,大宝七岁八个月,二宝两岁十个月。下午五点半,从图书馆回来的路上,我给大宝说,爸爸指定是爱你和你弟的。但你过了年就九岁了,你随便把脚穿鞋踩我身上,你觉得的这样对吗?你弟来说,别说用脚踩我,就是拉我身上,我没二话,为什么,因为你弟才两三岁,不懂事,你虚岁都十来岁了,你还不懂事吗,我如果不管你,由你这样发展下去,就这样宠着你,你哪天会不会说,爸,我有一口痰,我不想吐地上,我想吐你脸上;爸,我有尿,我不想去厕所,我想尿在餐桌上;你觉得的那样行吗?大宝说,我也没有尿桌子上啊?我说,我只是打个比方,如果不对你进行管教,你可能越来越放肆,做出现在看来不可思议的事。所以,父母指定爱你,把也会管你,就这样,你慢慢理解吧。

图7b-1

三、昨日花销(三级)

昨日花销截图如下:

图7c-1

《本文完》

最新文章

随机文章