Tencent/WeKnora · error
knowledge service returned an empty result
Error message
knowledge service returned an empty result
What it means
This error is synthesized inside the wiki read-source-document tool when the knowledge service call (either authorizeKnowledgeInSearchTargets or GetKnowledgeByIDOnly) returns a nil knowledge object with a nil error. Since the code cannot distinguish 'missing' from 'malformed response', it fabricates this message and surfaces it to the agent as 'Document not found'. It indicates the service layer silently returned nothing instead of a typed not-found error.
Source
Thrown at internal/agent/tools/wiki_read_source_doc.go:148
if err := json.Unmarshal(args, ¶ms); err != nil {
return &types.ToolResult{Success: false, Error: "Invalid parameters: " + err.Error()}, nil
}
knowledgeID := strings.TrimSpace(params.KnowledgeID)
if knowledgeID == "" {
return &types.ToolResult{Success: false, Error: "knowledge_id is required"}, nil
}
var knowledge *types.Knowledge
var err error
if t.scopeEnforced {
knowledge, err = authorizeKnowledgeInSearchTargets(ctx, t.searchTargets, knowledgeID, t.knowledgeService)
} else {
knowledge, err = t.knowledgeService.GetKnowledgeByIDOnly(ctx, knowledgeID)
}
if err != nil || knowledge == nil {
if err == nil {
err = fmt.Errorf("knowledge service returned an empty result")
}
return &types.ToolResult{Success: false, Error: fmt.Sprintf("Document not found: %v", err)}, nil
}
var sb strings.Builder
sb.WriteString("<source_document>\n<metadata>\n")
sb.WriteString(fmt.Sprintf("<title>%s</title>\n", knowledge.Title))
sb.WriteString(fmt.Sprintf("<knowledge_id>%s</knowledge_id>\n", knowledgeID))
hasRange := params.StartChunkIndex > 0
var re *regexp.Regexp
if hasRange {
if params.EndChunkIndex < params.StartChunkIndex {
params.EndChunkIndex = params.StartChunkIndex + 10 // Default window
}
if params.EndChunkIndex-params.StartChunkIndex > 50 {
params.EndChunkIndex = params.StartChunkIndex + 50 // Max 50 chunks to prevent bloatView on GitHub (pinned to 988cbb0330)
Solutions
- Verify the knowledgeID exists via the knowledge service/admin API before invoking the tool
- Check the knowledgeService implementation returns an explicit not-found error (e.g. repository.ErrKnowledgeNotFound) instead of (nil, nil)
- Re-sync or refresh the knowledge base if the document was recently deleted or moved
- If this is a legitimate miss, treat it as user-facing 'Document not found' and stop retrying with the same ID
Example fix
// before (service)
func (s *service) GetKnowledgeByIDOnly(ctx, id) (*Knowledge, error) {
k, err := s.repo.Get(ctx, id)
if err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return nil, nil } ... }
// after
func (s *service) GetKnowledgeByIDOnly(ctx, id) (*Knowledge, error) {
k, err := s.repo.Get(ctx, id)
if err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return nil, ErrKnowledgeNotFound } ... } Defensive patterns
Strategy: validation
Validate before calling
func validateKnowledgeID(id string) error {
if strings.TrimSpace(id) == "" { return errors.New("knowledge id is empty") }
return nil
}
// call before Execute; also pre-check existence via the admin/list API when possible Type guard
func knowledgeExists(k *types.Knowledge) bool { return k != nil && k.ID != "" } Try / catch
res, err := tool.Execute(ctx, args)
if err != nil || (res != nil && !res.Success) {
if strings.Contains(res.Error, "Document not found") {
// treat as permanent miss: refresh ID or inform user; do not retry same ID
}
} Prevention
- Always pass knowledge IDs obtained from a fresh list/search call, not stale conversation memory
- Make the knowledge service return a typed not-found error instead of (nil, nil)
- Log the knowledgeID with the failure to aid correlation
- Validate ID format before invoking the tool
When it happens
Trigger: Calling Execute on the wiki_read_source_doc tool with a knowledgeID the knowledge service cannot return: the service finds no record and returns (nil, nil) rather than a not-found sentinel error.
Common situations: Stale knowledge ID cached in conversation history after the document was deleted; ID pointing to a different environment/index; a knowledge service implementation bug that swallows repository.ErrNotFound and returns nil without an error.
Related errors
- join request not found
- all document retrievals failed
- missing query parameter
- no search targets available
- no queries provided
AI-assisted analysis of Tencent/WeKnora@988cbb0330 (2026-09-02).
Data as JSON: /api/errors/8fad31c854494ec3.
Report an issue: GitHub.