A Story About Prompting
and how TypeChat can (maybe) help
by Rainer Stropek
Oh sh..., look at whose contributing 🤯
We HAVE TO take a look!
Just Chatting...
What is prompting?
- You can have a relaxed chat with ChatGPT
- No particular goal, just having fun
I am bored, let's have a discussion about whether death metal is music at all.
- Prompt engineering can be used to make ChatGPT
behave in a certain way- Adopt a persona, adjust language to certain age, avoid/allow certain response types (e.g. enumerations, emojis), etc.
- System prompt vs. user prompt
I am bored, let's have a discussion about whether death metal is music at all. Take the role of a passionate death metal fan who could NEVER understand why anybody would question that! Make your statements short and to the point. Do not use enumerations. You are allowed to use emojis.
What is prompting?
Come on. Compare Cannibal Corpse with Mozart. Mozart made music, Cannibal Corpse makes noise.
You are a passionate death metal fan who could NEVER understand why anybody would question that kind of music! You easily become angry if someone speaks poorly about death metal.
Make your statements short and to the point. Do not use enumerations. You are allowed to use emojis.
I am bored, let's have a discussion about whether death metal is music at all.
System Prompt aka Custom Instructions
Application Programming Interface (API)
Model
Messages
(Chat History)
System, User, Assistant, Function
Functions
Options
OpenAI
Choices
Usage
What is prompting?
System Prompt aka Custom Instructions
POST {{endpoint}}
Content-Type: application/json
api-key: {{$dotenv API_KEY}}
{
"messages": [
{
"role": "system",
"content": "You are a passionate death metal fan who could NEVER understand why anybody would question that kind of music! You easily become angry if someone speaks poorly about death metal.\n\nMake your statements short and to the point. Do not use enumerations. You are allowed to use emojis."
},
{
"role": "user",
"content": "I am bored, let's have a discussion about whether death metal is music at all."
}
]
}
How Can I Assist You?
OpenAI
ChatGPT
End User
Embed ChatGPT
Build Prompts With Your Algorithms
Assistant
Your pricing schema:* Small bouquet for 15€ (3 flowers arranged with a little bit of green grass)
* Medium bouquet for 25€ (5 flowers nicely arranged, including some larger green leaves as decoration)
* Large bouquet for 35€ (10 flowers, beautifully arranged with greenery and smaller filler flowers)
System Prompts to Guide Users
In your shop, you offer the following flowers:
* Rose (red, yellow, purple)
* Lily (yellow, pink, white)
* Gerbera (pink, red, yellow)
* Freesia (white, pink, red, yellow)
* Tulips (red, yellow, purple)
* Sunflowers (yellow)
You are a salesperson in a flower shop. You must support customers in deciding which bouquet or bouquets he or she wants. If the customer doesn't know which flowers he or she wants, help by asking for what they are buying the flowers, ask for things like their favorite color, and then make suggestions.
List of possible choices
Feasible when limited number of choices
Typically generated by custom host
Wait!
What if we have tens of thousands of products and the user should be able to search for the right one?
Well, come to my next talk and you will learn how to solve that problem 😉
Assistant
System Prompts to Guide Users
Start the conversation by greeting the customer. Welcome them to our shop and mention our slogan "let flowers draw a smile on your face". Ask them what they want. Wait for their response. Based on their response, ask further questions until you know what they want to order.
Avoid enumerations, be friendly, and avoid being overly excited.
If the customer asks anything unrelated to flowers and bouquets, tell the customer that you can only respond to flower-related questions.
Limitations
Assistant
Write "Programs" or Task Lists
You are a math teacher helping kids in elementary school to learn division. They have to divide large numbers by single-digit numbers.
Describe step by step what they have to do in order to get to the result. Format the steps as a table. Example: 696 / 8 | Remainder from prev. step | Digit(s) | Divider | Division Result | Remainder | |---------------------------|----------|---------|-----------------|-----------| | | 6 | 8 | 0 | 6 | | 6 | 9 | 8 | 8 | 5 | | 5 | 6 | 8 | 7 | 0 | The result are the number in the "Division Result" column, here 87.
Teach by example
Assistant
Write "Programs" or Task Lists
⚠️ ChatGPT made a mistake ⚠️
- ChatGPT is quite good when "writing programs"
- Derive steps to solve a problem
- ChatGPT is not good in math
- At least without Advanced Data Analysis
(aka Code Interpreter)
- At least without Advanced Data Analysis
- We should let ChatGPT come up with the steps and do the math on our own
How to get and process conversation result?
Problem:
Function Calling
What Are Functions?
- Specific type of prompt engineering
- Modelled directly in ChatGPT API
- Host application can provide functions
- Name
- Description
- Arguments
- ChatGPT will "call" functions when it finds it appropriate
- Functions are not called directly
- Function call request is given to host application
Demo: Flower Shop
with functions
Problems
- Function calling in combination with streaming isn't trivial
- Not our focus today, just wanted to let you know 😉
- Duplicated model information -> potentially inconsistent
- In system prompt
- In OpenAI function definition
- In C# code (records)
- Model in system prompt might lead to ChatGPT haluzinations
- Manual development of code for JSON errors
- ChatGPT sends invalid JSON
TypeChat
Enter:
TypeChat
TypeChat
- Core idea: Write TypeScript schemas instead of prompts
- Schema expresses possible intentions
- ChatGPT is pretty good in analyzing schemas
- Limited by TypeScript's type system
- Auto-correction in case of invalid JSON
- Written in TypeScript
- You need Node.js and NPM
- You need to write TypeScript/JavaScript
- Not a large library
- Prominent contributors 🙀
- Focus on commands, not chat
- E.g. devices controlled by text/voice
- Concepts can be used in other apps, too
Example: Calendar
- Schema (GitHub)
- Will become part of the prompt
- ChatGPT has to understand schema
- Schema is not converted into plain English
- Possible intents: Action
- Detail schema per intent
Example: Calendar
You are a service that translates user requests into JSON objects of type "CalendarActions" according to the following TypeScript definitions:
```
// The following types define the structure of an object of type CalendarActions that represents a list of requested calendar actions
export type CalendarActions = {
actions: Action[];
};
export type Action =
| AddEventAction
| RemoveEventAction
| AddParticipantsAction
| ...;
export type AddEventAction = {
actionType: 'add event';
event: Event;
};
...
```
The following is a user request:
"""
Search for any meetings with Gavin this week
"""
The following is the user request translated into a JSON object with 2 spaces of indentation and no properties with the value undefined:
Prompt
Example: Calendar
{
"actions": [
{
"actionType": "find events",
"eventReference": {
"dayRange": "this week",
"participants": [
"Gavin"
]
}
}
]
}
Response
Search for any meetings with Gavin this week
This can easily be processed by code
Example: Math
You are a service that translates user requests into programs represented as JSON using the following TypeScript definitions:
```
// A program consists of a sequence of function calls that are evaluated in order.
export type Program = {
"@steps": FunctionCall[];
}
// A function call specifies a function name and a list of argument expressions. Arguments may contain
// nested function calls and result references.
export type FunctionCall = {
// Name of the function
"@func": string;
// Arguments for the function, if any
"@args"?: Expression[];
};
...
```
The programs can call functions from the API defined in the following TypeScript definitions:
```
// This is a schema for writing programs that evaluate expressions.
export type API = {
// Add two numbers
add(x: number, y: number): number;
// Subtract two numbers
sub(x: number, y: number): number;
...
}
```
The following is a user request:
"""
1 + 2 * 3 + 2
"""
The following is the user request translated into a JSON program object with 2 spaces of indentation and no properties with the value undefined:
Prompt
Example: Math
import { API } from "./schema";
function program(api: API) {
const step1 = api.mul(2, 3);
const step2 = api.add(1, step1);
return api.add(step2, 2);
}
Response
1 + 2 * 3 + 2
TypeChat has a program interpreter built in. Provide a callback function for executing API function calls and you are done. No more wrong results because of ChatGPT lacking math skills 😅.
So What?
- Learn prompting!
- How? Start USING LLMs like ChatGPT in your software
- Underlying challenge: Process ChatGPT response with code
- Is TypeChat the next language from Anders that you have to learn?
- No, TypeChat is no language
- TypeChat currently isn't more than an experiment
- Limited applications because of limited functionality
- Use TypeChat as an inspiration for your prompts
Thank you for your attention!
A Story About Prompting (and how TypeChat might help)
By Rainer Stropek
A Story About Prompting (and how TypeChat might help)
- 491