This project creates a web-based chat application with an API backend that can use OpenAI chat models to answer questions about the rows in a PostgreSQL database table. The frontend is built with React and FluentUI, while the backend is written with Python and FastAPI.
This project is designed for deployment to Azure using the Azure Developer CLI, hosting the app on Azure Container Apps, the database in Azure PostgreSQL Flexible Server, and the models in Azure OpenAI.
This project provides the following features:
The deployed app uses a user-assigned managed identity to authenticate to Azure services, and stores logs in Log Analytics.
You have a few options for getting started with this template. The quickest way to get started is GitHub Codespaces, since it will setup all the tools for you, but you can also set it up locally.
You can run this template virtually by using GitHub Codespaces. The button will open a web-based VS Code instance in your browser:
Open the template (this may take several minutes):
Open a terminal window
Continue with the deployment steps
A related option is VS Code Dev Containers, which will open the project in your local VS Code using the Dev Containers extension:
Start Docker Desktop (install it if not already installed)
Open the project:
In the VS Code window that opens, once the project files show up (this may take several minutes), open a terminal window.
Continue with the deployment steps
Make sure the following tools are installed:
Download the project code:
azd init -t rag-postgres-openai-python
Open the project folder
Install required Python packages and backend application:
pip install -r requirements-dev.txt
pip install -e src/backend
Continue with the deployment steps
Once you've opened the project in Codespaces, Dev Containers, or locally, you can deploy it to Azure.
Sign in to your Azure account:
azd auth login
For GitHub Codespaces users, if the previous command fails, try:
azd auth login --use-device-code
Create a new azd environment:
azd env new
This will create a folder under .azure/
in your project to store the configuration for this deployment. You may have multiple azd environments if desired.
(Optional) If you would like to customize the deployment to use existing Azure resources, you can set the values now.
Provision the resources and deploy the code:
azd up
You will be asked to select two locations, first a region for most of the resources (Container Apps, PostgreSQL), then a region specifically for the Azure OpenAI models. This project uses the gpt-4o-mini and text-embedding-ada-002 models which may not be available in all Azure regions. Check for up-to-date region availability and select a region accordingly.
Since the local app uses OpenAI models, you should first deploy it for the optimal experience.
Copy .env.sample
into a .env
file.
To use Azure OpenAI, set OPENAI_CHAT_HOST
and OPENAI_EMBED_HOST
to "azure". Then fill in the values of AZURE_OPENAI_ENDPOINT
and AZURE_OPENAI_CHAT_DEPLOYMENT
based on the deployed values. You can display the values using this command:
azd env get-values
To use OpenAI.com OpenAI, set OPENAI_CHAT_HOST
and OPENAI_EMBED_HOST
to "openai". Then fill in the value for OPENAICOM_KEY
.
To use Ollama, set OPENAI_CHAT_HOST
to "ollama". Then update the values for OLLAMA_ENDPOINT
and OLLAMA_CHAT_MODEL
to match your local setup and model. We recommend using "llama3.1" for the chat model, since it has support for function calling, and "nomic-embed-text" for the embedding model, since the sample data has already been embedded with this model. If you cannot use function calling, then turn off "Advanced flow" in the Developer Settings. If you cannot use the embedding model, then turn off vector search in the Developer Settings.
Run these commands to install the web app as a local package (named fastapi_app
), set up the local database, and seed it with test data:
python -m pip install -e src/backend
python ./src/backend/fastapi_app/setup_postgres_database.py
python ./src/backend/fastapi_app/setup_postgres_seeddata.py
Build the frontend:
cd src/frontend
npm install
npm run build
cd ../../
There must be an initial build of static assets before running the backend, since the backend serves static files from the src/static
directory.
Run the FastAPI backend (with hot reloading). This should be run from the root of the project:
python -m uvicorn fastapi_app:create_app --factory --reload
Or you can run "Backend" in the VS Code Run & Debug menu.
Run the frontend (with hot reloading):
cd src/frontend
npm run dev
Or you can run "Frontend" or "Frontend & Backend" in the VS Code Run & Debug menu.
Open the browser at http://localhost:5173/
and you will see the frontend.
Pricing may vary per region and usage. Exact costs cannot be estimated. You may try the Azure pricing calculator for the resources below:
This template uses Managed Identity for authenticating to the Azure services used (Azure OpenAI, Azure PostgreSQL Flexible Server).
Additionally, we have added a GitHub Action that scans the infrastructure-as-code files and generates a report containing any detected issues. To ensure continued best practices in your own repository, we recommend that anyone creating solutions based on our templates ensure that the Github secret scanning setting is enabled.
Further documentation is available in the docs/
folder:
Please post in the issue tracker with any questions or issues.