Building Systems With the ChatGPT API

Introduction

Language Models, the Chat Format and Tokens

  • LLM
    • How? 使用 監督式學習 預測下一個word
    • type
      • Base LLM: 訓練時是去預測下一個字的訓練方式
      • Instruction Turned LLM:使用教學QA
    • 如何讓BaseLLM更好? -> Instruction Turned
      1. 使用 QA Fine tune
      2. 人類評分 e.g. helpful? harmless
      3. 使用 RLHF, Reimforcelearning Human Feedback Tune LLM
    • 限制
      • token: e.g. gpt3.5 turbo 只能有4000 token
import os
import openai
import tiktoken
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv()) # read local .env file

openai.api_key  = os.environ['OPENAI_API_KEY']
def get_completion(prompt, model="gpt-3.5-turbo"):
    messages = [{"role": "user", "content": prompt}]
    response = openai.ChatCompletion.create(
        model=model,
        messages=messages,
        temperature=0,
    )
    return response.choices[0].message["content"]
response = get_completion("What is the capital of France?")
print(response)
def get_completion_from_messages(messages, 
                                 model="gpt-3.5-turbo", 
                                 temperature=0, 
                                 max_tokens=500):
    response = openai.ChatCompletion.create(
        model=model,
        messages=messages,
        temperature=temperature, # this is the degree of randomness of the model's output
        max_tokens=max_tokens, # the maximum number of tokens the model can ouptut 
    )
    return response.choices[0].message["content"]
  • 注意 LLM 內部是使用token
# wrong prompt
response = get_completion("Take the letters in lollipop \
and reverse them")
print(response)
# output 
# "lollipop" in reverse should be "popillol"
# correct prompt 使用 - 隔開
response = get_completion("""Take the letters in \
l-o-l-l-i-p-o-p and reverse them""")
# output 'p-o-p-i-l-l-o-l'
  • helper function (chat)
def get_completion_from_messages(messages, 
                                 model="gpt-3.5-turbo", 
                                 temperature=0, 
                                 max_tokens=500):
    response = openai.ChatCompletion.create(
        model=model,
        messages=messages,
        temperature=temperature, # this is the degree of randomness of the model's output
        max_tokens=max_tokens, # the maximum number of tokens the model can ouptut 
    )
    return response.choices[0].message["content"]
  • 使用角色定 MwOGcA4.png
messages =  [  
{'role':'system', 
 'content':"""You are an assistant who\
 responds in the style of Dr Seuss."""},    
{'role':'user', 
 'content':"""write me a very short poem\
 about a happy carrot"""},  
] 
response = get_completion_from_messages(messages, temperature=1)
print(response)

https://i.imgur.com/MwOGcA4.png

20231026-ChatGPT-Prompt-Engineering-for-Developers

Introduction

兩種LLM模型

1. base:由訓練資料預測下一個word
2. instruction based :由指令Fine-turn / RLHF(強化學習、人類回饋)

Guidelines

Setup

import openai
import os

from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())

openai.api_key  = os.getenv('OPENAI_API_KEY')
  • helper function
def get_completion(prompt, model="gpt-3.5-turbo"):
    messages = [{"role": "user", "content": prompt}]
    response = openai.ChatCompletion.create(
        model=model,
        messages=messages,
        temperature=0, # this is the degree of randomness of the model's output
    )
    return response.choices[0].message["content"]

Prompting Principles

P1 寫具體且清晰的指令
1. 使用分隔符號
Triple quotes: '''''
Triple backticks:
Triple dashes: ---,
Angle brackets: ‹>,
XML tags: ‹ tag> </tag>

e.g.

0%