fix: send full extract_webpage content to model
This commit is contained in:
parent
e2ba632ac8
commit
f5cf2fb7e7
@ -95,6 +95,7 @@
|
|||||||
<TokenDrawer
|
<TokenDrawer
|
||||||
:visible="Boolean(currentConversationId)"
|
:visible="Boolean(currentConversationId)"
|
||||||
:collapsed="tokenPanelCollapsed"
|
:collapsed="tokenPanelCollapsed"
|
||||||
|
@toggle="handleTokenPanelToggleClick"
|
||||||
:current-conversation-tokens="currentConversationTokens"
|
:current-conversation-tokens="currentConversationTokens"
|
||||||
:current-context-tokens="currentContextTokens"
|
:current-context-tokens="currentContextTokens"
|
||||||
:container-status="containerStatus"
|
:container-status="containerStatus"
|
||||||
|
|||||||
@ -1,6 +1,9 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="token-drawer" v-if="visible" :class="{ collapsed }">
|
<div class="token-drawer" v-if="visible" :class="{ collapsed }">
|
||||||
<div class="token-display-panel">
|
<div class="token-display-panel">
|
||||||
|
<button class="token-close-btn" type="button" @click="emit('toggle')">
|
||||||
|
✕
|
||||||
|
</button>
|
||||||
<div class="token-panel-content">
|
<div class="token-panel-content">
|
||||||
<div class="usage-dashboard">
|
<div class="usage-dashboard">
|
||||||
<div class="usage-cell usage-cell--left usage-cell--token panel-card">
|
<div class="usage-cell usage-cell--left usage-cell--token panel-card">
|
||||||
@ -95,6 +98,10 @@ defineOptions({ name: 'TokenDrawer' });
|
|||||||
|
|
||||||
import { computed } from 'vue';
|
import { computed } from 'vue';
|
||||||
|
|
||||||
|
const emit = defineEmits<{
|
||||||
|
(e: 'toggle'): void;
|
||||||
|
}>();
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
visible: boolean;
|
visible: boolean;
|
||||||
collapsed: boolean;
|
collapsed: boolean;
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
/* 顶部 Token 抽屉 */
|
/* 顶部 Token 抽屉 */
|
||||||
.token-drawer {
|
.token-drawer {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 20px;
|
top: 56px;
|
||||||
left: 0;
|
left: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
@ -24,6 +24,7 @@
|
|||||||
box-shadow: 0 24px 42px rgba(61, 57, 41, 0.18);
|
box-shadow: 0 24px 42px rgba(61, 57, 41, 0.18);
|
||||||
transition: transform 0.35s ease, opacity 0.35s ease;
|
transition: transform 0.35s ease, opacity 0.35s ease;
|
||||||
pointer-events: auto;
|
pointer-events: auto;
|
||||||
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.token-drawer.collapsed .token-display-panel {
|
.token-drawer.collapsed .token-display-panel {
|
||||||
@ -163,6 +164,33 @@
|
|||||||
color: var(--claude-text-secondary);
|
color: var(--claude-text-secondary);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.token-close-btn {
|
||||||
|
position: absolute;
|
||||||
|
top: 12px;
|
||||||
|
left: 12px;
|
||||||
|
width: 28px;
|
||||||
|
height: 28px;
|
||||||
|
border: 1px solid var(--claude-border);
|
||||||
|
border-radius: 50%;
|
||||||
|
background: rgba(255, 255, 255, 0.8);
|
||||||
|
color: var(--claude-text);
|
||||||
|
font-size: 14px;
|
||||||
|
display: grid;
|
||||||
|
place-items: center;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: background 0.2s ease, transform 0.2s ease;
|
||||||
|
box-shadow: 0 8px 18px rgba(0, 0, 0, 0.08);
|
||||||
|
}
|
||||||
|
|
||||||
|
.token-close-btn:hover {
|
||||||
|
background: var(--claude-surface);
|
||||||
|
transform: translateY(-1px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.token-close-btn:active {
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
|
||||||
.panel-row {
|
.panel-row {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(auto-fit, minmax(360px, 1fr));
|
grid-template-columns: repeat(auto-fit, minmax(360px, 1fr));
|
||||||
|
|||||||
@ -562,12 +562,16 @@ def _format_extract_webpage(result_data: Dict[str, Any]) -> str:
|
|||||||
url = result_data.get("url") or "目标网页"
|
url = result_data.get("url") or "目标网页"
|
||||||
content = result_data.get("content") or ""
|
content = result_data.get("content") or ""
|
||||||
length = len(content)
|
length = len(content)
|
||||||
preview, truncated = _preview_text(content, 800)
|
truncated_flag = result_data.get("truncated") or False
|
||||||
header = f"提取完成:{url},长度 {length} 字符。"
|
header = f"提取完成:{url},长度 {length} 字符。"
|
||||||
if not content:
|
if not content:
|
||||||
return f"{header} 内容为空。"
|
return f"{header} 内容为空。"
|
||||||
note = "(截断预览)" if truncated else "(未截断)"
|
# 为模型保留完整正文,避免 800 字预览导致上下文缺失
|
||||||
return "\n".join([f"{header}{note}", "```", preview, "```"])
|
note_parts = []
|
||||||
|
if truncated_flag:
|
||||||
|
note_parts.append("原始内容已被上游截断")
|
||||||
|
note = f"({';'.join(note_parts)})" if note_parts else ""
|
||||||
|
return "\n".join([f"{header}{note}", "```", content, "```"])
|
||||||
|
|
||||||
|
|
||||||
def _format_vlm_analyze(result_data: Dict[str, Any]) -> str:
|
def _format_vlm_analyze(result_data: Dict[str, Any]) -> str:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user