2 KiB
2 KiB
Story 5.1: Tavily Web-Suche als Agent-Tool
Status: done
Story
Als Nutzer, möchte ich Web-Suche als optionales Tool für jeden Agent, so dass Agents aktuelle Informationen aus dem Internet nutzen können.
Acceptance Criteria
- Agent mit
tools.web_search = true→web_search-Tool wird gebunden TAVILY_API_KEYgesetzt → formatierte Trefferliste wird zurückgegebenTAVILY_API_KEYnicht gesetzt → Fehlermeldung, kein Crashmax_results=5als Standard;search_depth="basic"- Tests: gemockt via
@patch("tools.web_search.TavilyClient")
Tasks / Subtasks
- Task 1:
tools/web_search.pymit@tool-Decorator (AC: 1–4)- Subtask 1.1:
TavilyClient-Import (lazy, innerhalb der Funktion) - Subtask 1.2: API-Key-Check vor Client-Initialisierung (AC: 3)
- Subtask 1.3: Response-Formatierung: Titel, URL, Snippet
- Subtask 1.1:
- Task 2: Tool-Binding im dynamischen Graph-Builder (AC: 1)
- Subtask 2.1:
tools.web_search = true→llm.bind_tools([web_search])
- Subtask 2.1:
- Task 3: Unit-Tests (AC: 2, 3, 5)
Dev Notes
from tavily import TavilyClientlazy import — keinImportErrorwenn nicht installiert- LangChain
@tool-Decorator macht die Funktion Tool-Aufruf-kompatibel - Fehlerpfad gibt
"[Web Search Error] ..."String zurück (kein Exception-Raise)
Project Structure Notes
backend/tools/web_search.pybackend/tests/test_tools.py
References
- [Source: _bmad-output/planning-artifacts/prd.md#FR-05.2]
Dev Agent Record
Agent Model Used
Amelia (💻 BMAD Dev Agent)
Completion Notes List
- Lazy-Import von
TavilyClientverhindertImportErrorin Umgebungen ohne das Paket. - Mock-Pattern:
@patch("tools.web_search.TavilyClient")mockt direkt den Client.
File List
backend/tools/web_search.pybackend/tools/__init__.pybackend/tests/test_tools.py