🕵️ SicherheitslückenHak5: Hackers Just Poisoned the Rust Supply Chain | Threat Wire(01.09.2026 um 14:00 Uhr)
🕵️ SicherheitslückenHak5: Hackers Found a Way Into Humanoid Robots | Threat Wire(04.09.2026 um 15:04 Uhr)
🔧 AI Nachrichten Bits und so #1021 (Passwort für Laufwerk)(31.08.2026 um 22:15 Uhr)
🔧 AI Nachrichten Bits und so #1022 (Wie Weißbier)(06.09.2026 um 20:39 Uhr)
🍏 iOS / Mac OSHue-App 6.0 ist da: das sind die Neuerungen(07.09.2026 um 17:21 Uhr)
🕵️ SicherheitslückenHak5: Hackers Just Poisoned the Rust Supply Chain | Threat Wire(01.09.2026 um 14:00 Uhr)
🕵️ SicherheitslückenHak5: Hackers Found a Way Into Humanoid Robots | Threat Wire(04.09.2026 um 15:04 Uhr)
🔧 AI Nachrichten Bits und so #1021 (Passwort für Laufwerk)(31.08.2026 um 22:15 Uhr)
🔧 AI Nachrichten Bits und so #1022 (Wie Weißbier)(06.09.2026 um 20:39 Uhr)
🍏 iOS / Mac OSHue-App 6.0 ist da: das sind die Neuerungen(07.09.2026 um 17:21 Uhr)

🔧 AI Nachrichten 🕛 vor 1 Jahr 12 Min Lesezeit
0

Classify Jira Tickets with GenAI On Amazon Bedrock

↗ Quelle (towardsdatascience.com)
🗣️ Stimme:
📑 Inhaltsübersicht

Replace traditional NLP approaches with prompt engineering and Large Language Models (LLMS) for Jira ticket text classification. A code sample walkthrough

Photo by

Remember the days when classifying text meant embarking on a machine learning journey? If you’ve been in the ML space long enough, you’ve probably witnessed at least one team disappear down the rabbit hole of building the “perfect” text classification system. The story usually goes something like this:

  • Month 1: “We’ll just quickly train a NLP model!”
  • Month 2: “We need more training data…”
  • Month 3: “This is good enough”

For years, text classification has fallen into the realm of classic ML. Early in my career, I remember training a support vector machine (SVM) for email classification. Lots of preprocessing, iteration, data collection, and labeling.

But here’s the twist: it’s 2024, and generative AI models can “generally” classify text out of the box! You can build a robust ticket classification system without, collecting thousands of labeled training examples, managing ML training pipelines, or maintaining custom models.

In this post, we’ll go over how to setup a Jira ticket classification system using large language models on Amazon Bedrock and other AWS services.

DISCLAIMER: I am a GenAI Architect at AWS and my opinions are my own.

Why Classify Jira Tickets?

A common ask from companies is to understand how teams spend their time. Jira has tagging features, but it can sometimes fall short through human error or lack of granularity. By doing this exercise, organizations can get better insights into their team activities, enabling data-driven decisions about resource allocation, project investment, and deprecation.

Why Not Use Other NLP Approaches?

Traditional ML models and smaller transformers like BERT need hundreds (or thousands) of labeled examples, while LLMs can classify text out of the box. In our Jira ticket classification tests, a prompt-engineering approach matched or beat traditional ML models, processing 10k+ annual tickets for ~$10/year using Claude Haiku (excluding other AWS Service costs). Also, prompts are easier to update than retraining models.

Code Sample

This

  • . The important take away is that it does a .
  • And then output the classification without having to train a single model. See the prompt below:
  • Note: It’s important to validate your prompt using a human curated subset of classified / labelled tickets. You should run this prompt through the validation dataset to make sure it aligns with how you expect the tickets to be classified
    SYSTEM_PROMPT = '''
    You are a support ticket assistant. You are given fields of a Jira ticket and your task is to classify the ticket based on those fields

    Below is the list of potential classifications along with descriptions of those classifications.
    <classifications>
    ACCESS_PERMISSIONS_REQUEST: Used when someone doesn't have the write permissions or can't log in to something or they can't get the correct IAM credentials to make a service work.
    BUG_FIXING: Used when something is failing or a bug is found. Often times the descriptions include logs or technical information.
    CREATING_UPDATING_OR_DEPRECATING_DOCUMENTATION: Used when documentation is out of date. Usually references documentation in the text.
    MINOR_REQUEST: This is rarely used. Usually a bug fix but it's very minor. If it seems even remotely complicated use BUG_FIXING.
    SUPPORT_TROUBLESHOOTING: Used when asking for support for some engineering event. Can also look like an automated ticket.
    NEW_FEATURE_WORK: Usually describes a new feature ask or something that isn't operational.
    </classifications>

    The fields available and their descriptions are below.
    <fields>
    Summmary: This is a summary or title of the ticket
    Description: The description of the issue in natural language. The majority of context needed to classify the text will come from this field
    </fields>


    <rules>
    * It is possible that some fields may be empty in which case ignore them when classifying the ticket
    * Think through your reasoning before making the classification and place your thought process in <thinking></thinking> tags. This is your space to think and reason about the ticket classificaiton.
    * Once you have finished thinking, classify the ticket using ONLY the classifications listed above and place it in <answer></answer> tags.
    </rules>'''

    USER_PROMPT = '''
    Using only the ticket fields below:

    <summary_field>
    {summary}
    </summary_field>

    <description_field>
    {description}
    </description_field>

    Classify the ticket using ONLY 1 of the classifications listed in the system prompt. Remember to think step-by-step before classifying the ticket and place your thoughts in <thinking></thinking> tags.
    When you are finished thinking, classify the ticket and place your answer in <answer></answer> tags. ONLY place the classifaction in the answer tags. Nothing else.
    '''

    We’ve added a helper class that threads the calls to Bedrock to speed things up:

    import boto3
    from concurrent.futures import ThreadPoolExecutor, as_completed
    import re
    from typing import List, Dict
    from prompts import USER_PROMPT, SYSTEM_PROMPT

    class TicketClassifier:
    SONNET_ID = "anthropic.claude-3-sonnet-20240229-v1:0"
    HAIKU_ID = "anthropic.claude-3-haiku-20240307-v1:0"
    HYPER_PARAMS = {"temperature": 0.35, "topP": .3}
    REASONING_PATTERN = r'<thinking>(.*?)</thinking>'
    CORRECTNESS_PATTERN = r'<answer>(.*?)</answer>'

    def __init__(self):
    self.bedrock = boto3.client('bedrock-runtime')

    def classify_tickets(self, tickets: List[Dict[str, str]]) -> List[Dict[str, str]]:
    prompts = [self._create_chat_payload(t) for t in tickets]
    responses = self._call_threaded(prompts, self._call_bedrock)
    formatted_responses = [self._format_results(r) for r in responses]
    return [{**d1, **d2} for d1, d2 in zip(tickets, formatted_responses)]

    def _call_bedrock(self, message_list: list[dict]) -> str:
    response = self.bedrock.converse(
    modelId=self.HAIKU_ID,
    messages=message_list,
    inferenceConfig=self.HYPER_PARAMS,
    system=[{"text": SYSTEM_PROMPT}]
    )
    return response['output']['message']['content'][0]['text']

    def _call_threaded(self, requests, function):
    future_to_position = {}
    with ThreadPoolExecutor(max_workers=5) as executor:
    for i, request in enumerate(requests):
    future = executor.submit(function, request)
    future_to_position[future] = i
    responses = [None] * len(requests)
    for future in as_completed(future_to_position):
    position = future_to_position[future]
    try:
    response = future.result()
    responses[position] = response
    except Exception as exc:
    print(f"Request at position {position} generated an exception: {exc}")
    responses[position] = None
    return responses

    def _create_chat_payload(self, ticket: dict) -> dict:
    user_prompt = USER_PROMPT.format(summary=ticket['Summary'], description=ticket['Description'])
    user_msg = {"role": "user", "content": [{"text": user_prompt}]}
    return [user_msg]

    def _format_results(self, model_response: str) -> dict:
    reasoning = self._extract_with_regex(model_response, self.REASONING_PATTERN)
    correctness = self._extract_with_regex(model_response, self.CORRECTNESS_PATTERN)
    return {'Model Answer': correctness, 'Reasoning': reasoning}

    @staticmethod
    def _extract_with_regex(response, regex):
    matches = re.search(regex, response, re.DOTALL)
    return matches.group(1).strip() if matches else None

    Lastly, the classified tickets are converted to a CSV and uploaded to S3

    import boto3
    import io
    import csv

    s3 = boto3.client('s3')

    def upload_csv(data: List[Dict[str, str]]) -> None:
    csv_buffer = io.StringIO()
    writer = csv.DictWriter(csv_buffer, fieldnames=data[0].keys())
    writer.writeheader()
    writer.writerows(data)

    current_time = datetime.now().strftime("%Y%m%d_%H%M%S")
    filename = f"processed/processed_{current_time}.csv"

    s3.put_object(
    Bucket=self.bucket_name,
    Key=filename,
    Body=csv_buffer.getvalue()
    )

    Dashboarding

    The project is dashboard agnostic. Any popular tool/service will work as long as it can consume a CSV. Amazon Quicksight, Tableu or anything in between will do.

    Conclusion

    In this blog we discussed using Bedrock to automatically classify Jira tickets. These enriched tickets can then be used to create dashboards using various AWS Services or 3P tools. The takeaway, is that classifying text has become much simpler since the adoption of LLMs and what would have taken weeks can now be done in days.

    If you enjoyed this article feel free to connect with me on  was originally published in Towards Data Science on Medium, where people are continuing the conversation by highlighting and responding to this story.

    Vollständiger Original-Bericht
    Ausführliche Details, Code-Beispiele & Hersteller-Stellungnahme auf towardsdatascience.com.
    ↗ Original-Artikel auf towardsdatascience.com lesen
    Wie bewertest du diesen Beitrag?
    1 Klick Feedback
    Teilen mit Netzwerk & Team:

    Community-Analysen & Experten-Meinungen 0

    Verfasse deine eigene Analyse, teile Workarounds oder diskutiere diesen Vorfall im Blog.
    Noch keine Community-Analyse verfasst. Markiere einen Textabschnitt oder klicke oben auf Eigene Analyse verfassen“!
    Community Pulse: Relevanz-Einschätzung
    1 Klick Experten-Votum
    🔴 Akute Relevanz 0%
    🟡 In Evaluierung 0%
    🟢 Keine Auswirkung 0%
    Spannende Innovation 0%
    Verwandte Story-Cluster & Quellen (Vektor-KI)
    Port 8095 Engine
    1 Quelle
    Hackers Just Poisoned the Rust Supply Chain | Threat Wire
    1 Quelle
    Hackers Found a Way Into Humanoid Robots | Threat Wire
    1 Quelle
    Bits und so #1021 (Passwort für Laufwerk)
    Ähnliche Beiträge
    🔍 Verwandte News

    Auch interessante Nachrichten Classify Jira Tickets with GenAI On Amazon Bedrock

    Thematisch verwandte Begriffe: Classify, Jira, Tickets, with · 6 Treffer

    Laden...

    Videos werden geladen ...

    Laden...

    Beiträge werden geladen ...

    Laden...

    Videos werden geladen ...

    Laden...

    Beiträge werden geladen ...

    Laden...

    Videos werden geladen ...

    Laden...

    Beiträge werden geladen ...

    Laden...

    Videos werden geladen ...

    Laden...

    Beiträge werden geladen ...

    Laden...

    Videos werden geladen ...