Jason Haley

Ramblings from an Independent Consultant

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): …

Demo Review: Chat Copilot

Demo Review: Chat Copilot This is the fifth C# demo in The RAG Demo Chronicles (Blog Series) and has the most extensive use of Semantic Kernel out of all the demos I’ve reviewed. The use of Retrieval Augmented Generation (RAG) is different with this project than the other demos I’ve reviewed - mainly because RAG is just one of its features. With this demo, I also took the time to configure the optional authentication so I could play with the MS Graph plugin … and WOW! Just adding the web searcher and MS Graph plugin really make this a powerful demo app. It gives me a lot of ideas for my own projects. Demo Details Item of Interest As of 6/9/2024 Number of Contributors: 45 Date repo created: 4/2/2023 Update within last month: Yes Link to documentation: Microsoft Learn Page …

Semantic Kernel Hello World WebSearchEnginePlugin

UPDATE: The Bing Search APIS are being deprecated. See the announcement for more details: Bing Search APIs retiring on August 11, 2025. I have updated the post and corresponding Github code to use the Brave connector instead. A couple of weeks ago I thought I’d written my last of these blogs, mainly due to me getting more in depth with Semantic Kernel. However, after I watched Will Velida’s video Using Bing Search API in the Semantic Kernel SDK … I couldn’t help but wonder what the API calls were behind the scenes. Will does a great job at explaining how to use the plugin and the Bing resource needed to make calls to the search API, so I won’t get into that part of it - I want to focus on the usefulness and API calls made by the plugin. The code for this …

Semantic Kernel Hello World Planners Part 2 - (Deprecated)

UPDATE: Planners have been deprecated. See this Semantic Kernel blog for more detail: Semantic Kernel: Package previews, Graduations & Deprecations Last week in the Semantic Kernel Hello World Planners Part 1 entry, I used the Handlebars planner to implement the sample Hello World functionality and then looked at the token difference between using a saved plan vs. generating a plan. In this entry I use the Function Calling Stepwise Planner to create the sample Hello World functionality and compare it to the implementation in the Semantic Kernel Hello World Plugins Part 3 entry. The code for this entry is the HelloWorld.Planner2.Console project in my GitHub repo. Function Calling Stepwise Planner As mentioned last week, the Function Calling Stepwise Planner is in the …

Semantic Kernel Hello World Planners Part 1 - (Deprecated)

UPDATE: Planners have been deprecated. See this Semantic Kernel blog for more detail: Semantic Kernel: Package previews, Graduations & Deprecations A few weeks ago in the Semantic Kernel Hello World Plugins Part 3 blog entry, I showed how to use OpenAI Function Calling. The last half of that entry was all about how to view the response and request JSON going back and forth to OpenAI, which detailed four API calls. In this entry I look at using the Handlebars Planner to accomplish the same functionality. Then I’ll show the request and response JSON for both using a saved plan as well as having the LLM create a plan and end with a token usage comparison. The code for this entry is the HelloWorld.Planner1.Console project in my GitHub repo. Planners Semantic Kernel 1.0 has two …

Memphis Azure User Group

Last Thursday night I spoke at the Memphis Azure User Group, it was nice to meet some people in person and see how excited others are about finding valuable ways to work GenAI into their applications. I also gave my slide deck a completely new look (Memphis themed via Bing/create): Talk: Getting Started with Retrieval Augmented Generation (RAG) The presentation pdf can be downloaded here. Since the presentation was hybrid, there were not as many questions as the other two times I’ve given the talk … or that is my guess at the reason why it was so quiet. That also means I should have put that third demo back in the presentation (I took a demo out after the first version of the talk since there were so many questions and needed to free up time for Q&A). Next time I’ll …

Semantic Kernel Hello World Plugins Part 3

Last week I blogged Part 2 showing the creation of a native function plugin, in this post I want to take that native function a step further and use the OpenAI Function calling. This will allow us to not provide the current date when making the call to get a historic daily fact and have OpenAI call a function to get the current date. I’ve added the HelloWorld.Plugin3.Console project to the GitHub repo for the code in this blog entry. Semantic Kernel Plugin: Native Function and OpenAI Function Calling Function calling is also called “external tools”. I mentioned it in Demo Review: Simple RAG using Blazor, SQL Server, Azure OpenAI and Function Calling and how it changes the flow a bit. Instead of calling OpenAI and expecting an answer, we pass a question and in addition we …