Agent Prompter

Der Prompter ist eine Schlüsselkomponente des UFO-Frameworks und verantwortlich für die Erstellung von Prompts für die LLM zur Generierung von Antworten. Der Prompter ist im Ordner ufo/prompts implementiert. Jeder Agent hat seine eigene Prompter-Klasse, die die Struktur des Prompts und die an die LLM zu übergebenden Informationen definiert.

Komponenten

Ein an die LLM übergebener Prompt ist normalerweise eine Liste von Dictionaries, wobei jedes Dictionary die folgenden Schlüssel enthält

Key Beschreibung
role Die Rolle des Textes im Prompt, kann system, user oder assistant sein.
content Der Inhalt des Textes für die jeweilige Rolle.

Tipp

Die offizielle Dokumentation kann für die Erstellung von Prompts hilfreich sein.

In der __init__-Methode der Prompter-Klasse können Sie die Vorlage des Prompts für jede Komponente definieren, und die endgültige Prompt-Nachricht wird durch Kombination der Vorlagen jeder Komponente mit der prompt_construction-Methode erstellt.

System-Prompt

Der System-Prompt verwendet die in der config_dev.yaml-Datei für jeden Agenten konfigurierte Vorlage. Er enthält normalerweise Anweisungen für die Rolle des Agenten, Aktionen, Tipps, Antwortformate usw. Sie müssen die Methode system_prompt_construction verwenden, um den System-Prompt zu erstellen.

Prompts zu API-Anweisungen und Demobeispiele sind ebenfalls im System-Prompt enthalten, die jeweils von den Methoden api_prompt_helper und examples_prompt_helper erstellt werden. Hier sind die Unterkomponenten des System-Prompts

Komponente Beschreibung Methode
apis Die API-Anweisungen für den Agenten. api_prompt_helper
examples Die Demobeispiele für den Agenten. examples_prompt_helper

Benutzer-Prompt

Der Benutzer-Prompt wird basierend auf Informationen aus der Beobachtung des Agenten, externem Wissen und dem Blackboard erstellt. Sie können die Methode user_prompt_construction verwenden, um den Benutzer-Prompt zu erstellen. Hier sind die Unterkomponenten des Benutzer-Prompts

Komponente Beschreibung Methode
observation Die Beobachtung des Agenten. user_content_construction
retrieved_docs Das aus der externen Wissensdatenbank abgerufene Wissen. retrived_documents_prompt_helper
blackboard Die im Blackboard gespeicherten Informationen. blackboard_to_prompt

Referenz

Sie finden die Implementierung des Prompter im Ordner ufo/prompts. Hier ist die grundlegende Struktur der Prompter-Klasse

Basen: ABC

Die Klasse BasicPrompter ist die abstrakte Klasse für den Prompter.

Initialisiert den BasicPrompter.

Parameter
  • is_visual (bool) –

    Ob die Anfrage für ein visuelles Modell bestimmt ist.

  • prompt_template (str) –

    Der Pfad zur Prompt-Vorlage.

  • example_prompt_template (str) –

    Der Pfad zur Beispiel-Prompt-Vorlage.

Quellcode in prompter/basic.py
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
def __init__(
    self, is_visual: bool, prompt_template: str, example_prompt_template: str
):
    """
    Initialize the BasicPrompter.
    :param is_visual: Whether the request is for visual model.
    :param prompt_template: The path of the prompt template.
    :param example_prompt_template: The path of the example prompt template.
    """
    self.is_visual = is_visual
    if prompt_template:
        self.prompt_template = self.load_prompt_template(prompt_template, is_visual)
    else:
        self.prompt_template = ""
    if example_prompt_template:
        self.example_prompt_template = self.load_prompt_template(
            example_prompt_template, is_visual
        )
    else:
        self.example_prompt_template = ""

api_prompt_helper()

Eine Hilfsfunktion zur Erstellung der API-Liste und -beschreibungen für den Prompt.

Quellcode in prompter/basic.py
139
140
141
142
143
144
def api_prompt_helper(self) -> str:
    """
    A helper function to construct the API list and descriptions for the prompt.
    """

    pass

examples_prompt_helper()

Eine Hilfsfunktion zur Erstellung des Beispiel-Prompts für In-Context-Learning.

Quellcode in prompter/basic.py
132
133
134
135
136
137
def examples_prompt_helper(self) -> str:
    """
    A helper function to construct the examples prompt for in-context learning.
    """

    pass

load_prompt_template(template_path, is_visual=None) staticmethod

Lädt die Prompt-Vorlage.

Rückgabe
  • Dict[str, str]

    Die Prompt-Vorlage.

Quellcode in prompter/basic.py
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
@staticmethod
def load_prompt_template(template_path: str, is_visual=None) -> Dict[str, str]:
    """
    Load the prompt template.
    :return: The prompt template.
    """

    if is_visual == None:
        path = template_path
    else:
        path = template_path.format(
            mode="visual" if is_visual == True else "nonvisual"
        )

    if not path:
        return {}

    if os.path.exists(path):
        try:
            prompt = yaml.safe_load(open(path, "r", encoding="utf-8"))
        except yaml.YAMLError as exc:
            print_with_color(f"Error loading prompt template: {exc}", "yellow")
    else:
        raise FileNotFoundError(f"Prompt template not found at {path}")

    return prompt

prompt_construction(system_prompt, user_content) staticmethod

Erstellt den Prompt zur Zusammenfassung der Erfahrung in ein Beispiel.

Parameter
  • user_content (List[Dict[str, str]]) –

    Der Benutzerinhalt. Rückgabe: Der Prompt zur Zusammenfassung der Erfahrung in ein Beispiel.

Quellcode in prompter/basic.py
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
@staticmethod
def prompt_construction(
    system_prompt: str, user_content: List[Dict[str, str]]
) -> List:
    """
    Construct the prompt for summarizing the experience into an example.
    :param user_content: The user content.
    return: The prompt for summarizing the experience into an example.
    """

    system_message = {"role": "system", "content": system_prompt}

    user_message = {"role": "user", "content": user_content}

    prompt_message = [system_message, user_message]

    return prompt_message

retrived_documents_prompt_helper(header, separator, documents) staticmethod

Erstellt den Prompt für abgerufene Dokumente.

Parameter
  • header (str) –

    Die Kopfzeile des Prompts.

  • separator (str) –

    Das Trennzeichen des Prompts.

  • documents (List[str]) –

    Die abgerufenen Dokumente. Rückgabe: Der Prompt für abgerufene Dokumente.

Quellcode in prompter/basic.py
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
@staticmethod
def retrived_documents_prompt_helper(
    header: str, separator: str, documents: List[str]
) -> str:
    """
    Construct the prompt for retrieved documents.
    :param header: The header of the prompt.
    :param separator: The separator of the prompt.
    :param documents: The retrieved documents.
    return: The prompt for retrieved documents.
    """

    if header:
        prompt = "\n<{header}:>\n".format(header=header)
    else:
        prompt = ""
    for i, document in enumerate(documents):
        if separator:
            prompt += "[{separator} {i}:]".format(separator=separator, i=i + 1)
            prompt += "\n"
        prompt += document
        prompt += "\n\n"
    return prompt

system_prompt_construction() abstractmethod

Erstellt den System-Prompt für LLM.

Quellcode in prompter/basic.py
108
109
110
111
112
113
114
@abstractmethod
def system_prompt_construction(self) -> str:
    """
    Construct the system prompt for LLM.
    """

    pass

user_content_construction() abstractmethod

Erstellt den vollständigen Benutzerinhalt für LLM, einschließlich des Benutzer-Prompts und der Bilder.

Quellcode in prompter/basic.py
124
125
126
127
128
129
130
@abstractmethod
def user_content_construction(self) -> str:
    """
    Construct the full user content for LLM, including the user prompt and images.
    """

    pass

user_prompt_construction() abstractmethod

Erstellt den textbasierten Benutzer-Prompt für LLM basierend auf dem Feld user in der Prompt-Vorlage.

Quellcode in prompter/basic.py
116
117
118
119
120
121
122
@abstractmethod
def user_prompt_construction(self) -> str:
    """
    Construct the textual user prompt for LLM based on the `user` field in the prompt template.
    """

    pass

Tipp

Sie können die Klasse Prompter an Ihre Anforderungen anpassen.