40 lines
1.1 KiB
Go
40 lines
1.1 KiB
Go
// research/agent.go – Research-Agent: wraps brain.AskQuery
|
||
package research
|
||
|
||
import (
|
||
"fmt"
|
||
"strings"
|
||
|
||
"my-brain-importer/internal/agents"
|
||
"my-brain-importer/internal/brain"
|
||
)
|
||
|
||
// Agent beantwortet Fragen mit der Wissensdatenbank.
|
||
type Agent struct{}
|
||
|
||
func New() *Agent { return &Agent{} }
|
||
|
||
func (a *Agent) Handle(req agents.Request) agents.Response {
|
||
if len(req.Args) == 0 {
|
||
return agents.Response{Text: "❌ Keine Frage angegeben."}
|
||
}
|
||
question := strings.Join(req.Args, " ")
|
||
|
||
answer, chunks, err := brain.AskQuery(question)
|
||
if err != nil {
|
||
return agents.Response{Error: err, Text: fmt.Sprintf("❌ Fehler: %v", err)}
|
||
}
|
||
if len(chunks) == 0 {
|
||
return agents.Response{Text: "❌ Keine relevanten Informationen in der Datenbank gefunden.\nFüge mehr Daten mit `/ingest` hinzu."}
|
||
}
|
||
|
||
var sb strings.Builder
|
||
fmt.Fprintf(&sb, "💬 **Antwort auf:** _%s_\n\n", question)
|
||
sb.WriteString(answer)
|
||
sb.WriteString("\n\n📚 **Quellen:**\n")
|
||
for _, chunk := range chunks {
|
||
fmt.Fprintf(&sb, "• %.1f%% – %s\n", chunk.Score*100, chunk.Source)
|
||
}
|
||
return agents.Response{Text: sb.String()}
|
||
}
|