Skip to main content

GraphRAG

Struct GraphRAG 

Source
pub struct GraphRAG { /* private fields */ }
Expand description

Main GraphRAG system

This is the primary entry point for using GraphRAG. It orchestrates all components: knowledge graph, retrieval, generation, and caching.

§Examples

use graphrag_core::{GraphRAG, Config};

let config = Config::default();
let mut graphrag = GraphRAG::new(config)?;
graphrag.initialize()?;

// Add documents
graphrag.add_document_from_text("Your document text")?;

// Build knowledge graph
graphrag.build_graph()?;

// Query
let answer = graphrag.ask("Your question?")?;
println!("Answer: {}", answer);

Implementations§

Source§

impl GraphRAG

Source

pub fn new(config: Config) -> Result<Self>

Create a new GraphRAG instance with the given configuration

Source

pub fn initialize(&mut self) -> Result<()>

Initialize the GraphRAG system

Source

pub fn add_document_from_text(&mut self, text: &str) -> Result<()>

Add a document from text content

Source

pub fn add_document(&mut self, document: Document) -> Result<()>

Add a document to the system

Source

pub fn clear_graph(&mut self) -> Result<()>

Clear all entities and relationships from the knowledge graph

This method preserves documents and text chunks but removes all extracted entities and relationships. Useful for rebuilding the graph from scratch without reloading documents.

Source

pub async fn build_graph(&mut self) -> Result<()>

Build the knowledge graph from added documents

This method implements dynamic pipeline selection based on the configured approach:

  • Semantic (config.approach = “semantic”): Uses LLM-based entity extraction with gleaning for high-quality results. Requires Ollama to be enabled.
  • Algorithmic (config.approach = “algorithmic”): Uses pattern-based entity extraction (regex + capitalization) for fast, resource-efficient processing.
  • Hybrid (config.approach = “hybrid”): Combines both approaches with weighted fusion.

The selection is controlled by config.approach and mapped from TomlConfig’s [mode] section.

Source

pub async fn ask(&mut self, query: &str) -> Result<String>

Query the system for relevant information

Source

pub fn query_internal(&mut self, query: &str) -> Result<Vec<String>>

Internal query method (public for CLI access to raw results)

Source

pub fn is_initialized(&self) -> bool

Check if system is initialized

Source

pub fn has_documents(&self) -> bool

Check if documents have been added

Source

pub fn has_graph(&self) -> bool

Check if graph has been built

Source

pub fn knowledge_graph(&self) -> Option<&KnowledgeGraph>

Get a reference to the knowledge graph

Source

pub fn get_entity(&self, entity_id: &str) -> Option<&Entity>

Get entity details by ID

Source

pub fn get_entity_relationships(&self, entity_id: &str) -> Vec<&Relationship>

Get all relationships involving an entity

Source

pub fn get_chunk(&self, chunk_id: &str) -> Option<&TextChunk>

Get chunk by ID

Source

pub fn knowledge_graph_mut(&mut self) -> Option<&mut KnowledgeGraph>

Get a mutable reference to the knowledge graph

Source

pub fn from_config_file<P: AsRef<Path>>(path: P) -> Result<Self>

Create GraphRAG from a config file (auto-detect format: TOML, JSON5, YAML, JSON)

This method automatically detects the config file format based on the file extension and loads it appropriately.

Supported formats:

  • .toml - TOML format
  • .json5 - JSON5 format (requires json5-support feature)
  • .yaml, .yml - YAML format
  • .json - JSON format
§Examples
use graphrag_core::GraphRAG;

// Auto-detect format from extension
let graphrag = GraphRAG::from_config_file("config/templates/symposium_zero_cost.graphrag.json5")?;
Source

pub async fn from_config_and_document<P1, P2>( config_path: P1, document_path: P2, ) -> Result<Self>
where P1: AsRef<Path>, P2: AsRef<Path>,

Complete workflow: load config + process document + build graph

This is the most convenient method for getting started with GraphRAG. It:

  1. Loads the config file (auto-detecting the format)
  2. Initializes the GraphRAG system
  3. Loads and processes the document
  4. Builds the knowledge graph

After this method completes, the GraphRAG instance is ready to answer queries.

§Examples
use graphrag_core::GraphRAG;

// Complete workflow in one call
let mut graphrag = GraphRAG::from_config_and_document(
    "config/templates/symposium_zero_cost.graphrag.json5",
    "docs-example/Symposium.txt"
).await?;

// Ready to query
let answer = graphrag.ask("What is Socrates' view on love?").await?;
println!("Answer: {}", answer);

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,