www.pluralsight.com
Open in
urlscan Pro
104.17.36.85
Public Scan
Submitted URL: https://connect.pluralsight.com/dc/l6WRhHKnwa3LcpUsJiJZ-KNupKrVAFT9E5p1RhihJqW5Ijy1l2jnfCBnXkLCL9zl07D4T8p9cNx-VWf3rvCu-tXEBmEUS...
Effective URL: https://www.pluralsight.com/resources/blog/data/integrate-genai-applications-openai?utm_source=marketo&utm_medium=email&utm_...
Submission: On April 25 via api from CA — Scanned from CA
Effective URL: https://www.pluralsight.com/resources/blog/data/integrate-genai-applications-openai?utm_source=marketo&utm_medium=email&utm_...
Submission: On April 25 via api from CA — Scanned from CA
Form analysis
4 forms found in the DOM<form class="header-search-form">
<input class="header-search-input" type="text" name="q" placeholder="What do you want to learn?" autocomplete="off">
</form>
<form class="header-search-form -flex-and-center">
<input class="header-search-input flex-1" type="text" name="q" placeholder="Search" autocomplete="off">
<button type="submit">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" role="button">
<title>A search magnifying glass</title>
<mask id="mask0_3541_6692" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="2" y="2" width="20" height="20">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M21.3534 19.9404L21.3535 19.9404L16.314 14.9C17.403 13.504 18 11.799 18 10C18 7.863 17.167 5.856 15.656 4.344C14.145 2.832 12.137 2 10 2C7.863 2 5.854 2.832 4.344 4.344C2.832 5.856 2 7.863 2 10C2 12.137 2.832 14.146 4.344 15.656C5.854 17.168 7.863 18 10 18C11.799 18 13.504 17.404 14.9 16.315L19.9394 21.3544C20.1347 21.5497 20.4513 21.5497 20.6466 21.3544L21.3534 20.6476L21.3534 20.6475C21.5487 20.4523 21.5487 20.1357 21.3534 19.9404ZM14.242 14.243C13.109 15.376 11.602 16 10 16C8.397 16 6.891 15.376 5.758 14.243C4.624 13.11 4 11.603 4 10C4 8.398 4.624 6.891 5.758 5.758C6.891 4.624 8.397 4 10 4C11.602 4 13.109 4.624 14.242 5.758C15.376 6.891 16 8.398 16 10C16 11.603 15.376 13.11 14.242 14.243Z"
fill="white"></path>
</mask>
<g mask="url(#mask0_3541_6692)">
<rect width="24" height="24" fill="#A5AACF"></rect>
</g>
</svg>
</button>
</form>
<form id="customMarketo_1298" data-mkto-id="1298">
<div class="marketo-form-field">
<label for="FirstName" class="mrkto_text_lbl">First Name<span class="requiredAsterix">*</span></label>
<input type="text" id="1298_FirstName" class="mrkto_text" name="FirstName" required="" oninvalid="setCustomValidity('This field is required.)" oninput="setCustomValidity('')" maxlength="255">
</div>
<div class="marketo-form-field">
<label for="LastName" class="mrkto_text_lbl">Last Name<span class="requiredAsterix">*</span></label>
<input type="text" id="1298_LastName" class="mrkto_text" name="LastName" required="" oninvalid="setCustomValidity('This field is required.)" oninput="setCustomValidity('')" maxlength="255">
</div>
<div class="marketo-form-field">
<label for="Email" class="mrkto_text_lbl">Email Address<span class="requiredAsterix">*</span></label>
<input type="email" id="1298_Email" class="mrkto_email" name="Email" required="" oninvalid="setCustomValidity('Must be valid email. example@yourdomain.com)" oninput="setCustomValidity('')" maxlength="255">
</div>
<div class="marketo-form-field">
<label for="Company" class="mrkto_text_lbl">Company<span class="requiredAsterix">*</span></label>
<input type="text" id="1298_Company" class="mrkto_text" name="Company" required="" oninvalid="setCustomValidity('This field is required.)" oninput="setCustomValidity('')" maxlength="255">
</div>
<div class="marketo-form-field">
<label for="Title" class="mrkto_text_lbl">Job Title<span class="requiredAsterix">*</span></label>
<input type="text" id="1298_Title" class="mrkto_text" name="Title" required="" oninvalid="setCustomValidity('This field is required.)" oninput="setCustomValidity('')" maxlength="255">
</div>
<div class="marketo-form-field">
<label for="Phone" class="mrkto_text_lbl">Phone<span class="requiredAsterix">*</span></label>
<input type="text" id="1298_Phone" class="mrkto_text" name="Phone" required="" oninvalid="setCustomValidity('This field is required.)" oninput="setCustomValidity('')" maxlength="255">
</div>
<div class="marketo-form-field">
<label for="Country" class="mrkto_select_lbl">Country<span class="requiredAsterix">*</span></label>
<select id="1298_Country" class="mrkto_select" name="Country" required="" oninvalid="setCustomValidity('This field is required.)" oninput="setCustomValidity('')">
<option value="">Select...</option>
<option value="United States">United States</option>
<option value="Afghanistan">Afghanistan</option>
<option value="Aland Islands">Aland Islands</option>
<option value="Albania">Albania</option>
<option value="Algeria">Algeria</option>
<option value="American Samoa">American Samoa</option>
<option value="Andorra">Andorra</option>
<option value="Angola">Angola</option>
<option value="Anguilla">Anguilla</option>
<option value="Antarctica">Antarctica</option>
<option value="Antigua and Barbuda">Antigua and Barbuda</option>
<option value="Argentina">Argentina</option>
<option value="Armenia">Armenia</option>
<option value="Aruba">Aruba</option>
<option value="Australia">Australia</option>
<option value="Austria">Austria</option>
<option value="Azerbaijan">Azerbaijan</option>
<option value="Bahamas">Bahamas</option>
<option value="Bahrain">Bahrain</option>
<option value="Bangladesh">Bangladesh</option>
<option value="Barbados">Barbados</option>
<option value="Belarus">Belarus</option>
<option value="Belgium">Belgium</option>
<option value="Belize">Belize</option>
<option value="Benin">Benin</option>
<option value="Bermuda">Bermuda</option>
<option value="Bhutan">Bhutan</option>
<option value="Bolivia">Bolivia</option>
<option value="Bonaire, Saint Eustatius and Saba">Bonaire, Saint Eustatius and Saba</option>
<option value="Bosnia and Herzegovina">Bosnia and Herzegovina</option>
<option value="Botswana">Botswana</option>
<option value="Bouvet Island">Bouvet Island</option>
<option value="Brazil">Brazil</option>
<option value="British Indian Ocean Territory">British Indian Ocean Territory</option>
<option value="Brunei Darussalam">Brunei Darussalam</option>
<option value="Bulgaria">Bulgaria</option>
<option value="Burkina Faso">Burkina Faso</option>
<option value="Burundi">Burundi</option>
<option value="Cambodia">Cambodia</option>
<option value="Cameroon">Cameroon</option>
<option value="Canada">Canada</option>
<option value="Cape Verde">Cape Verde</option>
<option value="Cayman Islands">Cayman Islands</option>
<option value="Central African Republic">Central African Republic</option>
<option value="Chad">Chad</option>
<option value="Chile">Chile</option>
<option value="China">China</option>
<option value="Christmas Island">Christmas Island</option>
<option value="Cocos (Keeling) Islands">Cocos (Keeling) Islands</option>
<option value="Colombia">Colombia</option>
<option value="Comoros">Comoros</option>
<option value="Congo">Congo</option>
<option value="Congo the Democratic Republic of the">Democratic Republic of the Congo</option>
<option value="Cook Islands">Cook Islands</option>
<option value="Costa Rica">Costa Rica</option>
<option value="Cote d'Ivoire">Cote d'Ivoire</option>
<option value="Croatia">Croatia</option>
<option value="Cuba">Cuba</option>
<option value="Curacao">Curacao</option>
<option value="Cyprus">Cyprus</option>
<option value="Czech Republic">Czech Republic</option>
<option value="Denmark">Denmark</option>
<option value="Djibouti">Djibouti</option>
<option value="Dominica">Dominica</option>
<option value="Dominican Republic">Dominican Republic</option>
<option value="Ecuador">Ecuador</option>
<option value="Egypt">Egypt</option>
<option value="El Salvador">El Salvador</option>
<option value="Equatorial Guinea">Equatorial Guinea</option>
<option value="Eritrea">Eritrea</option>
<option value="Estonia">Estonia</option>
<option value="Ethiopia">Ethiopia</option>
<option value="Falkland Islands (Malvinas)">Falkland Islands (Malvinas)</option>
<option value="Faroe Islands">Faroe Islands</option>
<option value="Fiji">Fiji</option>
<option value="Finland">Finland</option>
<option value="France">France</option>
<option value="French Guiana">French Guiana</option>
<option value="French Polynesia">French Polynesia</option>
<option value="French Southern Territories">French Southern Territories</option>
<option value="Gabon">Gabon</option>
<option value="Gambia">Gambia</option>
<option value="Georgia">Georgia</option>
<option value="Germany">Germany</option>
<option value="Ghana">Ghana</option>
<option value="Gibraltar">Gibraltar</option>
<option value="Greece">Greece</option>
<option value="Greenland">Greenland</option>
<option value="Grenada">Grenada</option>
<option value="Guadeloupe">Guadeloupe</option>
<option value="Guam">Guam</option>
<option value="Guatemala">Guatemala</option>
<option value="Guernsey">Guernsey</option>
<option value="Guinea">Guinea</option>
<option value="Guinea-Bissau">Guinea-Bissau</option>
<option value="Guyana">Guyana</option>
<option value="Haiti">Haiti</option>
<option value="Heard Island and McDonald Islands">Heard Island and McDonald Islands</option>
<option value="Holy See (Vatican City State)">Holy See (Vatican City State)</option>
<option value="Honduras">Honduras</option>
<option value="Hong Kong">Hong Kong</option>
<option value="Hungary">Hungary</option>
<option value="Iceland">Iceland</option>
<option value="India">India</option>
<option value="Indonesia">Indonesia</option>
<option value="Iran">Iran</option>
<option value="Iraq">Iraq</option>
<option value="Ireland">Ireland</option>
<option value="Isle of Man">Isle of Man</option>
<option value="Israel">Israel</option>
<option value="Italy">Italy</option>
<option value="Jamaica">Jamaica</option>
<option value="Japan">Japan</option>
<option value="Jersey">Jersey</option>
<option value="Jordan">Jordan</option>
<option value="Kazakhstan">Kazakhstan</option>
<option value="Kenya">Kenya</option>
<option value="Kiribati">Kiribati</option>
<option value="Korea, Republic of">Korea</option>
<option value="Kosovo">Kosovo</option>
<option value="Kuwait">Kuwait</option>
<option value="Kyrgyzstan">Kyrgyzstan</option>
<option value="Lao People's Democratic Republic">Lao People's Democratic Republic</option>
<option value="Latvia">Latvia</option>
<option value="Lebanon">Lebanon</option>
<option value="Lesotho">Lesotho</option>
<option value="Liberia">Liberia</option>
<option value="Libyan Arab Jamahiriya">Libyan Arab Jamahiriya</option>
<option value="Liechtenstein">Liechtenstein</option>
<option value="Lithuania">Lithuania</option>
<option value="Luxembourg">Luxembourg</option>
<option value="Macao">Macao</option>
<option value="Macedonia, the Former Yugoslav Republic of">Republic of Macedonia</option>
<option value="Madagascar">Madagascar</option>
<option value="Malawi">Malawi</option>
<option value="Malaysia">Malaysia</option>
<option value="Maldives">Maldives</option>
<option value="Mali">Mali</option>
<option value="Malta">Malta</option>
<option value="Marshall Islands">Marshall Islands</option>
<option value="Martinique">Martinique</option>
<option value="Mauritania">Mauritania</option>
<option value="Mauritius">Mauritius</option>
<option value="Mayotte">Mayotte</option>
<option value="Mexico">Mexico</option>
<option value="Micronesia, Federated States of">Federated States of Micronesia</option>
<option value="Moldova, Republic of">Republic of Moldova</option>
<option value="Monaco">Monaco</option>
<option value="Mongolia">Mongolia</option>
<option value="Montenegro">Montenegro</option>
<option value="Montserrat">Montserrat</option>
<option value="Morocco">Morocco</option>
<option value="Mozambique">Mozambique</option>
<option value="Myanmar">Myanmar</option>
<option value="Namibia">Namibia</option>
<option value="Nauru">Nauru</option>
<option value="Nepal">Nepal</option>
<option value="Netherlands">Netherlands</option>
<option value="Netherlands Antilles">Netherlands Antilles</option>
<option value="New Caledonia">New Caledonia</option>
<option value="New Zealand">New Zealand</option>
<option value="Nicaragua">Nicaragua</option>
<option value="Niger">Niger</option>
<option value="Nigeria">Nigeria</option>
<option value="Niue">Niue</option>
<option value="Norfolk Island">Norfolk Island</option>
<option value="Northern Mariana Islands">Northern Mariana Islands</option>
<option value="Norway">Norway</option>
<option value="Oman">Oman</option>
<option value="Pakistan">Pakistan</option>
<option value="Palau">Palau</option>
<option value="Palestinian Territory, Occupied">Palestinian Territory</option>
<option value="Panama">Panama</option>
<option value="Papua New Guinea">Papua New Guinea</option>
<option value="Paraguay">Paraguay</option>
<option value="Peru">Peru</option>
<option value="Philippines">Philippines</option>
<option value="Pitcairn">Pitcairn</option>
<option value="Poland">Poland</option>
<option value="Portugal">Portugal</option>
<option value="Puerto Rico">Puerto Rico</option>
<option value="Qatar">Qatar</option>
<option value="Reunion">Reunion</option>
<option value="Romania">Romania</option>
<option value="Russian Federation">Russian Federation</option>
<option value="Rwanda">Rwanda</option>
<option value="Saint Barthelemy">Saint Barthelemy</option>
<option value="Saint Helena">Saint Helena</option>
<option value="Saint Kitts and Nevis">Saint Kitts and Nevis</option>
<option value="Saint Lucia">Saint Lucia</option>
<option value="Saint Martin (French part)">Saint Martin</option>
<option value="Saint Pierre and Miquelon">Saint Pierre and Miquelon</option>
<option value="Saint Vincent and the Grenadines">Saint Vincent and the Grenadines</option>
<option value="Samoa">Samoa</option>
<option value="San Marino">San Marino</option>
<option value="Sao Tome and Principe">Sao Tome and Principe</option>
<option value="Saudi Arabia">Saudi Arabia</option>
<option value="Senegal">Senegal</option>
<option value="Serbia">Serbia</option>
<option value="Seychelles">Seychelles</option>
<option value="Sierra Leone">Sierra Leone</option>
<option value="Singapore">Singapore</option>
<option value="Sint Maarten">Sint Maarten</option>
<option value="Slovakia">Slovakia</option>
<option value="Slovenia">Slovenia</option>
<option value="Solomon Islands">Solomon Islands</option>
<option value="Somalia">Somalia</option>
<option value="South Africa">South Africa</option>
<option value="South Georgia and the South Sandwich Islands">South Georgia and the South Sandwich Islands</option>
<option value="South Sudan">South Sudan</option>
<option value="Spain">Spain</option>
<option value="Sri Lanka">Sri Lanka</option>
<option value="Sudan">Sudan</option>
<option value="Suriname">Suriname</option>
<option value="Svalbard and Jan Mayen">Svalbard and Jan Mayen</option>
<option value="Swaziland">Swaziland</option>
<option value="Sweden">Sweden</option>
<option value="Switzerland">Switzerland</option>
<option value="Syria">Syria</option>
<option value="Taiwan">Taiwan</option>
<option value="Tajikistan">Tajikistan</option>
<option value="Tanzania, United Republic of">United Republic of Tanzania</option>
<option value="Thailand">Thailand</option>
<option value="Timor-Leste">Timor-Leste</option>
<option value="Togo">Togo</option>
<option value="Tokelau">Tokelau</option>
<option value="Tonga">Tonga</option>
<option value="Trinidad and Tobago">Trinidad and Tobago</option>
<option value="Tunisia">Tunisia</option>
<option value="Turkey">Turkey</option>
<option value="Turkmenistan">Turkmenistan</option>
<option value="Turks and Caicos Islands">Turks and Caicos Islands</option>
<option value="Tuvalu">Tuvalu</option>
<option value="Uganda">Uganda</option>
<option value="Ukraine">Ukraine</option>
<option value="United Arab Emirates">United Arab Emirates</option>
<option value="United Kingdom">United Kingdom</option>
<option value="United States Minor Outlying Islands">United States Minor Outlying Islands</option>
<option value="Uruguay">Uruguay</option>
<option value="Uzbekistan">Uzbekistan</option>
<option value="Vanuatu">Vanuatu</option>
<option value="Venezuela">Venezuela</option>
<option value="Viet Nam">Viet Nam</option>
<option value="Virgin Islands, British">Virgin Islands, British</option>
<option value="Virgin Islands, U.S.">Virgin Islands, U.S.</option>
<option value="Wallis and Futuna">Wallis and Futuna</option>
<option value="Yemen">Yemen</option>
<option value="Zambia">Zambia</option>
<option value="Zimbabwe">Zimbabwe</option>
</select>
</div>
<div class="marketo-form-field">
<label for="License_Count__c" class="mrkto_select_lbl">How many licenses will you need?<span class="requiredAsterix">*</span></label>
<select id="1298_License_Count__c" class="mrkto_select" name="License_Count__c" required="" oninvalid="setCustomValidity('This field is required.)" oninput="setCustomValidity('')">
<option value="">Select...</option>
<option value="1">1 User</option>
<option value="2">2 to 10</option>
<option value="11">11 to 20</option>
<option value="21">21 to 50</option>
<option value="51">51+</option>
</select>
</div>
<div class="marketo-form-field">
<span>By filling out this form and clicking submit, you acknowledge our<span> </span></span><a href="https://www.pluralsight.com/privacy" target="_blank">privacy policy</a><span>.</span>
</div>
<div class="marketo-form-field">
<input type="hidden" id="1298_UTM_Source__c" class="mrkto_hidden" name="UTM_Source__c">
</div>
<div class="marketo-form-field">
<input type="hidden" id="1298_UTM_Medium__c" class="mrkto_hidden" name="UTM_Medium__c">
</div>
<div class="marketo-form-field">
<input type="hidden" id="1298_UTM_Campaign__c" class="mrkto_hidden" name="UTM_Campaign__c">
</div>
<div class="marketo-form-field">
<input type="hidden" id="1298_UTM_Content__c" class="mrkto_hidden" name="UTM_Content__c">
</div>
<div class="marketo-form-field">
<input type="hidden" id="1298_UTM_Term__c" class="mrkto_hidden" name="UTM_Term__c">
</div>
<div class="marketo-form-field">
<input type="hidden" id="1298_mcvisid__c" class="mrkto_hidden" name="mcvisid__c">
</div>
<div class="marketo-form-field">
<input type="hidden" id="1298_GCLID__c" class="mrkto_hidden" name="GCLID__c">
</div>
<div class="marketo-form-field">
<input type="hidden" id="1298_Electronic_Person__c" class="mrkto_hidden" name="Electronic_Person__c">
</div>
<div class="marketo-form-field">
<button type="submit" class="mrkto_submit">Submit</button>
<input type="hidden" name="formid" value="1298">
</div>
</form>
<form id="customMarketo_1041" data-mkto-id="1041">
<div class="marketo-form-field">
<label for="Email" class="mrkto_text_lbl">Email Address:<span class="requiredAsterix">*</span></label>
<input type="email" id="1041_Email" class="mrkto_email" name="Email" required="" oninvalid="setCustomValidity('Must be valid email. example@yourdomain.com)" oninput="setCustomValidity('')" maxlength="255">
</div>
<div class="marketo-form-field">
<input type="hidden" id="1041_UTM_Source__c" class="mrkto_hidden" name="UTM_Source__c">
</div>
<div class="marketo-form-field">
<input type="hidden" id="1041_UTM_Medium__c" class="mrkto_hidden" name="UTM_Medium__c">
</div>
<div class="marketo-form-field">
<input type="hidden" id="1041_UTM_Campaign__c" class="mrkto_hidden" name="UTM_Campaign__c">
</div>
<div class="marketo-form-field">
<input type="hidden" id="1041_UTM_Content__c" class="mrkto_hidden" name="UTM_Content__c">
</div>
<div class="marketo-form-field">
<input type="hidden" id="1041_UTM_Term__c" class="mrkto_hidden" name="UTM_Term__c">
</div>
<div class="marketo-form-field">
<input type="hidden" id="1041_mcvisid__c" class="mrkto_hidden" name="mcvisid__c">
</div>
<div class="marketo-form-field">
<input type="hidden" id="1041_GCLID__c" class="mrkto_hidden" name="GCLID__c">
</div>
<div class="marketo-form-field">
<input type="hidden" id="1041_Electronic_Person__c" class="mrkto_hidden" name="Electronic_Person__c">
</div>
<div class="marketo-form-field">
<input type="checkbox" id="1041_Single_Opt_In__c" class="mrkto_checkbox" name="Single_Opt_In__c" value="yes">
<label for="1041_Single_Opt_In__c" class="mrkto_checkbox_lbl">I would like to receive emails from Pluralsight</label>
</div>
<div class="marketo-form-field">
<button type="submit" class="mrkto_submit">Submit</button>
<input type="hidden" name="formid" value="1041">
</div>
</form>
Text Content
Skip to content * Pluralsight * Skills * A Cloud Guru * Flow * Blog An avatar icon Sign in * A skills logo Sign in to Skills The Skills product logo icon * A Cloud Guru small logo icon Sign in to A Cloud Guru A Cloud Guru logo, color version * Flow product logo Sign in to Flow The Flow product logo icon The Pluralsight logo, color version * Explore * Software dev * Cloud * IT Ops * Data * Security * Leadership * A search magnifying glass icon A search magnifying glass icon * Contact sales * View plans Close Icon Sign in Menu * * A skills logo Sign in to Skills The Skills product logo icon * A Cloud Guru small logo icon Sign in to A Cloud Guru A Cloud Guru logo, color version * Flow product logo Sign in to Flow The Flow product logo icon * * Pluralsight * Skills * A Cloud Guru * Flow * Blog A search magnifying glass * Explore * Software dev * Cloud * IT Ops * Data * Security * Leadership * Contact sales * View plans CONTACT SALES First Name* Last Name* Email Address* Company* Job Title* Phone* Country* Select... United States Afghanistan Aland Islands Albania Algeria American Samoa Andorra Angola Anguilla Antarctica Antigua and Barbuda Argentina Armenia Aruba Australia Austria Azerbaijan Bahamas Bahrain Bangladesh Barbados Belarus Belgium Belize Benin Bermuda Bhutan Bolivia Bonaire, Saint Eustatius and Saba Bosnia and Herzegovina Botswana Bouvet Island Brazil British Indian Ocean Territory Brunei Darussalam Bulgaria Burkina Faso Burundi Cambodia Cameroon Canada Cape Verde Cayman Islands Central African Republic Chad Chile China Christmas Island Cocos (Keeling) Islands Colombia Comoros Congo Democratic Republic of the Congo Cook Islands Costa Rica Cote d'Ivoire Croatia Cuba Curacao Cyprus Czech Republic Denmark Djibouti Dominica Dominican Republic Ecuador Egypt El Salvador Equatorial Guinea Eritrea Estonia Ethiopia Falkland Islands (Malvinas) Faroe Islands Fiji Finland France French Guiana French Polynesia French Southern Territories Gabon Gambia Georgia Germany Ghana Gibraltar Greece Greenland Grenada Guadeloupe Guam Guatemala Guernsey Guinea Guinea-Bissau Guyana Haiti Heard Island and McDonald Islands Holy See (Vatican City State) Honduras Hong Kong Hungary Iceland India Indonesia Iran Iraq Ireland Isle of Man Israel Italy Jamaica Japan Jersey Jordan Kazakhstan Kenya Kiribati Korea Kosovo Kuwait Kyrgyzstan Lao People's Democratic Republic Latvia Lebanon Lesotho Liberia Libyan Arab Jamahiriya Liechtenstein Lithuania Luxembourg Macao Republic of Macedonia Madagascar Malawi Malaysia Maldives Mali Malta Marshall Islands Martinique Mauritania Mauritius Mayotte Mexico Federated States of Micronesia Republic of Moldova Monaco Mongolia Montenegro Montserrat Morocco Mozambique Myanmar Namibia Nauru Nepal Netherlands Netherlands Antilles New Caledonia New Zealand Nicaragua Niger Nigeria Niue Norfolk Island Northern Mariana Islands Norway Oman Pakistan Palau Palestinian Territory Panama Papua New Guinea Paraguay Peru Philippines Pitcairn Poland Portugal Puerto Rico Qatar Reunion Romania Russian Federation Rwanda Saint Barthelemy Saint Helena Saint Kitts and Nevis Saint Lucia Saint Martin Saint Pierre and Miquelon Saint Vincent and the Grenadines Samoa San Marino Sao Tome and Principe Saudi Arabia Senegal Serbia Seychelles Sierra Leone Singapore Sint Maarten Slovakia Slovenia Solomon Islands Somalia South Africa South Georgia and the South Sandwich Islands South Sudan Spain Sri Lanka Sudan Suriname Svalbard and Jan Mayen Swaziland Sweden Switzerland Syria Taiwan Tajikistan United Republic of Tanzania Thailand Timor-Leste Togo Tokelau Tonga Trinidad and Tobago Tunisia Turkey Turkmenistan Turks and Caicos Islands Tuvalu Uganda Ukraine United Arab Emirates United Kingdom United States Minor Outlying Islands Uruguay Uzbekistan Vanuatu Venezuela Viet Nam Virgin Islands, British Virgin Islands, U.S. Wallis and Futuna Yemen Zambia Zimbabwe How many licenses will you need?* Select... 1 User 2 to 10 11 to 20 21 to 50 51+ By filling out this form and clicking submit, you acknowledge our privacy policy. Submit Thank you! Close button icon 1. Blog 2. Blog HOW TO INTEGRATE GENERATIVE AI INTO YOUR APPLICATIONS You can give your apps AI powers with the OpenAI API. Learn how to use web API calls or the OpenAI library to add generative AI to your applications. By Xavier Morera Mar 25, 2024 • 9 Minute Read * Software Development * AI & Machine Learning -------------------------------------------------------------------------------- Subscribe to the newsletter Every time I check the news or social media, there’s a new article or post about generative AI performing a task that replaces someone’s work. And an important question pops into my mind: “Will AI take my job?” The answer isn't as straightforward or complex as you might think. Each technological breakthrough has made certain roles irrelevant. For example, being the town blacksmith in the Middle Ages was a vital job—you were in charge of crafting swords and weapons for defense. But the invention of gunpowder eventually led to more efficient weaponry, and blacksmiths are now pretty hard to find. So, what’s my answer? “AI won’t replace me, but someone using AI might.” If we want to be future ready and thrive in this new era, we need to embrace generative AI, incorporate GenAI into applications, and make it part of our daily workflow. Let me show you how. In this post, I share a high-level overview of how to connect your application to the OpenAI API. If you want a deeper dive, check out my course Developing Generative AI Applications with Python and Open AI. TABLE OF CONTENTS * What is text-based generative AI? * How to add generative AI to your applications with the OpenAI API * Before you begin: Get started with the OpenAI API * Using web API calls to connect your app with OpenAI’s API * Using the OpenAI library to connect your app with the OpenAI API * Build epic applications with GenAI WHAT IS TEXT-BASED GENERATIVE AI? In a nutshell, text-based GenAI refers to AI tools that can produce text that looks and feels like a human produced it. You can learn about several of these tools in our post, AI tools your employees need to learn. Or you can ask ChatGPT directly. Check it out. Besides answering questions, text-based GenAI systems can also create content, transcribe text, translate text into multiple languages, and perform functions like entity extraction, creative writing, data augmentation, code generation, task automation, and knowledge extraction. Text-based GenAI platforms can help you be more productive, create new content, and perform tasks in new, innovative ways. But you still have to sit in front of a browser, provide a prompt, and receive the output. What if you take it up a notch: Instead of giving yourself AI superpowers, you give your applications those superpowers by integrating artificial intelligence with an API. Learn more about core concepts of generative AI. HOW TO ADD GENERATIVE AI TO YOUR APPLICATIONS WITH THE OPENAI API Generative AI has powerful features. You can add these features to your applications by allowing the use of natural language as input. But you can’t do this directly with ChatGPT or another platform. Instead, you need to connect your application to an API, like the OpenAI API. Here’s how. BEFORE YOU BEGIN: GET STARTED WITH THE OPENAI API Before you can connect your app with the OpenAI API, you’ll want to follow these three steps. STEP 1: GET ACCESS TO THE OPENAI API You’ll find details on how to access the OpenAI API at platform.openai.com. You usually receive an initial credit to get started which will be more than enough to begin testing. STEP 2: GET AN API SECRET KEY Your API secret key is how you’ll authenticate on every call to the API. You’re responsible for any usage with your secret key, so safeguard it. Never share it with anyone and never commit it to a source control repository. Note: If you belong to multiple organizations, you can have keys for each org. This is important as each organization will be billed individually. STEP 3: DECIDE ON FUNCTIONALITY Finally, decide what functionality you’re going to use with your API secret key. The functionality will tell you the endpoint and models you need. For example, if you’re going to integrate a general-purpose “text in, text out” generative AI into your application, you need the Chat Completions endpoint. This endpoint has several pre-trained models from the GPT-4 and GPT-3.5 model families. You can choose from several different model families. If you’re tight on time or budget, pick GPT-3.5 Turbo. Why? It works well, it’s great for getting started, and it’s cheaper than GPT-4. Now that you have access to the platform, a secret key, and a model, it’s time to start coding. USING WEB API CALLS TO CONNECT YOUR APP WITH OPENAI’S API Before you start coding, figure out the coding language your application uses. The OpenAI API supports several languages, or you can make web API calls directly. Let me show you an example of each SHOW ME THE CODE: USING CURL TO TEST API CALLS I recommend using cURL (short for Client URL) as your first test. cURL is a command line tool for transferring data using various network protocols, and it’s easy to use for testing calls to APIs. This is the command you should use: curl https://api.openai.com/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -d '{ "model": "gpt-3.5-turbo", "messages": [{"role": "user", "content": "Why is Costa Rica the best travel destination? Answer in two lines."}], "temperature": 0.7 }' Note: The cURL command uses $OPEN_AI_KEY, which you need to set as an environment variable. Set it from the System Variables window in Windows or use the export command in Mac. Once you make the call, the API will return a response like the one shown below. The value you should look at is content. Within message, role should be equal to assistant. If you’re going to integrate your application using web API calls, you pretty much have to send what’s shown above: Content-Type and Authorization in the header (-H) and the parameters in data (-d). Parse the JSON response, and you’re done. If parsing JSON responses and creating calls by concatenating (or interpolating) text aren’t your cup of tea, you might like the next option. USING THE OPENAI LIBRARY TO CONNECT YOUR APP WITH THE OPENAI API Web API calls not your thing? Try an OpenAI library. There are several OpenAI libraries available depending on your language of choice. You can use OpenAI-supported libraries, Azure OpenAI client libraries, or community-maintained libraries. For this post, I’ll use the open source Python library, officially maintained by OpenAI and available in pypi.org. STEP 1: INSTALL THE OPENAI LIBRARY The first step is to use the command below to install the OpenAI library: pip install openai STEP 2: PROVIDE YOUR KEY TO THE OPENAI CLIENT There are several ways to provide your key to the OpenAI client. The easiest one (IMHO) is the python_dotenv library, which reads key-value pairs from a file called .env and sets them as environment variables. Install the python_dotenv library using this command: pip install python-dotenv Note: I’m working under the assumption you know how to create Python applications and understand best practices. If you don’t, no big deal. You can keep reading and learning! STEP 3: CREATE YOUR .ENV FILE The next step is to create a file called .env in the root where you’ll run your application. Use the following format and your key: OPENAI_API_KEY=<insert-your-key-here> STEP 4: IMPORT THE LIBRARIES AND LOAD YOUR KEY Time to start coding. Create a Python file, for example app.py, and import the libraries you’re going to use: openai, os, and python_dotenv. import os from openai import OpenAI from dotenv import load_dotenv Add the following statement to load the key from the .env file and set it as an environment variable: load_dotenv() STEP 5: CREATE THE CLIENT This step requires you to set the OPENAI_API_KEY environment variable to an API key, which you did in the previous statement. If it’s not set, an error will occur. When you create the client, the key’s validity isn’t checked. Validation takes place when the endpoint is called. client = OpenAI() STEP 6: MAKE THE CALL TO THE CHATCOMPLETIONS ENDPOINT Now comes the most important step: making the call to the ChatCompletions endpoint, which you do by calling openai.ChatCompletion.create. Here’s the call you need to make with its respective parameters: response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[{"role": "user","content": “What is one of the best things about Costa Rica that makes it great?”}], temperature=0.7 ) Let me explain what each parameter means. * model: This parameter indicates which of the available models you’d like to use to process your request. Like I mentioned earlier, GPT-3.5 Turbo is the best one to start with because of the price and its optimization for the ChatCompletions endpoint. * messages: This parameter points to an array of objects that contains the exchange between you (or your application) and the large language model (LLM). Because the API is stateless, you need to include all messages in a conversation so the LLM can follow along and keep answering your requests with greater context. Each message is made up of a role and content: * role: Corresponds to who or what is sending a message. There are several options: * user: The one making the request (you or your application) * assistant: Response from the LLM * system: Instructions provided to the LLM * content: The text sent to the LLM or received from the LLM * A content from user is the prompt * A content from assistant is the output * A content with system are the instructions to the LLM; for example, “You are a useful assistant who speaks like a pirate” * temperature: This parameter uses a range of 0 – 2 to indicate to the LLM how consistent or creative/random its answers should be. The value 0 is deterministic and 2 gets (slightly too) creative. STEP 7: CHECK THE CALL’S RESPONSE The response received from the call is an object that has the following structure in JSON: { "choices": [ { "finish_reason": "stop", "index": 0, "message": { "content": "The people! Costa Rica is great because of the ticos and ticas! Pura vida mae!", "role": "assistant" }, "logprobs": null } ], "created": 1677664795, "id": "chatcmpl-7QyqpwdfhqwajicIEznoc6Q47XAyW", "model": "gpt-3.5-turbo-0613", "object": "chat.completion", "usage": { "completion_tokens": 17, "prompt_tokens": 57, "total_tokens": 74 } } The response contains several important values. * finish_reason: Why the model returned the output. Reasons include everything from it finished generating the entire response to it had to stop because of length constraints. * model: Which exact model was used. You may have requested GPT-3.5 Turbo, but the exact model version used was gpt-3.5-turbo-0613. * message: The response from the LLM to your prompt. Additional details are included, like date, type of response object, and usage—extremely important if you want to control API consumption. STEP 8: MAKE A LOOP AND START A CONVERSATION Extract the content below from the response and send it back to your user, save it, or use it however you’d like. answer = completion.choices[0].message.content print(answer) Now you can make a loop and start a conversation. With ChatCompletions, it’s your responsibility to manage the history thread. This isn’t necessary with AI assistants that have a “thread” that stores your conversation. But that’s a different blog post and course. BUILD EPIC APPLICATIONS WITH GENAI Now that you know how to integrate generative AI superpowers into your application, you no longer need to code instructions to respond to user requests. For example, if you have a travel application, a user doesn’t need to perform a search and refine the results. Instead, they can make a request like this: “Find me a hotel in Costa Rica, one weekend in March, close to the beach, for 2 adults and 2 children, for less than $150 a day.” Wow! This is a huge improvement. I hope you’ll use what you’ve learned to build epic applications with GenAI superpowers. Want to dig deeper? Try these courses: * Developing Generative AI Applications with Python and Open AI * OpenAPI Assistant API * Core Concepts of Generative AI * OpenAI: Prompt Engineering Best Practices Xavier M. Xavier is very passionate about teaching, helping others understand search and Big Data. He is also an entrepreneur, project manager, technical author, trainer, and holds a few certifications with Cloudera, Microsoft, and the Scrum Alliance, along with being a Microsoft MVP. He has spent a great deal of his career working on cutting-edge projects with a primary focus on .NET, Solr, and Hadoop among a few other interesting technologies. Throughout multiple projects, he has acquired skills to deal with complex enterprise software solutions, working with companies that range from startups to Microsoft. Xavier also worked as a worldwide v-trainer/evangelist for Microsoft. More about this author * SUPPORT * Contact * Help Center * IP Allowlist * Sitemap * Download Pluralsight * Skills Plans * A Cloud Guru Plans * Flow Plans * COMMUNITY * Guides * Teach * Partner with Pluralsight * Affiliate Partners * Pluralsight One * Authors * COMPANY * About Us * Careers * Newsroom * Resources * INDUSTRIES * Education * Financial Services (FSBI) * Healthcare * Insurance * Non-Profit * Public Sector * NEWSLETTER Email Address:* I would like to receive emails from Pluralsight Submit Thank you! * A facebook icon * * * * -------------------------------------------------------------------------------- Pluralsight logo Copyright © 2004 - 2024 Pluralsight LLC. All rights reserved * Terms of Use * Privacy Notice * Modern Slavery Statement