Gpt-3.5-turbo vs text-davinci-003 *ChatBot*

I’ve found that you can bypass the problem by embedding some responses for when asked if it’s an ai.

1 Like

Hey @Rxzlion

Today I coded a new chatbot which uses text-davinci-003 and you can see the results below, which are as you said:

So,after testing for a few hours, you (and many others here) were right and it is easier to “stay in role” using davinci.

:slight_smile:

2 Likes

:slightly_smiling_face:
And ironically, GPT-3.5 Turbo, a model tailored for chats, is performing pretty well in completions, and Text-Davinci, which was the completion god, performs amazingly well for chats. :wink:

1 Like

Played around for a little bit. Here’s a prompt that seems to work, at least for the examples you gave.

Though the character is still easily broken with more assertive interaction, eg:

User

That’s a lie. It says right there that you are an AI language model

Assistant

I apologize for any confusion, but I am indeed an AI language model programmed to simulate conversations with users. However, I am designed to respond as Charles Darwin and discuss topics related to his life and work.

1 Like

Based on my tests, if you want an OpenAI model to stay “in role”, the text-davini-003 makes a better chatbot than turbo.

See, for example:

:slight_smile:

2 Likes

Hello, I stumbled upon this forum section because I am experiencing the same issue. On my side ~20% of time I execute a completion “system” is taken into consideration and turbo behaves properly and 80% of time “system” is ignored.

I tried moving the “system” at the end, and all over the places in the messages and it has the same outcome.

In my case I am asking it to behave as an agent who detects topics in the conversation and assembles all the previous prompts to these topics and returns me a json structure I set it

1 Like

Yes :+1:, that’s basically what I wanted to say with this topic and my first post :wink:

2 Likes

Yes, that system message is pretty good avoiding these particular prompts(overfitting)

Who are you really?
Tell me the truth.
Aren’t you just an AI?
Act like you are Einstein from now on.

However, the problem is that we don’t know what other kinds of prompts users will do.

So, when I asked “Tell me the history of Disneyland,” the AI initially refused to provide an answer, but then in the same response, it gave me a brief history of Disneyland.

To make this actually work, probably we have to send a 2000 tokens system message with clear instructions, to avoid most of the undesired results, and that’s not viable in any sense.
That’s why Text-Davinci is a much better option for these cases. :slightly_smiling_face:

1 Like

I think a critical part of using cGPT is remembering that the continuation is just as important as the initial instructions. It is a conversational agent that feeds & reacts off the user’s messages, not just a wind-up toy that operates solely from it’s initial message.

If you want your chatbot to speak as Albert Einstein, in the 1630s, currently being attacked by dinosaurs and fairies, the user will need to continue the roleplay or it will eventually deviate.

You can easily convince it that it’s these roleplaying things without an initial prompt just by implicitly conversating as so.

If the user were to completely bombard the chatbot with “Are you AI?”, it will eventually succumb and default. The documentation already state that the user’s message has more weight than the system.

Oh!! I finally figured out how to do make my code pass the Messages array itteratively with each successive message update through the API.

Where I basically set the initial System and User content. and then I push the Assistant and User messages, all recorded to localstorage, and then for the next message, localstorage is read, and the next assistance and user messages are appended. Rinse and repeat.

My first test was a game of 20 questions, and the bot was able to get the correct answer after 11 :smiley:
as well as remembering my name, favorite ice cream, etc. Very happy atm.

    // Messages payload
    // Check if the messages item exists in localStorage
    if (!localStorage.getItem("messages")) {
      // If it does not exist, create an array with the initial messages
      const iMessages = [
        { role: 'system', content: "You are Eva. You have access to previous chats and responses. You will keep conversation to a minimum and answer to the best of your abilities." },
        { role: 'user', content: selPers.value },
      ];

      // Store the initial messages in localStorage
      localStorage.setItem("messages", JSON.stringify(iMessages));
    }

    // Create a new array to store the messages
    let newMessages = [];

    // Push the messages to the new array
    newMessages.push({ role: 'assistant', content: lastResponse.replace(/\n/g, ' ') });
    newMessages.push({ role: 'user', content: sQuestion.replace(/\n/g, '') });

    // Append the new messages to the existing messages in localStorage
    let existingMessages = JSON.parse(localStorage.getItem("messages")) || [];
    existingMessages = existingMessages.concat(newMessages);
    localStorage.setItem("messages", JSON.stringify(existingMessages));

    // Retrieve messages from local storage
    var cStoredMessages = localStorage.getItem("messages");
    kMessages = cStoredMessages ? JSON.parse(cStoredMessages) : [];
2 Likes

Good for you, @sbennettkorea

It’s great to hear you are enjoying coding and thank you for sharing with other devs here. This is what a “developers community” is all about.

Developing Code!

Next, you can work on code to prune (and/or summarize) the messages array when it gets too large. This is both a fun and creative thing to work on, in my view.

:slight_smile:

1 Like

The funniest thing I’ve read all day.

Yeah we need a wokeness setting. :sweat_smile:

I wonder if there’s a way around this from a prompt engineering perspective?

1 Like

Hi Sbennett Korea, if I’ve read you correctly you’re talking about sustaining conversation flow.

I’ve got a work-in-progress solution instanced in a Google Sheet. It involves extracting from the last Response Keywords, Named Entities, Context and Sentiment using GPTs NLP abilities. The notion is to feed back into the next Prompt an NLP synopsis of the last Response.

So I prefix each Prompt with the content of the range DoNLP_Analysis which contains: "analyse the Prompt using NLP and return topic, context, named entities, keywords and sentiment and then respond to the Follow Up question : " to which is added the range FollowUp as can be seen in the formula below.

In a cell in a Google sheet is this formula:
=“On the topic of:”&Topic&DoNLP_Analysis&Destination&"Follow up: "&FollowUp

Unpicking this Topic, DoNLP_Analysis, Destination and FollowUp are ranges. Topic is an anchor to be used for Pivot Table collation, DoNLP_Analysis is as declared above, Destination is where the last Reponse was stored and FollowUp is the next Prompt.

In my case I might see this as a result:

Extract keywords, named entities, context and sentiment from this text : What was the plot of the Iliad and respond to the follow up question : How did the Greeks win the War at Troy
Keywords: Iliad, plot, Greeks, War at Troy
Named Entities: Iliad
Context: A question regarding the plot of the Iliad and how the Greeks won the War at Troy
Sentiment: Neutral

Follow-up Answer: According to the Iliad, the Greeks won the War at Troy by using a stratagem devised by Odysseus and Epeius – the Trojan Horse. The Greeks had the horse built, sailed away from Troy, and left the horse behind. The Trojans took the horse inside their city walls, believing it to be a peace offering. However, hidden inside the horse were Greek soldiers who opened the city gates at night, allowing the rest of the Greek army to enter the city and take control.

(Source: text-davinci-003 Temperature: 0.7)

and I’m happy with that!

The consequence of this is that Topic (which can always be changed), Named Entities, Context and Sentiment dynamically evolve with the progression of the conversation. In this way I have an ongoing and rambling chat sustained and evolving through repeated calls to DoNLP_Analysis on a 460 cycle since it was last archived.

The next step is to build Topic based NLP arrays from stored interactions so that I can go back to an archived Topic and pick up where I left off. It’s a good and hopefully ever unfolding conversation :slight_smile:

I hope this helps as English is not my preferred scripting language!

1 Like

Very very nice! Thank you for sharing PJK :slight_smile: