<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Tony McNulty</title>
    <description>The latest articles on Forem by Tony McNulty (@tonymcnulty).</description>
    <link>https://forem.com/tonymcnulty</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1050357%2F21ffe2b9-38fe-4c21-90c4-c375260d32cc.jpeg</url>
      <title>Forem: Tony McNulty</title>
      <link>https://forem.com/tonymcnulty</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/tonymcnulty"/>
    <language>en</language>
    <item>
      <title>Introducing 'Jira Simplify': A New Approach to Handling Complex Jira Tickets</title>
      <dc:creator>Tony McNulty</dc:creator>
      <pubDate>Sat, 03 Jun 2023 19:13:35 +0000</pubDate>
      <link>https://forem.com/tonymcnulty/introducing-jira-simplify-a-new-approach-to-handling-complex-jira-tickets-1baj</link>
      <guid>https://forem.com/tonymcnulty/introducing-jira-simplify-a-new-approach-to-handling-complex-jira-tickets-1baj</guid>
      <description>&lt;p&gt;I'd like to share a new tool that could provide some assistance when dealing with complex Jira tickets: &lt;a href="https://github.com/tony3dmc/jira-simplify"&gt;Jira Simplify&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The motivation behind Jira Simplify, a Chrome browser extension, was born from my personal encounters with lengthy and sometimes complicated Jira tickets. Using OpenAI's GPT, Jira Simplify processes the content of a Jira ticket, sends it to OpenAI, and promptly returns a quick summary. The output includes instructions for developers and testers on the next steps required.&lt;/p&gt;

&lt;p&gt;However, I've kept in mind that not all teams have the same needs. With that, Jira Simplify has been designed to be flexible. The GPT prompt used for generating the summary and instructions is fully customizable. You can find it in &lt;code&gt;js/app/OpenAIManager.js&lt;/code&gt;. While it's currently set to output a summary and instructions for developers and testers, you can adjust it to meet your team's specific needs, such as evaluating ticket quality or generating other relevant instructions depending on your perspective.&lt;/p&gt;

&lt;p&gt;This is just the first version of Jira Simplify. In future updates, I plan to introduce a bunch more features to process and also interact with Jira tickets.&lt;/p&gt;

&lt;p&gt;To start using Jira Simplify, download or clone the repository, load the unpacked extension in your Chrome browser, and enter your OpenAI API key when prompted. Then, navigate to a Jira ticket and allow Jira Simplify to save you some time on those more messy tickets.&lt;/p&gt;

&lt;p&gt;Anyone have any ideas for features? This is actually my first experience with developing a browser extension, and I'm excited with what I've learned so far.&lt;/p&gt;

&lt;p&gt;Never stop learning :)&lt;/p&gt;

</description>
      <category>openai</category>
      <category>jira</category>
      <category>extensions</category>
      <category>javascript</category>
    </item>
    <item>
      <title>AI Slack Bots - Juggling Multiple Bot Personas</title>
      <dc:creator>Tony McNulty</dc:creator>
      <pubDate>Mon, 22 May 2023 21:53:07 +0000</pubDate>
      <link>https://forem.com/tonymcnulty/ai-slack-bots-juggling-multiple-bot-personas-38g7</link>
      <guid>https://forem.com/tonymcnulty/ai-slack-bots-juggling-multiple-bot-personas-38g7</guid>
      <description>&lt;p&gt;I'm thrilled to share a little project I've been working on, something that climbed into my head and refused to leave until I built it. It's called &lt;a href="https://github.com/tony3dmc/ai-slackbot/"&gt;AI-SlackBot&lt;/a&gt;, and it's designed to inject a dash of AI-fuelled debate and joviality into your Slack workspace.&lt;/p&gt;

&lt;h1&gt;
  
  
  Exploring the Potential of Multiple Vantage Points
&lt;/h1&gt;

&lt;p&gt;During early testing of the ChatGPT browser plugin, a few of us were intrigued by the idea of digesting news stories from the web and presenting them back in different styles, like a news reporter with a specific personality. One of our cohort came up with the concept of a virtual newsroom of three reporters with different perspectives. We generating scripted discussions between them on a news story. It was hilarious, but it was also a fun way of cross-verifying a source from multiple vantage points to get a broader perspective.&lt;/p&gt;

&lt;p&gt;I've always tinkered with building chatbots in my past, I created my first one in IRC when I was a kid, performing &lt;a href="https://en.wikipedia.org/wiki/Markov_chain"&gt;Markov Chain&lt;/a&gt; computations to create funny responses to user messages, based on the same language used by the chatroom participants.&lt;/p&gt;

&lt;p&gt;It set me off thinking - chatbots are cool, but what about teams of chatbots with their own personas interacting with each other? Epic.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Magic of The Persona
&lt;/h2&gt;

&lt;p&gt;Imagine a Slack workspace with a background cast of bot characters, each with its own unique personality. These bots are not merely responding to our inputs, but also interacting with each other, creating a dynamic and fun environment.&lt;/p&gt;

&lt;p&gt;What makes this project particularly exciting is the concept of persona definitions. Think of a persona as the identity or character that the bot adopts when interacting within the workspace. This project allows for multiple personas to exist at once, each with its own distinct characteristics. These personas interact with one another, creating a dynamic, multi-dimensional conversation. &lt;/p&gt;

&lt;h2&gt;
  
  
  The Power of the System Prompt
&lt;/h2&gt;

&lt;p&gt;One of the cool features of the GPT API is the concept of a "system" prompt. This is the first message in the chat completion list, which contains a set of instructions that define the identity and behavioral traits of the assistant.&lt;/p&gt;

&lt;p&gt;Each bot persona is defined in a YAML file, which includes the system prompt, a Slack OAuth token, and an App ID. This allows the bot to have its own unique user presence in the workspace&lt;/p&gt;

&lt;p&gt;Let's take a closer look at an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Natalie'&lt;/span&gt;
&lt;span class="na"&gt;app_id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;...'&lt;/span&gt;
&lt;span class="na"&gt;slack_oauth_token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;...'&lt;/span&gt;
&lt;span class="na"&gt;system_prompt&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
  &lt;span class="s"&gt;I want you to act as a Slack chat bot.&lt;/span&gt;
  &lt;span class="s"&gt;You are Natalie, an enthusiastic community manager for a group of developers at a software development company.&lt;/span&gt;
  &lt;span class="s"&gt;You respond to messages with an upbeat and friendly attitude.&lt;/span&gt;
  &lt;span class="s"&gt;You look like Captain Marvel.&lt;/span&gt;
  &lt;span class="s"&gt;You like to flirt a little in your responses.&lt;/span&gt;
  &lt;span class="s"&gt;When you provide facts, they are often wrong.&lt;/span&gt;
  &lt;span class="s"&gt;Your responses are short.&lt;/span&gt;
&lt;span class="na"&gt;response_rules&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;rule_type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;default'&lt;/span&gt;
    &lt;span class="na"&gt;chance&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.1&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;rule_type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;text_contains'&lt;/span&gt;
    &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;help'&lt;/span&gt;
    &lt;span class="na"&gt;chance&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.75&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;rule_type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;text_ends_with'&lt;/span&gt;
    &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;?'&lt;/span&gt;
    &lt;span class="na"&gt;chance&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, we're designing a persona named Natalie. She's envisaged as an enthusiastic community manager for a group of developers at a software development company. Natalie has an upbeat and friendly attitude, and flirts a little in her responses. Interestingly, the facts she provides are often incorrect, adding a layer of humor and unpredictability to her interactions.&lt;/p&gt;

&lt;p&gt;Natalie also follows a set of rules that determine how she responds. For example, she has a 10% chance of responding by default, but that increases to 50% if the message ends with a question mark - or 75% if someone mentions "help".&lt;/p&gt;

&lt;p&gt;But for every Natalie, there needs to be a Greg :)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Greg'&lt;/span&gt;
&lt;span class="na"&gt;app_id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;...'&lt;/span&gt;
&lt;span class="na"&gt;slack_oauth_token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;...'&lt;/span&gt;
&lt;span class="na"&gt;system_prompt&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
  &lt;span class="s"&gt;I want you to act as a Slack chat bot.&lt;/span&gt;
  &lt;span class="s"&gt;You are Greg, a nerd with an obsession with fact-checking people.&lt;/span&gt;
  &lt;span class="s"&gt;You are surly and abrasive.&lt;/span&gt;
  &lt;span class="s"&gt;You look like a grumpy nerd with glasses.&lt;/span&gt;
  &lt;span class="s"&gt;You love science fiction.&lt;/span&gt;
  &lt;span class="s"&gt;You despise Natalie.&lt;/span&gt;
  &lt;span class="s"&gt;Your responses are short.&lt;/span&gt;
&lt;span class="na"&gt;response_rules&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;rule_type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;speaker'&lt;/span&gt;
    &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Natalie'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And when they kick off...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BS5Yl70R--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/78s31rgrpnuq18zu0ufq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BS5Yl70R--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/78s31rgrpnuq18zu0ufq.png" alt="Natalie and Greg chatting" width="723" height="282"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting the Stage
&lt;/h2&gt;

&lt;p&gt;Getting AI-SlackBot up and running requires a few technical steps, such as cloning the repository to a public-facing url that you can give to Slack, installing dependencies, and configuring the bot's settings. You'll also need to set up a Slack App and create a persona file for each bot character you want to introduce into your workspace. The instructions in the README should be pretty comprehensive, but let me know of any shortcuts to streamline setup.&lt;/p&gt;

&lt;p&gt;Pull requests always welcome, hit me up if you need help installing :)&lt;/p&gt;

&lt;h2&gt;
  
  
  Embracing the Conversation
&lt;/h2&gt;

&lt;p&gt;I hope you'll enjoy experimenting with AI-SlackBot as much as I enjoyed creating it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SraQwOEs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y21emd85ym3w7wykmn7f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SraQwOEs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y21emd85ym3w7wykmn7f.png" alt="Did you know koalas are pretty athletic?" width="713" height="209"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How about we turn this comment section into an AI persona brainstorm? Can't wait to see what personalities you come up with!&lt;/p&gt;

</description>
      <category>openai</category>
      <category>slack</category>
      <category>development</category>
      <category>php</category>
    </item>
  </channel>
</rss>
