From fb37a87e565fe998becb322ff9d344d3b7aa8e14 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期三, 16 十月 2024 14:40:44 +0800
Subject: [PATCH] 智能体获取会话id接口
---
app/service/ragflow.py | 19 +++++++++
app/api/chat.py | 33 +++++++---------
main.py | 6 +-
app/api/agent.py | 11 +++++
4 files changed, 48 insertions(+), 21 deletions(-)
diff --git a/app/api/agent.py b/app/api/agent.py
index 416db71..2056aec 100644
--- a/app/api/agent.py
+++ b/app/api/agent.py
@@ -1,3 +1,5 @@
+import uuid
+
from fastapi import Depends, APIRouter, Query, HTTPException
from pydantic import BaseModel
from sqlalchemy.orm import Session
@@ -57,3 +59,12 @@
else:
return ResponseList(code=200, msg="Unsupported agent type")
+
+
+@router.get("/get-chat-id/{agent_id}", response_model=Response)
+async def agent_list(agent_id: str, db: Session = Depends(get_db)):
+ agent = db.query(AgentModel).filter(AgentModel.id == agent_id).first()
+ if not agent:
+ return Response(code=404, msg="Agent not found")
+
+ return Response(code=200, msg="", data={"chat_id": uuid.uuid4().hex})
diff --git a/app/api/chat.py b/app/api/chat.py
index d5ab09d..80005f7 100644
--- a/app/api/chat.py
+++ b/app/api/chat.py
@@ -7,15 +7,13 @@
from sqlalchemy.orm import Session
from app.api import get_current_user_websocket
from app.config.config import settings
+from app.models.agent_model import AgentModel, AgentType
from app.models.base_model import get_db
from app.models.user_model import UserModel
from app.service.ragflow import RagflowService
from app.service.token import get_bisheng_token, get_ragflow_token
router = APIRouter()
-
-# 瀛樺偍瀹㈡埛绔� WebSocket 杩炴帴
-client_websockets = {}
# 涓棿灞俉ebSocket 鏈嶅姟鍣紝鎺ユ敹瀹㈡埛绔殑杩炴帴
@@ -28,17 +26,16 @@
await websocket.accept()
print(f"Client {agent_id} connected")
- if agent_id == "0":
- agent_id = settings.bisheng_agent_id
- elif agent_id == "1":
- agent_id = settings.ragflow_agent_id
- chat_id = settings.ragflow_chat_id
+ agent = db.query(AgentModel).filter(AgentModel.id == agent_id).first()
+ if not agent:
+ ret = {"message": "Agent not found", "type": "close"}
+ return websocket.send_json(ret)
+ agent_type = agent.agent_type
+ if chat_id == "" or chat_id == "0":
+ ret = {"message": "Chat ID not found", "type": "close"}
+ return websocket.send_json(ret)
- if chat_id == "0":
- chat_id = uuid.uuid4().hex
-
- client_websockets[chat_id] = websocket
- if agent_id == settings.ragflow_agent_id:
+ if agent_type == AgentType.RAGFLOW:
ragflow_service = RagflowService(settings.ragflow_base_url)
token = get_ragflow_token(db, current_user.id)
try:
@@ -73,10 +70,8 @@
await asyncio.wait(tasks, return_when=asyncio.FIRST_COMPLETED)
except WebSocketDisconnect:
print(f"Client {chat_id} disconnected")
- finally:
- del client_websockets[chat_id]
- else:
+ elif agent_type == AgentType.BISHENG:
token = get_bisheng_token(db, current_user.id)
service_uri = f"{settings.bisheng_websocket_url}/api/v1/assistant/chat/{agent_id}?t=&chat_id={chat_id}"
headers = {'cookie': f"access_token_cookie={token};"}
@@ -133,5 +128,7 @@
except WebSocketDisconnect:
print(f"Client {chat_id} disconnected")
- finally:
- del client_websockets[chat_id]
+ else:
+ ret = {"message": "Agent not found", "type": "close"}
+ return websocket.send_json(ret)
+
diff --git a/app/service/ragflow.py b/app/service/ragflow.py
index 934af1a..7d1e6ae 100644
--- a/app/service/ragflow.py
+++ b/app/service/ragflow.py
@@ -80,3 +80,22 @@
for item in data
]
return result
+
+ async def set_session(self, token: str, dialog_id: str, name: str, chat_id: str, is_new: bool) -> bool:
+ url = f"{self.base_url}/v1/conversation/set?dialog_id={dialog_id}"
+ headers = {
+ "Authorization": token
+ }
+
+ data = {"dialog_id": dialog_id,
+ "name": name,
+ "is_new": is_new,
+ "conversation_id": chat_id,
+ }
+
+ async with httpx.AsyncClient() as client:
+ response = await client.post(url, headers=headers, json=data)
+ if response.status_code != 200:
+ return False
+ return True
+
diff --git a/main.py b/main.py
index d5a8c5d..1578a30 100644
--- a/main.py
+++ b/main.py
@@ -11,9 +11,9 @@
description="",
)
-app.include_router(auth_router, prefix='/auth', tags=["auth"])
-app.include_router(chat_router, prefix='/chat', tags=["chat"])
-app.include_router(agent_router, prefix='/agent', tags=["agent"])
+app.include_router(auth_router, prefix='/api/auth', tags=["auth"])
+app.include_router(chat_router, prefix='/api/chat', tags=["chat"])
+app.include_router(agent_router, prefix='/api/agent', tags=["agent"])
if __name__ == "__main__":
import uvicorn
--
Gitblit v1.8.0