

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Problembehandlung bei Codegenerierungsszenarien in Amazon Q Developer
<a name="troubleshooting"></a>

Bei der Verwendung von Amazon Q Developer können die folgenden häufigen Szenarien mit ungenauer Codegenerierung und falschen Auflösungen auftreten: 
+ [Generierung von leerem Code](#suggestions-troubleshooting)
+ [Kontinuierliche Kommentare](#comments-troubleshooting)
+ [Falsche Generierung von Inline-Code](#code-generation-troubleshooting)
+ [Unzureichende Ergebnisse aus Chats](#chat-results-troubleshooting)

## Generierung von leerem Code
<a name="suggestions-troubleshooting"></a>

Bei der Entwicklung von Code stellen Sie möglicherweise die folgenden Probleme fest:
+ Amazon Q bietet keinen Vorschlag.
+ Die Meldung „Kein Vorschlag von Amazon Q“ wird in Ihrer IDE angezeigt.

Ihr erster Gedanke könnte sein, dass Amazon Q nicht richtig funktioniert. Die Hauptursache für diese Probleme liegt jedoch in der Regel im Kontext im Skript oder im geöffneten Projekt in der IDE.

Wenn Amazon Q Developer nicht automatisch einen Vorschlag bereitstellt, können Sie die folgenden Tastenkombinationen verwenden, um Amazon Q-Inline-Vorschläge manuell auszuführen:
+ **PC**** — Alt\+C**
+ macOS — **Wahltaste\+C**

Weitere Informationen finden Sie unter [Verwenden von Tastenkombinationen](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/actions-and-shortcuts.html) im *Amazon Q Developer User Guide*.

In den meisten Szenarien generiert Amazon Q einen Vorschlag. Wenn Amazon Q die Meldung „Kein Vorschlag von Amazon Q“ zurückgibt, überprüfen Sie die folgenden gängigen Lösungen für dieses Problem:
+ **Unzureichender Kontext** — Stellen Sie sicher, dass die entsprechenden Bibliotheken vorhanden sind. Stellen Sie sicher, dass sich die im Skript definierten Klassen und Funktionen auf neuen Code beziehen.
+ **Mehrdeutige Aufforderung** — Wenn die Aufforderung verwirrend oder unklar ist, schneidet Amazon Q schlechter ab, wenn es Vorschläge für Inline-Code macht. Seien Sie in diesen Szenarien spezifischer in Ihrem Code und Ihren Kommentaren, um die richtigen Antworten zu erhalten.

Wenn Sie nicht weiterkommen, programmieren Sie nach besten Kräften weiter. In der Regel erkennt Amazon Q Ihre Absicht, was dazu führt, dass Amazon Q Vorschläge unterbreitet. Eine weitere Möglichkeit besteht darin, einen Codeausschnitt mit Anweisungen in einem Amazon Q-Chat zu senden. Weitere Informationen finden [Sie unter Code an Amazon Q senden](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/explain-update-code.html#send-code) im *Amazon Q Developer User Guide*.

## Kontinuierliche Kommentare
<a name="comments-troubleshooting"></a>

Möglicherweise schreiben Sie eine Aufforderung mit Kommentaren und erhalten von Amazon Q nur generische oder wiederholte Kommentarzeilen. 

Eingabe: 

```
// Kafka test
```

Ergebnis:

```
// Kafka test
// Kafka test
// Kafka test
// Kafka test
```

In der Regel ist dieses Problem auf einen fehlenden Kontext im Skript oder auf schlechte Eingabeaufforderungsanweisungen zurückzuführen. Je nach Sprache empfehlen wir, das Standardformat für Kommentare zu verwenden. In diesem Beispiel hat der Benutzer die Aufforderung geändert, die `/* */ ` für einen Kommentarblock verwendet werden soll, und diese Änderung führte zu einer besseren Leistung von Amazon Q. 

Eingabe: 

```
/*
 * Create a unit test to push a message to a Kafka topic
 */
```

Ergebnis:

In diesem Ergebnis akzeptierte der Benutzer nacheinander mehrere Vorschläge.

```
/*
 * Create a unit test to push a message to a Kafka topic
 */
import org.junit.Test;
import java.util.Properties;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;
import static org.junit.Assert.assertEquals;
// create function for a Kafka test
public class KafkaTest {
    @Test
    public void testKafka() {
        // create Kafka producer
        Properties props = new Properties();
        props.put("bootstrap.servers", "localhost:9092");
        props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        KafkaProducer<String, String> producer = new KafkaProducer<>(props);
        // create Kafka topic
        String topic = "test";
        // send message to Kafka topic
        producer.send(new ProducerRecord<>(topic, "key", "value"));
        // close Kafka producer
        producer.close();
        // assert that message was sent successfully
        assertEquals("value", KafkaTest.consumer.poll().value());
    }
}
```

## Falsche Generierung von Inline-Code
<a name="code-generation-troubleshooting"></a>

Gelegentlich sind Inline-Vorschläge von Amazon Q Developer nicht hilfreich oder entsprechen nicht dem Ziel Ihrer Aufforderung. Manchmal bieten Inline-Codevorschläge möglicherweise eine generische Funktion, die einer einfachen Hello World-Methode ähnelt. 

Wenn Vorschläge für Inline-Code nicht hilfreich sind, probieren Sie die folgenden bewährten Methoden aus:
+ Überprüfen Sie den Kontext des Skripts. Je mehr Kontext Sie bereitstellen, desto bessere Ergebnisse erzielen Sie in der Regel mit Amazon Q. 
+ Modularisieren Sie Ihren Code, wenn der Kontext variiert und and/or es zu viel Rauschen gibt. Gruppieren Sie ähnliche Funktionen innerhalb desselben Skripts. Trennen Sie verschiedene Klassen und Funktionen nach ihrem Ziel. 
+ Schreiben Sie Ihre Klassen- und Funktionsnamen taktisch, damit Amazon Q Ihnen bessere Empfehlungen geben kann. 

In diesem Beispiel schreibt der Entwickler ein völlig neues Skript, das Dateien auf Hadoop hochlädt.

Eingabe: 

```
class  MyFunction{

    // create function to read data locally and upload to HDFS filesystem
```

Ergebnis:

```
class  MyFunction{

    // create function to read local data file path and upload to HDFS filesystem
    public void readAndUploadToHDFS(String inputPath, String outputPath) throws IOException {
        // read data from local file
        BufferedReader in = new BufferedReader(new FileReader(inputPath));

}
```

Amazon Q gab zwar eine Empfehlung ab, entsprach jedoch nicht den Erwartungen des Entwicklers. Um die Leistung zu verbessern, importiert der Entwickler Bibliotheken und ändert den Klassennamen so, dass er für Hadoop-Dienstprogramme steht.

Fehlerbehebung: 

```
import java.io.BufferedReader;
import java.io.IOException;
import java.io.FileReader;

// import applicable hadoop libraries for IO operations
import org.apache.hadoop.fs.Path;

class  HadoopUtilities{

    // create function to read local data file path and upload to HDFS filesystem
}
```

Ergebnis:

In diesem Ergebnis akzeptierte der Entwickler nacheinander mehrere Vorschläge.

```
class  HadoopUtilities{

    // create function to read local data file path and upload to HDFS filesystem
    public static void uploadToHDFS(String localFilePath, String hdfsFilePath) throws IOException {
        // create HDFS file path object
        Path hdfsPath = new Path(hdfsFilePath);
        // create local file path object
        Path localPath = new Path(localFilePath);
        // create hadoop file system object
        org.apache.hadoop.fs.FileSystem hdfs = org.apache.hadoop.fs.FileSystem.get(new org.apache.hadoop.conf.Configuration());
        // upload local file to HDFS
        hdfs.copyFromLocalFile(localPath, hdfsPath);
        // close HDFS file system
        hdfs.close();
        System.out.println("File uploaded successfully!");
}
```

In demselben HadoopUtilities Skript fügt der Entwickler eine Kommentaraufforderung zum Lesen eines Amazon Simple Queue Service (Amazon SQS) -Themas hinzu.

Eingabe: 

```
// read message from SQS
```

Ergebnis:

```
// read message from SQS
    public static void readMessageFromSQS(String message) {
        System.out.println("Received message from SQS: " + message);
```

Anstatt Java-Methoden zu verwenden, um eine SQS-Nachricht von Amazon SQS zu lesen, schlägt Amazon Q vor, eine Zeichenkettenmethode zu drucken. Dieser Vorschlag entspricht jedoch nicht dem ursprünglichen Ziel des Entwicklers. 

In diesem Fall ist es vorzuziehen, den Code neu zu modularisieren. Der Fokus des Skripts liegt auf Hadoop-Methoden. Daher könnte es ein besserer Ansatz sein, ein Utility-Skript zu erstellen, das speziell für SQS-Operationen konzipiert ist. 

Das Erstellen einer separaten Klasse für SQS-Dienstprogramme verbessert den Inline-Vorschlag, der im Skript verwendet werden kann. HadoopUtilities

Eingabe:

```
// import function for SQS
import com.amazonaws.services.sqs.AmazonSQS;
import java.util.ArrayList;
import java.util.List;


class SQSUtils {

    // instantiate SQS client
    private AmazonSQS sqsClient;

    // load SQS object
    public SQSUtils(AmazonSQS sqsClient) {
        this.sqsClient = sqsClient;
    }

    // poll message from Amazon SQS given queue name
}
```

Ergebnis:

```
// poll message from Amazon SQS given queue name
    public List<String> pollMessages(String queueName) {
        List<String> messages = new ArrayList<>();
        // poll messages from queue
        receiveMessageResult = sqsClient.receiveMessage(new ReceiveMessageRequest(queueName));
        for (Message message : receiveMessageResult.getMessages()) {
            messages.add(message.getBody());
        }
        return messages;
```

Wenn der Inline-Vorschlag immer noch nicht zu den erwarteten Ergebnissen führt, bitten Sie Amazon Q Developer in einer Chat-Sitzung, Code zu generieren.

### Chatten Sie über das Generieren von Code
<a name="chat-example-code"></a>

Nutzer: 

Generieren Sie eine Java-Funktion zum Lesen einer Nachricht aus einer Amazon SQS SQS-Warteschlange

Amazon Q:

Hier ist ein Beispiel für eine Java-Funktion zum Lesen einer Nachricht aus einer Amazon SQS SQS-Warteschlange:

```
import com.amazonaws.services.sqs.AmazonSQS;
import com.amazonaws.services.sqs.model.Message;
import com.amazonaws.services.sqs.model.ReceiveMessageRequest;
import com.amazonaws.services.sqs.model.ReceiveMessageResult;
public class SQSMessageReader {
    private AmazonSQS sqsClient;
    private String queueUrl;

    public SQSMessageReader(AmazonSQS sqsClient, String queueUrl) {
        this.sqsClient = sqsClient;
        this.queueUrl = queueUrl;
    }
    
    public String readMessage() {
        ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(queueUrl)
                .withMaxNumberOfMessages(1)
                .withWaitTimeSeconds(10);
    
        ReceiveMessageResult receiveMessageResult = sqsClient.receiveMessage(receiveMessageRequest);
    
        if (receiveMessageResult.getMessages().size() > 0) {
            Message message = receiveMessageResult.getMessages().get(0);
            String messageBody = message.getBody();
            String receiptHandle = message.getReceiptHandle();
    
            // Process the message
            System.out.println("Received message: " + messageBody);
    
            // Delete the message from the queue
            sqsClient.deleteMessage(queueUrl, receiptHandle);
    
            return messageBody;
        } else {
            return null;
        }
    }
```

Dieser Code erstellt eine SQSMessage Reader-Klasse, die einen AmazonSQS-Client und eine Warteschlangen-URL als Konstruktorparameter verwendet. Die Methode readMessage () verwendet das ReceiveMessageRequest , um bis zu 1 Nachricht aus der Warteschlange abzurufen, wobei die maximale Wartezeit 10 Sekunden beträgt. 

Wenn eine Nachricht empfangen wird, wird der Nachrichtentext gedruckt und die Nachricht wird mithilfe von aus der Warteschlange gelöscht. DeleteMessageRequest Der Nachrichtentext wird dann zurückgegeben. Wenn keine Nachricht empfangen wird, wird Null zurückgegeben. 

**Beenden** Sie den **Amazon Q-Chat zum Generieren von Code**

## Unzureichende Ergebnisse aus Chats
<a name="chat-results-troubleshooting"></a>

Während der Codeentwicklung können Entwickler Amazon Q bitten, allgemeine Funktionen zu generieren, Empfehlungen zu geben oder Code zu erklären. Manchmal gibt Amazon Q aufgrund einer Aufforderung (z. B. einer Frage oder eines Codeausschnitts) entweder allgemeines Feedback oder Ergebnisse, die nicht Ihren Erwartungen entsprechen. Versuchen Sie in diesen Szenarien Folgendes:
+ Experimentieren Sie mit verschiedenen Eingabeaufforderungen, um die Ergebnisse der Codegenerierung zu verbessern, die Sie von Amazon Q erhalten.
+ Folgen Sie den Anweisungen URLs , die Amazon Q häufig in seinen Antworten auf Ihre Eingabeaufforderungen oder Fragen bereitstellt.
+ Geben Sie Feedback, um die future Leistung von Amazon Q zu verbessern.

Ein Entwickler entwickelt beispielsweise eine RAG-Lösung (Retrieval Augmented Generation) und muss sein Dokument aufgrund der semantischen Beziehungen zwischen Sätzen aufteilen. Der Entwickler chattet wie folgt mit Amazon Q.

### Chatten Sie über eine RAG-Lösung
<a name="chat-results-rag"></a>

Nutzer: 

Generieren Sie für eine RAG-Lösung Code für semantisches Chunking

Amazon Q:

Hier ist sicherlich ein Beispiel dafür, wie Sie semantisches Chunking für eine Retrieval Augmented Generation (RAG) -Lösung implementieren könnten, indem Sie die Bibliothek verwenden: Python LangChain 

```
from langchain.text_splitter import CharacterTextSplitter, TokenTextSplitter
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import Chroma

# Initialize the text splitter
text_splitter = TokenTextSplitter(
    chunk_size=500,
    chunk_overlap=50,
    length_function=len
)
# Initialize the embeddings model
embeddings = HuggingFaceEmbeddings()

# Create the vector store
vectorstore = Chroma(
    embedding_function=embeddings.embed_documents,
    persist_directory="./chroma-data"
)

# Chunk the text using semantic similarity
def semantic_chunk(text):
    chunks = text_splitter.split_text(text)
    embeddings = embeddings.embed_documents(chunks)
    vectorstore.add_texts(chunks, embeddings)
    return chunks
```

In diesem Beispiel verwenden wir das From-Zeichen, LangChain um den Eingabetext in Abschnitte TokenTextSplitter von 500 Zeichen mit einer Überlappung von 50 Zeichen aufzuteilen. Das HuggingFaceEmbeddings Modell wird verwendet, um Einbettungen für jeden Abschnitt zu generieren, und der Chroma Vektorspeicher wird verwendet, um die Blöcke und ihre Einbettungen zu speichern.

Die Funktion semantic\_chunk nimmt den Eingabetext auf, teilt ihn mit dem text\_splitter in Blöcke auf, generiert mithilfe des Einbettungsmodells Einbettungen für jeden Abschnitt und fügt dann die Blöcke und ihre Einbettungen dem hinzu. vectorstore

Dieser Ansatz ermöglicht es Ihnen, den Eingabetext in semantisch sinnvolle Abschnitte aufzuteilen, was für eine Vielzahl von Aufgaben, wie z. B. die Beantwortung von Fragen oder die Zusammenfassung, in einer RAG-Lösung nützlich sein kann. 

Bitte beachten Sie, dass dies ein einfaches Beispiel ist und Sie möglicherweise die Parameter (z. B. chunk\_size, chunk\_overlap) oder die Wahl des Modells für die Textaufteilung und das Einbettungsmodell an Ihren spezifischen Anwendungsfall und Ihre Daten anpassen müssen.

**Ende des Amazon Q-Chats** **über eine RAG-Lösung**

Dieser Ansatz bietet jedoch nur eine grundlegende Methode zum Aufteilen von Dokumenten mithilfe der Methode des Schiebefensters. Der Entwickler wünscht sich ein fortschrittliches Verfahren, das auf der Messung von Einbettungen beruht. In diesen Szenarien muss der Entwickler der Aufforderung aufgrund seines Ziels weitere Einzelheiten hinzufügen. Wenn der Entwickler auf die bekannte AI21 Textsplitter-Funktion mit verweist LangChain, erhält er eine verbesserte Antwort, wie im folgenden Chat gezeigt wird.

### Chatten Sie über eine RAG-Lösung (mit verbesserter Eingabeaufforderung)
<a name="chat-results-rag2"></a>

Nutzer:

Die obige Eingabeaufforderung bezieht sich nur auf die Aufteilung in Bezug auf die Token-Größe pro Block. Ich möchte den AI21 Semantic Text Splitter verwenden. Generieren Sie eine Funktion mithilfe der semantischen A121-Textaufteilung mit Langchain.

Amazon Q:

Okay, lassen Sie uns den AI21 Semantic Text Splitter verwenden, um semantisches LangChain Chunking zu implementieren. Hier ist ein Beispiel: [1]

```
from langchain.text_splitter import AI21SemanticTextSplitter
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import Chroma

# Initialize the text splitter
text_splitter = AI21SemanticTextSplitter()

# Initialize the embeddings model
embeddings = HuggingFaceEmbeddings()

# Create the vector store
vectorstore = Chroma(
    embedding_function=embeddings.embed_documents,
    persist_directory="./chroma-data"
)

# Chunk the text using semantic similarity
def semantic_chunk(text):
    chunks = text_splitter.split_text(text)
    embeddings = embeddings.embed_documents(chunks)
    vectorstore.add_texts(chunks, embeddings)
    return chunks
```

In diesem Beispiel verwenden wir das From-Zeichen, LangChain um den AI21 SemanticTextSplitter Eingabetext in semantisch bedeutsame Abschnitte aufzuteilen. Das HuggingFaceEmbeddings Modell wird verwendet, um Einbettungen für jeden Abschnitt zu erstellen, und der Chroma Vektorspeicher wird verwendet, um die Blöcke und ihre Einbettungen zu speichern. 

Die Funktion semantic\_chunk nimmt den Eingabetext auf, teilt ihn mit dem text\_splitter in Blöcke auf, erstellt mithilfe des Einbettungsmodells Einbettungen für jeden Abschnitt und fügt dann die Blöcke und ihre Einbettungen dem hinzu. vectorstore 

Dieser Ansatz ermöglicht es Ihnen, den Eingabetext in semantisch sinnvolle Abschnitte aufzuteilen, was für eine Vielzahl von Aufgaben, wie z. B. die Beantwortung von Fragen oder die Zusammenfassung, in einer RAG-Lösung nützlich sein kann. 

Bitte beachten Sie, dass Sie möglicherweise die Parameter oder die Wahl des Einbettungsmodells an Ihren spezifischen Anwendungsfall und Ihre Daten anpassen müssen. 

Quellen [1] Erfahren Sie, wie Sie Textteiler verwenden in LangChain

[soosweb3.hashnode.dev > -text-splitters the-ultimate-langchain-series](https://blog.davideai.dev/the-ultimate-langchain-series-text-splitters)

**Ende des Amazon Q-Chats** **über eine RAG-Lösung** **(mit verbesserter Eingabeaufforderung)**

Basierend auf den Chat-Ergebnissen kann der Entwickler die Funktion verwenden und zur Informationsquelle navigieren.

Im Allgemeinen erfordern fortgeschrittene Themen und Fragen einen genaueren Kontext innerhalb der Eingabeaufforderung, wenn Sie mit Amazon Q Developer chatten. Wenn Sie der Meinung sind, dass die Ergebnisse Ihres Chats nicht korrekt sind, verwenden Sie das Daumen-nach-unten-Symbol, um Feedback zur Amazon Q-Antwort zu geben. Amazon Q Developer verwendet kontinuierlich Feedback, um future Versionen zu verbessern. Bei Interaktionen, die zu positiven Ergebnissen geführt haben, ist es hilfreich, Ihr Feedback über das Daumen-hoch-Symbol abzugeben.