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, &params); 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 bloat

View on GitHub (pinned to 988cbb0330)

Solutions

  1. Verify the knowledgeID exists via the knowledge service/admin API before invoking the tool
  2. Check the knowledgeService implementation returns an explicit not-found error (e.g. repository.ErrKnowledgeNotFound) instead of (nil, nil)
  3. Re-sync or refresh the knowledge base if the document was recently deleted or moved
  4. 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

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


AI-assisted analysis of Tencent/WeKnora@988cbb0330 (2026-09-02). Data as JSON: /api/errors/8fad31c854494ec3. Report an issue: GitHub.