Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions backend/apps/chat/models/chat_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -258,3 +258,9 @@ class ExcelData(BaseModel):
axis: list[AxisObj] = []
data: list[dict] = []
name: str = 'Excel'


class McpAssistant(BaseModel):
question: str = Body(description='用户提问')
url: str = Body(description='第三方数据接口')
authorization: str = Body(description='第三方接口凭证')
32 changes: 29 additions & 3 deletions backend/apps/mcp/mcp.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Author: Junjun
# Date: 2025/7/1

import json
from datetime import timedelta

import jwt
Expand All @@ -12,13 +12,13 @@
from sqlmodel import select

from apps.chat.api.chat import create_chat
from apps.chat.models.chat_model import ChatMcp, CreateChat, ChatStart, McpQuestion
from apps.chat.models.chat_model import ChatMcp, CreateChat, ChatStart, McpQuestion, McpAssistant, ChatQuestion
from apps.chat.task.llm import LLMService
from apps.system.crud.user import authenticate
from apps.system.crud.user import get_db_user
from apps.system.models.system_model import UserWsModel
from apps.system.models.user import UserModel
from apps.system.schemas.system_schema import BaseUserDTO
from apps.system.schemas.system_schema import BaseUserDTO, AssistantHeader
from apps.system.schemas.system_schema import UserInfoDTO
from common.core import security
from common.core.config import settings
Expand Down Expand Up @@ -111,3 +111,29 @@ async def mcp_question(session: SessionDep, chat: McpQuestion):
llm_service.init_record()

return StreamingResponse(llm_service.run_task(False), media_type="text/event-stream")


@router.post("/mcp_assistant", operation_id="mcp_assistant")
async def mcp_assistant(session: SessionDep, chat: McpAssistant):
session_user = BaseUserDTO(**{
"id": -1, "account": 'sqlbot-mcp-assistant', "oid": 1, "assistant_id": -1, "password": '', "language": "zh-CN"
})
# session_user: UserModel = get_db_user(session=session, user_id=1)
# session_user.oid = 1
c = create_chat(session, session_user, CreateChat(origin=1), False)

# build assistant param
configuration = {"endpoint": chat.url}
# authorization = [{"key": "x-de-token",
# "value": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1aWQiOjEsIm9pZCI6MSwiZXhwIjoxNzU4NTEyMDA2fQ.3NR-pgnADLdXZtI3dXX5-LuxfGYRvYD9kkr2de7KRP0",
# "target": "header"}]
mcp_assistant_header = AssistantHeader(id=1, name='mcp_assist', domain='', type=1,
configuration=json.dumps(configuration),
certificate=chat.authorization)

# assistant question
mcp_chat = ChatQuestion(chat_id=c.id, question=chat.question)
# ask
llm_service = await LLMService.create(session_user, mcp_chat, mcp_assistant_header)
llm_service.init_record()
return llm_service.run_task(False)