feat: Serper Web Search als Agent-Tool

- ToolService: serper_web_search Tool-Definition + ExecuteSerperWebSearch()
  Google-Suche via Serper.dev API mit Titel, Link, Snippet
  Knowledge Graph + Answer Box + organische Ergebnisse
- AgentRecord: UseSerperSearch Property (Default: false)
- DB-Migration: use_serper_search Spalte
- AnthropicService + ChatService: useSerperSearch Parameter durchreichen
- ChatEndpoint + AgentEndpoint: useSerperSearch in API
- Frontend: Checkbox, Badge (Serper Search), laden/speichern
- Aktivierung: Agent-Checkbox + SerperApiKey in Server-Einstellungen
This commit is contained in:
Meleki committed 2026-03-13 09:41:56 +01:00
1 parent 558ded1ed5
commit 192f41e91e
11 files changed
+150 -12

No files matched your search

+1
View File
@@ -109,6 +109,7 @@ function buildAgentCard(agent, skills) {
if (agent.useMemory) badges.push('<span class="badge badge-feature" title="Zugriff auf Erinnerungen (Memory-Tools)"><i class="fa fa-database"></i> Erinnerungen</span>');
if (agent.useAutoContext) badges.push('<span class="badge badge-feature" title="Relevante Erinnerungen werden automatisch abgerufen"><i class="fa fa-magic"></i> Auto-Kontext</span>');
if (agent.useGitHubSearch) badges.push('<span class="badge badge-feature" title="Öffentlichen Code auf GitHub durchsuchen"><i class="fa fa-github"></i> GitHub Search</span>');
if (agent.useSerperSearch) badges.push('<span class="badge badge-feature" title="Google-Suche via Serper.dev API"><i class="fa fa-google"></i> Serper Search</span>');
if (agent.webSearchVersion) {
const wsYear = agent.webSearchVersion.includes('2025') ? 'Version 2025' : 'v2026';
badges.push(`<span class="badge badge-feature" title="Web-Suche - ${wsYear}"><i class="fa fa-search"></i> Web-Suche</span>`);
+3
View File
@@ -54,6 +54,7 @@ registerPage('agent', {
const useMemoryEl = document.getElementById('agentUseMemory');
const useAutoContextEl = document.getElementById('agentUseAutoContext');
const useGitHubSearchEl = document.getElementById('agentUseGitHubSearch');
const useSerperSearchEl = document.getElementById('agentUseSerperSearch');
const webSearchVersionEl = document.getElementById('agentWebSearchVersion');
const avatarPreview = document.getElementById('avatarPreview');
const saveBtn = document.getElementById('agentSaveBtn');
@@ -96,6 +97,7 @@ registerPage('agent', {
useMemoryEl.checked = agent.useMemory !== false;
useAutoContextEl.checked = agent.useAutoContext !== false;
useGitHubSearchEl.checked = agent.useGitHubSearch || false;
useSerperSearchEl.checked = agent.useSerperSearch || false;
webSearchVersionEl.value = agent.webSearchVersion || '';
isPublicEl.checked = agent.isPublic || false;
deleteBtn.hidden = false;
@@ -139,6 +141,7 @@ registerPage('agent', {
useMemory: useMemoryEl.checked,
useAutoContext: useAutoContextEl.checked,
useGitHubSearch: useGitHubSearchEl.checked,
useSerperSearch: useSerperSearchEl.checked,
webSearchVersion: webSearchVersionEl.value,
avatar: _agentAvatarEditor.getImage(),
avatarScale: _agentAvatarEditor.getScale(),