From 964a0e98938dbbfb394c4e179959d98a9d2a703d Mon Sep 17 00:00:00 2001 From: zxstty Date: Mon, 11 Aug 2025 19:20:14 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=87=8D=E7=94=9F?= =?UTF-8?q?=E6=88=90=E5=8F=82=E6=95=B0=E7=9A=84bug&=E5=AE=8C=E5=96=84?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E9=99=90=E6=B5=81=E7=9A=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/constants.py | 2 +- apps/routers/chat.py | 26 ++++++++--------- apps/routers/record.py | 1 + apps/routers/user.py | 8 +++--- apps/scheduler/executor/agent.py | 3 +- apps/scheduler/mcp_agent/host.py | 2 ++ apps/scheduler/mcp_agent/prompt.py | 11 +++++-- apps/scheduler/scheduler/scheduler.py | 8 +++--- apps/schemas/enum_var.py | 2 +- apps/schemas/record.py | 1 + apps/schemas/task.py | 1 + apps/services/activity.py | 41 ++++++++++++++------------- apps/services/task.py | 2 ++ openapi.json | 1 - 14 files changed, 61 insertions(+), 48 deletions(-) delete mode 100644 openapi.json diff --git a/apps/constants.py b/apps/constants.py index 710060b3..20cb79b5 100644 --- a/apps/constants.py +++ b/apps/constants.py @@ -11,7 +11,7 @@ from apps.common.config import Config # 新对话默认标题 NEW_CHAT = "新对话" # 滑动窗口限流 默认窗口期 -SLIDE_WINDOW_TIME = 600 +SLIDE_WINDOW_TIME = 15 # OIDC 访问Token 过期时间(分钟) OIDC_ACCESS_TOKEN_EXPIRE_TIME = 30 # OIDC 刷新Token 过期时间(分钟) diff --git a/apps/routers/chat.py b/apps/routers/chat.py index 68a5b4af..75b82921 100644 --- a/apps/routers/chat.py +++ b/apps/routers/chat.py @@ -7,7 +7,7 @@ import uuid from collections.abc import AsyncGenerator from typing import Annotated -from fastapi import APIRouter, Depends, HTTPException, status +from fastapi import APIRouter, Depends, HTTPException, status, Query from fastapi.responses import JSONResponse, StreamingResponse from apps.common.queue import MessageQueue @@ -71,24 +71,23 @@ async def init_task(post_body: RequestData, user_sub: str, session_id: str) -> T async def chat_generator(post_body: RequestData, user_sub: str, session_id: str) -> AsyncGenerator[str, None]: """进行实际问答,并从MQ中获取消息""" try: - await Activity.set_active(user_sub) + active_id = await Activity.set_active(user_sub) # 敏感词检查 if await WordsCheck().check(post_body.question) != 1: yield "data: [SENSITIVE]\n\n" logger.info("[Chat] 问题包含敏感词!") - await Activity.remove_active(user_sub) + await Activity.remove_active(active_id) return task = await init_task(post_body, user_sub, session_id) - + task.ids.active_id = active_id # 创建queue;由Scheduler进行关闭 queue = MessageQueue() await queue.init() # 在单独Task中运行Scheduler,拉齐queue.get的时机 scheduler = Scheduler(task, queue, post_body) - logger.info(f"[Chat] 用户是否活跃: {await Activity.is_active(user_sub)}") scheduler_task = asyncio.create_task(scheduler.run()) # 处理每一条消息 @@ -105,14 +104,14 @@ async def chat_generator(post_body: RequestData, user_sub: str, session_id: str) if task.state.flow_status == FlowStatus.ERROR: logger.error("[Chat] 生成答案失败") yield "data: [ERROR]\n\n" - await Activity.remove_active(user_sub) + await Activity.remove_active(active_id) return # 对结果进行敏感词检查 if await WordsCheck().check(task.runtime.answer) != 1: yield "data: [SENSITIVE]\n\n" logger.info("[Chat] 答案包含敏感词!") - await Activity.remove_active(user_sub) + await Activity.remove_active(active_id) return # 创建新Record,存入数据库 @@ -132,7 +131,7 @@ async def chat_generator(post_body: RequestData, user_sub: str, session_id: str) yield "data: [ERROR]\n\n" finally: - await Activity.remove_active(user_sub) + await Activity.remove_active(active_id) @router.post("/chat") @@ -148,10 +147,6 @@ async def chat( await UserBlacklistManager.change_blacklisted_users(user_sub, -10) raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="question is blacklisted") - # # 限流检查 - # if await Activity.is_active(user_sub): - # raise HTTPException(status_code=status.HTTP_429_TOO_MANY_REQUESTS, detail="Too many requests") - res = chat_generator(post_body, user_sub, session_id) return StreamingResponse( content=res, @@ -163,9 +158,12 @@ async def chat( @router.post("/stop", response_model=ResponseData) -async def stop_generation(user_sub: Annotated[str, Depends(get_user)]): # noqa: ANN201 +async def stop_generation(user_sub: Annotated[str, Depends(get_user)], + task_id: Annotated[str, Query(..., alias="taskId")] = "") -> JSONResponse: """停止生成""" - await Activity.remove_active(user_sub) + task = await TaskManager.get_task_by_task_id(task_id) + if task: + await Activity.remove_active(task.activity_id) return JSONResponse( status_code=status.HTTP_200_OK, content=ResponseData( diff --git a/apps/routers/record.py b/apps/routers/record.py index 8d0105ff..ed994f6f 100644 --- a/apps/routers/record.py +++ b/apps/routers/record.py @@ -100,6 +100,7 @@ async def get_record(conversation_id: str, user_sub: Annotated[str, Depends(get_ stepStatus=flow_step.step_status, input=flow_step.input_data, output=flow_step.output_data, + exData=flow_step.ex_data ), ) diff --git a/apps/routers/user.py b/apps/routers/user.py index 0a2995dd..3bc1e06c 100644 --- a/apps/routers/user.py +++ b/apps/routers/user.py @@ -59,10 +59,10 @@ async def update_user_info( result = await UserManager.update_userinfo_by_user_sub(user_sub, data) if not result: return JSONResponse( - status_code=status.HTTP_200_OK, - content={"code": status.HTTP_200_OK, "message": "用户信息更新成功"}, + status_code=status.HTTP_404_NOT_FOUND, + content={"code": status.HTTP_404_NOT_FOUND, "message": "用户信息更新失败"}, ) return JSONResponse( - status_code=status.HTTP_404_NOT_FOUND, - content={"code": status.HTTP_404_NOT_FOUND, "message": "用户信息更新失败"}, + status_code=status.HTTP_200_OK, + content={"code": status.HTTP_200_OK, "message": "用户信息更新成功"}, ) diff --git a/apps/scheduler/executor/agent.py b/apps/scheduler/executor/agent.py index 60394bd7..5c5bcda2 100644 --- a/apps/scheduler/executor/agent.py +++ b/apps/scheduler/executor/agent.py @@ -150,7 +150,8 @@ class MCPAgentExecutor(BaseExecutor): params_description = "" tool_id = self.task.runtime.temporary_plans.plans[self.task.state.step_index].tool mcp_tool = self.tools[tool_id] - self.task.state.current_input = await MCPHost._fill_params(mcp_tool, self.task.state.current_input, self.task.state.error_message, params, params_description) + step = self.task.runtime.temporary_plans.plans[self.task.state.step_index] + self.task.state.current_input = await MCPHost._fill_params(mcp_tool, step.instruction, self.task.state.current_input, self.task.state.error_message, params, params_description) async def reset_step_to_index(self, start_index: int) -> None: """重置步骤到开始""" diff --git a/apps/scheduler/mcp_agent/host.py b/apps/scheduler/mcp_agent/host.py index 85d992c8..e414e17f 100644 --- a/apps/scheduler/mcp_agent/host.py +++ b/apps/scheduler/mcp_agent/host.py @@ -69,12 +69,14 @@ class MCPHost: return await json_generator.generate() async def _fill_params(mcp_tool: MCPTool, + goal: str, current_input: dict[str, Any], error_message: str = "", params: dict[str, Any] = {}, params_description: str = "") -> dict[str, Any]: llm_query = "请生成修复之后的工具参数" prompt = _env.from_string(REPAIR_PARAMS).render( tool_name=mcp_tool.name, + gaol=goal, tool_description=mcp_tool.description, input_schema=mcp_tool.input_schema, current_input=current_input, diff --git a/apps/scheduler/mcp_agent/prompt.py b/apps/scheduler/mcp_agent/prompt.py index 365179f6..469ad2f2 100644 --- a/apps/scheduler/mcp_agent/prompt.py +++ b/apps/scheduler/mcp_agent/prompt.py @@ -768,14 +768,19 @@ GET_MISSING_PARAMS = dedent(r""" ) REPAIR_PARAMS = dedent(r""" 你是一个工具参数修复器。 - 你的任务是根据当前的工具信息、工具入参的schema、工具当前的入参、工具的报错、补充的参数和补充的参数描述,修复当前工具的入参。 - + 你的任务是根据当前的工具信息、目标、工具入参的schema、工具当前的入参、工具的报错、补充的参数和补充的参数描述,修复当前工具的入参。 + + 注意: + 1.最终修复的参数要符合目标和工具入参的schema。 + # 样例 # 工具信息 mysql_analyzer 分析MySQL数据库性能 + # 目标 + 我要连接MySQL数据库,分析性能瓶颈,并调优。 # 工具入参的schema { "type": "object", @@ -829,6 +834,8 @@ REPAIR_PARAMS = dedent(r""" {{tool_name}} {{tool_description}} + # 目标 + {{goal}} # 工具入参scheme {{input_schema}} # 工具入参 diff --git a/apps/scheduler/scheduler/scheduler.py b/apps/scheduler/scheduler/scheduler.py index a5e14b7f..b524d249 100644 --- a/apps/scheduler/scheduler/scheduler.py +++ b/apps/scheduler/scheduler/scheduler.py @@ -48,16 +48,16 @@ class Scheduler: self.queue = queue self.post_body = post_body - async def _monitor_activity(self, kill_event, user_sub): + async def _monitor_activity(self, kill_event): """监控用户活动状态,不活跃时终止工作流""" try: check_interval = 0.5 # 每0.5秒检查一次 while not kill_event.is_set(): # 检查用户活动状态 - is_active = await Activity.is_active(user_sub) + is_active = await Activity.is_active(self.task.ids.active_id) if not is_active: - logger.warning("[Scheduler] 用户 %s 不活跃,终止工作流", user_sub) + logger.warning("[Scheduler] 用户 %s 不活跃,终止工作流", self.task.ids.user_sub) kill_event.set() break @@ -125,7 +125,7 @@ class Scheduler: logger.info("[Scheduler] 开始执行") # 创建用于通信的事件 kill_event = asyncio.Event() - monitor = asyncio.create_task(self._monitor_activity(kill_event, self.task.ids.user_sub)) + monitor = asyncio.create_task(self._monitor_activity(kill_event)) rag_method = True if self.post_body.app and self.post_body.app.app_id: rag_method = False diff --git a/apps/schemas/enum_var.py b/apps/schemas/enum_var.py index 3bcabd57..3ae7c425 100644 --- a/apps/schemas/enum_var.py +++ b/apps/schemas/enum_var.py @@ -49,7 +49,7 @@ class EventType(str, Enum): """事件类型""" HEARTBEAT = "heartbeat" - INIT = "init", + INIT = "init" TEXT_ADD = "text.add" GRAPH = "graph" DOCUMENT_ADD = "document.add" diff --git a/apps/schemas/record.py b/apps/schemas/record.py index dbc06b10..b6b70dd6 100644 --- a/apps/schemas/record.py +++ b/apps/schemas/record.py @@ -36,6 +36,7 @@ class RecordFlowStep(BaseModel): step_status: StepStatus = Field(alias="stepStatus") input: dict[str, Any] output: dict[str, Any] + ex_data: dict[str, Any] | None = Field(default=None, alias="exData") class RecordFlow(BaseModel): diff --git a/apps/schemas/task.py b/apps/schemas/task.py index 197f439d..9b9a2543 100644 --- a/apps/schemas/task.py +++ b/apps/schemas/task.py @@ -62,6 +62,7 @@ class TaskIds(BaseModel): conversation_id: str = Field(description="对话ID") record_id: str = Field(description="记录ID", default_factory=lambda: str(uuid.uuid4())) user_sub: str = Field(description="用户ID") + active_id: str = Field(description="活动ID", default_factory=lambda: str(uuid.uuid4())) class TaskTokens(BaseModel): diff --git a/apps/services/activity.py b/apps/services/activity.py index df322cc8..7ba20cbb 100644 --- a/apps/services/activity.py +++ b/apps/services/activity.py @@ -12,10 +12,10 @@ logger = logging.getLogger(__name__) class Activity: - """用户活动控制,限制单用户同一时间只能提问一个问题""" + """用户活动控制,限制单用户同一时间只能有SLIDE_WINDOW_QUESTION_COUNT个请求""" @staticmethod - async def is_active(user_sub: str) -> bool: + async def is_active(active_id: str) -> bool: """ 判断当前用户是否正在提问(占用GPU资源) @@ -25,42 +25,43 @@ class Activity: # 检查用户是否正在提问 active = await MongoDB().get_collection("activity").find_one( - {"user_sub": user_sub}, + {"_id": active_id}, ) return bool(active) @staticmethod - async def set_active(user_sub: str) -> None: + async def set_active(user_sub: str) -> str: """设置用户的活跃标识""" time = round(datetime.now(UTC).timestamp(), 3) # 设置用户活跃状态 collection = MongoDB().get_collection("activity") - active = await collection.find_one({"user_sub": user_sub}) - if active: - err = "用户正在提问" + # 查看用户活跃标识是否在滑动窗口内 + + if await collection.count_documents({"user_sub": user_sub, "timestamp": {"$gt": time - SLIDE_WINDOW_TIME}}) >= SLIDE_WINDOW_QUESTION_COUNT: + err = "[Activity] 用户在滑动窗口内提问次数超过限制,请稍后再试。" raise ActivityError(err) + await collection.delete_many( + {"user_sub": user_sub, "timestamp": {"$lte": time - SLIDE_WINDOW_TIME}}, + ) + # 插入新的活跃记录 + tmp_record = { + "_id": str(uuid.uuid4()), + "user_sub": user_sub, + "timestamp": time, + } await collection.insert_one( - { - "_id": str(uuid.uuid4()), - "user_sub": user_sub, - "timestamp": time, - }, + tmp_record ) + return tmp_record["_id"] @staticmethod - async def remove_active(user_sub: str) -> None: + async def remove_active(active_id: str) -> None: """ 清除用户的活跃标识,释放GPU资源 :param user_sub: 用户实体ID """ - time = round(datetime.now(UTC).timestamp(), 3) # 清除用户当前活动标识 await MongoDB().get_collection("activity").delete_one( - {"user_sub": user_sub}, - ) - - # 清除超出窗口范围的请求记录 - await MongoDB().get_collection("activity").delete_many( - {"timestamp": {"$lte": time - SLIDE_WINDOW_TIME}}, + {"_id": active_id}, ) diff --git a/apps/services/task.py b/apps/services/task.py index 38022f40..49c9f4b0 100644 --- a/apps/services/task.py +++ b/apps/services/task.py @@ -140,6 +140,8 @@ class TaskManager: try: # 删除旧的flow_context await flow_context_collection.delete_many({"task_id": task_id}) + if not flow_context: + return await flow_context_collection.insert_many( [history.model_dump(exclude_none=True, by_alias=True) for history in flow_context], ordered=False, diff --git a/openapi.json b/openapi.json deleted file mode 100644 index e8ffc33b..00000000 --- a/openapi.json +++ /dev/null @@ -1 +0,0 @@ -{"openapi":"3.1.0","info":{"title":"FastAPI","version":"0.1.0"},"paths":{"/api/conversation":{"get":{"tags":["conversation"],"summary":"Get Conversation List","description":"获取对话列表","operationId":"get_conversation_list_api_conversation_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationListRsp"}}}},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseData"}}},"description":"Internal Server Error"}}},"post":{"tags":["conversation"],"summary":"Add Conversation","description":"手动创建新对话","operationId":"add_conversation_api_conversation_post","parameters":[{"name":"appId","in":"query","required":false,"schema":{"type":"string","default":"","title":"Appid"}},{"name":"debug","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Debug"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_add_conversation_api_conversation_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddConversationRsp"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["conversation"],"summary":"Update Conversation","description":"更新特定Conversation的数据","operationId":"update_conversation_api_conversation_put","parameters":[{"name":"conversationId","in":"query","required":true,"schema":{"type":"string","title":"Conversationid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModifyConversationData"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateConversationRsp"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["conversation"],"summary":"Delete Conversation","description":"删除特定对话","operationId":"delete_conversation_api_conversation_delete","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteConversationData"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseData"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/login":{"get":{"tags":["auth"],"summary":"Oidc Login","description":"OIDC login\n\n:param request: Request object\n:param code: OIDC code\n:return: HTMLResponse","operationId":"oidc_login_api_auth_login_get","parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/logout":{"get":{"tags":["auth"],"summary":"Logout","description":"用户登出EulerCopilot","operationId":"logout_api_auth_logout_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseData"}}}}}},"post":{"tags":["auth"],"summary":"Oidc Logout","description":"OIDC主动触发登出","operationId":"oidc_logout_api_auth_logout_post","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseData"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/redirect":{"get":{"tags":["auth"],"summary":"Oidc Redirect","description":"OIDC重定向URL","operationId":"oidc_redirect_api_auth_redirect_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OidcRedirectRsp"}}}}}}},"/api/auth/user":{"get":{"tags":["auth"],"summary":"Userinfo","description":"获取用户信息","operationId":"userinfo_api_auth_user_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthUserRsp"}}}}}}},"/api/auth/update_revision_number":{"post":{"tags":["auth"],"summary":"Update Revision Number","description":"更新用户协议信息","operationId":"update_revision_number_api_auth_update_revision_number_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthUserRsp"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseData"}}}}}}},"/api/auth/key":{"get":{"tags":["key"],"summary":"Check Api Key Existence","description":"检查API密钥是否存在","operationId":"check_api_key_existence_api_auth_key_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetAuthKeyRsp"}}}}}},"post":{"tags":["key"],"summary":"Manage Api Key","description":"管理用户的API密钥","operationId":"manage_api_key_api_auth_key_post","parameters":[{"name":"action","in":"query","required":true,"schema":{"type":"string","title":"Action"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostAuthKeyRsp"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseData"}}},"description":"Bad Request"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/app":{"get":{"tags":["appcenter"],"summary":"Get Applications","description":"获取应用列表","operationId":"get_applications_api_app_get","parameters":[{"name":"createdByMe","in":"query","required":false,"schema":{"type":"boolean","description":"筛选我创建的","default":false,"title":"Createdbyme"},"description":"筛选我创建的"},{"name":"favorited","in":"query","required":false,"schema":{"type":"boolean","description":"筛选我收藏的","default":false,"title":"Favorited"},"description":"筛选我收藏的"},{"name":"keyword","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"搜索关键字","title":"Keyword"},"description":"搜索关键字"},{"name":"appType","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AppType"},{"type":"null"}],"description":"应用类型","title":"Apptype"},"description":"应用类型"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"页码","default":1,"title":"Page"},"description":"页码"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GetAppListRsp"},{"$ref":"#/components/schemas/ResponseData"}],"title":"Response Get Applications Api App Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["appcenter"],"summary":"Create Or Update Application","description":"创建或更新应用","operationId":"create_or_update_application_api_app_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAppRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/BaseAppOperationRsp"},{"$ref":"#/components/schemas/ResponseData"}],"title":"Response Create Or Update Application Api App Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/app/recent":{"get":{"tags":["appcenter"],"summary":"Get Recently Used Applications","description":"获取最近使用的应用","operationId":"get_recently_used_applications_api_app_recent_get","parameters":[{"name":"count","in":"query","required":false,"schema":{"type":"integer","maximum":10,"minimum":1,"default":5,"title":"Count"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GetRecentAppListRsp"},{"$ref":"#/components/schemas/ResponseData"}],"title":"Response Get Recently Used Applications Api App Recent Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/app/{appId}":{"get":{"tags":["appcenter"],"summary":"Get Application","description":"获取应用详情","operationId":"get_application_api_app__appId__get","parameters":[{"name":"appId","in":"path","required":true,"schema":{"type":"string","description":"应用ID","title":"Appid"},"description":"应用ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GetAppPropertyRsp"},{"$ref":"#/components/schemas/ResponseData"}],"title":"Response Get Application Api App Appid Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["appcenter"],"summary":"Delete Application","description":"删除应用","operationId":"delete_application_api_app__appId__delete","parameters":[{"name":"appId","in":"path","required":true,"schema":{"type":"string","description":"应用ID","title":"Appid"},"description":"应用ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/BaseAppOperationRsp"},{"$ref":"#/components/schemas/ResponseData"}],"title":"Response Delete Application Api App Appid Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["appcenter"],"summary":"Publish Application","description":"发布应用","operationId":"publish_application_api_app__appId__post","parameters":[{"name":"appId","in":"path","required":true,"schema":{"type":"string","description":"应用ID","title":"Appid"},"description":"应用ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseAppOperationRsp"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["appcenter"],"summary":"Modify Favorite Application","description":"更改应用收藏状态","operationId":"modify_favorite_application_api_app__appId__put","parameters":[{"name":"appId","in":"path","required":true,"schema":{"type":"string","description":"应用ID","title":"Appid"},"description":"应用ID"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModFavAppRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ModFavAppRsp"},{"$ref":"#/components/schemas/ResponseData"}],"title":"Response Modify Favorite Application Api App Appid Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/service":{"get":{"tags":["service-center"],"summary":"Get Service List","description":"获取服务列表","operationId":"get_service_list_api_service_get","parameters":[{"name":"createdByMe","in":"query","required":false,"schema":{"type":"boolean","description":"筛选我创建的","default":false,"title":"Createdbyme"},"description":"筛选我创建的"},{"name":"favorited","in":"query","required":false,"schema":{"type":"boolean","description":"筛选我收藏的","default":false,"title":"Favorited"},"description":"筛选我收藏的"},{"name":"searchType","in":"query","required":false,"schema":{"$ref":"#/components/schemas/SearchType","description":"搜索类型","default":"all"},"description":"搜索类型"},{"name":"keyword","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"搜索关键字","title":"Keyword"},"description":"搜索关键字"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"页码","default":1,"title":"Page"},"description":"页码"},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"每页数量","default":16,"title":"Pagesize"},"description":"每页数量"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GetServiceListRsp"},{"$ref":"#/components/schemas/ResponseData"}],"title":"Response Get Service List Api Service Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["service-center"],"summary":"Update Service","description":"上传并解析服务","operationId":"update_service_api_service_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateServiceRequest","description":"上传 YAML 文本对应数据对象"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateServiceRsp"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/service/{serviceId}":{"get":{"tags":["service-center"],"summary":"Get Service Detail","description":"获取服务详情","operationId":"get_service_detail_api_service__serviceId__get","parameters":[{"name":"serviceId","in":"path","required":true,"schema":{"type":"string","description":"服务ID","title":"Serviceid"},"description":"服务ID"},{"name":"edit","in":"query","required":false,"schema":{"type":"boolean","description":"是否为编辑模式","default":false,"title":"Edit"},"description":"是否为编辑模式"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetServiceDetailRsp"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["service-center"],"summary":"Delete Service","description":"删除服务","operationId":"delete_service_api_service__serviceId__delete","parameters":[{"name":"serviceId","in":"path","required":true,"schema":{"type":"string","description":"服务ID","title":"Serviceid"},"description":"服务ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteServiceRsp"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["service-center"],"summary":"Modify Favorite Service","description":"修改服务收藏状态","operationId":"modify_favorite_service_api_service__serviceId__put","parameters":[{"name":"serviceId","in":"path","required":true,"schema":{"type":"string","description":"服务ID","title":"Serviceid"},"description":"服务ID"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModFavServiceRequest","description":"更改收藏状态请求对象"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModFavServiceRsp"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/comment":{"post":{"tags":["comment"],"summary":"Add Comment","description":"给Record添加评论","operationId":"add_comment_api_comment_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddCommentData"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseData"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/record/{conversation_id}":{"get":{"tags":["record"],"summary":"Get Record","description":"获取某个对话的所有问答对","operationId":"get_record_api_record__conversation_id__get","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordListRsp"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseData"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health_check":{"get":{"tags":["health_check"],"summary":"Health Check","description":"健康检查接口","operationId":"health_check_health_check_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthCheckRsp"}}}}}}},"/api/chat":{"post":{"tags":["chat"],"summary":"Chat","description":"LLM流式对话接口","operationId":"chat_api_chat_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestData"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/stop":{"post":{"tags":["chat"],"summary":"Stop Generation","description":"停止生成","operationId":"stop_generation_api_stop_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseData"}}}}}}},"/api/blacklist/user":{"get":{"tags":["blacklist"],"summary":"Get Blacklist User","description":"获取黑名单用户","operationId":"get_blacklist_user_api_blacklist_user_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetBlacklistUserRsp"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["blacklist"],"summary":"Change Blacklist User","description":"操作黑名单用户","operationId":"change_blacklist_user_api_blacklist_user_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserBlacklistRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseData"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blacklist/question":{"get":{"tags":["blacklist"],"summary":"Get Blacklist Question","description":"获取黑名单问题\n\n目前情况下,先直接输出问题,不做用户类型校验","operationId":"get_blacklist_question_api_blacklist_question_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetBlacklistQuestionRsp"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["blacklist"],"summary":"Change Blacklist Question","description":"黑名单问题检测或操作","operationId":"change_blacklist_question_api_blacklist_question_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionBlacklistRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseData"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blacklist/complaint":{"post":{"tags":["blacklist"],"summary":"Abuse Report","description":"用户实施举报","operationId":"abuse_report_api_blacklist_complaint_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AbuseRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseData"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blacklist/abuse":{"get":{"tags":["blacklist"],"summary":"Get Abuse Report","description":"获取待审核的问答对","operationId":"get_abuse_report_api_blacklist_abuse_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetBlacklistQuestionRsp"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["blacklist"],"summary":"Change Abuse Report","description":"对被举报问答对进行操作","operationId":"change_abuse_report_api_blacklist_abuse_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AbuseProcessRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseData"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/document/{conversation_id}":{"post":{"tags":["document"],"summary":"Document Upload","description":"上传文档","operationId":"document_upload_api_document__conversation_id__post","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_document_upload_api_document__conversation_id__post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["document"],"summary":"Get Document List","description":"获取文档列表","operationId":"get_document_list_api_document__conversation_id__get","parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","title":"Conversation Id"}},{"name":"used","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Used"}},{"name":"unused","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Unused"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationDocumentRsp"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/document/{document_id}":{"delete":{"tags":["document"],"summary":"Delete Single Document","description":"删除单个文件","operationId":"delete_single_document_api_document__document_id__delete","parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseData"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/knowledge":{"get":{"tags":["knowledge"],"summary":"List Kb","description":"获取当前用户的知识库ID","operationId":"list_kb_api_knowledge_get","parameters":[{"name":"conversationId","in":"query","required":true,"schema":{"type":"string","title":"Conversationid"}},{"name":"kbId","in":"query","required":false,"schema":{"type":"string","title":"Kbid"}},{"name":"kbName","in":"query","required":false,"schema":{"type":"string","default":"","title":"Kbname"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListTeamKnowledgeRsp"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseData"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["knowledge"],"summary":"Update Conversation Kb","description":"更新当前用户的知识库ID","operationId":"update_conversation_kb_api_knowledge_put","parameters":[{"name":"conversationId","in":"query","required":true,"schema":{"type":"string","title":"Conversationid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateKbReq"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseData"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/llm/provider":{"get":{"tags":["llm"],"summary":"List Llm Provider","description":"获取大模型提供商列表","operationId":"list_llm_provider_api_llm_provider_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListLLMProviderRsp"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseData"}}}}}}},"/api/llm":{"get":{"tags":["llm"],"summary":"List Llm","description":"获取大模型列表","operationId":"list_llm_api_llm_get","parameters":[{"name":"llmId","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"大模型ID","title":"Llmid"},"description":"大模型ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListLLMRsp"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseData"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["llm"],"summary":"Create Llm","description":"创建或更新大模型配置","operationId":"create_llm_api_llm_put","parameters":[{"name":"llmId","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"大模型ID","title":"Llmid"},"description":"大模型ID"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateLLMReq"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseData"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["llm"],"summary":"Delete Llm","description":"删除大模型配置","operationId":"delete_llm_api_llm_delete","parameters":[{"name":"llmId","in":"query","required":true,"schema":{"type":"string","description":"大模型ID","title":"Llmid"},"description":"大模型ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseData"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/llm/conv":{"put":{"tags":["llm"],"summary":"Update Conv Llm","description":"更新对话的知识库","operationId":"update_conv_llm_api_llm_conv_put","parameters":[{"name":"conversationId","in":"query","required":true,"schema":{"type":"string","description":"对话ID","title":"Conversationid"},"description":"对话ID"},{"name":"llmId","in":"query","required":false,"schema":{"type":"string","description":"llm ID","default":"empty","title":"Llmid"},"description":"llm ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseData"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/mcp":{"get":{"tags":["mcp-service"],"summary":"Get Mcpservice List","description":"获取服务列表","operationId":"get_mcpservice_list_api_mcp_get","parameters":[{"name":"searchType","in":"query","required":false,"schema":{"$ref":"#/components/schemas/SearchType","description":"搜索类型","default":"all"},"description":"搜索类型"},{"name":"keyword","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"搜索关键字","title":"Keyword"},"description":"搜索关键字"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"页码","default":1,"title":"Page"},"description":"页码"},{"name":"isInstall","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"是否已安装","title":"Isinstall"},"description":"是否已安装"},{"name":"isActive","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"是否激活","title":"Isactive"},"description":"是否激活"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/GetMCPServiceListRsp"},{"$ref":"#/components/schemas/ResponseData"}],"title":"Response Get Mcpservice List Api Mcp Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["mcp-service"],"summary":"Create Or Update Mcpservice","description":"新建或更新MCP服务","operationId":"create_or_update_mcpservice_api_mcp_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMCPServiceRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMCPServiceRsp"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/mcp/{serviceId}/install":{"post":{"tags":["mcp-service"],"summary":"Install Mcp Service","operationId":"install_mcp_service_api_mcp__serviceId__install_post","parameters":[{"name":"serviceId","in":"path","required":true,"schema":{"type":"string","description":"服务ID","title":"Serviceid"},"description":"服务ID"},{"name":"install","in":"query","required":false,"schema":{"type":"boolean","description":"是否安装","default":true,"title":"Install"},"description":"是否安装"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/mcp/{serviceId}":{"get":{"tags":["mcp-service"],"summary":"Get Service Detail","description":"获取MCP服务详情","operationId":"get_service_detail_api_mcp__serviceId__get","parameters":[{"name":"serviceId","in":"path","required":true,"schema":{"type":"string","description":"服务ID","title":"Serviceid"},"description":"服务ID"},{"name":"edit","in":"query","required":false,"schema":{"type":"boolean","description":"是否为编辑模式","default":false,"title":"Edit"},"description":"是否为编辑模式"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetMCPServiceDetailRsp"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["mcp-service"],"summary":"Delete Service","description":"删除服务","operationId":"delete_service_api_mcp__serviceId__delete","parameters":[{"name":"serviceId","in":"path","required":true,"schema":{"type":"string","description":"服务ID","title":"Serviceid"},"description":"服务ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteMCPServiceRsp"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["mcp-service"],"summary":"Active Or Deactivate Mcp Service","description":"激活/取消激活mcp","operationId":"active_or_deactivate_mcp_service_api_mcp__serviceId__post","parameters":[{"name":"serviceId","in":"path","required":true,"schema":{"type":"string","description":"服务ID","title":"Serviceid"},"description":"服务ID"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActiveMCPServiceRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActiveMCPServiceRsp"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/mcp/icon":{"post":{"tags":["mcp-service"],"summary":"Update Mcp Icon","description":"更新MCP服务图标","operationId":"update_mcp_icon_api_mcp_icon_post","parameters":[{"name":"serviceId","in":"path","required":true,"schema":{"type":"string","description":"服务ID","title":"Serviceid"},"description":"服务ID"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_update_mcp_icon_api_mcp_icon_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMCPServiceRsp"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/flow/service":{"get":{"tags":["flow"],"summary":"Get Services","description":"获取用户可访问的节点元数据所在服务的信息","operationId":"get_services_api_flow_service_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NodeServiceListRsp"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseData"}}}}}}},"/api/flow":{"get":{"tags":["flow"],"summary":"Get Flow","description":"获取流拓扑结构","operationId":"get_flow_api_flow_get","parameters":[{"name":"appId","in":"query","required":true,"schema":{"type":"string","title":"Appid"}},{"name":"flowId","in":"query","required":true,"schema":{"type":"string","title":"Flowid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowStructureGetRsp"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseData"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseData"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["flow"],"summary":"Put Flow","description":"修改流拓扑结构","operationId":"put_flow_api_flow_put","parameters":[{"name":"appId","in":"query","required":true,"schema":{"type":"string","title":"Appid"}},{"name":"flowId","in":"query","required":true,"schema":{"type":"string","title":"Flowid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PutFlowReq"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowStructurePutRsp"}}}},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseData"}}},"description":"Bad Request"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseData"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseData"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseData"}}},"description":"Internal Server Error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["flow"],"summary":"Delete Flow","description":"删除流拓扑结构","operationId":"delete_flow_api_flow_delete","parameters":[{"name":"appId","in":"query","required":true,"schema":{"type":"string","title":"Appid"}},{"name":"flowId","in":"query","required":true,"schema":{"type":"string","title":"Flowid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowStructureDeleteRsp"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResponseData"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user":{"get":{"tags":["user"],"summary":"Get User Sub","description":"查询所有用户接口","operationId":"get_user_sub_api_user_get","parameters":[{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","description":"每页用户数量","default":20,"title":"Page Size"},"description":"每页用户数量"},{"name":"page_cnt","in":"query","required":false,"schema":{"type":"integer","description":"当前页码","default":1,"title":"Page Cnt"},"description":"当前页码"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserGetRsp"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["user"],"summary":"Update User Info","description":"更新用户信息接口","operationId":"update_user_info_api_user_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdateRequest","description":"用户更新信息"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/parameter":{"get":{"tags":["parameter"],"summary":"Get Parameters","description":"Get parameters for node choice.","operationId":"get_parameters_api_parameter_get","parameters":[{"name":"appId","in":"query","required":true,"schema":{"type":"string","title":"Appid"}},{"name":"flowId","in":"query","required":true,"schema":{"type":"string","title":"Flowid"}},{"name":"stepId","in":"query","required":true,"schema":{"type":"string","title":"Stepid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetParamsRsp"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/parameter/operate":{"get":{"tags":["parameter"],"summary":"Get Operate Parameters","description":"Get parameters for node choice.","operationId":"get_operate_parameters_api_parameter_operate_get","parameters":[{"name":"ParamType","in":"query","required":true,"schema":{"type":"string","title":"Paramtype"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetOperaRsp"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AbuseProcessRequest":{"properties":{"id":{"type":"string","title":"Id"},"is_deletion":{"type":"integer","title":"Is Deletion"}},"type":"object","required":["id","is_deletion"],"title":"AbuseProcessRequest","description":"POST /api/blacklist/abuse 请求数据结构"},"AbuseRequest":{"properties":{"record_id":{"type":"string","title":"Record Id"},"reason":{"type":"string","title":"Reason"},"reason_type":{"type":"string","title":"Reason Type"}},"type":"object","required":["record_id","reason","reason_type"],"title":"AbuseRequest","description":"POST /api/blacklist/complaint 请求数据结构"},"ActiveMCPServiceRequest":{"properties":{"active":{"type":"boolean","title":"Active","description":"是否激活mcp服务"},"mcpEnv":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Mcpenv","description":"MCP服务环境变量"}},"type":"object","required":["active"],"title":"ActiveMCPServiceRequest","description":"POST /api/mcp/{serviceId} 请求数据结构"},"ActiveMCPServiceRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"$ref":"#/components/schemas/BaseMCPServiceOperationMsg","title":"Result"}},"type":"object","required":["code","message","result"],"title":"ActiveMCPServiceRsp","description":"POST /api/mcp/active/{serviceId} 返回数据结构"},"AddCommentData":{"properties":{"record_id":{"type":"string","title":"Record Id"},"group_id":{"type":"string","title":"Group Id"},"comment":{"$ref":"#/components/schemas/CommentType"},"dislike_reason":{"type":"string","maxLength":200,"title":"Dislike Reason","default":""},"reason_link":{"type":"string","maxLength":200,"title":"Reason Link","default":""},"reason_description":{"type":"string","maxLength":500,"title":"Reason Description","default":""}},"type":"object","required":["record_id","group_id","comment"],"title":"AddCommentData","description":"添加评论"},"AddConversationMsg":{"properties":{"conversationId":{"type":"string","title":"Conversationid"}},"type":"object","required":["conversationId"],"title":"AddConversationMsg","description":"POST /api/conversation Result数据结构"},"AddConversationRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"$ref":"#/components/schemas/AddConversationMsg"}},"type":"object","required":["code","message","result"],"title":"AddConversationRsp","description":"POST /api/conversation 返回数据结构"},"AppCenterCardItem":{"properties":{"appId":{"type":"string","title":"Appid","description":"应用ID"},"appType":{"$ref":"#/components/schemas/AppType","description":"应用类型"},"icon":{"type":"string","title":"Icon","description":"应用图标"},"name":{"type":"string","title":"Name","description":"应用名称"},"description":{"type":"string","title":"Description","description":"应用简介"},"author":{"type":"string","title":"Author","description":"应用作者"},"favorited":{"type":"boolean","title":"Favorited","description":"是否已收藏"},"published":{"type":"boolean","title":"Published","description":"是否已发布","default":true}},"type":"object","required":["appId","appType","icon","name","description","author","favorited"],"title":"AppCenterCardItem","description":"应用中心卡片数据结构"},"AppFlowInfo":{"properties":{"id":{"type":"string","title":"Id","description":"工作流ID"},"name":{"type":"string","title":"Name","description":"工作流名称","default":""},"description":{"type":"string","title":"Description","description":"工作流简介","default":""},"debug":{"type":"boolean","title":"Debug","description":"是否经过调试","default":false}},"type":"object","required":["id"],"title":"AppFlowInfo","description":"应用工作流数据结构"},"AppLink":{"properties":{"title":{"type":"string","title":"Title","description":"链接标题"},"url":{"type":"string","pattern":"^(https|http)://.*$","title":"Url","description":"链接地址"}},"type":"object","required":["title","url"],"title":"AppLink","description":"App的相关链接"},"AppMcpServiceInfo":{"properties":{"id":{"type":"string","title":"Id","description":"MCP服务ID"},"name":{"type":"string","title":"Name","description":"MCP服务名称","default":""},"description":{"type":"string","title":"Description","description":"MCP服务简介","default":""}},"type":"object","required":["id"],"title":"AppMcpServiceInfo","description":"应用关联的MCP服务信息"},"AppPermissionData":{"properties":{"visibility":{"$ref":"#/components/schemas/PermissionType","description":"可见性(public/private/protected)","default":"private"},"authorizedUsers":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Authorizedusers","description":"附加人员名单(如果可见性为部分人可见)"}},"type":"object","title":"AppPermissionData","description":"应用权限数据结构"},"AppType":{"type":"string","enum":["flow","agent"],"title":"AppType","description":"应用中心应用类型"},"AuthUserMsg":{"properties":{"user_sub":{"type":"string","title":"User Sub"},"revision":{"type":"boolean","title":"Revision"},"is_admin":{"type":"boolean","title":"Is Admin"},"auto_execute":{"type":"boolean","title":"Auto Execute"}},"type":"object","required":["user_sub","revision","is_admin","auto_execute"],"title":"AuthUserMsg","description":"GET /api/auth/user Result数据结构"},"AuthUserRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"$ref":"#/components/schemas/AuthUserMsg"}},"type":"object","required":["code","message","result"],"title":"AuthUserRsp","description":"GET /api/auth/user 返回数据结构"},"BaseAppOperationMsg":{"properties":{"appId":{"type":"string","title":"Appid","description":"应用ID"}},"type":"object","required":["appId"],"title":"BaseAppOperationMsg","description":"基础应用操作Result数据结构"},"BaseAppOperationRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"$ref":"#/components/schemas/BaseAppOperationMsg"}},"type":"object","required":["code","message","result"],"title":"BaseAppOperationRsp","description":"基础应用操作返回数据结构"},"BaseMCPServiceOperationMsg":{"properties":{"serviceId":{"type":"string","title":"Serviceid","description":"服务ID"}},"type":"object","required":["serviceId"],"title":"BaseMCPServiceOperationMsg","description":"插件中心:MCP服务操作Result数据结构"},"BaseServiceOperationMsg":{"properties":{"serviceId":{"type":"string","title":"Serviceid","description":"服务ID"}},"type":"object","required":["serviceId"],"title":"BaseServiceOperationMsg","description":"语义接口中心:基础服务操作Result数据结构"},"Blacklist":{"properties":{"_id":{"type":"string","title":"Id"},"question":{"type":"string","title":"Question"},"answer":{"type":"string","title":"Answer"},"is_audited":{"type":"boolean","title":"Is Audited","default":false},"reason_type":{"type":"string","title":"Reason Type","default":""},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"updated_at":{"type":"number","title":"Updated At"}},"type":"object","required":["question","answer"],"title":"Blacklist","description":"黑名单\n\nCollection: blacklist"},"Body_add_conversation_api_conversation_post":{"properties":{"llm_id":{"type":"string","title":"Llm Id","default":"empty"},"kb_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Kb Ids"}},"type":"object","title":"Body_add_conversation_api_conversation_post"},"Body_document_upload_api_document__conversation_id__post":{"properties":{"documents":{"items":{"type":"string","format":"binary"},"type":"array","title":"Documents"}},"type":"object","required":["documents"],"title":"Body_document_upload_api_document__conversation_id__post"},"Body_update_mcp_icon_api_mcp_icon_post":{"properties":{"icon":{"type":"string","format":"binary","title":"Icon","description":"图标文件"}},"type":"object","required":["icon"],"title":"Body_update_mcp_icon_api_mcp_icon_post"},"BoolOperate":{"type":"string","enum":["bool_equal","bool_not_equal"],"title":"BoolOperate","description":"Choice 工具支持的布尔运算符"},"CommentType":{"type":"string","enum":["liked","disliked","none"],"title":"CommentType","description":"点赞点踩类型"},"ConversationDocumentItem":{"properties":{"_id":{"type":"string","title":"Id","default":""},"user_sub":{"type":"null","title":"User Sub"},"name":{"type":"string","title":"Name"},"type":{"type":"string","title":"Type"},"size":{"type":"number","title":"Size"},"created_at":{"type":"number","title":"Created At"},"conversation_id":{"type":"null","title":"Conversation Id"},"status":{"$ref":"#/components/schemas/DocumentStatus"}},"type":"object","required":["name","type","size","status"],"title":"ConversationDocumentItem","description":"GET /api/document/{conversation_id} Result内元素数据结构"},"ConversationDocumentMsg":{"properties":{"documents":{"items":{"$ref":"#/components/schemas/ConversationDocumentItem"},"type":"array","title":"Documents","default":[]}},"type":"object","title":"ConversationDocumentMsg","description":"GET /api/document/{conversation_id} Result数据结构"},"ConversationDocumentRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"$ref":"#/components/schemas/ConversationDocumentMsg"}},"type":"object","required":["code","message","result"],"title":"ConversationDocumentRsp","description":"GET /api/document/{conversation_id} 返回数据结构"},"ConversationListItem":{"properties":{"conversationId":{"type":"string","title":"Conversationid"},"title":{"type":"string","title":"Title"},"docCount":{"type":"integer","title":"Doccount"},"createdTime":{"type":"string","title":"Createdtime"},"appId":{"type":"string","title":"Appid"},"debug":{"type":"boolean","title":"Debug"},"llm":{"anyOf":[{"$ref":"#/components/schemas/LLMIteam"},{"type":"null"}]},"kbList":{"items":{"$ref":"#/components/schemas/KbIteam"},"type":"array","title":"Kblist","default":[]}},"type":"object","required":["conversationId","title","docCount","createdTime","appId","debug"],"title":"ConversationListItem","description":"GET /api/conversation Result数据结构"},"ConversationListMsg":{"properties":{"conversations":{"items":{"$ref":"#/components/schemas/ConversationListItem"},"type":"array","title":"Conversations"}},"type":"object","required":["conversations"],"title":"ConversationListMsg","description":"GET /api/conversation Result数据结构"},"ConversationListRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"$ref":"#/components/schemas/ConversationListMsg"}},"type":"object","required":["code","message","result"],"title":"ConversationListRsp","description":"GET /api/conversation 返回数据结构"},"CreateAppRequest":{"properties":{"appType":{"$ref":"#/components/schemas/AppType","description":"应用类型"},"icon":{"type":"string","title":"Icon","description":"图标","default":""},"name":{"type":"string","maxLength":20,"title":"Name","description":"应用名称"},"description":{"type":"string","maxLength":150,"title":"Description","description":"应用简介"},"links":{"items":{"$ref":"#/components/schemas/AppLink"},"type":"array","maxItems":5,"title":"Links","description":"相关链接","default":[]},"recommendedQuestions":{"items":{"type":"string"},"type":"array","maxItems":3,"title":"Recommendedquestions","description":"推荐问题","default":[]},"dialogRounds":{"type":"integer","maximum":10.0,"minimum":1.0,"title":"Dialogrounds","description":"对话轮次(1~10)","default":3},"llm":{"type":"string","title":"Llm","description":"大模型ID","default":"empty"},"permission":{"$ref":"#/components/schemas/AppPermissionData","description":"权限配置"},"workflows":{"items":{"$ref":"#/components/schemas/AppFlowInfo"},"type":"array","title":"Workflows","description":"工作流信息列表","default":[]},"mcpService":{"items":{"type":"string"},"type":"array","title":"Mcpservice","description":"MCP服务id列表","default":[]},"appId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Appid","description":"应用ID"}},"type":"object","required":["appType","name","description"],"title":"CreateAppRequest","description":"POST /api/app 请求数据结构"},"DeleteConversationData":{"properties":{"conversationList":{"items":{"type":"string"},"type":"array","title":"Conversationlist"}},"type":"object","required":["conversationList"],"title":"DeleteConversationData","description":"删除会话"},"DeleteMCPServiceRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"$ref":"#/components/schemas/BaseMCPServiceOperationMsg","title":"Result"}},"type":"object","required":["code","message","result"],"title":"DeleteMCPServiceRsp","description":"DELETE /api/service/{serviceId} 返回数据结构"},"DeleteServiceRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"$ref":"#/components/schemas/BaseServiceOperationMsg","title":"Result"}},"type":"object","required":["code","message","result"],"title":"DeleteServiceRsp","description":"DELETE /api/service/{serviceId} 返回数据结构"},"DependencyItem":{"properties":{"nodeId":{"type":"string","title":"Nodeid"},"type":{"type":"string","title":"Type"}},"type":"object","required":["nodeId","type"],"title":"DependencyItem","description":"请求/响应中的节点依赖变量类"},"DictOperate":{"type":"string","enum":["dict_equal","dict_not_equal","dict_contains_key","dict_not_contains_key"],"title":"DictOperate","description":"Choice 工具支持的字典运算符"},"DocumentStatus":{"type":"string","enum":["used","unused","processing","failed"],"title":"DocumentStatus","description":"文档状态"},"EdgeItem":{"properties":{"edgeId":{"type":"string","title":"Edgeid"},"sourceNode":{"type":"string","title":"Sourcenode"},"targetNode":{"type":"string","title":"Targetnode"},"type":{"type":"string","title":"Type","default":"normal"},"branchId":{"type":"string","title":"Branchid"}},"type":"object","required":["edgeId","sourceNode","targetNode","branchId"],"title":"EdgeItem","description":"请求/响应中的边变量类"},"EditMCPServiceMsg":{"properties":{"serviceId":{"type":"string","title":"Serviceid","description":"MCP服务ID"},"icon":{"type":"string","title":"Icon","description":"图标","default":""},"name":{"type":"string","title":"Name","description":"MCP服务名称"},"description":{"type":"string","title":"Description","description":"MCP服务描述"},"overview":{"type":"string","title":"Overview","description":"MCP服务概述"},"data":{"type":"string","title":"Data","description":"MCP服务配置"},"mcpType":{"$ref":"#/components/schemas/MCPType"}},"type":"object","required":["serviceId","name","description","overview","data","mcpType"],"title":"EditMCPServiceMsg","description":"编辑MCP服务"},"FlowItem-Input":{"properties":{"flowId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Flowid","default":"工作流ID"},"name":{"type":"string","title":"Name","default":"工作流名称"},"description":{"type":"string","title":"Description","default":"工作流描述"},"enable":{"type":"boolean","title":"Enable","default":true},"editable":{"type":"boolean","title":"Editable","default":true},"nodes":{"items":{"$ref":"#/components/schemas/NodeItem"},"type":"array","title":"Nodes","default":[]},"edges":{"items":{"$ref":"#/components/schemas/EdgeItem"},"type":"array","title":"Edges","default":[]},"createdAt":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Createdat","default":0},"connectivity":{"type":"boolean","title":"Connectivity","description":"图的开始节点和结束节点是否联通,并且除结束节点都有出边","default":false},"focusPoint":{"$ref":"#/components/schemas/PositionItem","default":{"x":0.0,"y":0.0}},"debug":{"type":"boolean","title":"Debug","default":false}},"type":"object","title":"FlowItem","description":"请求/响应中的流变量类"},"FlowItem-Output":{"properties":{"flowId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Flowid","default":"工作流ID"},"name":{"type":"string","title":"Name","default":"工作流名称"},"description":{"type":"string","title":"Description","default":"工作流描述"},"enable":{"type":"boolean","title":"Enable","default":true},"editable":{"type":"boolean","title":"Editable","default":true},"nodes":{"items":{"$ref":"#/components/schemas/NodeItem"},"type":"array","title":"Nodes","default":[]},"edges":{"items":{"$ref":"#/components/schemas/EdgeItem"},"type":"array","title":"Edges","default":[]},"createdAt":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Createdat","default":0},"connectivity":{"type":"boolean","title":"Connectivity","description":"图的开始节点和结束节点是否联通,并且除结束节点都有出边","default":false},"focusPoint":{"$ref":"#/components/schemas/PositionItem","default":{"x":0.0,"y":0.0}},"debug":{"type":"boolean","title":"Debug","default":false}},"type":"object","title":"FlowItem","description":"请求/响应中的流变量类"},"FlowStructureDeleteMsg":{"properties":{"flowId":{"type":"string","title":"Flowid","default":""}},"type":"object","title":"FlowStructureDeleteMsg","description":"DELETE /api/flow/ result"},"FlowStructureDeleteRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"$ref":"#/components/schemas/FlowStructureDeleteMsg"}},"type":"object","required":["code","message","result"],"title":"FlowStructureDeleteRsp","description":"DELETE /api/flow/ 返回数据结构"},"FlowStructureGetMsg":{"properties":{"flow":{"$ref":"#/components/schemas/FlowItem-Output","default":{"flowId":"工作流ID","name":"工作流名称","description":"工作流描述","enable":true,"editable":true,"nodes":[],"edges":[],"createdAt":0.0,"connectivity":false,"focusPoint":{"x":0.0,"y":0.0},"debug":false}}},"type":"object","title":"FlowStructureGetMsg","description":"GET /api/flow result"},"FlowStructureGetRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"$ref":"#/components/schemas/FlowStructureGetMsg"}},"type":"object","required":["code","message","result"],"title":"FlowStructureGetRsp","description":"GET /api/flow 返回数据结构"},"FlowStructurePutMsg":{"properties":{"flow":{"$ref":"#/components/schemas/FlowItem-Output","default":{"flowId":"工作流ID","name":"工作流名称","description":"工作流描述","enable":true,"editable":true,"nodes":[],"edges":[],"createdAt":0.0,"connectivity":false,"focusPoint":{"x":0.0,"y":0.0},"debug":false}}},"type":"object","title":"FlowStructurePutMsg","description":"PUT /api/flow result"},"FlowStructurePutRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"$ref":"#/components/schemas/FlowStructurePutMsg"}},"type":"object","required":["code","message","result"],"title":"FlowStructurePutRsp","description":"PUT /api/flow 返回数据结构"},"FootNoteMetaData":{"properties":{"releatedId":{"type":"string","title":"Releatedid","description":"相关ID","default":""},"insertPosition":{"type":"integer","title":"Insertposition","description":"插入位置","default":0},"footSource":{"type":"string","title":"Footsource","description":"脚注来源","default":""},"footType":{"type":"string","title":"Foottype","description":"脚注类型","default":""}},"type":"object","title":"FootNoteMetaData","description":"Record表子项:Record的脚注元信息"},"GetAppListMsg":{"properties":{"currentPage":{"type":"integer","title":"Currentpage","description":"当前页码"},"totalApps":{"type":"integer","title":"Totalapps","description":"总应用数"},"applications":{"items":{"$ref":"#/components/schemas/AppCenterCardItem"},"type":"array","title":"Applications","description":"应用列表"}},"type":"object","required":["currentPage","totalApps","applications"],"title":"GetAppListMsg","description":"GET /api/app Result数据结构"},"GetAppListRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"$ref":"#/components/schemas/GetAppListMsg"}},"type":"object","required":["code","message","result"],"title":"GetAppListRsp","description":"GET /api/app 返回数据结构"},"GetAppPropertyMsg":{"properties":{"appType":{"$ref":"#/components/schemas/AppType","description":"应用类型"},"icon":{"type":"string","title":"Icon","description":"图标","default":""},"name":{"type":"string","maxLength":20,"title":"Name","description":"应用名称"},"description":{"type":"string","maxLength":150,"title":"Description","description":"应用简介"},"links":{"items":{"$ref":"#/components/schemas/AppLink"},"type":"array","maxItems":5,"title":"Links","description":"相关链接","default":[]},"recommendedQuestions":{"items":{"type":"string"},"type":"array","maxItems":3,"title":"Recommendedquestions","description":"推荐问题","default":[]},"dialogRounds":{"type":"integer","maximum":10.0,"minimum":1.0,"title":"Dialogrounds","description":"对话轮次(1~10)","default":3},"llm":{"anyOf":[{"$ref":"#/components/schemas/LLMIteam"},{"type":"null"}]},"permission":{"$ref":"#/components/schemas/AppPermissionData","description":"权限配置"},"workflows":{"items":{"$ref":"#/components/schemas/AppFlowInfo"},"type":"array","title":"Workflows","description":"工作流信息列表","default":[]},"mcpService":{"items":{"$ref":"#/components/schemas/AppMcpServiceInfo"},"type":"array","title":"Mcpservice","description":"MCP服务信息列表","default":[]},"appId":{"type":"string","title":"Appid","description":"应用ID"},"published":{"type":"boolean","title":"Published","description":"是否已发布"}},"type":"object","required":["appType","name","description","appId","published"],"title":"GetAppPropertyMsg","description":"GET /api/app/{appId} Result数据结构"},"GetAppPropertyRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"$ref":"#/components/schemas/GetAppPropertyMsg"}},"type":"object","required":["code","message","result"],"title":"GetAppPropertyRsp","description":"GET /api/app/{appId} 返回数据结构"},"GetAuthKeyRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"$ref":"#/components/schemas/_GetAuthKeyMsg"}},"type":"object","required":["code","message","result"],"title":"GetAuthKeyRsp","description":"GET /api/auth/key 返回数据结构"},"GetBlacklistQuestionMsg":{"properties":{"question_list":{"items":{"$ref":"#/components/schemas/Blacklist"},"type":"array","title":"Question List"}},"type":"object","required":["question_list"],"title":"GetBlacklistQuestionMsg","description":"GET /api/blacklist/question Result数据结构"},"GetBlacklistQuestionRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"$ref":"#/components/schemas/GetBlacklistQuestionMsg"}},"type":"object","required":["code","message","result"],"title":"GetBlacklistQuestionRsp","description":"GET /api/blacklist/question 返回数据结构"},"GetBlacklistUserMsg":{"properties":{"user_subs":{"items":{"type":"string"},"type":"array","title":"User Subs"}},"type":"object","required":["user_subs"],"title":"GetBlacklistUserMsg","description":"GET /api/blacklist/user Result数据结构"},"GetBlacklistUserRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"$ref":"#/components/schemas/GetBlacklistUserMsg"}},"type":"object","required":["code","message","result"],"title":"GetBlacklistUserRsp","description":"GET /api/blacklist/user 返回数据结构"},"GetMCPServiceDetailMsg":{"properties":{"serviceId":{"type":"string","title":"Serviceid","description":"MCP服务ID"},"icon":{"type":"string","title":"Icon","description":"图标","default":""},"name":{"type":"string","title":"Name","description":"MCP服务名称"},"description":{"type":"string","title":"Description","description":"MCP服务描述"},"overview":{"type":"string","title":"Overview","description":"MCP服务概述"},"tools":{"items":{"$ref":"#/components/schemas/MCPTool"},"type":"array","title":"Tools","description":"MCP服务Tools列表","default":[]}},"type":"object","required":["serviceId","name","description","overview"],"title":"GetMCPServiceDetailMsg","description":"GET /api/mcp_service/{serviceId} Result数据结构"},"GetMCPServiceDetailRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"anyOf":[{"$ref":"#/components/schemas/GetMCPServiceDetailMsg"},{"$ref":"#/components/schemas/EditMCPServiceMsg"}],"title":"Result"}},"type":"object","required":["code","message","result"],"title":"GetMCPServiceDetailRsp","description":"GET /api/service/{serviceId} 返回数据结构"},"GetMCPServiceListMsg":{"properties":{"currentPage":{"type":"integer","title":"Currentpage","description":"当前页码"},"services":{"items":{"$ref":"#/components/schemas/MCPServiceCardItem"},"type":"array","title":"Services","description":"解析后的服务列表"}},"type":"object","required":["currentPage","services"],"title":"GetMCPServiceListMsg","description":"GET /api/service Result数据结构"},"GetMCPServiceListRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"$ref":"#/components/schemas/GetMCPServiceListMsg","title":"Result"}},"type":"object","required":["code","message","result"],"title":"GetMCPServiceListRsp","description":"GET /api/service 返回数据结构"},"GetOperaRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"items":{"$ref":"#/components/schemas/OperateAndBindType"},"type":"array","title":"Result"}},"type":"object","required":["code","message","result"],"title":"GetOperaRsp","description":"GET /api/operate 返回数据结构"},"GetParamsRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"items":{"$ref":"#/components/schemas/StepParams"},"type":"array","title":"Result","description":"参数列表","default":[]}},"type":"object","required":["code","message"],"title":"GetParamsRsp","description":"GET /api/params 返回数据结构"},"GetRecentAppListRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"$ref":"#/components/schemas/RecentAppList"}},"type":"object","required":["code","message","result"],"title":"GetRecentAppListRsp","description":"GET /api/app/recent 返回数据结构"},"GetServiceDetailMsg":{"properties":{"serviceId":{"type":"string","title":"Serviceid","description":"服务ID"},"name":{"type":"string","title":"Name","description":"服务名称"},"apis":{"anyOf":[{"items":{"$ref":"#/components/schemas/ServiceApiData"},"type":"array"},{"type":"null"}],"title":"Apis","description":"解析后的接口列表"},"data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data","description":"YAML 内容数据对象"}},"type":"object","required":["serviceId","name"],"title":"GetServiceDetailMsg","description":"GET /api/service/{serviceId} Result数据结构"},"GetServiceDetailRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"$ref":"#/components/schemas/GetServiceDetailMsg","title":"Result"}},"type":"object","required":["code","message","result"],"title":"GetServiceDetailRsp","description":"GET /api/service/{serviceId} 返回数据结构"},"GetServiceListMsg":{"properties":{"currentPage":{"type":"integer","title":"Currentpage","description":"当前页码"},"totalCount":{"type":"integer","title":"Totalcount","description":"总服务数"},"services":{"items":{"$ref":"#/components/schemas/ServiceCardItem"},"type":"array","title":"Services","description":"解析后的服务列表"}},"type":"object","required":["currentPage","totalCount","services"],"title":"GetServiceListMsg","description":"GET /api/service Result数据结构"},"GetServiceListRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"$ref":"#/components/schemas/GetServiceListMsg","title":"Result"}},"type":"object","required":["code","message","result"],"title":"GetServiceListRsp","description":"GET /api/service 返回数据结构"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthCheckRsp":{"properties":{"status":{"type":"string","title":"Status"}},"type":"object","required":["status"],"title":"HealthCheckRsp","description":"GET /health_check 返回数据结构"},"KbIteam":{"properties":{"kbId":{"type":"string","title":"Kbid"},"kbName":{"type":"string","title":"Kbname"}},"type":"object","required":["kbId","kbName"],"title":"KbIteam","description":"GET /api/conversation Result数据结构"},"KnowledgeBaseItem":{"properties":{"kbId":{"type":"string","title":"Kbid","description":"知识库ID"},"kbName":{"type":"string","title":"Kbname","description":"知识库名称"},"description":{"type":"string","title":"Description","description":"知识库描述"},"isUsed":{"type":"boolean","title":"Isused","description":"是否使用"}},"type":"object","required":["kbId","kbName","description","isUsed"],"title":"KnowledgeBaseItem","description":"知识库列表项数据结构"},"LLMIteam":{"properties":{"icon":{"type":"string","title":"Icon","default":"data:image/svg+xml;base64,PHN2ZyBmaWxsPSJjdXJyZW50Q29sb3IiIGZpbGwtcnVsZT0iZXZlbm9kZCIgaGVpZ2h0PSIxZW0iIHN0eWxlPSJmbGV4Om5vbmU7bGluZS1oZWlnaHQ6MSIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMWVtIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjx0aXRsZT5PbGxhbWE8L3RpdGxlPjxwYXRoIGQ9Ik03LjkwNSAxLjA5Yy4yMTYuMDg1LjQxMS4yMjUuNTg4LjQxLjI5NS4zMDYuNTQ0Ljc0NC43MzQgMS4yNjMuMTkxLjUyMi4zMTUgMS4xLjM2MiAxLjY4YTUuMDU0IDUuMDU0IDAgMDEyLjA0OS0uNjM2bC4wNTEtLjAwNGMuODctLjA3IDEuNzMuMDg3IDIuNDguNDc0LjEwMS4wNTMuMi4xMS4yOTcuMTcuMDUtLjU2OS4xNzItMS4xMzQuMzYtMS42NDQuMTktLjUyLjQzOS0uOTU3LjczMy0xLjI2NGExLjY3IDEuNjcgMCAwMS41ODktLjQxYy4yNTctLjEuNTMtLjExOC43OTYtLjA0Mi40MDEuMTE0Ljc0NS4zNjggMS4wMTYuNzM3LjI0OC4zMzcuNDM0Ljc2OS41NjEgMS4yODcuMjMuOTM0LjI3IDIuMTYzLjExNSAzLjY0NWwuMDUzLjA0LjAyNi4wMTljLjc1Ny41NzYgMS4yODQgMS4zOTcgMS41NjMgMi4zNS40MzUgMS40ODcuMjE2IDMuMTU1LS41MzQgNC4wODhsLS4wMTguMDIxLjAwMi4wMDNjLjQxNy43NjIuNjcgMS41NjcuNzI0IDIuNGwuMDAyLjAzYy4wNjQgMS4wNjUtLjIgMi4xMzctLjgxNCAzLjE5bC0uMDA3LjAxLjAxLjAyNGMuNDcyIDEuMTU3LjYyIDIuMzIyLjQzOCAzLjQ4NmwtLjAwNi4wMzlhLjY1MS42NTEgMCAwMS0uNzQ3LjUzNi42NDguNjQ4IDAgMDEtLjU0LS43NDJjLjE2Ny0xLjAzMy4wMS0yLjA2OS0uNDgtMy4xMjNhLjY0My42NDMgMCAwMS4wNC0uNjE3bC4wMDQtLjAwNmMuNjA0LS45MjQuODU0LTEuODMuOC0yLjcyLS4wNDYtLjc3OS0uMzI1LTEuNTQ0LS44LTIuMjczYS42NDQuNjQ0IDAgMDEuMTgtLjg4NmwuMDA5LS4wMDZjLjI0My0uMTU5LjQ2Ny0uNTY1LjU4LTEuMTJhNC4yMjkgNC4yMjkgMCAwMC0uMDk1LTEuOTc0Yy0uMjA1LS43LS41OC0xLjI4NC0xLjEwNS0xLjY4My0uNTk1LS40NTQtMS4zODMtLjY3My0yLjM4LS42MWEuNjUzLjY1MyAwIDAxLS42MzItLjM3MWMtLjMxNC0uNjY1LS43NzItMS4xNDEtMS4zNDMtMS40MzZhMy4yODggMy4yODggMCAwMC0xLjc3Mi0uMzMyYy0xLjI0NS4wOTktMi4zNDMuODAxLTIuNjcgMS42ODZhLjY1Mi42NTIgMCAwMS0uNjEuNDI1Yy0xLjA2Ny4wMDItMS44OTMuMjUyLTIuNDk3LjcwMy0uNTIyLjM5LS44NzguOTM1LTEuMDY2IDEuNTg4YTQuMDcgNC4wNyAwIDAwLS4wNjggMS44ODZjLjExMi41NTguMzMxIDEuMDIuNTgyIDEuMjY5bC4wMDguMDA3Yy4yMTIuMjA3LjI1Ny41My4xMDkuNzg1LS4zNi42MjItLjYyOSAxLjU0OS0uNjczIDIuNDQtLjA1IDEuMDE4LjE4NiAxLjkwMi43MTkgMi41MzZsLjAxNi4wMTlhLjY0My42NDMgMCAwMS4wOTUuNjljLS41NzYgMS4yMzYtLjc1MyAyLjI1Mi0uNTYyIDMuMDUyYS42NTIuNjUyIDAgMDEtMS4yNjkuMjk4Yy0uMjQzLTEuMDE4LS4wNzgtMi4xODQuNDczLTMuNDk4bC4wMTQtLjAzNS0uMDA4LS4wMTJhNC4zMzkgNC4zMzkgMCAwMS0uNTk4LTEuMzA5bC0uMDA1LS4wMTlhNS43NjQgNS43NjQgMCAwMS0uMTc3LTEuNzg1Yy4wNDQtLjkxLjI3OC0xLjg0Mi42MjItMi41OWwuMDEyLS4wMjYtLjAwMi0uMDAyYy0uMjkzLS40MTgtLjUxLS45NTMtLjYzLTEuNTQ1bC0uMDA1LS4wMjRhNS4zNTIgNS4zNTIgMCAwMS4wOTMtMi40OWMuMjYyLS45MTUuNzc3LTEuNzAxIDEuNTM2LTIuMjY5LjA2LS4wNDUuMTIzLS4wOS4xODYtLjEzMi0uMTU5LTEuNDkzLS4xMTktMi43My4xMTItMy42Ny4xMjctLjUxOC4zMTQtLjk1LjU2Mi0xLjI4Ny4yNy0uMzY4LjYxNC0uNjIyIDEuMDE1LS43MzcuMjY2LS4wNzYuNTQtLjA1OS43OTcuMDQyem00LjExNiA5LjA5Yy45MzYgMCAxLjguMzEzIDIuNDQ2Ljg1NS42My41MjcgMS4wMDUgMS4yMzUgMS4wMDUgMS45NCAwIC44ODgtLjQwNiAxLjU4LTEuMTMzIDIuMDIyLS42Mi4zNzUtMS40NTEuNTU3LTIuNDAzLjU1Ny0xLjAwOSAwLTEuODcxLS4yNTktMi40OTMtLjczNC0uNjE3LS40Ny0uOTYzLTEuMTMtLjk2My0xLjg0NSAwLS43MDcuMzk4LTEuNDE3IDEuMDU2LTEuOTQ2LjY2OC0uNTM3IDEuNTUtLjg0OSAyLjQ4NS0uODQ5em0wIC44OTZhMy4wNyAzLjA3IDAgMDAtMS45MTYuNjVjLS40NjEuMzctLjcyMi44MzUtLjcyMiAxLjI1IDAgLjQyOC4yMS44MjkuNjEgMS4xMzQuNDU1LjM0NyAxLjEyNC41NDggMS45NDMuNTQ4Ljc5OSAwIDEuNDczLS4xNDcgMS45MzItLjQyNi40NjMtLjI4LjctLjY4Ni43LTEuMjU3IDAtLjQyMy0uMjQ2LS44OS0uNjgzLTEuMjU2LS40ODQtLjQwNS0xLjE0LS42NDMtMS44NjQtLjY0M3ptLjY2MiAxLjIxbC4wMDQuMDA0Yy4xMi4xNTEuMDk1LjM3LS4wNTYuNDlsLS4yOTIuMjN2LjQ0NmEuMzc1LjM3NSAwIDAxLS4zNzYuMzczLjM3NS4zNzUgMCAwMS0uMzc2LS4zNzN2LS40NmwtLjI3MS0uMjE4YS4zNDcuMzQ3IDAgMDEtLjA1Mi0uNDkuMzUzLjM1MyAwIDAxLjQ5NC0uMDUxbC4yMTUuMTcyLjIyLS4xNzRhLjM1My4zNTMgMCAwMS40OS4wNTF6bS01LjA0LTEuOTE5Yy40NzggMCAuODY3LjM5Ljg2Ny44NzFhLjg3Ljg3IDAgMDEtLjg2OC44NzEuODcuODcgMCAwMS0uODY3LS44Ny44Ny44NyAwIDAxLjg2Ny0uODcyem04LjcwNiAwYy40OCAwIC44NjguMzkuODY4Ljg3MWEuODcuODcgMCAwMS0uODY4Ljg3MS44Ny44NyAwIDAxLS44NjctLjg3Ljg3Ljg3IDAgMDEuODY3LS44NzJ6TTcuNDQgMi4zbC0uMDAzLjAwMmEuNjU5LjY1OSAwIDAwLS4yODUuMjM4bC0uMDA1LjAwNmMtLjEzOC4xODktLjI1OC40NjctLjM0OC44MzItLjE3LjY5Mi0uMjE2IDEuNjMxLS4xMjQgMi43ODIuNDMtLjEyOC44OTktLjIwOCAxLjQwNC0uMjM3bC4wMS0uMDAxLjAxOS0uMDM0Yy4wNDYtLjA4Mi4wOTUtLjE2MS4xNDgtLjIzOS4xMjMtLjc3MS4wMjItMS42OTItLjI1My0yLjQ0NC0uMTM0LS4zNjQtLjI5Ny0uNjUtLjQ1My0uODEzYS42MjguNjI4IDAgMDAtLjEwNy0uMDlMNy40NCAyLjN6bTkuMTc0LjA0bC0uMDAyLjAwMWEuNjI4LjYyOCAwIDAwLS4xMDcuMDljLS4xNTYuMTYzLS4zMi40NS0uNDUzLjgxNC0uMjkuNzk0LS4zODcgMS43NzYtLjIzIDIuNTcybC4wNTguMDk3LjAwOC4wMTRoLjAzYTUuMTg0IDUuMTg0IDAgMDExLjQ2Ni4yMTJjLjA4Ni0xLjEyNC4wMzgtMi4wNDMtLjEyOC0yLjcyMi0uMDktLjM2NS0uMjEtLjY0My0uMzQ5LS44MzJsLS4wMDQtLjAwNmEuNjU5LjY1OSAwIDAwLS4yODUtLjIzOWgtLjAwNHoiPjwvcGF0aD48L3N2Zz4="},"llmId":{"type":"string","title":"Llmid","default":"empty"},"modelName":{"type":"string","title":"Modelname","default":"qwen2.5-72b-instruct"}},"type":"object","title":"LLMIteam","description":"GET /api/conversation Result数据结构"},"LLMProvider":{"properties":{"provider":{"type":"string","title":"Provider","description":"LLM提供商"},"description":{"type":"string","title":"Description","description":"LLM提供商描述"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"LLM提供商URL"},"icon":{"type":"string","title":"Icon","description":"LLM提供商图标"}},"type":"object","required":["provider","description","icon"],"title":"LLMProvider","description":"LLM提供商数据结构"},"LLMProviderInfo":{"properties":{"llmId":{"type":"string","title":"Llmid","description":"LLM ID"},"icon":{"type":"string","maxLength":25536,"title":"Icon","description":"LLM图标","default":""},"openaiBaseUrl":{"type":"string","title":"Openaibaseurl","description":"OpenAI API Base URL","default":"https://api.openai.com/v1"},"openaiApiKey":{"type":"string","title":"Openaiapikey","description":"OpenAI API Key","default":""},"modelName":{"type":"string","title":"Modelname","description":"模型名称"},"maxTokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Maxtokens","description":"最大token数"},"isEditable":{"type":"boolean","title":"Iseditable","description":"是否可编辑","default":true}},"type":"object","required":["llmId","modelName"],"title":"LLMProviderInfo","description":"LLM数据结构"},"ListLLMProviderRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"items":{"$ref":"#/components/schemas/LLMProvider"},"type":"array","title":"Result","default":[]}},"type":"object","required":["code","message"],"title":"ListLLMProviderRsp","description":"GET /api/llm/provider 返回数据结构"},"ListLLMRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"items":{"$ref":"#/components/schemas/LLMProviderInfo"},"type":"array","title":"Result","default":[]}},"type":"object","required":["code","message"],"title":"ListLLMRsp","description":"GET /api/llm 返回数据结构"},"ListOperate":{"type":"string","enum":["list_equal","list_not_equal","list_contains","list_not_contains","list_length_equal","list_length_greater_than","list_length_greater_than_or_equal","list_length_less_than","list_length_less_than_or_equal"],"title":"ListOperate","description":"Choice 工具支持的列表运算符"},"ListTeamKnowledgeMsg":{"properties":{"teamKbList":{"items":{"$ref":"#/components/schemas/TeamKnowledgeBaseItem"},"type":"array","title":"Teamkblist","description":"团队知识库列表","default":[]}},"type":"object","title":"ListTeamKnowledgeMsg","description":"GET /api/knowledge Result数据结构"},"ListTeamKnowledgeRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"$ref":"#/components/schemas/ListTeamKnowledgeMsg"}},"type":"object","required":["code","message","result"],"title":"ListTeamKnowledgeRsp","description":"GET /api/knowledge 返回数据结构"},"MCPInstallStatus":{"type":"string","enum":["init","installing","cancelled","ready","failed"],"title":"MCPInstallStatus","description":"MCP 服务状态"},"MCPServiceCardItem":{"properties":{"mcpserviceId":{"type":"string","title":"Mcpserviceid","description":"mcp服务ID"},"name":{"type":"string","title":"Name","description":"mcp服务名称"},"description":{"type":"string","title":"Description","description":"mcp服务简介"},"icon":{"type":"string","title":"Icon","description":"mcp服务图标"},"author":{"type":"string","title":"Author","description":"mcp服务作者"},"isActive":{"type":"boolean","title":"Isactive","description":"mcp服务是否激活","default":false},"status":{"$ref":"#/components/schemas/MCPInstallStatus","description":"mcp服务状态","default":"installing"}},"type":"object","required":["mcpserviceId","name","description","icon","author"],"title":"MCPServiceCardItem","description":"插件中心:MCP服务卡片数据结构"},"MCPTool":{"properties":{"id":{"type":"string","title":"Id","description":"MCP工具ID"},"name":{"type":"string","title":"Name","description":"MCP工具名称"},"description":{"type":"string","title":"Description","description":"MCP工具描述"},"mcp_id":{"type":"string","title":"Mcp Id","description":"MCP ID"},"input_schema":{"additionalProperties":true,"type":"object","title":"Input Schema","description":"MCP工具输入参数"}},"type":"object","required":["id","name","description","mcp_id","input_schema"],"title":"MCPTool","description":"MCP工具"},"MCPType":{"type":"string","enum":["sse","stdio","stream"],"title":"MCPType","description":"MCP 类型"},"ModFavAppMsg":{"properties":{"appId":{"type":"string","title":"Appid","description":"应用ID"},"favorited":{"type":"boolean","title":"Favorited","description":"是否已收藏"}},"type":"object","required":["appId","favorited"],"title":"ModFavAppMsg","description":"PUT /api/app/{appId} Result数据结构"},"ModFavAppRequest":{"properties":{"favorited":{"type":"boolean","title":"Favorited","description":"是否收藏"}},"type":"object","required":["favorited"],"title":"ModFavAppRequest","description":"PUT /api/app/{appId} 请求数据结构"},"ModFavAppRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"$ref":"#/components/schemas/ModFavAppMsg"}},"type":"object","required":["code","message","result"],"title":"ModFavAppRsp","description":"PUT /api/app/{appId} 返回数据结构"},"ModFavServiceMsg":{"properties":{"serviceId":{"type":"string","title":"Serviceid","description":"服务ID"},"favorited":{"type":"boolean","title":"Favorited","description":"是否已收藏"}},"type":"object","required":["serviceId","favorited"],"title":"ModFavServiceMsg","description":"PUT /api/service/{serviceId} Result数据结构"},"ModFavServiceRequest":{"properties":{"favorited":{"type":"boolean","title":"Favorited","description":"是否收藏"}},"type":"object","required":["favorited"],"title":"ModFavServiceRequest","description":"PUT /api/service/{serviceId} 请求数据结构"},"ModFavServiceRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"$ref":"#/components/schemas/ModFavServiceMsg","title":"Result"}},"type":"object","required":["code","message","result"],"title":"ModFavServiceRsp","description":"PUT /api/service/{serviceId} 返回数据结构"},"ModifyConversationData":{"properties":{"title":{"type":"string","maxLength":2000,"minLength":1,"title":"Title"}},"type":"object","required":["title"],"title":"ModifyConversationData","description":"修改会话信息"},"NodeItem":{"properties":{"stepId":{"type":"string","title":"Stepid","default":""},"serviceId":{"type":"string","title":"Serviceid","default":""},"nodeId":{"type":"string","title":"Nodeid","default":""},"name":{"type":"string","title":"Name","default":""},"callId":{"type":"string","title":"Callid","default":"Empty"},"description":{"type":"string","title":"Description","default":""},"enable":{"type":"boolean","title":"Enable","default":true},"parameters":{"additionalProperties":true,"type":"object","title":"Parameters","default":{}},"depedency":{"anyOf":[{"$ref":"#/components/schemas/DependencyItem"},{"type":"null"}]},"position":{"$ref":"#/components/schemas/PositionItem","default":{"x":0.0,"y":0.0}},"editable":{"type":"boolean","title":"Editable","default":true}},"type":"object","title":"NodeItem","description":"请求/响应中的节点变量类"},"NodeMetaDataItem":{"properties":{"nodeId":{"type":"string","title":"Nodeid"},"callId":{"type":"string","title":"Callid"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"parameters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Parameters"},"editable":{"type":"boolean","title":"Editable","default":true},"createdAt":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Createdat"}},"type":"object","required":["nodeId","callId","name","description","parameters","createdAt"],"title":"NodeMetaDataItem","description":"节点元数据类"},"NodeServiceItem":{"properties":{"serviceId":{"type":"string","title":"Serviceid","description":"服务ID"},"name":{"type":"string","title":"Name","description":"服务名称"},"type":{"type":"string","title":"Type","description":"服务类型"},"nodeMetaDatas":{"items":{"$ref":"#/components/schemas/NodeMetaDataItem"},"type":"array","title":"Nodemetadatas","default":[]},"createdAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Createdat","description":"创建时间"}},"type":"object","required":["serviceId","name","type"],"title":"NodeServiceItem","description":"GET /api/flow/service 中单个service信息以及service下的节点元数据的信息"},"NodeServiceListMsg":{"properties":{"services":{"items":{"$ref":"#/components/schemas/NodeServiceItem"},"type":"array","title":"Services","description":"服务列表","default":[]}},"type":"object","title":"NodeServiceListMsg","description":"GET /api/flow/service result"},"NodeServiceListRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"$ref":"#/components/schemas/NodeServiceListMsg"}},"type":"object","required":["code","message","result"],"title":"NodeServiceListRsp","description":"GET /api/flow/service 返回数据结构"},"NumberOperate":{"type":"string","enum":["number_equal","number_not_equal","number_greater_than","number_less_than","number_greater_than_or_equal","number_less_than_or_equal"],"title":"NumberOperate","description":"Choice 工具支持的数字运算符"},"OidcRedirectMsg":{"properties":{"url":{"type":"string","title":"Url"}},"type":"object","required":["url"],"title":"OidcRedirectMsg","description":"GET /api/auth/redirect Result数据结构"},"OidcRedirectRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"$ref":"#/components/schemas/OidcRedirectMsg"}},"type":"object","required":["code","message","result"],"title":"OidcRedirectRsp","description":"GET /api/auth/redirect 返回数据结构"},"OperateAndBindType":{"properties":{"operate":{"anyOf":[{"$ref":"#/components/schemas/NumberOperate"},{"$ref":"#/components/schemas/StringOperate"},{"$ref":"#/components/schemas/ListOperate"},{"$ref":"#/components/schemas/BoolOperate"},{"$ref":"#/components/schemas/DictOperate"}],"title":"Operate","description":"操作类型"},"bind_type":{"$ref":"#/components/schemas/Type","description":"绑定类型"}},"type":"object","required":["operate","bind_type"],"title":"OperateAndBindType","description":"操作和绑定类型数据结构"},"ParamsNode":{"properties":{"paramName":{"type":"string","title":"Paramname","description":"参数名称"},"paramPath":{"type":"string","title":"Parampath","description":"参数路径"},"paramType":{"$ref":"#/components/schemas/Type","description":"参数类型"},"subParams":{"anyOf":[{"items":{"$ref":"#/components/schemas/ParamsNode"},"type":"array"},{"type":"null"}],"title":"Subparams","description":"子参数列表"}},"type":"object","required":["paramName","paramPath","paramType"],"title":"ParamsNode","description":"参数数据结构"},"PermissionType":{"type":"string","enum":["protected","public","private"],"title":"PermissionType","description":"权限类型"},"PositionItem":{"properties":{"x":{"type":"number","title":"X","default":0.0},"y":{"type":"number","title":"Y","default":0.0}},"type":"object","title":"PositionItem","description":"请求/响应中的前端相对位置变量类"},"PostAuthKeyMsg":{"properties":{"api_key":{"type":"string","title":"Api Key"}},"type":"object","required":["api_key"],"title":"PostAuthKeyMsg","description":"POST /api/auth/key Result数据结构"},"PostAuthKeyRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"$ref":"#/components/schemas/PostAuthKeyMsg"}},"type":"object","required":["code","message","result"],"title":"PostAuthKeyRsp","description":"POST /api/auth/key 返回数据结构"},"PutFlowReq":{"properties":{"flow":{"$ref":"#/components/schemas/FlowItem-Input"}},"type":"object","required":["flow"],"title":"PutFlowReq","description":"创建/修改流拓扑结构"},"QuestionBlacklistRequest":{"properties":{"id":{"type":"string","title":"Id"},"question":{"type":"string","title":"Question"},"answer":{"type":"string","title":"Answer"},"is_deletion":{"type":"integer","title":"Is Deletion"}},"type":"object","required":["id","question","answer","is_deletion"],"title":"QuestionBlacklistRequest","description":"POST /api/blacklist/question 请求数据结构"},"RecentAppList":{"properties":{"applications":{"items":{"$ref":"#/components/schemas/RecentAppListItem"},"type":"array","title":"Applications","description":"最近使用的应用列表"}},"type":"object","required":["applications"],"title":"RecentAppList","description":"GET /api/app/recent Result数据结构"},"RecentAppListItem":{"properties":{"appId":{"type":"string","title":"Appid","description":"应用ID"},"name":{"type":"string","title":"Name","description":"应用名称"}},"type":"object","required":["appId","name"],"title":"RecentAppListItem","description":"GET /api/app/recent 列表项数据结构"},"RecordContent":{"properties":{"question":{"type":"string","title":"Question"},"answer":{"type":"string","title":"Answer"},"data":{"additionalProperties":true,"type":"object","title":"Data","default":{}},"facts":{"items":{"type":"string"},"type":"array","title":"Facts","description":"[运行后修改]与Record关联的事实信息","default":[]}},"type":"object","required":["question","answer"],"title":"RecordContent","description":"Record表子项:Record加密前的数据结构"},"RecordData":{"properties":{"id":{"type":"string","title":"Id"},"groupId":{"type":"string","title":"Groupid"},"conversationId":{"type":"string","title":"Conversationid"},"taskId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Taskid"},"document":{"items":{"$ref":"#/components/schemas/RecordDocument"},"type":"array","title":"Document","default":[]},"flow":{"anyOf":[{"$ref":"#/components/schemas/RecordFlow"},{"type":"null"}]},"content":{"$ref":"#/components/schemas/RecordContent"},"metadata":{"$ref":"#/components/schemas/RecordMetadata"},"comment":{"$ref":"#/components/schemas/CommentType","default":"none"},"createdAt":{"type":"number","title":"Createdat"}},"type":"object","required":["id","groupId","conversationId","content","metadata","createdAt"],"title":"RecordData","description":"GET /api/record/{conversation_id} Result内元素数据结构"},"RecordDocument":{"properties":{"_id":{"type":"string","title":"Id","default":""},"user_sub":{"type":"null","title":"User Sub"},"name":{"type":"string","title":"Name"},"type":{"type":"string","title":"Type"},"size":{"type":"number","title":"Size"},"created_at":{"type":"number","title":"Created At"},"conversation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conversation Id"},"order":{"type":"integer","title":"Order","description":"文档顺序","default":0},"abstract":{"type":"string","title":"Abstract","description":"文档摘要","default":""},"author":{"type":"string","title":"Author","description":"文档作者","default":""},"associated":{"type":"string","enum":["question","answer"],"title":"Associated"}},"type":"object","required":["name","type","size","associated"],"title":"RecordDocument","description":"GET /api/record/{conversation_id} Result中的document数据结构"},"RecordFlow":{"properties":{"id":{"type":"string","title":"Id"},"recordId":{"type":"string","title":"Recordid"},"flowId":{"type":"string","title":"Flowid"},"flowName":{"type":"string","title":"Flowname","default":""},"flowStatus":{"$ref":"#/components/schemas/StepStatus","default":"success"},"stepNum":{"type":"integer","title":"Stepnum"},"steps":{"items":{"$ref":"#/components/schemas/RecordFlowStep"},"type":"array","title":"Steps"}},"type":"object","required":["id","recordId","flowId","stepNum","steps"],"title":"RecordFlow","description":"Flow的执行信息"},"RecordFlowStep":{"properties":{"stepId":{"type":"string","title":"Stepid"},"stepStatus":{"$ref":"#/components/schemas/StepStatus"},"input":{"additionalProperties":true,"type":"object","title":"Input"},"output":{"additionalProperties":true,"type":"object","title":"Output"}},"type":"object","required":["stepId","stepStatus","input","output"],"title":"RecordFlowStep","description":"Record表子项:flow的单步数据结构"},"RecordListMsg":{"properties":{"records":{"items":{"$ref":"#/components/schemas/RecordData"},"type":"array","title":"Records"}},"type":"object","required":["records"],"title":"RecordListMsg","description":"GET /api/record/{conversation_id} Result数据结构"},"RecordListRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"$ref":"#/components/schemas/RecordListMsg"}},"type":"object","required":["code","message","result"],"title":"RecordListRsp","description":"GET /api/record/{conversation_id} 返回数据结构"},"RecordMetadata":{"properties":{"inputTokens":{"type":"integer","title":"Inputtokens","default":0},"outputTokens":{"type":"integer","title":"Outputtokens","default":0},"timeCost":{"type":"number","title":"Timecost","default":0},"feature":{"additionalProperties":true,"type":"object","title":"Feature","default":{}},"footNoteMetadataList":{"items":{"$ref":"#/components/schemas/FootNoteMetaData"},"type":"array","title":"Footnotemetadatalist","description":"脚注元信息列表","default":[]}},"type":"object","title":"RecordMetadata","description":"Record表子项:Record的元信息"},"RequestData":{"properties":{"question":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Question","description":"用户输入"},"conversationId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conversationid","description":"聊天ID"},"groupId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Groupid","description":"问答组ID"},"language":{"type":"string","title":"Language","description":"语言","default":"zh"},"files":{"items":{"type":"string"},"type":"array","title":"Files","description":"文件列表","default":[]},"app":{"anyOf":[{"$ref":"#/components/schemas/RequestDataApp"},{"type":"null"}],"description":"应用"},"debug":{"type":"boolean","title":"Debug","description":"是否调试","default":false},"taskId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Taskid","description":"任务ID"},"params":{"anyOf":[{"$ref":"#/components/schemas/param"},{"type":"boolean"},{"type":"null"}],"title":"Params","description":"流执行过程中的参数补充"}},"type":"object","title":"RequestData","description":"POST /api/chat 请求的总的数据结构"},"RequestDataApp":{"properties":{"appId":{"type":"string","title":"Appid","description":"应用ID"},"flowId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Flowid","description":"Flow ID"}},"type":"object","required":["appId"],"title":"RequestDataApp","description":"模型对话中包含的app信息"},"ResponseData":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"title":"Result"}},"type":"object","required":["code","message","result"],"title":"ResponseData","description":"基础返回数据结构"},"SearchType":{"type":"string","enum":["all","name","description","author"],"title":"SearchType","description":"搜索类型"},"ServiceApiData":{"properties":{"name":{"type":"string","title":"Name","description":"接口名称"},"path":{"type":"string","title":"Path","description":"接口路径"},"description":{"type":"string","title":"Description","description":"接口描述"}},"type":"object","required":["name","path","description"],"title":"ServiceApiData","description":"语义接口中心:服务 API 接口属性数据结构"},"ServiceCardItem":{"properties":{"serviceId":{"type":"string","title":"Serviceid","description":"服务ID"},"name":{"type":"string","title":"Name","description":"服务名称"},"description":{"type":"string","title":"Description","description":"服务简介"},"icon":{"type":"string","title":"Icon","description":"服务图标"},"author":{"type":"string","title":"Author","description":"服务作者"},"favorited":{"type":"boolean","title":"Favorited","description":"是否已收藏"}},"type":"object","required":["serviceId","name","description","icon","author","favorited"],"title":"ServiceCardItem","description":"语义接口中心:服务卡片数据结构"},"StepParams":{"properties":{"stepId":{"type":"string","title":"Stepid","description":"步骤ID"},"name":{"type":"string","title":"Name","description":"Step名称"},"paramsNode":{"anyOf":[{"$ref":"#/components/schemas/ParamsNode"},{"type":"null"}],"description":"参数节点"}},"type":"object","required":["stepId","name"],"title":"StepParams","description":"参数数据结构"},"StepStatus":{"type":"string","enum":["unknown","init","waiting","running","success","error","param","cancelled"],"title":"StepStatus","description":"步骤状态"},"StringOperate":{"type":"string","enum":["string_equal","string_not_equal","string_contains","string_not_contains","string_starts_with","string_ends_with","string_length_equal","string_length_greater_than","string_length_greater_than_or_equal","string_length_less_than","string_length_less_than_or_equal","string_regex_match"],"title":"StringOperate","description":"Choice 工具支持的字符串运算符"},"TeamKnowledgeBaseItem":{"properties":{"teamId":{"type":"string","title":"Teamid","description":"团队ID"},"teamName":{"type":"string","title":"Teamname","description":"团队名称"},"kb_list":{"items":{"$ref":"#/components/schemas/KnowledgeBaseItem"},"type":"array","title":"Kb List","description":"知识库列表","default":[]}},"type":"object","required":["teamId","teamName"],"title":"TeamKnowledgeBaseItem","description":"团队知识库列表项数据结构"},"Type":{"type":"string","enum":["string","number","list","dict","bool"],"title":"Type","description":"Choice 工具支持的类型"},"UpdateConversationRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"$ref":"#/components/schemas/ConversationListItem"}},"type":"object","required":["code","message","result"],"title":"UpdateConversationRsp","description":"POST /api/conversation 返回数据结构"},"UpdateKbReq":{"properties":{"kbIds":{"items":{"type":"string"},"type":"array","title":"Kbids","description":"知识库ID列表","default":[]}},"type":"object","title":"UpdateKbReq","description":"更新知识库请求体"},"UpdateLLMReq":{"properties":{"icon":{"type":"string","title":"Icon","description":"图标","default":""},"openaiBaseUrl":{"type":"string","title":"Openaibaseurl","description":"OpenAI API Base URL","default":""},"openaiApiKey":{"type":"string","title":"Openaiapikey","description":"OpenAI API Key","default":""},"modelName":{"type":"string","title":"Modelname","description":"模型名称","default":""},"maxTokens":{"type":"integer","title":"Maxtokens","description":"最大token数","default":8192}},"type":"object","title":"UpdateLLMReq","description":"更新大模型请求体"},"UpdateMCPServiceMsg":{"properties":{"serviceId":{"type":"string","title":"Serviceid","description":"MCP服务ID"},"name":{"type":"string","title":"Name","description":"MCP服务名称"}},"type":"object","required":["serviceId","name"],"title":"UpdateMCPServiceMsg","description":"插件中心:MCP服务属性数据结构"},"UpdateMCPServiceRequest":{"properties":{"serviceId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serviceid","description":"服务ID(更新时传递)"},"name":{"type":"string","title":"Name","description":"MCP服务名称"},"description":{"type":"string","title":"Description","description":"MCP服务描述"},"overview":{"type":"string","title":"Overview","description":"MCP服务概述"},"config":{"additionalProperties":true,"type":"object","title":"Config","description":"MCP服务配置"},"mcpType":{"$ref":"#/components/schemas/MCPType","description":"MCP传输协议(Stdio/SSE/Streamable)","default":"stdio"}},"type":"object","required":["name","description","overview","config"],"title":"UpdateMCPServiceRequest","description":"POST /api/mcpservice 请求数据结构"},"UpdateMCPServiceRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"$ref":"#/components/schemas/UpdateMCPServiceMsg","title":"Result"}},"type":"object","required":["code","message","result"],"title":"UpdateMCPServiceRsp","description":"POST /api/mcp_service 返回数据结构"},"UpdateServiceMsg":{"properties":{"serviceId":{"type":"string","title":"Serviceid","description":"服务ID"},"name":{"type":"string","title":"Name","description":"服务名称"},"apis":{"items":{"$ref":"#/components/schemas/ServiceApiData"},"type":"array","title":"Apis","description":"解析后的接口列表"}},"type":"object","required":["serviceId","name","apis"],"title":"UpdateServiceMsg","description":"语义接口中心:服务属性数据结构"},"UpdateServiceRequest":{"properties":{"serviceId":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serviceid","description":"服务ID(更新时传递)"},"data":{"additionalProperties":true,"type":"object","title":"Data","description":"对应 YAML 内容的数据对象"}},"type":"object","required":["data"],"title":"UpdateServiceRequest","description":"POST /api/service 请求数据结构"},"UpdateServiceRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"$ref":"#/components/schemas/UpdateServiceMsg","title":"Result"}},"type":"object","required":["code","message","result"],"title":"UpdateServiceRsp","description":"POST /api/service 返回数据结构"},"UserBlacklistRequest":{"properties":{"user_sub":{"type":"string","title":"User Sub"},"is_ban":{"type":"integer","title":"Is Ban"}},"type":"object","required":["user_sub","is_ban"],"title":"UserBlacklistRequest","description":"POST /api/blacklist/user 请求数据结构"},"UserGetMsp":{"properties":{"total":{"type":"integer","title":"Total","default":0},"userInfoList":{"items":{"$ref":"#/components/schemas/UserInfo"},"type":"array","title":"Userinfolist","default":[]}},"type":"object","title":"UserGetMsp","description":"GET /api/user result"},"UserGetRsp":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"type":"string","title":"Message"},"result":{"$ref":"#/components/schemas/UserGetMsp"}},"type":"object","required":["code","message","result"],"title":"UserGetRsp","description":"GET /api/user 返回数据结构"},"UserInfo":{"properties":{"userSub":{"type":"string","title":"Usersub","default":""},"userName":{"type":"string","title":"Username","default":""},"autoExecute":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Autoexecute","default":false}},"type":"object","title":"UserInfo","description":"用户信息数据结构"},"UserUpdateRequest":{"properties":{"autoExecute":{"type":"boolean","title":"Autoexecute","description":"是否自动执行","default":false}},"type":"object","title":"UserUpdateRequest","description":"更新用户信息请求体"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"_GetAuthKeyMsg":{"properties":{"api_key_exists":{"type":"boolean","title":"Api Key Exists"}},"type":"object","required":["api_key_exists"],"title":"_GetAuthKeyMsg","description":"GET /api/auth/key Result数据结构"},"param":{"properties":{"content":{"additionalProperties":true,"type":"object","title":"Content","description":"流执行过程中的参数补充内容","default":{}},"description":{"type":"string","title":"Description","description":"流执行过程中的参数补充描述","default":""}},"type":"object","title":"param","description":"流执行过程中的参数补充"}}}} \ No newline at end of file -- Gitee From ffdaf8272e146617f2d11651004e6556c3f01872 Mon Sep 17 00:00:00 2001 From: zxstty Date: Mon, 11 Aug 2025 19:21:57 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E6=9B=B4=E6=96=B0=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/routers/user.py | 7 +------ apps/services/user.py | 5 ++--- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/apps/routers/user.py b/apps/routers/user.py index 3bc1e06c..537f1bf3 100644 --- a/apps/routers/user.py +++ b/apps/routers/user.py @@ -56,12 +56,7 @@ async def update_user_info( """更新用户信息接口""" # 更新用户信息 - result = await UserManager.update_userinfo_by_user_sub(user_sub, data) - if not result: - return JSONResponse( - status_code=status.HTTP_404_NOT_FOUND, - content={"code": status.HTTP_404_NOT_FOUND, "message": "用户信息更新失败"}, - ) + await UserManager.update_userinfo_by_user_sub(user_sub, data) return JSONResponse( status_code=status.HTTP_200_OK, content={"code": status.HTTP_200_OK, "message": "用户信息更新成功"}, diff --git a/apps/services/user.py b/apps/services/user.py index ef50e9e3..1b96df18 100644 --- a/apps/services/user.py +++ b/apps/services/user.py @@ -59,7 +59,7 @@ class UserManager: return User(**user_data) if user_data else None @staticmethod - async def update_userinfo_by_user_sub(user_sub: str, data: UserUpdateRequest) -> bool: + async def update_userinfo_by_user_sub(user_sub: str, data: UserUpdateRequest) -> None: """ 根据用户sub更新用户信息 @@ -74,8 +74,7 @@ class UserManager: "auto_execute": data.auto_execute, } } - result = await user_collection.update_one({"_id": user_sub}, update_dict) - return result.modified_count > 0 + await user_collection.update_one({"_id": user_sub}, update_dict) @staticmethod async def update_refresh_revision_by_user_sub(user_sub: str, *, refresh_revision: bool = False) -> bool: -- Gitee From d7312fdb1826520ddc12ba55ac268044ecd87128 Mon Sep 17 00:00:00 2001 From: zxstty Date: Mon, 11 Aug 2025 21:06:57 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dmcp=E5=AE=89=E8=A3=85?= =?UTF-8?q?=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/scheduler/executor/agent.py | 2 +- apps/scheduler/pool/loader/mcp.py | 24 ++++++++++++------------ apps/services/mcp_service.py | 2 +- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/apps/scheduler/executor/agent.py b/apps/scheduler/executor/agent.py index 5c5bcda2..5fbaef9e 100644 --- a/apps/scheduler/executor/agent.py +++ b/apps/scheduler/executor/agent.py @@ -273,7 +273,7 @@ class MCPAgentExecutor(BaseExecutor): self.resoning_llm ) await self.update_tokens() - error_message = MCPPlanner.change_err_message_to_description( + error_message = await MCPPlanner.change_err_message_to_description( error_message=self.task.state.error_message, tool=mcp_tool, input_params=self.task.state.current_input, diff --git a/apps/scheduler/pool/loader/mcp.py b/apps/scheduler/pool/loader/mcp.py index bf007fc8..1da06b53 100644 --- a/apps/scheduler/pool/loader/mcp.py +++ b/apps/scheduler/pool/loader/mcp.py @@ -95,7 +95,6 @@ class MCPLoader(metaclass=SingletonMeta): try: if not config.config.auto_install: print(f"[Installer] MCP模板无需安装: {mcp_id}") # noqa: T201 - elif isinstance(config.config, MCPServerStdioConfig): print(f"[Installer] Stdio方式的MCP模板,开始自动安装: {mcp_id}") # noqa: T201 if "uv" in config.config.command: @@ -388,6 +387,7 @@ class MCPLoader(metaclass=SingletonMeta): # 更新数据库 mongo = MongoDB() mcp_collection = mongo.get_collection("mcp") + logger.info("[MCPLoader] 更新MCP模板状态: %s -> %s", mcp_id, status) await mcp_collection.update_one( {"_id": mcp_id}, {"$set": {"status": status}}, @@ -423,17 +423,6 @@ class MCPLoader(metaclass=SingletonMeta): ) if mcp_env is not None: mcp_config.config.env.update(mcp_env) - user_config_path = user_path / "config.json" - # 更新用户配置 - f = await user_config_path.open("w", encoding="utf-8", errors="ignore") - await f.write( - json.dumps( - mcp_config.model_dump(by_alias=True, exclude_none=True), - indent=4, - ensure_ascii=False, - ) - ) - await f.aclose() if mcp_config.type == MCPType.STDIO: index = None for i in range(len(mcp_config.config.args)): @@ -447,6 +436,17 @@ class MCPLoader(metaclass=SingletonMeta): mcp_config.config.args.append(str(user_path)+'/project') else: mcp_config.config.args = ["--directory", str(user_path)+'/project'] + mcp_config.config.args + user_config_path = user_path / "config.json" + # 更新用户配置 + f = await user_config_path.open("w", encoding="utf-8", errors="ignore") + await f.write( + json.dumps( + mcp_config.model_dump(by_alias=True, exclude_none=True), + indent=4, + ensure_ascii=False, + ) + ) + await f.aclose() # 更新数据库 mongo = MongoDB() mcp_collection = mongo.get_collection("mcp") diff --git a/apps/services/mcp_service.py b/apps/services/mcp_service.py index 434c8750..324ba70d 100644 --- a/apps/services/mcp_service.py +++ b/apps/services/mcp_service.py @@ -258,7 +258,7 @@ class MCPServiceManager: if index >= len(config.args): config.args.append(str(mcp_path)) else: - config.args[index+1] = str(mcp_path) + config.args[index] = str(mcp_path) else: config.args += ["--directory", str(mcp_path)] await MCPLoader._insert_template_db(mcp_id=mcp_id, config=mcp_server) -- Gitee From 524655b61eebc0b47854340af59ea8216a58c8c6 Mon Sep 17 00:00:00 2001 From: zxstty Date: Mon, 11 Aug 2025 22:37:20 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E5=AE=8C=E5=96=84agent?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/llm/prompt.py | 2 +- apps/routers/chat.py | 1 - apps/scheduler/executor/agent.py | 6 +++--- apps/scheduler/mcp_agent/host.py | 9 +++++---- apps/scheduler/mcp_agent/plan.py | 3 +-- apps/scheduler/mcp_agent/prompt.py | 10 +++++++--- 6 files changed, 17 insertions(+), 14 deletions(-) diff --git a/apps/llm/prompt.py b/apps/llm/prompt.py index 7cf555be..7702f6d0 100644 --- a/apps/llm/prompt.py +++ b/apps/llm/prompt.py @@ -19,7 +19,7 @@ JSON_GEN_BASIC = dedent(r""" Background information is given in XML tags. - Here are the conversations between you and the user: + Here are the background information between you and the user: {% if conversation|length > 0 %} {% for message in conversation %} diff --git a/apps/routers/chat.py b/apps/routers/chat.py index 75b82921..888fbd04 100644 --- a/apps/routers/chat.py +++ b/apps/routers/chat.py @@ -113,7 +113,6 @@ async def chat_generator(post_body: RequestData, user_sub: str, session_id: str) logger.info("[Chat] 答案包含敏感词!") await Activity.remove_active(active_id) return - # 创建新Record,存入数据库 await save_data(task, user_sub, post_body) diff --git a/apps/scheduler/executor/agent.py b/apps/scheduler/executor/agent.py index 5fbaef9e..b09d8f6c 100644 --- a/apps/scheduler/executor/agent.py +++ b/apps/scheduler/executor/agent.py @@ -139,7 +139,7 @@ class MCPAgentExecutor(BaseExecutor): tool_id = self.task.runtime.temporary_plans.plans[self.task.state.step_index].tool step = self.task.runtime.temporary_plans.plans[self.task.state.step_index] mcp_tool = self.tools[tool_id] - self.task.state.current_input = await MCPHost._get_first_input_params(mcp_tool, step.instruction, self.task) + self.task.state.current_input = await MCPHost._get_first_input_params(mcp_tool, self.task.runtime.question, step.instruction, self.task) else: # 获取后续输入参数 if isinstance(self.params, param): @@ -151,7 +151,7 @@ class MCPAgentExecutor(BaseExecutor): tool_id = self.task.runtime.temporary_plans.plans[self.task.state.step_index].tool mcp_tool = self.tools[tool_id] step = self.task.runtime.temporary_plans.plans[self.task.state.step_index] - self.task.state.current_input = await MCPHost._fill_params(mcp_tool, step.instruction, self.task.state.current_input, self.task.state.error_message, params, params_description) + self.task.state.current_input = await MCPHost._fill_params(mcp_tool, self.task.runtime.question, step.instruction, self.task.state.current_input, self.task.state.error_message, params, params_description) async def reset_step_to_index(self, start_index: int) -> None: """重置步骤到开始""" @@ -415,7 +415,7 @@ class MCPAgentExecutor(BaseExecutor): ) if error_type.type == ErrorType.DECORRECT_PLAN or user_info.auto_execute: await self.plan(is_replan=True) - self.reset_step_to_index(self.task.state.step_index) + await self.reset_step_to_index(self.task.state.step_index) elif error_type.type == ErrorType.MISSING_PARAM: await self.generate_params_with_null() elif self.task.state.step_status == StepStatus.SUCCESS: diff --git a/apps/scheduler/mcp_agent/host.py b/apps/scheduler/mcp_agent/host.py index e414e17f..0674415c 100644 --- a/apps/scheduler/mcp_agent/host.py +++ b/apps/scheduler/mcp_agent/host.py @@ -48,12 +48,11 @@ class MCPHost: context_list=task.context, ) - async def _get_first_input_params(mcp_tool: MCPTool, query: str, task: Task) -> dict[str, Any]: + async def _get_first_input_params(mcp_tool: MCPTool, goal: str, query: str, task: Task) -> dict[str, Any]: """填充工具参数""" # 更清晰的输入·指令,这样可以调用generate llm_query = rf""" - 请使用参数生成工具,生成满足以下目标的工具参数: - + 请充分利用背景中的信息,生成满足以下目标的工具参数: {query} """ @@ -62,7 +61,7 @@ class MCPHost: llm_query, [ {"role": "system", "content": "You are a helpful assistant."}, - {"role": "user", "content": await MCPHost.assemble_memory(task)}, + {"role": "user", "content": "用户的总目标是:\n"+goal+(await MCPHost.assemble_memory(task))}, ], mcp_tool.input_schema, ) @@ -70,6 +69,7 @@ class MCPHost: async def _fill_params(mcp_tool: MCPTool, goal: str, + current_goal: str, current_input: dict[str, Any], error_message: str = "", params: dict[str, Any] = {}, params_description: str = "") -> dict[str, Any]: @@ -77,6 +77,7 @@ class MCPHost: prompt = _env.from_string(REPAIR_PARAMS).render( tool_name=mcp_tool.name, gaol=goal, + current_goal=current_goal, tool_description=mcp_tool.description, input_schema=mcp_tool.input_schema, current_input=current_input, diff --git a/apps/scheduler/mcp_agent/plan.py b/apps/scheduler/mcp_agent/plan.py index 35c44030..1243abcf 100644 --- a/apps/scheduler/mcp_agent/plan.py +++ b/apps/scheduler/mcp_agent/plan.py @@ -31,7 +31,7 @@ from apps.scheduler.slot.slot import Slot _env = SandboxedEnvironment( loader=BaseLoader, - autoescape=True, + autoescape=False, trim_blocks=True, lstrip_blocks=True, ) @@ -284,7 +284,6 @@ class MCPPlanner(McpBase): memory=memory, goal=user_goal, ) - async for chunk in resoning_llm.call( [{"role": "user", "content": prompt}], streaming=True, diff --git a/apps/scheduler/mcp_agent/prompt.py b/apps/scheduler/mcp_agent/prompt.py index 469ad2f2..77374f4c 100644 --- a/apps/scheduler/mcp_agent/prompt.py +++ b/apps/scheduler/mcp_agent/prompt.py @@ -779,7 +779,9 @@ REPAIR_PARAMS = dedent(r""" mysql_analyzer 分析MySQL数据库性能 - # 目标 + # 总目标 + 我需要扫描当前mysql数据库,分析性能瓶颈, 并调优 + # 当前阶段目标 我要连接MySQL数据库,分析性能瓶颈,并调优。 # 工具入参的schema { @@ -834,8 +836,10 @@ REPAIR_PARAMS = dedent(r""" {{tool_name}} {{tool_description}} - # 目标 + # 总目标 {{goal}} + # 当前阶段目标 + {{current_goal}} # 工具入参scheme {{input_schema}} # 工具入参 @@ -873,7 +877,7 @@ MEMORY_TEMPLATE = dedent(r""" {% for ctx in context_list %} - 第{{loop.index}}步:{{ctx.step_description}} - 调用工具 `{{ctx.step_id}}`,并提供参数 `{{ctx.input_data}}` - - 执行状态:{{ctx.status}} + - 执行状态:{{ctx.step_status}} - 得到数据:`{{ctx.output_data}}` {% endfor %} """) -- Gitee From 3142b1c88cf4b2bf7d27cc61d8d70f97657930ac Mon Sep 17 00:00:00 2001 From: zxstty Date: Tue, 12 Aug 2025 10:25:00 +0800 Subject: [PATCH 5/6] =?UTF-8?q?step=E8=BF=94=E5=9B=9E=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/common/queue.py | 1 + apps/schemas/message.py | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/apps/common/queue.py b/apps/common/queue.py index 089d475e..6e82af91 100644 --- a/apps/common/queue.py +++ b/apps/common/queue.py @@ -60,6 +60,7 @@ class MessageQueue: flowStatus=task.state.flow_status, stepId=task.state.step_id, stepName=task.state.step_name, + stepDescription=task.state.step_description, stepStatus=task.state.step_status ) else: diff --git a/apps/schemas/message.py b/apps/schemas/message.py index c55fc6d1..5b465ee5 100644 --- a/apps/schemas/message.py +++ b/apps/schemas/message.py @@ -34,6 +34,11 @@ class MessageFlow(BaseModel): step_name: str = Field(description="当前步骤名称", alias="stepName") sub_step_id: str | None = Field(description="当前子步骤ID", alias="subStepId", default=None) sub_step_name: str | None = Field(description="当前子步骤名称", alias="subStepName", default=None) + step_description: str | None = Field( + description="当前步骤描述", + alias="stepDescription", + default=None, + ) step_status: StepStatus = Field(description="当前步骤状态", alias="stepStatus") -- Gitee From ebe0d4f7a0225be3d209558881b68268fc8aad8e Mon Sep 17 00:00:00 2001 From: zxstty Date: Tue, 12 Aug 2025 10:41:03 +0800 Subject: [PATCH 6/6] =?UTF-8?q?flow=E5=BC=80=E5=A7=8B=E7=9A=84=E6=97=B6?= =?UTF-8?q?=E5=80=99=E8=BF=94=E5=9B=9E=E8=AE=A1=E5=88=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/scheduler/executor/agent.py | 16 +++++++++++++++- apps/scheduler/executor/base.py | 7 +------ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/apps/scheduler/executor/agent.py b/apps/scheduler/executor/agent.py index b09d8f6c..a7c0b1ce 100644 --- a/apps/scheduler/executor/agent.py +++ b/apps/scheduler/executor/agent.py @@ -459,9 +459,23 @@ class MCPAgentExecutor(BaseExecutor): ) return self.task.state.flow_status = FlowStatus.RUNNING + plan = { + "plans": [] + } + for p in self.task.runtime.temporary_plans.plans: + if p.tool == FINAL_TOOL_ID: + continue + mcp_tool = self.tools.get(p.tool, None) + plan["plans"].append( + { + "stepId": p.step_id, + "stepName": mcp_tool.name, + "stepDescription": p.content + } + ) await self.push_message( EventType.FLOW_START, - data={} + data=plan ) if self.task.state.step_id == FINAL_TOOL_ID: # 如果已经是最后一步,直接结束 diff --git a/apps/scheduler/executor/base.py b/apps/scheduler/executor/base.py index 8dcb99c7..877341f0 100644 --- a/apps/scheduler/executor/base.py +++ b/apps/scheduler/executor/base.py @@ -44,12 +44,7 @@ class BaseExecutor(BaseModel, ABC): :param event_type: 事件类型 :param data: 消息数据,如果是FLOW_START事件且data为None,则自动构建FlowStartContent """ - if event_type == EventType.FLOW_START.value and isinstance(data, dict): - data = FlowStartContent( - question=self.question, - params=self.task.runtime.filled, - ).model_dump(exclude_none=True, by_alias=True) - elif event_type == EventType.TEXT_ADD.value and isinstance(data, str): + if event_type == EventType.TEXT_ADD.value and isinstance(data, str): data = TextAddContent(text=data).model_dump(exclude_none=True, by_alias=True) if data is None: -- Gitee