mirror of
https://github.com/microsoft/graphrag.git
synced 2025-07-04 15:41:17 +00:00
112 lines
3.8 KiB
Python
112 lines
3.8 KiB
Python
![]() |
# Copyright (c) 2024 Microsoft Corporation.
|
||
|
# Licensed under the MIT License
|
||
|
import asyncio
|
||
|
import os
|
||
|
|
||
|
from graphrag.index import run_pipeline, run_pipeline_with_config
|
||
|
from graphrag.index.config import PipelineCSVInputConfig, PipelineWorkflowReference
|
||
|
from graphrag.index.input import load_input
|
||
|
|
||
|
sample_data_dir = os.path.join(
|
||
|
os.path.dirname(os.path.abspath(__file__)), "../../_sample_data/"
|
||
|
)
|
||
|
|
||
|
shared_dataset = asyncio.run(
|
||
|
load_input(
|
||
|
PipelineCSVInputConfig(
|
||
|
file_pattern=".*\\.csv$",
|
||
|
base_dir=sample_data_dir,
|
||
|
source_column="author",
|
||
|
text_column="message",
|
||
|
timestamp_column="date(yyyyMMddHHmmss)",
|
||
|
timestamp_format="%Y%m%d%H%M%S",
|
||
|
title_column="message",
|
||
|
),
|
||
|
)
|
||
|
)
|
||
|
|
||
|
|
||
|
async def run_with_config():
|
||
|
"""Run a pipeline with a config file"""
|
||
|
# We're cheap, and this is an example, lets just do 10
|
||
|
dataset = shared_dataset.head(10)
|
||
|
|
||
|
# load pipeline.yml in this directory
|
||
|
config_path = os.path.join(
|
||
|
os.path.dirname(os.path.abspath(__file__)), "./pipeline.yml"
|
||
|
)
|
||
|
|
||
|
# Grab the last result from the pipeline, should be our entity extraction
|
||
|
tables = []
|
||
|
async for table in run_pipeline_with_config(
|
||
|
config_or_path=config_path, dataset=dataset
|
||
|
):
|
||
|
tables.append(table)
|
||
|
pipeline_result = tables[-1]
|
||
|
|
||
|
# Print the entities. This will be a row for each text unit, each with a list of entities,
|
||
|
# This should look pretty close to the python version, but since we're using an LLM
|
||
|
# it will be a little different depending on how it feels about the text
|
||
|
if pipeline_result.result is not None:
|
||
|
print(pipeline_result.result["entities"].to_list())
|
||
|
else:
|
||
|
print("No results!")
|
||
|
|
||
|
|
||
|
async def run_python():
|
||
|
if (
|
||
|
"EXAMPLE_OPENAI_API_KEY" not in os.environ
|
||
|
and "OPENAI_API_KEY" not in os.environ
|
||
|
):
|
||
|
msg = "Please set EXAMPLE_OPENAI_API_KEY or OPENAI_API_KEY environment variable to run this example"
|
||
|
raise Exception(msg)
|
||
|
|
||
|
# We're cheap, and this is an example, lets just do 10
|
||
|
dataset = shared_dataset.head(10)
|
||
|
|
||
|
workflows: list[PipelineWorkflowReference] = [
|
||
|
PipelineWorkflowReference(
|
||
|
name="entity_extraction",
|
||
|
config={
|
||
|
"entity_extract": {
|
||
|
"strategy": {
|
||
|
"type": "graph_intelligence",
|
||
|
"llm": {
|
||
|
"type": "openai_chat",
|
||
|
"api_key": os.environ.get(
|
||
|
"EXAMPLE_OPENAI_API_KEY",
|
||
|
os.environ.get("OPENAI_API_KEY", None),
|
||
|
),
|
||
|
"model": os.environ.get(
|
||
|
"EXAMPLE_OPENAI_MODEL", "gpt-3.5-turbo"
|
||
|
),
|
||
|
"max_tokens": os.environ.get(
|
||
|
"EXAMPLE_OPENAI_MAX_TOKENS", 2500
|
||
|
),
|
||
|
"temperature": os.environ.get(
|
||
|
"EXAMPLE_OPENAI_TEMPERATURE", 0
|
||
|
),
|
||
|
},
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
)
|
||
|
]
|
||
|
|
||
|
# Grab the last result from the pipeline, should be our entity extraction
|
||
|
tables = []
|
||
|
async for table in run_pipeline(dataset=dataset, workflows=workflows):
|
||
|
tables.append(table)
|
||
|
pipeline_result = tables[-1]
|
||
|
|
||
|
# Print the entities. This will be a row for each text unit, each with a list of entities
|
||
|
if pipeline_result.result is not None:
|
||
|
print(pipeline_result.result["entities"].to_list())
|
||
|
else:
|
||
|
print("No results!")
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
asyncio.run(run_python())
|
||
|
asyncio.run(run_with_config())
|