Module: RubyLLM::Agents::DSL::Knowledge

Included in:
BaseAgent
Defined in:
lib/ruby_llm/agents/dsl/knowledge.rb

Overview

Knowledge DSL for declaring domain knowledge to inject into system prompts.

Supports two modes:

  • Static: ‘knows :name` loads from a file resolved via `knowledge_path`

  • Dynamic: ‘knows(:name) { … }` evaluates a block at call time via instance_exec

Optional ‘if:` condition gates inclusion without forcing static content into blocks.

Examples:

Static knowledge from files

class MyAgent < RubyLLM::Agents::Base
  knowledge_path "knowledge"
  knows :refund_policy
  knows :pricing
end

Dynamic knowledge

class MyAgent < RubyLLM::Agents::Base
  knows :recent_tickets do
    Ticket.recent.pluck(:summary)
  end
end

Conditional knowledge

class MyAgent < RubyLLM::Agents::Base
  param :region, required: true
  knows :hipaa, if: -> { region == "us" }
end

Defined Under Namespace

Modules: InstanceMethods

Instance Method Summary collapse

Instance Method Details

#knowledge_entriesArray<Hash>

Returns the list of registered knowledge entries, inheriting from superclass.

Returns:

  • (Array<Hash>)

    Knowledge entries



81
82
83
84
85
86
87
# File 'lib/ruby_llm/agents/dsl/knowledge.rb', line 81

def knowledge_entries
  @knowledge_entries ||= if superclass.respond_to?(:knowledge_entries)
    superclass.knowledge_entries.dup
  else
    []
  end
end

#knowledge_path(path = nil) ⇒ String?

Sets or returns the base path for static knowledge files.

Parameters:

  • path (String, nil) (defaults to: nil)

    Path to set, or nil to read

Returns:

  • (String, nil)

    The resolved knowledge path



68
69
70
71
72
73
74
75
76
# File 'lib/ruby_llm/agents/dsl/knowledge.rb', line 68

def knowledge_path(path = nil)
  if path
    @knowledge_path = path
  else
    @knowledge_path ||
      inherited_or_default(:knowledge_path, nil) ||
      RubyLLM::Agents.configuration.knowledge_path
  end
end

#knows(name, **options, &block) ⇒ Object #knows(name, *more_names) ⇒ Object

Registers one or more knowledge entries.

Overloads:

  • #knows(name, **options, &block) ⇒ Object

    Register a single entry (static or dynamic)

    Parameters:

    • name (Symbol)

      Identifier for this knowledge entry

    • options (Hash)

      Options including ‘if:` condition lambda

    • block (Proc)

      Optional block for dynamic knowledge (evaluated via instance_exec)

  • #knows(name, *more_names) ⇒ Object

    Register multiple static entries at once

    Parameters:

    • name (Symbol)

      First entry name

    • more_names (Array<Symbol>)

      Additional entry names



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/ruby_llm/agents/dsl/knowledge.rb', line 47

def knows(name, *more_names, **options, &block)
  if more_names.any?
    # Multi-arg form: knows :a, :b, :c — all static, no block/options
    [name, *more_names].each do |n|
      knowledge_entries.reject! { |e| e[:name] == n }
      knowledge_entries << {name: n, loader: nil, options: {}}
    end
  else
    knowledge_entries.reject! { |e| e[:name] == name }
    knowledge_entries << {
      name: name,
      loader: block,
      options: options
    }
  end
end