Quick Start¶
Get FactDb running in 5 minutes.
1. Configure¶
Create a configuration file or use environment variables:
2. Set Up Database¶
Run the migrations:
require 'fact_db'
FactDb.configure do |config|
config.database.url = ENV['DATABASE_URL']
end
# Run migrations
FactDb::Database.migrate!
3. Create Your First Facts Instance¶
4. Ingest Content¶
# Ingest an email
source = facts.ingest(
"Hi team, Paula Chen has accepted our offer and will join as Principal Engineer starting January 10, 2024. She'll be reporting to Sarah in the Platform team.",
kind: :email,
title: "New Hire Announcement",
captured_at: Time.current
)
puts "Ingested source: #{source.id}"
5. Create Entities¶
# Create entities for people and organizations
paula = facts.entity_service.create(
"Paula Chen",
kind: :person,
aliases: ["Paula", "P. Chen"]
)
sarah = facts.entity_service.create(
"Sarah Johnson",
kind: :person,
aliases: ["Sarah"]
)
platform_team = facts.entity_service.create(
"Platform Team",
kind: :organization
)
6. Extract Facts¶
Manual Extraction¶
fact = facts.fact_service.create(
"Paula Chen joined as Principal Engineer",
valid_at: Date.parse("2024-01-10"),
mentions: [
{ entity: paula, role: "subject", text: "Paula Chen" }
],
sources: [
{ source: source, type: "primary" }
]
)
LLM Extraction¶
# Extract facts automatically using LLM
extracted = facts.extract_facts(source.id, extractor: :llm)
extracted.each do |fact|
puts "Extracted: #{fact.text}"
puts " Valid from: #{fact.valid_at}"
end
7. Query Facts¶
# Get current facts about Paula
current = facts.current_facts_for(paula.id)
current.each { |f| puts f.text }
# Get facts valid at a specific date
historical = facts.facts_at(
Date.parse("2023-12-01"),
entity: paula.id
)
# Search by topic
team_facts = facts.query_facts(topic: "Platform Team")
8. Build Timelines¶
timeline = facts.timeline_for(paula.id)
timeline.each do |entry|
puts "#{entry[:date]}: #{entry[:fact].text}"
end
Complete Example¶
require 'fact_db'
# Configure
FactDb.configure do |config|
config.database.url = ENV['DATABASE_URL']
config.llm.provider = :openai
config.llm.api_key = ENV['OPENAI_API_KEY']
end
# Create facts instance
facts = FactDb.new
# Ingest content
source = facts.ingest(
"Paula Chen joined Microsoft as Principal Engineer on January 10, 2024.",
kind: :announcement,
captured_at: Time.current
)
# Create entities
paula = facts.entity_service.create("Paula Chen", kind: :person)
microsoft = facts.entity_service.create("Microsoft", kind: :organization)
# Extract facts via LLM
extracted = facts.extract_facts(source.id, extractor: :llm)
# Query
puts "Current facts about Paula:"
facts.current_facts_for(paula.id).each do |fact|
puts " - #{fact.text}"
end
Next Steps¶
- Configuration Guide - Detailed configuration options
- Ingesting Content - Learn about content types
- LLM Integration - Set up LLM providers