Jason Haley

Ramblings from an Independent Consultant

eShopSupport Series: DataIngestor Project

This is the second part of the eShopSupport Series which covers the details of the eShopSupport GitHub repository. DataIngestor Project The DataIngestor is a console application that will process the data files created by the DataGenerator - it does not ingest the data into any of the databases. I mentioned in the last entry about the DataGenerator that you didn’t need to use the DataGenerator because there are two sets of generated files provided in the github repo: dev and test. What I failed to mention is those files are result of both the DataGenerator and the DataIngestor being run. So you also don’t have to use the DataIngestor. The DataIngestor project is located under the src folder: In this entry I’ll cover the details of what the DataIngestor application does, a …

eShopSupport Series: DataGenerator Project

This is the first part of my eShopSupport Series which looks into the details of the eShopSupport GitHub repository. DataGenerator Project The DataGenerator is a console application that will generate multiple types of seed data files for loading into the application or to use when evaluating the question answering functionality. However, you don’t have to use the DataGenerator - there are two sets of generated files provided in the github repo: dev and test. In this entry I will provide some detail of what the DataGenerator application does, some interesting things about it and a few things I’d like to change. What does it do? This project is introduced about 16 minutes into Steve Sanderson’s talk How to add genuinely useful AI to your webapp (not just chatbots), where …

eShopSupport Series

Announcing: The eShopSupport Series In case you missed this week’s .NET Conf Focus on AI you can find all the videos on the dotnet YouTube channel. The one I want to point out here is: Better Together: .NET Aspire and Semantic Kernel with Steve Sanderson and Matthew Bolanos. Steve’s portion of the talk is a distilled version of his NDC talk earlier this year: How to add genuinely useful AI to your webapp (not just chatbots) where he introduced the eShopSupport project. If you are a .NET developer looking for ways to use AI in real world applications - you should absolutely watch that video. Starting next week, I will be digging into the eShopSupport codebase and blogging about it. Since it isn’t a RAG application - I don’t think it fits into the RAG Demo Series so I …

Study Notes: Graph RAG - Property Graph RAG (The Projects)

Last week I wrote about the notebook I created when I was working out the flow of the property graph RAG implementation. In this entry I will go through the two projects I created to provide some reusable code as well as allow for better experimentation: Related posts: Study Notes: Graph RAG - Property Graph RAG Study Notes: Graph RAG - Property Graph RAG (The Notebook) NOTE: In order to get the most out of this blog post, you should first read the related two posts. Where To Get The Code The code for this entry is in my Github repo semantic-kernel-getting-started under the samples/demos folder: PropertyGraphIngestor - is the console application that extracts entities from text documents and populates a Neo4j db PropertyGraphRAG - is the console application that does property graph RAG …

Wisconsin .NET User Group

Last Thursday night I spoke at the Wisconsin .NET User Group near Milwaukee, WI. I was nice to meet so many .NET developers interested in RAG and AI. To carry on the tradition from my Memphis talk, I gave the presentation a local look using images related to Milwaukee generated from Bing/create. Talk: Getting Started with Retrieval Augmented Generation (RAG) The presentation pdf can be downloaded here. One of my demos failed to deploy before the talk, but I don’t think it was missed due to having so many good questions. It was really nice meeting a user group with so many core members. Plus the pizza was really good! Also, I mentioned it to someone at that talk - keep an eye out for this repo to show up: https://github.com/dotnet/eShopSupport and here is the talk by Steven Sanderson …

Study Notes: Graph RAG - Property Graph RAG (The Notebook)

Monday I posted my notes on this last month’s study topic of property graph RAG, which has the general information I’ve collected. In this entry I want to go through some code I created in a polyglot notebook (ie. a notebook that has C# code instead of python), when I was working through the steps needed for a property graph RAG application. Related posts: Study Notes: Graph RAG - Property Graph RAG Study Notes: Graph RAG - Property Graph RAG (The Projects) Where To Get The Code The code for this entry is in my Github repo semantic-kernel-getting-started under the notebooks folder: 1_PropertyGraphRAG.ipynb - is my initial notebook for creating the steps needed for a property graph RAG app 2_PropertyGraphRAG.ipynb - has multiple changes that improve the final retrieval step and …

Study Notes: Graph RAG - Property Graph RAG

This past month I’ve been focusing on Graph RAG. This entry is an attempt to capture some lessons learned and a place to itemize all the resources I’ve found useful. Related posts: Study Notes: Graph RAG - Property Graph RAG (The Notebook) Study Notes: Graph RAG - Property Graph RAG (The Projects) NOTE: My approach to this topic was to find a way to improve a typical RAG implementation that only uses vector similarity searching. Background For the past 5 or 6 months, I’ve casually been reading about Graph RAG but not taken a deep dive into it - until this past month. The majority of the videos, articles and code samples out there labeled as “Graph RAG” are about Knowledge or Property Graph RAG. They typically include a graph database (Neo4j is popular), often …

Study Notes: Text-to-SQL Code Sample

Yesterday I posted my notes from this week’s study topic of Text-to-SQL, which if you haven’t read it - provides more information and resources about the topic. In this entry I want to walk through a code sample I put together after playing with a few samples this week. Where To Get The Code The code for this entry is in my GitHub repo semantic-kernel-getting-started under the samples/demos/Text-to-Sql directory. Originally I considered making this a review of the NL2SQL code sample, but I ended up needing to make some changes to it, so I just copied over some of their code for my sample - that is why the nl2sql.library project is there (also there is a Nl2Sql folder in the TextToSqlConsole project with some other files from their repo). If you are looking into Text-to-SQL, I …

Study Notes: Text-to-SQL

This week I’ve been researching Text-to-SQL (also known as Natural Language to SQL), below are my study notes to compile all the resources I’ve found on the topic to date. There is also a corresponding blog entry that walks through a code example. NOTE: I am approaching this topic specifically looking at how it can be used to extend usage scenarios in a RAG application. Background Text-to-SQL (or Natural Language to SQL) is a pattern where the objective is to have an LLM generate SQL statements for a database using natural language. How it Works Similar to RAG (Retrieval Augmented Generation), Text-to-SQL is achieved by augmenting the prompt passed to the LLM with necessary schema information to help the LLM construct the proper SQL statement for the user request. NOTE: …

Boston Azure June 2024

Last night was the Season of AI presentation. We started with Bill Wilder presenting the fundamentals of Generative AI and quick introduction to Azure AI Studio, then I finished up with a .NET code walkthrough implement Retrieval Augmented Generation (RAG) using Semantic Kernel. It was nice to see a lot of regular faces and meet several new people. Demo Code The demo code is on my GitHub repo BostonAzure-June2024 under a subdirectory. The code is setup as the beginning of the demo (ie. simple echo client/api implementation), you’ll find the steps I used to progressively create the demo in the demo-script.md file. Since I ran of time to do the last “bonus step”, you’ll find it at the end of that script along with the full content of the final code (shown below): …