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

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>&nbsp;</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