agent功能开发增加MCP后端

This commit is contained in:
2025-11-10 08:14:53 +08:00
parent 9a723f04f1
commit 800151771c
2 changed files with 36 additions and 8 deletions

View File

@@ -135,24 +135,47 @@ export const MarkdownWithCharts = ({ content }) => {
} else if (part.type === 'chart') { } else if (part.type === 'chart') {
// 渲染 ECharts 图表 // 渲染 ECharts 图表
try { try {
const chartOption = JSON.parse(part.content); // 清理可能的 Markdown 残留符号
let cleanContent = part.content.trim();
// 移除可能的前后空白和不可见字符
cleanContent = cleanContent.replace(/^\s+|\s+$/g, '');
// 尝试解析 JSON
const chartOption = JSON.parse(cleanContent);
// 验证是否是有效的 ECharts 配置
if (!chartOption || typeof chartOption !== 'object') {
throw new Error('Invalid chart configuration: not an object');
}
return ( return (
<Box key={index}> <Box key={index}>
<EChartsRenderer option={chartOption} height={350} /> <EChartsRenderer option={chartOption} height={350} />
</Box> </Box>
); );
} catch (error) { } catch (error) {
logger.error('解析 ECharts 配置失败', error, part.content); // 记录详细的错误信息
logger.error('解析 ECharts 配置失败', {
error: error.message,
contentLength: part.content.length,
contentPreview: part.content.substring(0, 200),
errorStack: error.stack
});
return ( return (
<Alert status="warning" key={index} borderRadius="md"> <Alert status="warning" key={index} borderRadius="md">
<AlertIcon /> <AlertIcon />
<VStack align="flex-start" spacing={1}> <VStack align="flex-start" spacing={1} flex="1">
<Text fontSize="sm" fontWeight="bold"> <Text fontSize="sm" fontWeight="bold">
图表配置解析失败 图表配置解析失败
</Text> </Text>
<Code fontSize="xs" maxW="100%" overflow="auto"> <Text fontSize="xs" color="gray.600">
{part.content.substring(0, 200)} 错误: {error.message}
{part.content.length > 200 ? '...' : ''} </Text>
<Code fontSize="xs" maxW="100%" overflow="auto" whiteSpace="pre-wrap">
{part.content.substring(0, 300)}
{part.content.length > 300 ? '...' : ''}
</Code> </Code>
</VStack> </VStack>
</Alert> </Alert>

View File

@@ -431,11 +431,16 @@ const AgentChatV3 = () => {
} else if (currentEvent === 'summary') { } else if (currentEvent === 'summary') {
// 收到完整总结(包含元数据) // 收到完整总结(包含元数据)
if (summaryMessageId) { if (summaryMessageId) {
// 更新已有消息的元数据,并标记流式输出完成 // 更新已有消息的元数据和内容,并标记流式输出完成
setMessages((prev) => setMessages((prev) =>
prev.map((m) => prev.map((m) =>
m.id === summaryMessageId m.id === summaryMessageId
? { ...m, metadata: data.metadata, isStreaming: false } ? {
...m,
content: data.content || summaryContent, // ✅ 使用后端返回的完整内容,如果没有则使用累积内容
metadata: data.metadata,
isStreaming: false, // ✅ 标记流式输出完成
}
: m : m
) )
); );