diff --git a/apps/common/queue.py b/apps/common/queue.py
index 089d475e69752dc7fac595b3556eead69bd64aac..6e82af915e2a70f743c629902c149b7ebc0f7a0e 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/constants.py b/apps/constants.py
index 710060b3dd29e50ea0eb05aa10069ca834e224dc..20cb79b54ac8db5450fdbb296cb400b47a29adf0 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/llm/prompt.py b/apps/llm/prompt.py
index 7cf555be390bc72301323cd103c1a7ec0ab7a085..7702f6d0912947612b64145402398f222e01a148 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 68a5b4af8096a3c82072131fcdce266da520a3f8..888fbd04f67c0ad2ad9482db8d37016e0d71447d 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,16 +104,15 @@ 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,存入数据库
await save_data(task, user_sub, post_body)
@@ -132,7 +130,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 +146,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 +157,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 8d0105ff577ae4c425ad47fe3785743628627b4e..ed994f6fe2e611562fa092db39265d1d57dfb9bc 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 0a2995dd6bc2dedec535397ef3bec62584397d32..537f1bf3adb95e8b48ef1b3d384376bae86ac802 100644
--- a/apps/routers/user.py
+++ b/apps/routers/user.py
@@ -56,13 +56,8 @@ 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": "用户信息更新成功"},
- )
+ await UserManager.update_userinfo_by_user_sub(user_sub, data)
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 60394bd76cb11dccc25ab1370cdded4034ac1311..a7c0b1ce91aed82e10f6cfd86ecd3968e4f5e5dc 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):
@@ -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, 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:
"""重置步骤到开始"""
@@ -272,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,
@@ -414,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:
@@ -458,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 8dcb99c7125e7d1ccc7debde39e4d9963724985b..877341f08e776c168b618ff5cbea8e17c9cfc956 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:
diff --git a/apps/scheduler/mcp_agent/host.py b/apps/scheduler/mcp_agent/host.py
index 85d992c8d5249299daff12d864ac47b9676ba2a2..0674415ce4561d64a3bb386bc3e2e18817a0cee6 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,19 +61,23 @@ 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,
)
return await json_generator.generate()
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]:
llm_query = "请生成修复之后的工具参数"
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 35c440309a4694e1c75967c40b08b6e8f59710a5..1243abcf063b7aa439dfb6d8681926ce8967f0d5 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 365179f6e5c763fcd440b8e4260400ee0e7229d3..77374f4c69bd2c05ffd14915556a8fa28be8bc20 100644
--- a/apps/scheduler/mcp_agent/prompt.py
+++ b/apps/scheduler/mcp_agent/prompt.py
@@ -768,14 +768,21 @@ GET_MISSING_PARAMS = dedent(r"""
)
REPAIR_PARAMS = dedent(r"""
你是一个工具参数修复器。
- 你的任务是根据当前的工具信息、工具入参的schema、工具当前的入参、工具的报错、补充的参数和补充的参数描述,修复当前工具的入参。
-
+ 你的任务是根据当前的工具信息、目标、工具入参的schema、工具当前的入参、工具的报错、补充的参数和补充的参数描述,修复当前工具的入参。
+
+ 注意:
+ 1.最终修复的参数要符合目标和工具入参的schema。
+
# 样例
# 工具信息
mysql_analyzer
分析MySQL数据库性能
+ # 总目标
+ 我需要扫描当前mysql数据库,分析性能瓶颈, 并调优
+ # 当前阶段目标
+ 我要连接MySQL数据库,分析性能瓶颈,并调优。
# 工具入参的schema
{
"type": "object",
@@ -829,6 +836,10 @@ REPAIR_PARAMS = dedent(r"""
{{tool_name}}
{{tool_description}}
+ # 总目标
+ {{goal}}
+ # 当前阶段目标
+ {{current_goal}}
# 工具入参scheme
{{input_schema}}
# 工具入参
@@ -866,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 %}
""")
diff --git a/apps/scheduler/pool/loader/mcp.py b/apps/scheduler/pool/loader/mcp.py
index bf007fc862455905321d044a27dd67b12962f6b0..1da06b53630d3188ca55c16969823f3d1e063516 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/scheduler/scheduler/scheduler.py b/apps/scheduler/scheduler/scheduler.py
index a5e14b7fadcb023a60106e554ae9b81710e7d2d1..b524d249a6f55caf779a473ef39db35a463525b9 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 3bcabd5795657cc1c495189963b5f734b8beb8eb..3ae7c42528d27c3e0d17970ba5e959db8e1bed44 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/message.py b/apps/schemas/message.py
index c55fc6d15d96a2c554b21063d0acc67ca9f2793e..5b465ee54321bbd4c649753911025bff41840186 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")
diff --git a/apps/schemas/record.py b/apps/schemas/record.py
index dbc06b106994d5889386d6bff92a0f88b40e380f..b6b70dd6fbd5b89aafb06af5146b8feb1fb84862 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 197f439d3bc16fb1663388dd92489c512adfacbd..9b9a25439910e715dd026281929b8359354fa818 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 df322cc8792c477bed9d5712e968a6512e38ea84..7ba20cbb4300a5fa5cb60e37cdb887f38d54232f 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/mcp_service.py b/apps/services/mcp_service.py
index 434c875036675e63e7e4994d41bca210abe94a41..324ba70d5e5d6c08ae9f9daab043890bf08e91ff 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)
diff --git a/apps/services/task.py b/apps/services/task.py
index 38022f4000527c2c8eb95a7d88090e6149820399..49c9f4b037cb95408588ce304d0f483af88b4ed8 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/apps/services/user.py b/apps/services/user.py
index ef50e9e3ab35c32c76cf3090a5a90e637aac269d..1b96df18143f5a87b102f68e2bb4e2df62753f05 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:
diff --git a/openapi.json b/openapi.json
deleted file mode 100644
index e8ffc33b62aebe2119eccf1dd8f9dba5144800b9..0000000000000000000000000000000000000000
--- 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