| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| --> |
| |
| # Conversational agent over UFC Knowledge graph |
| |
| ## Introduction |
| This demo illustrates how to build a RAG Q&A AI agent over the [UFC stats dataset](https://www.kaggle.com/datasets/rajeevw/ufcdata) |
| This one uses a Knowledge Graph that is stored in [FalkorDB](https://www.falkordb.com/) to query |
| for information about UFC fighters and fights. |
| |
| Thanks to the folks at [FalkorDB](https://www.falkordb.com/) for helping set up this example. |
| |
| ## Data |
| The [UFC](http://ufc.com) publicly offers statistics for each fight it held in addition to individual fighter's |
| personal statistics on [UFC stats](http://ufcstats.com/statistics/events/completed) |
| |
| This information includes among other details: |
| * Where and when an event was held |
| * Details and statistics of a fight |
| * Who won a fight |
| * How long a fight lasted |
| * Fighter's reach |
| |
| We have pulled some data and stored it in the `/data` folder. |
| |
| |
| # Querying the AI agent |
| Once the data is loaded into the Knowledge Graph DB, users can start asking the AI agent questions. For example: |
| |
| ``` |
| Which fighter holds the fastest win? |
| |
| The fighter who holds the fastest win is Jorge Masvidal, with a win in just 5 second |
| |
| Who did he win against ? |
| |
| Jorge Masvidal won against Ben Askren in the fight where he secured the fastest win. |
| |
| List fighters who had a trilogy match |
| |
| The only fighters specifically identified in the data having a trilogy (i.e., three matches against the same opponent) are: |
| |
| - Frankie Edgar and BJ Penn |
| - Randy Couture and Vitor Belfort |
| - BJ Penn and Frankie Edgar |
| - Cain Velasquez and Junior Dos Santos |
| ... |
| |
| Who has a 50% win percentage? |
| |
| Yes, there are fighters with a 50% win percentage in the dataset. Here are a few of them: |
| |
| - Joe Slick: 1 win out of 2 fights (50%) |
| - Ken Stone: 2 wins out of 4 fights (50%) |
| - Tim Boetsch: 12 wins out of 24 fights (50%) |
| - Jordan Wright: 1 win out of 2 fights (50%) |
| - Travis Fulton: 1 win out of 2 fights (50%) |
| |
| ``` |
| |
| # Running the demo |
| |
| ## Prerequisites |
| |
| Install Python modules |
| ```sh |
| pip install -r requirements.txt |
| ``` |
| |
| Run FalkorDB |
| ```sh |
| docker run -p 6379:6379 -p 3000:3000 -it --rm falkordb/falkordb:edge |
| ``` |
| Note: at the time of writing this image did not persist data. |
| |
| ## Ingest data |
| We first need to create the Knowledge Graph. |
| |
| **Ingest data using the command line**: |
| |
| ```sh |
| python hamilton_ingest.py |
| ``` |
| This will run the following two pipelines: |
| |
|  |
|  |
| |
| **Note:** [Apache Hamilton](https://github.com/apache/hamilton) also comes with a UI that you can use to visualize the pipeline and |
| track execution information about it. See hamilton_ingest.py or ingest_notebook.ipynb for more information. |
| |
| ## Ingest data using a notebook: |
| |
| ```sh |
| pip install jupyter |
| jupyter notebook |
| # select ingest_notebook.ipynb and follow the instructions there |
| ``` |
| |
| ## Run the QA agent via the notebook: |
| ```sh |
| export OPENAI_API_KEY="YOUR_OPENAI_KEY" |
| pip install jupyter |
| jupyter notebook |
| # select notebook.ipynb and follow the instructions there |
| ``` |
| |
| ## Run the QA agent via the command line: |
| ```sh |
| export OPENAI_API_KEY="YOUR_OPENAI_KEY" |
| python application.py |
| ``` |
| |
| Knowledge Graph generated: |
| |
|  |
| |
| Application Graph generated: |
|  |
| |
| ## See the trace of the QA agent with the Burr UI |
| In a terminal run: |
| ```sh |
| burr |
| ``` |
| Then open a browser and go to `http://localhost:7241` to see the Burr UI. |
| |
| You can then navigate to the `ufc-falkor` project and see the trace of the QA agent. |