Skip to content

Commit fa47c20

Browse files
committed
✨ web_fetch 增加 prompt 摘要功能 & 模型配置支持复制
- web_fetch 工具新增 prompt 参数,支持通过 LLM 对抓取内容进行摘要/提取 - 模型配置页面增加复制按钮,方便基于已有配置快速创建新模型
1 parent cf6d0da commit fa47c20

11 files changed

Lines changed: 53 additions & 5 deletions

File tree

src/app/service/agent/tools/web_fetch.ts

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,16 @@ import { extractHtmlContent } from "@App/app/service/offscreen/client";
66
export const WEB_FETCH_DEFINITION: ToolDefinition = {
77
name: "web_fetch",
88
description:
9-
"Fetch content from a URL. Returns extracted text for HTML pages, raw content for JSON/plain text. Use this to read web pages, APIs, or download text content.",
9+
"Fetch content from a URL. Returns extracted text for HTML pages, raw content for JSON/plain text. Use this to read web pages, APIs, or download text content. " +
10+
"Use prompt to have the LLM summarize/extract specific information from the fetched content.",
1011
parameters: {
1112
type: "object",
1213
properties: {
1314
url: { type: "string", description: "The URL to fetch (http/https)" },
15+
prompt: {
16+
type: "string",
17+
description: "When provided, the content will be processed by LLM to extract/summarize based on this prompt",
18+
},
1419
max_length: { type: "number", description: "Max characters to return (no limit by default)" },
1520
},
1621
required: ["url"],
@@ -28,10 +33,18 @@ export function stripHtmlTags(html: string): string {
2833
}
2934

3035
export class WebFetchExecutor implements ToolExecutor {
31-
constructor(private sender: MessageSend) {}
36+
private summarize?: (content: string, prompt: string) => Promise<string>;
37+
38+
constructor(
39+
private sender: MessageSend,
40+
deps?: { summarize?: (content: string, prompt: string) => Promise<string> }
41+
) {
42+
this.summarize = deps?.summarize;
43+
}
3244

3345
async execute(args: Record<string, unknown>): Promise<string> {
3446
const url = args.url as string;
47+
const prompt = args.prompt as string | undefined;
3548
const maxLength = args.max_length as number | undefined;
3649

3750
if (!url) {
@@ -102,11 +115,17 @@ export class WebFetchExecutor implements ToolExecutor {
102115
}
103116

104117
// 截断(仅当显式传入 max_length 时)
105-
const truncated = maxLength != null && content.length > maxLength;
118+
let truncated = maxLength != null && content.length > maxLength;
106119
if (truncated) {
107120
content = content.slice(0, maxLength);
108121
}
109122

123+
// LLM 摘要
124+
if (prompt && this.summarize) {
125+
content = await this.summarize(content, prompt);
126+
truncated = false;
127+
}
128+
110129
const result: Record<string, unknown> = {
111130
url,
112131
content_type: detectedType,

src/app/service/service_worker/agent.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,12 @@ export class AgentService {
192192
this.taskScheduler.init();
193193
// 注册永久内置工具
194194
const searchConfigRepo = new SearchConfigRepo();
195-
this.toolRegistry.registerBuiltin(WEB_FETCH_DEFINITION, new WebFetchExecutor(this.sender));
195+
this.toolRegistry.registerBuiltin(
196+
WEB_FETCH_DEFINITION,
197+
new WebFetchExecutor(this.sender, {
198+
summarize: (content, prompt) => this.summarizeContent(content, prompt),
199+
})
200+
);
196201
this.toolRegistry.registerBuiltin(WEB_SEARCH_DEFINITION, new WebSearchExecutor(this.sender, searchConfigRepo));
197202
// 注册 OPFS 工作区文件工具
198203
// 注入 blob URL 创建函数(通过 Offscreen 的 URL.createObjectURL)

src/locales/ach-UG/translation.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -575,6 +575,7 @@
575575
"agent_model_name": "Name",
576576
"agent_model_add": "Add Model",
577577
"agent_model_edit": "Edit",
578+
"agent_model_copy": "Copy",
578579
"agent_model_delete": "Delete",
579580
"agent_model_set_default": "Set as Default",
580581
"agent_model_default_label": "Default",

src/locales/de-DE/translation.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -607,6 +607,7 @@
607607
"agent_model_name": "Name",
608608
"agent_model_add": "Add Model",
609609
"agent_model_edit": "Edit",
610+
"agent_model_copy": "Copy",
610611
"agent_model_delete": "Delete",
611612
"agent_model_set_default": "Set as Default",
612613
"agent_model_default_label": "Default",

src/locales/en-US/translation.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -607,6 +607,7 @@
607607
"agent_model_name": "Name",
608608
"agent_model_add": "Add Model",
609609
"agent_model_edit": "Edit",
610+
"agent_model_copy": "Copy",
610611
"agent_model_delete": "Delete",
611612
"agent_model_set_default": "Set as Default",
612613
"agent_model_default_label": "Default",

src/locales/ja-JP/translation.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -607,6 +607,7 @@
607607
"agent_model_name": "名前",
608608
"agent_model_add": "モデルを追加",
609609
"agent_model_edit": "編集",
610+
"agent_model_copy": "コピー",
610611
"agent_model_delete": "削除",
611612
"agent_model_set_default": "デフォルトに設定",
612613
"agent_model_default_label": "デフォルト",

src/locales/ru-RU/translation.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -607,6 +607,7 @@
607607
"agent_model_name": "Name",
608608
"agent_model_add": "Add Model",
609609
"agent_model_edit": "Edit",
610+
"agent_model_copy": "Copy",
610611
"agent_model_delete": "Delete",
611612
"agent_model_set_default": "Set as Default",
612613
"agent_model_default_label": "Default",

src/locales/vi-VN/translation.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -607,6 +607,7 @@
607607
"agent_model_name": "Name",
608608
"agent_model_add": "Add Model",
609609
"agent_model_edit": "Edit",
610+
"agent_model_copy": "Copy",
610611
"agent_model_delete": "Delete",
611612
"agent_model_set_default": "Set as Default",
612613
"agent_model_default_label": "Default",

src/locales/zh-CN/translation.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -607,6 +607,7 @@
607607
"agent_model_name": "名称",
608608
"agent_model_add": "添加模型",
609609
"agent_model_edit": "编辑",
610+
"agent_model_copy": "复制",
610611
"agent_model_delete": "删除",
611612
"agent_model_set_default": "设为默认",
612613
"agent_model_default_label": "默认",

src/locales/zh-TW/translation.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -607,6 +607,7 @@
607607
"agent_model_name": "名稱",
608608
"agent_model_add": "新增模型",
609609
"agent_model_edit": "編輯",
610+
"agent_model_copy": "複製",
610611
"agent_model_delete": "刪除",
611612
"agent_model_set_default": "設為預設",
612613
"agent_model_default_label": "預設",

0 commit comments

Comments
 (0)