{"id":1835,"date":"2023-04-14T09:56:05","date_gmt":"2023-04-14T16:56:05","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/azure-sql\/?p=1835"},"modified":"2023-04-14T09:57:31","modified_gmt":"2023-04-14T16:57:31","slug":"make-data-more-human-with-azure-openai-and-azure-sql","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/azure-sql\/make-data-more-human-with-azure-openai-and-azure-sql\/","title":{"rendered":"Make data more human with Azure\u00a0OpenAI and Azure SQL"},"content":{"rendered":"<p><div class=\"alert alert-info\"><p class=\"alert-divider\"><i class=\"fabric-icon fabric-icon--Info\"><\/i><strong>Guest Post<\/strong><\/p>Valentina is a Microsoft Specialist, focusing on Azure OpenAI. She has been working with Azure OpenAI and Azure SQL lately and in this post she&#8217;s sharing how to start using Azure OpenAI and Azure SQL or SQL Server to build next-gen solutions. You can find more of her articles in her blog: <a href=\"https:\/\/medium.com\/@valentinaalto\">https:\/\/medium.com\/@valentinaalto<\/a>. Thanks Valentina! <\/div><\/p>\n<p class=\"graf graf--p\">In January 2023, Microsoft announced the General Availability of the Azure OpenAI Service (AOAI), which allows Azure customers to access OpenAI models directly within their Azure subscription and with their own capacity.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-05-203209.png\"><img decoding=\"async\" class=\"wp-image-1836 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-05-203209-300x169.png\" alt=\"Image Screenshot 2023 04 05 203209\" width=\"552\" height=\"311\" srcset=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-05-203209-300x169.png 300w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-05-203209-1024x577.png 1024w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-05-203209-768x432.png 768w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-05-203209-1536x865.png 1536w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-05-203209-2048x1153.png 2048w\" sizes=\"(max-width: 552px) 100vw, 552px\" \/><\/a><\/p>\n<p>There are four models families available at the moment:<\/p>\n<ul>\n<li>GPT: Generative Pre-trained Transformers are powerful generative models which are best suited for understanding and generating natural language.<\/li>\n<li>Codex: those are a fine-tuned version of GPT which has a specific verticalization on understanding and generating programming languages.<\/li>\n<li>DALL-E: this is the model which is able to generate images starting from natural language.<\/li>\n<li>ChatGPT: this is the engine behind ChatGPT. As for now, the ChatGPT API is available as GPT-3.5-turbo and GPT-4.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-05-203817.png\"><img decoding=\"async\" class=\"wp-image-1837 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-05-203817-300x170.png\" alt=\"Image Screenshot 2023 04 05 203817\" width=\"568\" height=\"322\" srcset=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-05-203817-300x170.png 300w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-05-203817-1024x580.png 1024w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-05-203817-768x435.png 768w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-05-203817-1536x870.png 1536w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-05-203817-2048x1160.png 2048w\" sizes=\"(max-width: 568px) 100vw, 568px\" \/><\/a><\/p>\n<p>In this post, we will see how you can use those models to query your SQL tables. The idea is that of generating SQL queries using Azure OpenAI models&#8217; API with Python code.<\/p>\n<h3>Prerequisites<\/h3>\n<ul>\n<li>An Azure subscription &#8211;\u00a0<a href=\"https:\/\/azure.microsoft.com\/free\/cognitive-services\" target=\"_blank\" rel=\"noopener\" data-linktype=\"external\">Create one for free<\/a>.<\/li>\n<li><span style=\"font-size: 1rem; text-align: var(--bs-body-text-align);\">Access granted to Azure OpenAI in the desired Azure subscription. <\/span>You can apply for access to Azure OpenAI by completing the form at\u00a0<a href=\"https:\/\/aka.ms\/oai\/access\" target=\"_blank\" rel=\"noopener\" data-linktype=\"external\">https:\/\/aka.ms\/oai\/access<\/a>.<\/li>\n<li>An Azure OpenAI resource with a model deployed. For more information about model deployment, see the\u00a0<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/cognitive-services\/openai\/how-to\/create-resource\" data-linktype=\"relative-path\">resource deployment guide<\/a>.<\/li>\n<li>An Azure SQL Database &#8211; you can follow the instructions <a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/azure-sql\/database\/single-database-create-quickstart?view=azuresql&amp;tabs=azure-portal\">here<\/a>.<\/li>\n<li>Python 3.7.1 or later versions.<\/li>\n<li>LangChain library installed (you can do so via <span style=\"font-family: 'courier new', courier, monospace;\">pip install langchain<\/span>)<\/li>\n<\/ul>\n<h3>Quickstart Demo<\/h3>\n<p>The first thing we want to do is import one of our SQL tables into a pandas dataframe. To do so, we can use the <span style=\"font-family: 'courier new', courier, monospace;\">pyodbc <\/span>library in Python, which you can easily install via <span style=\"font-family: 'courier new', courier, monospace;\">pip install pyodc<\/span>. To connect with my Azure SQL DB, I used an ODBC connection. You can find the information endpoints under the &#8220;Connection Strings&#8221; tab of your SQL DB instance:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-05-210810.png\"><img decoding=\"async\" class=\"wp-image-1840 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-05-210810-300x100.png\" alt=\"Image Screenshot 2023 04 05 210810\" width=\"525\" height=\"175\" srcset=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-05-210810-300x100.png 300w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-05-210810-1024x340.png 1024w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-05-210810-768x255.png 768w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-05-210810.png 1480w\" sizes=\"(max-width: 525px) 100vw, 525px\" \/><\/a><\/p>\n<pre class=\"prettyprint language-py\"><code class=\"language-py\">import pyodbc\r\nimport pandas as pd\r\nserver = <span class=\"hljs-string\">'servername'<\/span> \r\ndatabase = <span class=\"hljs-string\">'AdventureWorks'<\/span> \r\nusername = <span class=\"hljs-string\">'yourusername'<\/span> \r\npassword = <span class=\"hljs-string\">'databasename'<\/span> \r\n\r\ncnxn = pyodbc.connect(\"Driver={ODBC Driver 18 for SQL Server};Server=tcp:server,1433;Database=database;Uid=username;Pwd=password;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;\")\r\ncursor = cnxn.cursor()\r\n# select 10 rows from SQL table to insert in dataframe.\r\nquery = \"select * from [SalesLT].[Address];\"\r\ndf = pd.read_sql(query, cnxn)\r\nprint(df.head(10))<\/code><\/pre>\n<p>The result will be something like:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-06-085152.png\"><img decoding=\"async\" class=\"alignnone wp-image-1844\" src=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-06-085152-300x133.png\" alt=\"Image Screenshot 2023 04 06 085152\" width=\"490\" height=\"217\" srcset=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-06-085152-300x133.png 300w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-06-085152-1024x454.png 1024w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-06-085152-768x341.png 768w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-06-085152-1536x681.png 1536w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-06-085152-2048x909.png 2048w\" sizes=\"(max-width: 490px) 100vw, 490px\" \/><\/a><\/p>\n<p>Note: while creating my Azure SQL DB, I&#8217;ve also created the sample database <a href=\"https:\/\/learn.microsoft.com\/en-us\/sql\/samples\/adventureworks-install-configure?view=sql-server-ver16&amp;tabs=ssms\">AdventureWorks<\/a>. You can use any SQL table you wish.<\/p>\n<p>The next thing we need to do is initialize our Azure OpenAI model. To do so, we will use LangChain, a Python library that makes it easier to combine the power of Large Language Models (LLMs) with the logic of an application.<\/p>\n<p>To initialize your model, you also need to provide your keys and endpoint for your Azure OpenAI models&#8217; (you can find them under the &#8220;Keys and Endpoints&#8221; tab in your Azure OpenAI resource) as well as the name of your deployment and model. You can find all this information from the Azure OpenAI playground when exporting your code. Click on the\u00a0 &#8220;View Code&#8221; link on the top right:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-05-211525.png\"><img decoding=\"async\" class=\"alignnone wp-image-1841\" src=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-05-211525-300x153.png\" alt=\"Image Screenshot 2023 04 05 211525\" width=\"584\" height=\"298\" srcset=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-05-211525-300x153.png 300w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-05-211525-1024x521.png 1024w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-05-211525-768x391.png 768w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-05-211525-1536x781.png 1536w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-05-211525.png 1587w\" sizes=\"(max-width: 584px) 100vw, 584px\" \/><\/a><\/p>\n<p>And then get the needed informations from the sample code:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-05-211602.png\"><img decoding=\"async\" class=\"alignnone wp-image-1842\" src=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-05-211602-300x188.png\" alt=\"Image Screenshot 2023 04 05 211602\" width=\"459\" height=\"288\" srcset=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-05-211602-300x188.png 300w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-05-211602-1024x641.png 1024w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-05-211602-768x481.png 768w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-05-211602.png 1343w\" sizes=\"(max-width: 459px) 100vw, 459px\" \/><\/a><\/p>\n<p>For this demo, I&#8217;ve used a <span style=\"font-family: 'courier new', courier, monospace;\">text-davinci-003<\/span> model.<\/p>\n<p>Let&#8217;s have a look at the code:<\/p>\n<pre class=\"prettyprint language-py\"><code class=\"language-py\"># Import Azure OpenAI\r\nfrom langchain.llms import AzureOpenAI\r\nimport openai\r\nimport os<\/code><\/pre>\n<pre class=\"prettyprint language-default\"><code class=\"language-default\">os.environ[\"OPENAI_API_TYPE\"] = \"azure\"\r\nos.environ[\"OPENAI_API_KEY\"] = \"xxxx\"\r\nos.environ[\"OPENAI_API_BASE\"] = \"xxxx\"\r\nos.environ[\"OPENAI_API_VERSION\"] = \"2022-12-01\"\r\n<\/code><code class=\"language-py\">\r\nllm = AzureOpenAI(deployment_name=\"text-davinci-003\", model_name=\"text-davinci-003\") <\/code><\/pre>\n<p>Finally, we can use the <a href=\"https:\/\/python.langchain.com\/en\/latest\/modules\/agents\/toolkits\/examples\/pandas.html\"><span style=\"font-family: 'courier new', courier, monospace;\">pandas<\/span> DataFrame agent<\/a> in LangChain and start asking questions against our table:<\/p>\n<pre class=\"prettyprint language-py\"><code class=\"language-py\">from langchain.agents import create_pandas_dataframe_agent\r\nagent = create_pandas_dataframe_agent(llm, df, verbose=True)\r\nagent.run(\"how many rows are there?\")<\/code><\/pre>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-06-085801.png\"><img decoding=\"async\" class=\"alignnone wp-image-1845\" src=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-06-085801-300x136.png\" alt=\"Image Screenshot 2023 04 06 085801\" width=\"377\" height=\"171\" srcset=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-06-085801-300x136.png 300w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-06-085801-768x348.png 768w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-06-085801.png 998w\" sizes=\"(max-width: 377px) 100vw, 377px\" \/><\/a><\/p>\n<p>As you can see, the agent, powered by Azure OpenAI models, is able to provide the right output. Also, thanks to the LangChain Agent, it is also able to show which is the thought process behind and which are the queries that it used to retrieve the answer.<\/p>\n<p>Let&#8217;s try with other queries. For example, let&#8217;s check &#8220;what is the frequency of each country region&#8221;:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-06-091557.png\"><img decoding=\"async\" class=\"alignnone wp-image-1848\" src=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-06-091557-300x172.png\" alt=\"Image Screenshot 2023 04 06 091557\" width=\"411\" height=\"236\" srcset=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-06-091557-300x172.png 300w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-06-091557-1024x588.png 1024w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-06-091557-768x441.png 768w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-06-091557.png 1387w\" sizes=\"(max-width: 411px) 100vw, 411px\" \/><\/a><\/p>\n<p>Another interesting query &#8211; just to check how &#8220;clever&#8221; the AI is, is to ask for the distinct values of city names available in our database:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-06-091331.png\"><img decoding=\"async\" class=\"alignnone wp-image-1846\" src=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-06-091331-300x194.png\" alt=\"Image Screenshot 2023 04 06 091331\" width=\"458\" height=\"296\" srcset=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-06-091331-300x194.png 300w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-06-091331-1024x663.png 1024w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-06-091331-768x497.png 768w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-06-091331-1536x994.png 1536w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-06-091331-2048x1325.png 2048w\" sizes=\"(max-width: 458px) 100vw, 458px\" \/><\/a><\/p>\n<p>Or maybe ask for the count the unique items. State and Provinces in this sample:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-06-091231.png\"><img decoding=\"async\" class=\"alignnone wp-image-1847\" src=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-06-091231-300x172.png\" alt=\"Image Screenshot 2023 04 06 091231\" width=\"399\" height=\"229\" srcset=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-06-091231-300x172.png 300w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-06-091231-1024x586.png 1024w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-06-091231-768x439.png 768w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/04\/Screenshot-2023-04-06-091231.png 1159w\" sizes=\"(max-width: 399px) 100vw, 399px\" \/><\/a><\/p>\n<p>Azure OpenAI models are powerful generative AI tools that can be infused into custom applications, thanks to their APIs. With LangChain, the framework to manage those APIs is easier and allows for better interaction with the context, using any data stored in Azure SQL tables.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In January 2023, Microsoft announced the General Availability of the Azure OpenAI Service (AOAI), which allows Azure customers to access OpenAI models directly within their Azure subscription and with their own capacity. There are four models families available at the moment: GPT: Generative Pre-trained Transformers are powerful generative models which are best suited for understanding [&hellip;]<\/p>\n","protected":false},"author":115964,"featured_media":1837,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"image","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[561,407],"class_list":["post-1835","post","type-post","status-publish","format-image","has-post-thumbnail","hentry","category-azure-sql","tag-openai","tag-python","post_format-post-format-image"],"acf":[],"blog_post_summary":"<p>In January 2023, Microsoft announced the General Availability of the Azure OpenAI Service (AOAI), which allows Azure customers to access OpenAI models directly within their Azure subscription and with their own capacity. There are four models families available at the moment: GPT: Generative Pre-trained Transformers are powerful generative models which are best suited for understanding [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/posts\/1835","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/users\/115964"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/comments?post=1835"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/posts\/1835\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/media\/1837"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/media?parent=1835"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/categories?post=1835"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/tags?post=1835"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}