AI-Powered Technical Help Desk for Energy Utility Field Operations

infosys_topaz · Energy · 2025 · source Agentic: no · promotional bias: high · source-backed · extracted with prompt 0.5.4 (schema v2)

Generated from extraction.json — do not edit by hand. Every claim cites verbatim source evidence; stated means the quote directly asserts the claim, implied means it supports it indirectly.

Problem

Domain: Energy utility technical support

A large energy supplier needed to reduce technical-help-desk handling time for meter technicians in the field by reusing historical call knowledge, automating repetitive support, and preserving secure role-based access to transcripts and answers.

Constraints:

Architecture

Infosys Topaz and AWS built a production RAG help-desk assistant around Amazon Bedrock. Recorded call transcripts land in S3 as JSON/CSV. Lambda triggers a Step Functions ingestion workflow that parses contact ID, participant, and content, then uses Claude Sonnet to summarize calls, classify relevant versus irrelevant transcripts, and extract summary/problem/resolution steps. Relevant summaries are chunked, embedded with Titan Text Embeddings, and stored in OpenSearch Serverless. A Streamlit UI with role-based access control queries the vector store, generates responses through Bedrock, persists feedback/metrics/FAQ counters in DynamoDB, and uses caching for faster FAQ retrieval.

Diagram confidence: explicit (topology described by the source).

flowchart LR
  call-transcript-s3-bucket["call-transcript-s3-bucket"] --> lambda-trigger["lambda-trigger"]
  call-transcript-s3-bucket["call-transcript-s3-bucket"] --> irrelevant-transcript-archive["irrelevant-transcript-archive"]
  lambda-trigger["lambda-trigger"] --> step-functions-ingestion["step-functions-ingestion"]
  step-functions-ingestion["step-functions-ingestion"] --> claude-classifier-summarizer["claude-classifier-summarizer"]
  step-functions-ingestion["step-functions-ingestion"] --> irrelevant-transcript-archive["irrelevant-transcript-archive"]
  step-functions-ingestion["step-functions-ingestion"] --> knowledge-base-schema["knowledge-base-schema"]
  claude-classifier-summarizer["claude-classifier-summarizer"] --> knowledge-base-schema["knowledge-base-schema"]
  knowledge-base-schema["knowledge-base-schema"] --> titan-embedding-pipeline["titan-embedding-pipeline"]
  knowledge-base-schema["knowledge-base-schema"] --> opensearch-vector-store["opensearch-vector-store"]
  titan-embedding-pipeline["titan-embedding-pipeline"] --> opensearch-vector-store["opensearch-vector-store"]
  opensearch-vector-store["opensearch-vector-store"] --> streamlit-help-desk-ui["streamlit-help-desk-ui"]
  rbac-dynamodb-acl["rbac-dynamodb-acl"] --> streamlit-help-desk-ui["streamlit-help-desk-ui"]
  rbac-dynamodb-acl["rbac-dynamodb-acl"] --> opensearch-vector-store["opensearch-vector-store"]
  streamlit-help-desk-ui["streamlit-help-desk-ui"] --> bedrock-response-generator["bedrock-response-generator"]
  streamlit-help-desk-ui["streamlit-help-desk-ui"] --> faq-cache["faq-cache"]
  streamlit-help-desk-ui["streamlit-help-desk-ui"] --> feedback-metrics-store["feedback-metrics-store"]
  faq-cache["faq-cache"] --> feedback-metrics-store["feedback-metrics-store"]
Drag to pan · scroll or use +/− to zoom · reconstructed from the source's described component topology

Components

Component Role Interacts with
call-transcript-s3-bucket Stores recorded technical help desk transcripts in JSON/CSV form for quality analysis and knowledge-base construction. lambda-trigger, irrelevant-transcript-archive
lambda-trigger Event-driven function that starts ingestion when new transcripts arrive and parses CSV content. call-transcript-s3-bucket, step-functions-ingestion
step-functions-ingestion Orchestrates transcript parsing, concurrent classification, relevance routing, and summary generation. claude-classifier-summarizer, irrelevant-transcript-archive, knowledge-base-schema
claude-classifier-summarizer Claude Sonnet calls that classify conversations, summarize useful transcripts, identify problems, and generate resolution steps. step-functions-ingestion, knowledge-base-schema
knowledge-base-schema Structured records with conversation history, summary, problem, resolution steps, and embeddings. titan-embedding-pipeline, opensearch-vector-store
titan-embedding-pipeline Chunks relevant summaries and generates text embeddings optimized for retrieval. knowledge-base-schema, opensearch-vector-store
opensearch-vector-store Serverless vector database for role-partitioned transcript collections and near-real-time embedding updates. streamlit-help-desk-ui, rbac-dynamodb-acl
streamlit-help-desk-ui User-facing technical help desk assistant with conversation, FAQ, search metrics, feedback, and role-controlled access. opensearch-vector-store, rbac-dynamodb-acl, faq-cache, bedrock-response-generator, feedback-metrics-store
bedrock-response-generator Bedrock-backed response generation for user questions over retrieved help desk context. streamlit-help-desk-ui
rbac-dynamodb-acl DynamoDB access-control mapping of users, roles, OpenSearch collections, and index names. streamlit-help-desk-ui, opensearch-vector-store
faq-cache FAQ counter and Streamlit cache layer for frequently asked queries and faster repeated responses. streamlit-help-desk-ui, feedback-metrics-store
feedback-metrics-store DynamoDB-backed likes/dislikes, search metrics, misses, response helpfulness, sentiment, tone, and satisfaction tracking. streamlit-help-desk-ui, faq-cache
irrelevant-transcript-archive S3 archive for disconnected or irrelevant calls retained for future reference. call-transcript-s3-bucket, step-functions-ingestion

Data flow

A new transcript upload to S3 triggers Lambda and a Step Functions workflow. The parser extracts call ID, speaker role, and conversation content, concatenating rows by contact ID. A map-state classification step runs Claude Sonnet with zero-shot chain-of-thought prompting to summarize and classify each conversation as relevant or irrelevant. Irrelevant conversations are logged to S3; relevant conversations are summarized into structured problem and resolution fields, chunked, embedded with Titan, and indexed in OpenSearch Serverless. At query time, the Streamlit help desk enforces the user's role, retrieves similar knowledge-base items, generates an answer, updates FAQ counters and user metrics, and records feedback in DynamoDB.

4 supporting quotes
“An event-driven AWS Lambda function is triggered when new call transcripts are loaded into the S3 bucket.”article, stated
“only a few fields are extracted: a contact ID that is unique for a particular call session between a customer and a support agent”article, stated
“It uses zero-shot chain-of-thought prompting, to first summarize the conversation and then to determine the relevance.”article, stated
“After the user submits a query, the technical help desk fetches the top similar items from the knowledge base.”article, stated

Why this architecture

The system uses a RAG pipeline because repetitive field-support questions can be answered from past calls, but the knowledge base must ingest fresh transcripts near real time. Bedrock fits the AWS-native workflow with Step Functions, DynamoDB, and OpenSearch. Claude classification keeps low-quality calls out of the knowledge base, Titan embeddings and OpenSearch support scalable retrieval, and role-based collections/DynamoDB ACLs enforce different access levels for administrators, analysts, and technical agents. Streamlit caching and FAQ counters improve repeated-query performance.

4 supporting quotes
“We used Amazon Bedrock because it integrates seamlessly with other AWS services shown in the diagram”article, stated
“The conversations determined to be irrelevant go into another S3 bucket for future reference.”article, stated
“OpenSearch Serverless collections to manage different access levels. Different call transcripts are ingested into different collections”article, stated
“This, along with the FAQ section, has significantly enhanced performance of the technical help desk, creating faster response times”article, stated

Models used: Amazon Bedrock · Anthropic Claude Sonnet · Amazon Titan Text Embeddings · Amazon OpenSearch Serverless · AWS Step Functions · AWS Lambda · Amazon DynamoDB · Streamlit

Scale

Alternatives considered (roads not taken)

Hiring and training more support agents

Rejected because: The article says staffing is costly and not scalable for repetitive support volume.

“It’s expensive and not scalable to hire more support agents and train them with the knowledge needed to provide support.”article, stated

Processing massive documents at once

Rejected because: The RAG design uses chunking and overlap to improve retrieval instead.

“Instead of processing massive documents at the same time, we used chunking strategies to improve retrieval.”article, stated

Simple narrow user prompts

Rejected because: Expanded prompts with synonyms, procedures, regulations, best practices, and agent experiences retrieve better results.

“instead of “guidelines for smart meter installation,” an expanded prompt such as “instructions, procedures, regulations, and best practices”article, stated

Single unrestricted transcript corpus

Rejected because: Different roles need different access levels, so transcripts are ingested into separate OpenSearch collections.

“Different call transcripts are ingested into different collections; this is to enable user access to the content they are authorized to based on their roles.”article, stated

Patterns

rag-retrieval (retrieval)

Past support transcripts are summarized, embedded, retrieved, and used to answer new technical help desk questions.

“The solution involves creating a knowledge base by ingesting and processing call transcripts, so that the AI assistant can provide resolutions based on history.”article, stated
“The Amazon Titan Text Embeddings model is optimized for text retrieval to enable Retrieval Augmented Generation (RAG).”article, stated

structured-output-contract (knowledge extraction)

Claude turns raw conversations into structured knowledge-base fields: summary, problem, resolution steps, and embeddings.

“generates the summary, problem, and resolution steps using Anthropic’s Claude Sonnet.”article, stated
“The following table shows the final knowledge base schema.”article, stated

guardrails-io-filtering (data quality)

The ingestion workflow filters disconnected or meaningless conversations before they enter the knowledge base.

“If the conversation is disconnected or disjointed (because of signal disturbances or other reasons), or has no meaningful context”article, stated
“classified as relevant or irrelevant”article, stated

semantic-caching (performance)

The Streamlit cache and FAQ counter reuse frequent valid results and surface top questions for faster support.

“We used the st.cache_data() function in Streamlit to store the valid results in memory.”article, stated
“The Counter column is created as the global secondary index to retrieve the top five FAQs.”article, stated

privacy-preserving-processing (security)

The architecture encrypts buckets, PII, OpenSearch traffic/storage, DynamoDB ACL data, credentials, and service transmissions.

“Personally identifiable information (PII) is handled with extreme care— PII data is encrypted and access is strictly controlled through AWS Identity and Access Management (IAM) policies and AWS KMS.”article, stated
“Data transmissions between services are encrypted in transit using TLS 1.2, and we maintain end-to-end encryption”article, stated

Tradeoffs

Automate repetitive support with an AI assistant.

Chose RAG-backed assistant over more staffing over Hiring and training more support agents.

Rationale: Most issues are repetitive and staffing enough agents is costly and not scalable.

“60–70% issues are repetitive, and the rest are new issues.”article, stated
“It’s expensive and not scalable to hire more support agents and train them”article, stated

Filter transcript data before embedding.

Chose Relevant-conversation shortlist over Embedding every recorded call.

Rationale: Disconnected calls and unresolved conversations would produce noisy retrieval, so the workflow keeps only useful context in the vector store.

“The shortlisted conversations are chunked, and embeddings are generated and stored”article, stated
“irrelevant conversations into an S3 bucket and relevant conversations are passed to another Lambda function”article, stated

Use role-separated vector collections.

Chose Multiple OpenSearch collections controlled by DynamoDB ACLs over A single shared vector index.

Rationale: Role-specific transcript access is required for least-privilege knowledge retrieval.

“We used OpenSearch Serverless collections to manage different access levels.”article, stated

Gotchas (what bit them)

Raw transcripts include irrelevant or low-context calls.

Root cause: Signal disturbances, disconnected conversations, and calls without meaningful resolution can pollute the knowledge base.

Resolution: Use Claude with zero-shot chain-of-thought summarization and relevance classification, archiving irrelevant calls separately.

“determine if the context has useful information, based on the length of the call, key words that indicate relevant context”article, stated
“it’s classified as irrelevant.”article, stated

Production RAG needs a vector store that can update without hurting query performance.

Root cause: The knowledge base expands continuously with new call transcripts and updated embeddings.

Resolution: Use OpenSearch Serverless vector engine to add, update, and delete embeddings in near real time.

“key features include adding, updating, and deleting vector embeddings in near real time without impacting query performance.”article, stated

Help desk knowledge access has to be role-scoped.

Root cause: Administrators, analysts, and technical agents should not all see the same transcript collections.

Resolution: Store role/access metadata in DynamoDB and separate OpenSearch Serverless collections by access level.

“an administrator with full access, a technical desk analyst with a medium level of access, and a technical agent with minimal access.”article, stated
“A list of user IDs and their roles and allowed access are stored in a DynamoDB table”article, stated

Evaluation

The system measures operational outcomes, user feedback, answer helpfulness, misses, FAQ frequency, satisfaction, response time, and support-call handling metrics after deployment.

Metrics: average handling time · percentage of calls handled by the assistant · human intervention rate · customer satisfaction score · number of weekly queries · helpful responses generated · dislikes and misses · FAQ query counts

4 supporting quotes
“Users can provide feedback by choosing either the like or dislike button for each response received”article, stated
“Number of queries in the last week”article, stated
“Number of helpful responses generated”article, stated
“Additional metrics are also stored, such as sentiment, tone of the speakers, nature of responses generated, and satisfaction percentage.”article, stated

Outcomes

The deployment serves a 5,000-call-per-week, 20,000-call-per-month field-support operation with top 10 issue categories making up more than 60% of calls.

3 supporting quotes
“now handles 70% of the previously human-managed calls.”article, stated
“average handling time has decreased from over 5 minutes to under 2 minutes, a 60% improvement.”article, stated
“Post-implementation surveys show a 30% increase in customer satisfaction scores related to technical support interactions.”article, stated