Schemaauskunft im Datenbank-Werkzeug: "kein Feld" wird eine Feststellung (#676)
- Aktionen describe (alle Spalten einer freigegebenen Tabelle, mit dem Satz, dass nicht Genanntes nicht existiert) und tables (freigegebene Tabellen, vorhanden oder fehlend) - "Unknown column" / "no such table" usw. werden mit dem Vorhandenen beantwortet - MySQL, Postgres, SQL Server, SQLite; nur fuer freigegebene Tabellen - SQLite als Datenbanktyp; die Abfragen schreibt das Werkzeug selbst, PRAGMA bleibt im Agenten-SQL verboten - MongoDB: describe nennt die Felder aus den Dokumenten - describe/tables sind Lesezugriffe (Freigabeschluessel select), Vorpruefung der Tabelle Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
17d90cf952
commit
a02b1996dd
@@ -347,6 +347,10 @@ im Testbetrieb nachweislich und wiederholt (#676).
|
||||
**Ohne Schemaauskunft gibt es die ganze Geschichte nicht.** Sie ist damit Vorbedingung,
|
||||
nicht Beiwerk — und mit #676 ohnehin schon gemeldet.
|
||||
|
||||
*Stand 2026-09-25:* umgesetzt. Die Aktionen `describe` und `tables` gibt es jetzt, und
|
||||
Fehler bei unbekannten Spalten oder Tabellen nennen das Vorhandene. Das Werkzeug kann
|
||||
außerdem SQLite. Siehe die Umsetzung am Ende dieses Abschnitts.
|
||||
|
||||
### Eskalation: nach oben, nie zur Seite
|
||||
|
||||
Eine **Eskalation** ist: „Ich komme hier nicht weiter, das muss jemand über mir
|
||||
@@ -514,9 +518,11 @@ Ohne Regeln läuft so etwas heiß. Vier, die nicht verhandelbar sind:
|
||||
- **Nebenbei behoben:** Der Scanner hat einen Status, den der Lauf selbst gesetzt hatte
|
||||
(blockiert, abgebrochen), am Laufende mit „erledigt“ überschrieben. Damit liefen sowohl
|
||||
das Eskalieren als auch der Meldeweg aus #715 ins Leere.
|
||||
- **Offen:** #676 (Schemaauskunft der Datenbank) ist die Vorbedingung dafür, dass „ich finde
|
||||
kein Feld“ eine Feststellung ist und keine Vermutung. Der Mechanismus steht, der
|
||||
Anwendungsfall braucht noch #676.
|
||||
- **Vorbedingung erfüllt (#676):** Das Datenbank-Werkzeug beantwortet die Frage nach dem
|
||||
Schema selbst. `describe` nennt alle Spalten einer Tabelle und sagt ausdrücklich, dass
|
||||
ein nicht genanntes Feld nicht existiert. „Unbekannte Spalte“ und „unbekannte Tabelle“
|
||||
werden mit dem Vorhandenen beantwortet. Damit ist „ich finde kein Feld dafür“ eine
|
||||
Feststellung.
|
||||
|
||||
## 6 — Die Entscheidungsinstanz an der Spitze
|
||||
|
||||
|
||||
@@ -235,12 +235,18 @@ Der `AgentEngine` nutzt dann die `ToolRegistry`, um für jeden Agent nur die erl
|
||||
| Eigenschaft | Wert |
|
||||
|---|---|
|
||||
| Name | `Database` |
|
||||
| NuGet | `MySqlConnector`, `MongoDB.Driver` |
|
||||
| Aktionen | `query`, `insert`, `upsert` |
|
||||
| NuGet | `MySqlConnector`, `Npgsql`, `Microsoft.Data.SqlClient`, `MongoDB.Driver` (SQLite über `Microsoft.Data.Sqlite` aus Core) |
|
||||
| Aktionen | `query`, `insert`, `upsert`, `describe`, `tables` |
|
||||
|
||||
**Config-Felder:**
|
||||
- `connectionString` – Datenbankverbindung (pro Agent!)
|
||||
- `type` – `"mysql"` oder `"mongodb"`
|
||||
- `type` – `"mysql"`, `"postgres"`, `"mssql"`, `"sqlite"` oder `"mongodb"`
|
||||
|
||||
**Schemaauskunft (#676):** `describe` nennt alle Spalten einer freigegebenen Tabelle.
|
||||
`tables` nennt die freigegebenen Tabellen und sagt, ob es sie gibt. Scheitert ein Statement
|
||||
an einer unbekannten Spalte oder Tabelle, nennt die Antwort, was vorhanden ist. Das gilt
|
||||
nur für freigegebene Tabellen. Die Abfragen dafür schreibt das Werkzeug selbst, mit dem
|
||||
Tabellennamen als Parameter. `PRAGMA` bleibt im Agenten-SQL verboten.
|
||||
- `allowedTables` – Liste erlaubter Tabellen (Whitelist)
|
||||
|
||||
**Sicherheit:**
|
||||
|
||||
Reference in New Issue
Block a user