Prompt Engineering con Python e Panda: personalizzazione dell'output GPT
Inizia con una sfida. Qualunque sia l'output fornito dai modelli GPT3, potrebbe non soddisfare le esigenze di testo della tua azienda/applicazione. Soluzione... È possibile creare il modello GPT3 per l'apprendimento e creare un "clone aggiornato" o una "generazione più recente" del modello. Questo post riguarda quel processo.
Prima di continuare a leggere, se vuoi vedere e ascoltare piuttosto che leggere ciò che verrà dopo, puoi andare al video qui sotto. Il codice può trovarsi inhttps://github.com/insightbuilder/python_de_learners_data
Il ciclo di feedback:
I dati per la creazione del nuovo modello vengono generati dal modello gpt3.5 esistente. È qui che entra in gioco l'ingegneria rapida. Lo scheletro del prompt e le frasi del prompt vengono utilizzati per creare prima i completamenti gpt3.5. Quindi le frasi rapide vengono scartate. Solo lo scheletro del prompt e il completamento vengono restituiti al modello GPT3.5 per la nuova generazione del modello.
Costruzione dei dati necessari dallo scheletro e completamento:
def gpt3_completion(org, key,prompt,prompt_part,
engine='text-davinci-002',temp=1.0,
top_p=1.0,tokens=500,freq_pen=0.0,
pres_pen=0.0,stop=['asdfasdf','asdfasdf'],
filename='temp_file.jsonl'):
"""The function will take the prompt and the prompt parts to
begin the data collection. Once the data collection is completed,
the prompt part will be used for fine tuning. The prompt used will
be discarded"""
openai.api_key = key
openai.organization = org
max_retry=5
retry = 0
prompt = prompt.encode(encoding='ASCII',errors='ignore').decode()
while True:
try:
response = openai.Completion.create(
model=engine,
prompt=prompt,
temperature=temp,
max_tokens=tokens,
top_p=top_p,
frequency_penalty=freq_pen,
presence_penalty=pres_pen,
stop=stop)
text = response['choices'][0]['text'].strip()
outprompt = prompt_part
dict_reply = {'prompt':outprompt,'completion':text}
with open(filename,'a+') as taker:
json.dump(dict_reply,fp=taker)
taker.write('\n')
return dict_reply
except Exception as e:
retry += 1
if retry > max_retry:
return f'GPT errored out {e}'
sleep(1)
Il processo di finalizzazione dei dati utilizzati per il nuovo modello:
Possiamo utilizzare elenchi come quelli mostrati di seguito per creare scheletri di prompt / esempi di prompt mostrati sopra nella figura. Più cicli for nidificati svolgeranno un lavoro rapido e forniranno 256 prompt-scheletro e frasi di prompt.
places = ['India','United States of America',
'Pakistan','Russia']
year = [2022, 2024, 2026, 2028]
ideas1 = ['Power','Ability','automation','danger']
ideas2 = ['Government','education','society','space faring']
prompt_skeleton:
['Year: 2022\nPlace: India\nIdea1:Power\nIdea2:Government',
'Year: 2022\nPlace: India\nIdea1:Power\nIdea2:education',
'Year: 2022\nPlace: India\nIdea1:Power\nIdea2:society',
'Year: 2022\nPlace: India\nIdea1:Power\nIdea2:space faring',...]
prompt_sentences:
['3a8f66\nImagine you are the highest earning youtube influencer.\n
The year is 2022 and you are living in India.You are asked to
influence the \nmasses on topic Power. Write 5 points each 100
words elaborating Power impact on Government\nso it can be made in
to a video',
'61e094\nImagine you are the highest earning youtube influencer.
\nThe year is 2022 and you are living in India.You are asked to
influence the \nmasses on topic Power. Write 5 points each 100 words
elaborating Power impact on education\nso it can be made in to a video',
'a26a9b\nImagine you are the highest earning youtube influencer.
\nThe year is 2022 and you are living in India.You are asked to
influence the \nmasses on topic Power. Write 5 points each 100 words
elaborating Power impact on society\nso it can be made in to a video',
'a93664\nImagine you are the highest earning youtube influencer.
\nThe year is 2022 and you are living in India.You are asked to
influence the \nmasses on topic Power. Write 5 points each 100 words
elaborating Power impact on space faring\nso it can be
made in to a video',..]
- Durata dei completamenti
- La frequenza di una parola particolare all'interno del completamento
- Uso di un certo tipo di parole,
- Sentimento del completamento complessivo
with open('filtered_file.jsonl','w') as jso:
for d in final_df.to_dict(orient='records'):
json.dump(obj=d,fp=jso)
jso.write('\n')
Il processo di invio del file di dati è curato dai metodi openai. Le seguenti funzioni aiutano a connettersi con i vari endpoint API in OpenAI e ottenere il modello. Non entreremo in possesso dell'attuale modello aggiornato GPT 3.5 nel nostro sistema locale. Il modello aggiornato si troverà solo nel server di OpenAI.
def finetune_model(fileId, suffix,model='davinci',api_key=my_key):
header = {'Content-Type':'application/json',
'Authorization':f'Bearer {api_key}'}
payload = {'training_file':fileId,'model':model,'suffix':suffix}
resp = requests.request(method='POST',
url='https://api.openai.com/v1/fine-tunes',
headers=header,
json=payload,timeout=40)
print(resp.json())
def finetune_event(ftId,api_key=my_key):
header = {'Content-Type':'application/json',
'Authorization':f'Bearer {api_key}'}
resp = requests.request(method='GET',
url=f'https://api.openai.com/v1/fine-tunes/{ftId}/events',
headers=header,timeout=40)
print(resp.json())
def finetune_get(ftId,api_key=my_key):
header = {'Content-Type':'application/json',
'Authorization':f'Bearer {api_key}'}
resp = requests.request(method='GET',
url=f'https://api.openai.com/v1/fine-tunes/{ftId}',
headers=header,timeout=40)
print(resp.json())
I benefici e le realizzazioni
Il modello GPT3.5 può essere completamente modificato nel carattere e nel design per determinati tipi di prompt. I dati che fornisce possono anche essere personalizzati a un livello molto dettagliato. L'intero processo di generazione del modello è un semplice processo di acquisizione dei dati e creazione del modello utilizzato in quasi tutte le attività di data science. Il passaggio in cui i nuovi dati sono stati restituiti al server OpenAI, il server dispone dell'applicazione di machine learning automatizzata che genera i modelli e li archivia per l'utilizzo nel tuo account specifico. Questo modello può essere distribuito anche dall'API di openai. Molte aziende lo hanno già fatto, utilizzando l'interfaccia API di chatGPT. Ne ho scritto qui , date un'occhiata se interessati.
Grazie per aver letto e alla prossima.

![Che cos'è un elenco collegato, comunque? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































