|
|
@@ -10,23 +10,6 @@ from tool_converter import ToolConverter
|
|
|
from tool_handler import ToolCallHandler
|
|
|
|
|
|
|
|
|
-# ========== 默认组件提示(降级方案) ==========
|
|
|
-# 当前端未发送组件列表时使用的默认提示
|
|
|
-DEFAULT_COMPONENTS_PROMPT = """### 可用的 json-render 组件
|
|
|
-
|
|
|
-你可以使用基础组件来展示结构化数据:
|
|
|
-- `card`: 卡片容器
|
|
|
-- `stack`: 布局容器
|
|
|
-- `heading`: 标题 (h1-h6)
|
|
|
-- `text`: 文本内容
|
|
|
-- `button`: 按钮
|
|
|
-- `badge`: 徽章标签
|
|
|
-- `code-block`: 代码块
|
|
|
-- `data-table`: 数据表格
|
|
|
-
|
|
|
-将组件 JSON 包含在 markdown 代码块中返回。
|
|
|
-"""
|
|
|
-
|
|
|
|
|
|
# ========== 基础 System Prompt ==========
|
|
|
# 不包含组件列表和 MCP 工具说明,由 _build_system_prompt 动态构建
|
|
|
@@ -36,35 +19,6 @@ BASE_SYSTEM_PROMPT = """你是一个 AI 助手,可以通过调用 MCP 工具
|
|
|
|
|
|
{MCP_STATUS}
|
|
|
|
|
|
-## 重要:你可以返回 UI 组件
|
|
|
-
|
|
|
-除了普通文本,你还可以返回 **json-render 组件 spec** 来展示更丰富的 UI。组件 spec 是一个 JSON 对象,前端会自动渲染成 UI 组件。
|
|
|
-
|
|
|
-### 组件格式
|
|
|
-
|
|
|
-返回组件时,使用以下 JSON 格式(在你的回复中包裹在 ```json 中):
|
|
|
-
|
|
|
-```json
|
|
|
-{
|
|
|
- "type": "组件类型",
|
|
|
- "其他属性": "..."
|
|
|
-}
|
|
|
-```
|
|
|
-
|
|
|
-### 使用指南
|
|
|
-
|
|
|
-1. **调用工具后,优先使用对应组件展示结果**
|
|
|
- - 根据工具返回的数据类型选择合适的组件
|
|
|
- - 组件必须放在代码块中返回
|
|
|
-
|
|
|
-2. **你可以混合文本和组件**
|
|
|
- - 先用文本解释结果
|
|
|
- - 然后用组件展示数据
|
|
|
-
|
|
|
-3. **给出操作建议时使用按钮组件**
|
|
|
- - 用户查看列表后,建议"下一页"、"筛选"等操作
|
|
|
- - 使用 `button` 或 `suggestion-buttons` 组件
|
|
|
-
|
|
|
{MCP_TOOLS_GUIDE}
|
|
|
"""
|
|
|
|
|
|
@@ -141,7 +95,7 @@ class ConversationManager:
|
|
|
self.enabled_mcp_list = enabled_mcp_list # 前端传递的已启用 MCP 列表
|
|
|
|
|
|
# 组件提示词(由前端动态提供)
|
|
|
- self.components_prompt = components_prompt or DEFAULT_COMPONENTS_PROMPT
|
|
|
+ self.components_prompt = components_prompt # 前端必须提供,无 fallback
|
|
|
|
|
|
# 构建完整的系统提示词
|
|
|
self.system_prompt = self._build_system_prompt()
|
|
|
@@ -149,7 +103,7 @@ class ConversationManager:
|
|
|
# DEBUG: 打印接收到的 token 和启用列表
|
|
|
print(f"[DEBUG ConversationManager.__init__] mcp_tokens keys: {list(self.mcp_tokens.keys())}")
|
|
|
print(f"[DEBUG ConversationManager.__init__] enabled_mcp_list: {self.enabled_mcp_list}")
|
|
|
- print(f"[DEBUG ConversationManager.__init__] Using dynamic components: {components_prompt is not None}")
|
|
|
+ print(f"[DEBUG ConversationManager.__init__] components_prompt length: {len(components_prompt) if components_prompt else 0} chars")
|
|
|
for k, v in self.mcp_tokens.items():
|
|
|
print(f"[DEBUG ConversationManager.__init__] {k}: {v[:30] if v else 'None'}...")
|
|
|
|