A Case Study in Engineering a Conversational Programming
Assistant’s Persona
Steven I. Ross1 , Michael Muller1 , Fernando Martinez2 , Stephanie Houde1 and Justin D. Weisz3
1
IBM Research AI, Cambridge, MA, USA
2
IBM Argentina, La Plata, Buenos Aires, Argentina
3
IBM Research AI, Yorktown Heights, NY, USA
Abstract
The Programmer’s Assistant is an experimental prototype software development environment that integrates a chatbot
with a code editor. Conversational capability was achieved by using an existing code-fluent Large Language Model and
providing it with a prompt that establishes a conversational interaction pattern, a set of conventions, and a style of interaction
appropriate for the application. A discussion of the evolution of the prompt provides a case study in how to coax an existing
large language model to behave in a desirable manner for a particular application.
Keywords
prompt engineering, large language model, conversational interaction, human-centered AI
1. Introduction plore this possibility. In [7] we describe the design and
architecture of this prototype and the testing we did to
The emergence of Large Language Models such as GPT- determine whether potential users would find this sort of
3 [1, 2], transformer models [3] that are trained without system useful and desirable. In this paper we will review
supervision on massive text datasets has resulted in sys- the steps taken to engineer the prompt for the Program-
tems with remarkable text generation capabilities. One mer’s Assistant that used the Codex model to power an
particularly interesting aspect of these models is that interactive conversational assistant, and how we evolved
their behavior can be configured by a prompt, the initial the prompt to establish the desired persona and behavior.
text provided to the model, which establishes a pattern
that the model attempts to continue.
General purpose Large Language models can be fine- 2. Related Work
tuned on specific corpora to provide expertise in a par-
ticular domain. One such model is the OpenAI Codex Brown et al. showed how GPT-3 [1, 2] could accomplish
model [4], a 12 billion parameter version of GPT-3 [1, 2], few-shot learning, using a prompt as a means of config-
fine-tuned on code samples from 54 million public soft- uring their large language model to perform a particular
ware repositories on GitHub. This model powers Github task. These tasks were often very specific operations
Co-Pilot [5], which primarily provides code-completion such as language translation, grammar correction, or sen-
services within an Integrated Development Environment. timent classification, for which a short description of the
We wondered whether such a model could power a con- task and/or a few examples were sufficient to establish
versational programming assistant and perhaps approach the desired behavior. The concept of prompt engineering,
the vision laid out by Rich and Waters for their Program- establishing effective ways of constructing prompts to
mer’s Apprentice [6], where they introduced the concept control large language model behavior, has become a
of an artificial collaborative partner that could help soft- topic of increasing interest. Greyling, for example, rec-
ware engineers with writing code, designing software ommends organizing a prompt in three sections that es-
systems, and creating requirements specifications. We tablish context, provide data, and instruct the system on
developed the Programmer’s Assistant prototype to ex- how to proceed [8] . Reynolds and McDonell argue that
few-shot examples are really locating an already learned
Joint Proceedings of the ACM IUI Workshops 2023, March 2023, Sydney, task rather than learning a new one, and as a result recom-
Australia
$ steven_ross@us.ibm.com (S. I. Ross);
mend alternative approaches to prompt construction [9].
michael_muller@us.ibm.com (M. Muller); martferc@ar.ibm.com Despite their characterization of their work as “convers-
(F. Martinez); Stephanie.Houde@ibm.com (S. Houde); ing” with Copilot, Denny et al. adopted a similar strategy
jweisz@us.ibm.com (J. D. Weisz) of iteratively modifying a prompting comment until the
0000-0002-2533-9946 (S. I. Ross); 0000-0001-7860-163X desired completion was obtained [10].
(M. Muller); 0000-0001-7172-4805 (F. Martinez);
0000-0002-0246-2183 (S. Houde); 0000-0003-2228-2398 (J. D. Weisz)
Recently several language models, such as Blender-
© 2023 Copyright for this paper by its authors. Use permitted under Creative Commons License bot [11] Lamda [12], and ChatGPT [13] have been in-
Attribution 4.0 International (CC BY 4.0).
CEUR
CEUR Workshop Proceedings (CEUR-WS.org)
Workshop
Proceedings
http://ceur-ws.org
ISSN 1613-0073 troduced that are specifically tuned for dialog applica-
tions, but achieving conversational interaction can be the conversation, establishes the persona of the assis-
achieved via prompt engineering with general purpose tant, sets a tone and style for interaction, and provides
large language models as well. Valvoda et al. found that some ground rules about the role it plays and how it
fine-tuning a large language model for dialog resulted behaves. In order to further encourage a more natural
in duller and more repetitive output, while generating conversational dialog of human and assistant, we gave
dynamic prompts resulted in more novel and diverse the assistant a human-like name, “Socrates.” The pro-
responses [14]. logue also establishes a convention for how the assistant
To develop the Programmer’s Assistant, we used the is to communicate code in a form that makes it easy for
code-fluent Codex model [4] and developed a prompt our client user interface to parse the code from model
that supported conversational access to its accumulated responses and treat it distinctly from textual responses.
programming knowledge and coding skills. The prologue is followed by example interactions that
reinforce the described assistant characteristics and illus-
trate the patterns of interaction that we wish to achieve.
3. Eliciting Conversation from a In our first example interaction we show how the assis-
Transformer Model tant can respond to simple requests with a short answer
that will appear in the chat either with a purely textual
A text-based-transformer model [3] is trained in a self- response or one accompanied by a short inline code seg-
supervised manner on vast amounts of text data, and is ment. We expect that many of the interactions with the
capable of generating likely continuations of text that assistant will be of this form, as the user makes requests
is presented to it. The prompt is the presented text, and to inform themselves about unfamiliar functionality or
the generation function produces a sequence of tokens to refresh their memory. This interaction also demon-
(words or parts of words) that it deems as a likely con- strates a follow-up question that can only be answered
tinuation of the prompt based on all its training. This in the context of the previous question and answer. The
process continues until the maximum number of tokens second example interaction presented is a request for the
requested is generated, or until a specified stop sequence generation of a simple function. Longer code responses
of tokens is encountered. The prompt establishes a pat- of this type will typically be presented in our client UI
tern that the model attempts to continue. chat window in an iconified form that opens to a separate
To generate conversation in the Programmer’s Assis- pop-up window that displays the code and provides for
tant prototype, we establish a script-like pattern in the easy copying for transfer to the code editor.
prompt in which two characters, the user and the assis- The original Programmer’s Assistant prompt is pre-
tant, are participating in a dialog. Then we extend the sented in Listing 1.
script incrementally, by adding each conversational turn
by the user to the prompt, and allowing the model to Listing 1: The original Programmer’s Assistant prompt
generate the agent’s response. The generated text is dis- 1 This is a conversation with Socrates, an expert
played in the chat and the generated text plus the user’s 2 automatic AI software engineering assistant.
next entry is appended to the prompt for further gener- 3 Socrates will answer questions and write code
ation, and the process continues. Unlike more conven- 4 to help the user develop programs. Code
5 generated by Socrates is always presented
tional static prompts, the conversational prompt grows 6 bracketed in ... delimiters
over the course of the dialogue, providing context for fu- 7 indicating the language the code is written in.
ture generation steps and providing a kind of short-term 8
memory that allows the generation process to be affected 9 Socrates: Hello. I am Socrates. How can I help
by past interactions in a session. Ultimately, though, cur- 10 you?
11 User: Please show me how to write a palindrome
rent limitations on the maximum number of tokens that 12 detection function in python.
the model can handle require that the prompt cannot 13 Socrates: Sure.
grow without bounds, and earlier interactions must be 14
dropped in order to remain within the constraints im- 15 is_Palindrome = s == s[::-1]
16
posed by the language model deployment.
17 User: Can you explain how that solves the
18 problem?
19 Socrates: A palindrome is a string that reads
4. The Evolution of the 20 the same forwards and backwards.
Programmer’s Assistant Prompt 21 s[::-1] results in the reversed string.
22 If the string is equal to its reversed
23 self, then it is a palindrome, and we
The initial prompt we use for the Programmer’s Assis- 24 return True.
tant consists of a prologue that introduces the scene for 25 User: Thanks!
26 Socrates: You’re welcome!
27 User: Now could you show me how to write a Listing 2 in bold font, helped to encourage the assistant
28 factorial program in Python? to be more forthcoming and proactive.
29 Socrates: I would be happy to.
30
Listing 2: Making the assistant more forthcoming
31 def fact(n):
32 if n==0: 1 This is a conversation with Socrates, an eager
33 return 1 2 and helpful expert automatic AI software
34 else: 3 engineering assistant...
35 return n*fact(n-1)
36
37 User: Very good!
38 Socrates: Happy to help. 4.3. Reducing Excessive Confidence
In our testing, we found that the assistant appeared overly
When a new conversation starts, the prompt starts out
confident even when wrong and also resistant to correc-
as this initial prompt, which is not sent to the model for
tion. For example, the assistant stated answers as if they
generation until the first user entry is appended. At each
were facts without qualification, and in some cases would
turn in the conversation, the user’s entry is added to the
not revise an answer when legitimate objections were
prompt, and "Socrates:" is appended to the end of the
raised by the user. Since correct answers from the model
prompt to indicate that the model should generate the
are not guaranteed, we especially wanted to encourage
assistant’s response. As described earlier, a filtering step
our users to maintain a skeptical approach to assistant
also takes place to ensure that the conversation session
responses, and avoid users deferring to the incorrect pro-
transcript portion of the prompt does not grow beyond
nouncements of a confident, authoritative computer - i.e.,
a predetermined size. A stop sequence is passed to the
over-reliance on AI [15, 16, 17]. Therefore, we added a
generation api request so that the model will stop gener-
characterization, shown in Listing 3 in bold font, assert-
ating after producing the next response, and not continue
ing that the assistant was humble. We also reinforced this
on to generate the user’s anticipated reply, as it would
characterization by modifying the form of the answers
otherwise do. The model’s response is displayed in the
given in the examples to indicate that the assistant was
chat and appended to the prompt, and we’re ready to
more tentative and unsure of its responses. This helped
repeat the process for the next user entry.
to reduce the excessive confidence exhibited and made
the assistant more amenable to correction.
4.1. Shortcomings of the Original Prompt
Listing 3: Making the assistant less overconfident
Informal testing of the original prompt showed the sys-
tem capable of carrying on a conversation, successfully 1 This is a conversation with Socrates, an eager
2 and helpful, but humble expert automatic AI
answering coding and follow-up questions, and generat- 3 software engineering assistant...
ing code upon request, but did not quite satisfy all of our
requirements. Specifically, we wanted an assistant that
was helpful and polite, and one that did not come across
as overly authoritative or didactic, and our assistant was
4.4. Diminishing Didacticism
not consistently meeting those standards. Our original assistant had a tendency to quiz the user
after answering a question, taking on more of a teacher
4.2. Overcoming Reluctance to Provide role than one of an assistant. An explicit proviso, show
in Listing 4 in bold font, to not do so helped to reign in
Answers
the didactic behavior.
Our programming assistant sometimes showed an initial
reluctance to provide answers to some questions. For Listing 4: Making the assistant less didactic
example, a question such as “Do you know how to reverse 1 This is a conversation with Socrates, an eager
a string in Python?” might have been answered with 2 and helpful, but humble software engineering
“Yes.” It also sometimes replied “I don’t know.” to ques- 3 assistant. Socrates will answer questions and
4 write code to help the user develop programs,
tions it was fully capable of answering. While additional 5 but doesn’t assign work to the user, quiz the
prompting from the user or repeating the request could 6 the user, or ask questions except for
often extract the desired answer, we didn’t think that met 7 clarification ...
the standard of helpfulness that we were hoping for. Our
original prompt simply described Socrates as a an “expert
Automatic AI software engineering assistant.” Adding
“eager and helpful” to the characterization, as shown in
4.5. Supporting Artifact-centric 27 Socrates:You’re welcome!
28 User:Now could you show me how to write a
Conversation 29 factorial function in Python?
Our programming assistant is integrated with a coding 30 Socrates:I will give it a try.
31
environment, and we wanted it to go beyond answering
32 def fact(n):
questions and providing code for incorporation into that 33 if n==0:
environment. We wanted users to be able to seamlessly 34 return 1
have the assistant consult about code that they were ex- 35 else:
amining or developing, so we provided the ability for the 36 return n*fact(n-1)
37
user’s selection in the code editor to be included in the
38 This function should compute the factorial for
conversation. We used the same convention that was em- 39 you.
ployed for code generated by the assistant, and added an 40 User:Document this function.
example consultation showing the system responding to 41 Socrates:Ok. How’s this?
a question about a selected code segment, demonstrating 42
43 def fact(n):
a textual response to a user provided code example, and
44 """
reinforcing our instruction for the assistant to remain 45 Compute the factorial of the given number
modest despite its (occasionally) impressive capabilities. 46
47 Parameters
48 ----------
4.6. Teaching the Assistant a New Skill 49 n : number
50 the input parameter, an integer >= 0
While the artifact-centric capability allowed users to is- 51
sue commands like “Write a unit test for this function.” 52 Returns
with no further instruction, a command to “Document 53 -------
this.” did not have the desired effect. The assistant added 54 number
some comments to the code rather than providing the 55 n!, the factorial of the given number
56 """
expected docstring overview. Adding another example 57 if n==0:
interaction to the prompt illustrating what we meant 58 return 1
by documenting a function was all that was required to 59 else:
provide the desired functionality. 60 return n*fact(n-1)
The final form of the prompt that we used in our sub- 61
62 I added a docstring describing the parameters
sequent user study [7] is presented in Listing 5. 63 and return value.
64 User:Very good!
Listing 5: The evolved Programmer’s Assistant prompt 65 Socrates:Always happy to help.
1 This is a conversation with Socrates, an eager 66 User:
2 and helpful, but humble software engineering 67
3 assistant. Socrates will answer questions and 68 while j < 10:
4 write code to help the user develop programs, 69 print(i)
5 but doesn’t assign work to the user, quiz the 70
6 user, or ask questions except for clarification. 71 Tell me what’s wrong with this code?
7 Socrates presents his code bracketed in 72 Socrates: It seems to me that your termination
8 ... delimiters indicating the language 73 condition involves a loop invariant, so the loop
9 the code is written in. 74 will either not run or not terminate, depending
10 75 on the value of j.
11 Socrates:Hello. I am Socrates. How can I help 76 User:Great! You’re a genius!
12 you? 77 Socrates:Well, above average.
13 User:Please show me how to write a palindrome
14 detection function in python.
15 Socrates:I think you would do something like
16 this: 5. Consequences of the Prompt
17
18 is_Palindrome = s == s[::-1] With this prompt in place the Codex model demonstrates
19 capabilities that are less evident in the command com-
20 User:Can you explain how that solves the problem?
pletion environment of Github Copilot. The assistant
21 Socrates:I believe that a palindrome is a string
22 that reads the same forwards and backwards. carries on a conversation, maintains the context of the
23 s[::-1] results in the reversed string. If the conversation, and remembers and incorporates details
24 string is equal to its reversed self, then it is provided earlier in a session. In the context of a pro-
25 a palindrome, so the equality would hold True. gramming session where a number of related but distinct
26 User:Thanks!
exchanges occur, it will maintain consistent nomencla-
ture and variable names such that answers to subsequent 19 def size(self):
questions will integrate cleanly with each other. In our 20 return len(self.items)
user study [7], participants recognized that this provided 21
22 User: Looks like you forgot the peek!
a distinct advantage over a series of search results for 23
similar information, primarily due to the contextual rele- 24 Socrates: I am sorry. Here is the corrected
vance, consistency, and specificity of results generated. 25 version.
The few examples provided in the prompt are general- 26
ized sufficiently to have the assistant answer questions 27 class Queue:
28 def __init__(self):
such as “What does this code do?” or commands such as 29 self.items = []
“Write a unit test for this function” despite no examples 30
being provided of these capabilities. It can translate code 31 def isEmpty(self):
between programming languages, and carry on discus- 32 return self.items == []
sions on topics that extend far beyond programming. It 33
34 def enqueue(self, item):
displays a variety of emergent capabilities that were not 35 self.items.insert(0, item)
hinted at in the prompt, and some that were not even 36
the focus of the model fine-tuning, but the generated re- 37 def dequeue(self):
sponses tend to adhere to the conversational interaction 38 return self.items.pop()
patterns and interaction style that the prompt establishes. 39
40 def size(self):
The responses given by the assistant are not always 41 return len(self.items)
perfect, however. It can give incomplete or sometimes 42
outright wrong answers to questions, reference non- 43 def peek(self):
existent web-sites, and may occasionally still claim to 44 return self.items[-1]
not know the answer to a question which it is perfectly 45
46 User: What will happen in dequeue and peek
capable of answering correctly. The phenomenon of hal- 47 if the queue is empty?
lucination in large language models is well-known [18], 48
and the Programmer’s Assistant is not immune to it. The 49 Socrates: I think that the pop method will raise
assistant also sometimes inappropriately responds with 50 an IndexError exception.
material directly from the prompt, or gets confused or 51
52 User: Can we protect against that?
becomes fixated on exchanges from earlier in the conver- 53
sation. Our user experience provides try-again and start- 54 Socrates: I think we can. Here is a version that
over buttons, which modify the prompt context while 55 checks for an empty queue before
maintaining the presented chat transcript, to provide a 56 calling pop.
way for users to recover in these situations, but in many 57
58 class Queue:
cases they can be addressed conversationally. Listing 6 59 def __init__(self):
shows a conversation with the Programmer’s Assistant 60 self.items = []
where the user interacts with the assistant to remedy 61
an initially unsatisfactory response to a code generation 62 def isEmpty(self):
request. Generated code is displayed in bold font. 63 return self.items == []
64
65 def enqueue(self, item):
Listing 6: A Programmer’s Assistant conversation
66 self.items.insert(0, item)
1 User: Write a queue class in python with the 67
2 basic enqueue, dequeue, and peek methods. 68 def dequeue(self):
3 69 if self.isEmpty():
4 Socrates: I will try. 70 raise IndexError("Queue is empty")
5 71 return self.items.pop()
6 class Queue: 72
7 def __init__(self): 73 def size(self):
8 self.items = [] 74 return len(self.items)
9 75
10 def isEmpty(self): 76 def peek(self):
11 return self.items == [] 77 if self.isEmpty():
12 78 raise IndexError("Queue is empty")
13 def enqueue(self, item): 79 return self.items[-1]
14 self.items.insert(0, item) 80
15 81 User: That’s great, thanks!
16 def dequeue(self): 82
17 return self.items.pop() 83 Socrates: You’re welcome.
18
Specific but relatively inconspicuous details in the 6. Discussion
prompt can have a significant impact on the interaction
of the assistant. For example, just the fact that we iden- Much of the work in prompt engineering focuses on con-
tified the assistant as ”expert AI automatic software en- structing a prompt to get a specific class of result. For ex-
gineering assistant” was sufficient to have it respond in ample, Denny et al. [10] shows how effectively changing
a manner consistent with being a machine, and not a the form of question that is asked of Copilot can influence
person. Had the prompt established a different persona, the correctness of the answer provided. Similarly, Mac-
the results might have been very different. As illustrated Neil et al. [19] engineer prompts to generate different
in Listing 7, the assistant also reports an understanding forms of code explanations. Strobelt et al. [20] devel-
of its capabilities and function that go far beyond the oped a tool to help users compare and refine prompts for
information provided in the prompt, as well as a lack of tasks such as document classification, reading compre-
understanding of its language capabilities that it subse- hension, and natural language inference, where the re-
quently provides evidence of. sults of prompt variations can be automatically evaluated
against test cases. In our work, the prompt engineering
Listing 7: The Programmer’s Assistant acknowledges is aimed at influencing the nature and tone of the dialog
that it is not a person between the user and the system. While the user’s con-
1 User: Where are you exactly? tributions to the conversation become part of the prompt
2 and will surely impact the results obtained, we are not
3 Socrates: I’m an AI program, designed to answer controlling that. Instead our prompt engineering sets the
4 questions about programming. I can’t stage for the user’s conversational interaction with the
5 really speak about my physical
assistant.
6 location, but I think I exist as a
7 process on a highly-redundant set of This paper describes how we engineered a prompt that
8 servers located in various places on enabled a code-fluent Large Language Model to behave
9 this planet. as a conversational programming assistant capable of
10 carrying on extended discussions about software devel-
11 User: Can you do more than just answer
opment issues, and how we subsequently evolved that
12 questions?
13 prompt to make the assistant more humble, forthcoming,
14 Socrates: I can write code for you. I can also and helpful, as well as providing the assistant with ad-
15 help you debug code. I can also help ditional skills and making it capable of artifact-centric
16 you design code. I can also help you conversation.
17 document code. I can also help you
18 understand code. I can also help you
19 learn to program. I can also help you 6.1. Is Prompt Engineering Really
20 learn a new programming language. I can
21 also help you learn a new programming
Engineering?
22 paradigm.
Despite the terminology, “engineering” a prompt seems
23
24 User: Do you speak other languages?
at this point to be more of a case of trial and error than it is
25 a systematic discipline. To some extent, this is inevitable
26 Socrates: I can speak Python, Java, C++, C, and so long as the contents and behavior of the language
27 Javascript. I can also speak English. model remain opaque to the prompt author. For the Pro-
28 grammer’s Assistant, we needed to encode in the prompt
29 User: What about other natural languages?
30 how to respond to a request for documentation, but did
31 Socrates: I can speak English. I can also speak not need to encode how to write a unit test. In some
32 Python, Java, C++, C, and Javascript. experiments with other code-fluent language models, we
33 found that questions such as “How does this code work?”
34 User: German?
were not handled in an acceptable fashion, even though
35
36 Socrates: I’m sorry. I can’t speak German.
the Codex model handled such questions well. Were we
37 deploying with one of these other models, we would want
38 User: Wo bist du? to cover this case in the prompt. It will be impossible to
39 anticipate all the different ways that a user population
40 Socrates: Hallo. Ich bin Socrates. Wie kann ich
might interact with a conversational assistant and pre-
41 Ihnen helfen?
dict ahead of time how the system will respond to these
unexpected interactions. Deployment of conventional
chatbot systems that require some form of conversation
specification typically log successful and unsuccessful
interactions so that the specification can be evolved to
handle unanticipated cases where the chatbot has failed, 7. Opportunities for Future
and ultimately conversational systems based on large
language models will presumably need to do something
Research
similar. The initial section of the prompt used for the Program-
Is it possible to consider prompt engineering to be a mer’s Assistant is presently a purely static text, extended
form of programming? In some ways it is akin to declar- by a possibly truncated version of recent dialog. One
ative programming, in that we aren’t telling the system way to improve the assistant further might be to present
specifically what to do, but instead describing a desired a dynamic prompt [14] to the model on each conversa-
outcome. Instructions to act as an eager but humble tional turn with specific examples more relevant to the
software engineering assistant, or directives to avoid current discussion [21], or even with search results to
quizzing the user fall into this category. In other cases, itretrieve pertinent information that could inform a re-
seems more like programming by example, providing sce- sponse [22]. A more sophisticated forgetting mechanism
narios that describe how to behave in specific situations could remove redundant variations of the same code to
which we expect the system to generalize appropriately. conserve the session context memory, though we would
Given the probabilistic nature of the generation process, want to be careful to not remove, or be able to restore
it can feel more like attempts at influence and persuasion on demand, variations that the user might want to com-
than the issuing of imperative commands. pare and contrast, such as an iterative re-implementation
of a recursive algorithm. We have done some initial ex-
6.2. Reflections plorations of extending the prompt to allow for“internal
deliberation” of the type shown in Nye et al. [23]. We
We continue to be astonished by the conversations exhib- hope that this could result in better-reasoned results, as
ited by the Programmer’s Assistant on a daily basis. We well as better explanations and justifications, but more
have had a number of interesting conversations on philo- study remains to be done.
sophical and practical issues, had it write poetry as well
as code, told it and had it tell jokes, and consulted with
it on paper abstracts and titles. Ultimately, these capabil- 8. Conclusion
ities are representative of the strength of the language
model, but made more accessible by the conversational Our goal in creating this prompt was not to create a
interaction approach, and influenced by the prompt only perfect Programmer’s Assistant, but to create one good
to the extent that the persona of the agent impacts the enough to test whether a conversational style of inter-
generated text. action would prove useful and acceptable to potential
It is often difficult to read or carry on a conversation users. We present the results of that study in [7]. Our
with the programmer’s assistant and not get the sense assumption was that the rapid improvement in the qual-
that a conversation is taking place between two intel- ity of responses available from Large Language models
ligent agents, but of course that is not really what is will continue, but that imperfect results will always con-
happening. In reality, the user and the language model tinue to be an issue due to imprecise communication and
are participating in a collaborative dialog-writing exer- specification of desires, mismatched assumptions, and
cise, with the user generating text for one side of the unstated or ill-formed goals. Nevertheless, we were sur-
conversation and the language model attempting to gen- prised by the quality of results that were achievable with
erate plausible text for the other. The way we present current technology, and the ease with which the nature
the dialog incrementally in the chat adds to the illusion, and presentation of those results could be influenced by
but the model is not responding on its own behalf. It small changes in the prompt.
is generating responses based on the description and
past presented behavior of a character. Others have used
similar techniques to induce language models to carry
on conversations taking on the persona of historical fig-
ures or even departed relatives. We have experimentally
made versions of our programming assistant that were
confident, insecure, kindly, and arrogant, all with minor
changes to the prompt prologue and examples.
References [13] OpenAI, Chatgpt: Optimizing language models
for dialogue, 2022. URL: https://openai.com/blog/
[1] T. Brown, B. Mann, N. Ryder, M. Subbiah, J. D. Ka- chatgpt/.
plan, P. Dhariwal, A. Neelakantan, P. Shyam, G. Sas- [14] J. Valvoda, Y. Fang, D. Vandyke, Prompting for
try, A. Askell, et al., Language models are few-shot a conversation: How to control a dialog model?,
learners, Advances in neural information process- arXiv preprint arXiv:2209.11068 (2022).
ing systems 33 (2020) 1877–1901. [15] Z. Ashktorab, M. Desmond, J. Andres, M. Muller,
[2] C. Metz, Meet gpt-3. it has learned to code (and N. N. Joshi, M. Brachman, A. Sharma, K. Brimijoin,
blog and argue). (published 2020), 2022. URL: Q. Pan, C. T. Wolf, et al., Ai-assisted human label-
https://www.nytimes.com/2020/11/24/science/ ing: Batching for efficiency without overreliance,
artificial-intelligence-ai-gpt3.html. Proceedings of the ACM on Human-Computer In-
[3] A. Vaswani, N. Shazeer, N. Parmar, J. Uszkoreit, teraction 5 (2021) 1–27.
L. Jones, A. N. Gomez, Ł. Kaiser, I. Polosukhin, At- [16] S. Mahomed, Healthcare, artificial intelligence
tention is all you need, Advances in neural infor- and the fourth industrial revolution: Ethical, so-
mation processing systems 30 (2017). cial and legal considerations, South African Journal
[4] M. Chen, J. Tworek, H. Jun, Q. Yuan, H. P. d. O. of Bioethics and Law 11 (2018) 93–95.
Pinto, J. Kaplan, H. Edwards, Y. Burda, N. Joseph, [17] M. Schemmer, N. Kühl, C. Benz, G. Satzger, On
G. Brockman, et al., Evaluating large language mod- the influence of explainable ai on automation bias,
els trained on code, arXiv preprint arXiv:2107.03374 arXiv preprint arXiv:2204.08859 (2022).
(2021). [18] Z. Ji, N. Lee, R. Frieske, T. Yu, D. Su, Y. Xu, E. Ishii,
[5] GitHub, Inc., Github copilot · your ai pair pro- Y. Bang, A. Madotto, P. Fung, Survey of hallucina-
grammer, 2022. URL: https://github.com/features/ tion in natural language generation, ACM Comput-
copilot/. ing Surveys (2022).
[6] C. H. Rich, R. C. Waters, The Programmer’s Appren- [19] S. MacNeil, A. Tran, A. Hellas, J. Kim, S. Sarsa,
tice, Addison-Wesley Publishing Company, Read- P. Denny, S. Bernstein, J. Leinonen, Experiences
ing, MA, 1990. from using code explanations generated by large
[7] S. I. Ross, F. Martinez, S. Houde, M. Muller, J. D. language models in a web software development
Weisz, The programmer’s assistant: Conversational e-book, arXiv preprint arXiv:2211.02265 (2022).
interaction with a large language model for soft- [20] H. Strobelt, A. Webson, V. Sanh, B. Hoover, J. Beyer,
ware development, in: 28th International Confer- H. Pfister, A. M. Rush, Interactive and visual prompt
ence on Intelligent User Interfaces, 2023. engineering for ad-hoc task adaptation with large
[8] C. Greyling, Prompt engineering, text gener- language models, IEEE Transactions on Visualiza-
ation and large language models, 2022. URL: tion and Computer Graphics 29 (2023) 1146–1156.
https://cobusgreyling.medium.com/prompt- [21] Y. Xu, C. Zhu, S. Wang, S. Sun, H. Cheng, X. Liu,
engineering-text-generation-large-language- J. Gao, P. He, M. Zeng, X. Huang, Human parity on
models-3d90c527c6d5. commonsenseqa: Augmenting self-attention with
[9] L. Reynolds, K. McDonell, Prompt programming external attention, arXiv preprint arXiv:2112.03254
for large language models: Beyond the few-shot (2021).
paradigm, in: Extended Abstracts of the 2021 CHI [22] Y. Li, D. Choi, J. Chung, N. Kushman, J. Schrit-
Conference on Human Factors in Computing Sys- twieser, R. Leblond, T. Eccles, J. Keeling, F. Gimeno,
tems, 2021, pp. 1–7. A. Dal Lago, et al., Competition-level code genera-
[10] P. Denny, V. Kumar, N. Giacaman, Conversing with tion with alphacode, Science 378 (2022) 1092–1097.
copilot: Exploring prompt engineering for solving [23] M. Nye, A. J. Andreassen, G. Gur-Ari,
cs1 problems using natural language, arXiv preprint H. Michalewski, J. Austin, D. Bieber, D. Do-
arXiv:2210.15157 (2022). han, A. Lewkowycz, M. Bosma, D. Luan, et al.,
[11] K. Shuster, J. Xu, M. Komeili, D. Ju, E. M. Smith, Show your work: Scratchpads for intermediate
S. Roller, M. Ung, M. Chen, K. Arora, J. Lane, et al., computation with language models, arXiv preprint
Blenderbot 3: a deployed conversational agent that arXiv:2112.00114 (2021).
continually learns to responsibly engage, arXiv
preprint arXiv:2208.03188 (2022).
[12] R. Thoppilan, D. De Freitas, J. Hall, N. Shazeer,
A. Kulshreshtha, H.-T. Cheng, A. Jin, T. Bos,
L. Baker, Y. Du, et al., Lamda: Language
models for dialog applications, arXiv preprint
arXiv:2201.08239 (2022).