AI-Agent-Q&A-Beispiel

In diesem Kapitel werden wir unseren ersten echten AI-Agenten erstellen.

Wir beginnen mit einem einfachen Q&A-Agenten und fügen nach und nach weitere Funktionen hinzu.

Vorbereitung der Projektstruktur

Erstellen Sie zuerst das Verzeichnisexample-ai-agent:

mkdir example-ai-agent

Wechseln Sie in das Verzeichnisexample-ai-agent, und verwenden Sie den Befehl uv, um eine virtuelle Umgebung zu erstellen:

cd example-ai-agent

# 创建名为 .venv 的虚拟环境(默认)
uv venv

# 激活环境(macOS/Linux)
source .venv/bin/activate

# 激活环境(Windows)
.venv\Scripts\activate

Verwenden Sie uv, um eine virtuelle Umgebung zu erstellen und zu aktivieren. Weitere Details finden Sieim uv-Tutorial。

Erstellen Sie die Projektverzeichnisstruktur:

example-ai-agent/
├── .env
├── .gitignore
├── requirements.txt
├── test_basic_agent.py
├── README.md
├── src/
│   ├── __init__.py
│   └── simple_agent.py
└── tests/
    └── __init__.py

API-Schlüssel bei Alibaba Bailian beantragen

Dieses Kapitel erfordert die Suchfunktion, daher verwenden wir das Alibaba Qwen-Modell, da es über eine integrierte Suchfunktion verfügt.

Das Tongyi Qianwen-Modell auf Alibaba Cloud Bailian unterstützt OpenAI-kompatible APIs. Sie müssen nur den API-Schlüssel, die BASE_URL und den Modellnamen anpassen, um Ihren vorhandenen OpenAI-Code auf Alibaba Cloud Bailian zu migrieren.

  • base_url: Ersetzen Sie durch https://dashscope.aliyuncs.com/compatible-mode/v1
  • api_key: Ersetzen Sie durch Ihren Alibaba Cloud Bailian API-Schlüssel
  • model: Ersetzen Sie durch qwen3-max

Referenzlink:https://help.aliyun.com/zh/model-studio/compatibility-of-openai-with-dashscope

Wir müssen den Alibaba Cloud Bailian-Modellservice aktivieren und einen API-KEY erhalten.

Melden Sie sich zunächst mit Ihrem Alibaba Cloud-Hauptkonto bei der Bailian Model Studio-Plattform an:https://bailian.console.aliyun.com/, klicken Sie dann oben rechts auf Anmelden. Klicken Sie nach der Anmeldung oben rechts auf das Zahnrad ⚙️-Symbol, wählen Sie API-Schlüssel aus und kopieren Sie ihn. Wenn Sie noch keinen haben, können Sie auch einen API-Schlüssel erstellen:

Die Aktivierung von Alibaba Cloud Bailian ist kostenlos. Gebühren fallen nur für Modellaufrufe (nach Überschreiten des kostenlosen Kontingents), Modellbereitstellung und Modell-Feinabstimmung an.

] APIs werden jetzt nach Token abgerechnet. Glücklicherweise sind die Preise recht erschwinglich, sodass wir zunächst das günstigste Paket kaufen können:Alibaba Cloud Bailian Large Model Service Platform。

Sie können auch direkt das Coding Plan-Paket von Bailian und Ark verwenden:https://www.example.com/claude-code/coding-plan.html。

Erstellen Sie die grundlegende Agent-Klasse:

Beispiel

# src/simple_agent.py
import os
from typing import List, Dict, Any
from openai import OpenAI
from dotenv import load_dotenv

# Umgebungsvariablen laden
load_dotenv()

class SimpleQAAgent:
    """Einfacher Q&A-Agent"""

    def __init__(self, model: str = "qwen3-max"): # Standardmodell auf DeepSeek setzen
        """
Agent initialisieren

        Argumente:
model: Der zu verwendende Modellname, standardmäßig DeepSeek
        """

        # api_key = os.getenv("OPENAI_API_KEY")
        api_key = "sk-xxx" # Ihr API-Schlüssel
        base_url = "https://dashscope.aliyuncs.com/compatible-mode/v1"
        if not api_key:
            raise ValueError("Bitte setzen Sie die Umgebungsvariable OPENAI_API_KEY")

        self.client = OpenAI(
                        api_key = api_key,
                        base_url = base_url)
        self.model = model
        self.conversation_history: List[Dict[str, str]] = []
        self.system_prompt = "Sie sind ein hilfreicher KI-Assistent. Bitte beantworten Sie Benutzerfragen höflich und genau."

    def add_to_history(self, role: str, content: str):
        """Nachricht zum Konversationsverlauf hinzufügen"""
        self.conversation_history.append({
            "role": role,
            "content": content
        })

        # Verlaufslänge auf 10 Turns begrenzen (um Token-Überlauf zu verhindern)
        if len(self.conversation_history) > 10:
            self.conversation_history = self.conversation_history[-10:]

    def ask(self, question: str) -> str:
        """
Dem Agenten eine Frage stellen

        Argumente:
question: Die Frage des Benutzers

        Rückgabe:
Die Antwort des Agenten
        """

        # Benutzerfrage zum Verlauf hinzufügen
        self.add_to_history("user", question)

        # Nachrichtenliste vorbereiten
        messages = [
            {"role": "system", "content": self.system_prompt}
        ]
        messages.extend(self.conversation_history)

        try:
            # OpenAI-API aufrufen
            response = self.client.chat.completions.create(
                model=self.model,
                messages=messages,
                temperature=0.7,
                max_tokens=500
            )

            # Antwort extrahieren
            answer = response.choices[0].message.content

            # Assistentenantwort zum Verlauf hinzufügen
            self.add_to_history("assistant", answer)

            return answer

        except Exception as e:
            error_msg = f"Fehler beim Aufrufen der API: {str(e)}"
            print(error_msg)
            return error_msg

    def clear_history(self):
        """Gesprächsverlauf löschen"""
        self.conversation_history.clear()

Erstelle ein Testskript, um den Basis-Agenten zu testen:

Beispiel

# test_basic_agent.py
from src.simple_agent import SimpleQAAgent

def test_basic_agent():
    """Test des Basis-Q&A-Agenten"""
    print("=== Test Basis-Q&A-Agent ===")

    # Agent erstellen
    agent = SimpleQAAgent()

    # Q&A testen
    questions = [
        "Hallo, bitte stell dich vor",
        "Was ist Python?",
        "Was ist der Unterschied zwischen maschinellem Lernen und künstlicher Intelligenz?"
    ]

    for question in questions:
        print(f"\nBenutzer: {question}")
        answer = agent.ask(question)
        print(f"Assistent: {answer}")

    # Gesprächskohärenz testen
    print("\n=== Gesprächskohärenz testen ===")
    agent.clear_history()

    # Erste Runde
    q1 = "Meine Lieblingsfarbe ist Blau"
    a1 = agent.ask(q1)
    print(f"Benutzer: {q1}")
    print(f"Assistent: {a1}")

    # Zweite Runde (sollte sich an das vorherige Gespräch erinnern)
    q2 = "Welche Farbe habe ich gerade als meine Lieblingsfarbe genannt?"
    a2 = agent.ask(q2)
    print(f"\nBenutzer: {q2}")
    print(f"Assistent: {a2}")

    print("\nTest abgeschlossen!")

if __name__ == "__main__":
    test_basic_agent()

Test ausführen:

python test_basic_agent.py

=== 测试基础问答 Agent ===

User: 你好,请介绍一下自己
example
助理: 你好!我是通义千问(Qwen),是阿里巴巴集团自主研发的超大规模语言模型。我可以帮助你回答问题、创作文字,比如写故事、写公文、写邮件、写剧本、逻辑推理、编程等等,还能表达观点,玩游戏等。如果你有任何问题或需要帮助,随时告诉我!

User: Python是什么?
助理: 你好!Python 是一种**高级、解释型、通用的编程语言**,由荷兰程序员 **吉多·范罗苏姆(Guido van Rossum)** 于1991年首次发布。它的设计哲学强调代码的**可读性**和**简洁性**,语法清晰简洁,使得初学者也能快速上手。
...

Dieser Basis-Agent hat mehrere offensichtliche Einschränkungen:

  • Kann nur aus Wissen in den Trainingsdaten antworten
  • Kann nicht auf Echtzeitinformationen zugreifen
  • Kann keine Berechnungen durchführen
  • Kann keine externen Systeme bedienen

Genau deshalb müssen wir dem Agenten Werkzeuge hinzufügen.


Suchwerkzeug hinzufügen

Qwen verfügt über eine integrierte Suchfunktion; durch Übergeben vonenable_search: trueParametern kann die Web-Suchfunktion aktiviert werden.

# 导入依赖与创建客户端...
completion = client.chat.completions.create(
    # 需使用支持联网搜索的模型
    model="qwen3-max",
    messages=[{"role": "user", "content": "杭州明天天气如何"}],
    # 由于 enable_search 非 OpenAI 标准参数,使用 Python SDK 需要通过 extra_body 传入(使用Node.js SDK 需作为顶层参数传入)
    extra_body={"enable_search": True}
)

Dokumentation:https://help.aliyun.com/zh/model-studio/web-search

Agent mit integriertem Suchwerkzeug

Jetzt integrieren wir das Suchwerkzeug in den Agenten. Erstellen Sie die Datei agent_with_search.py im Verzeichnis src:

Beispiel

# src/agent_with_search.py
import os
from openai import OpenAI
from dotenv import load_dotenv

load_dotenv()


class AgentWithSearch:
    """Agent basierend auf Qwens integrierter Web-Suchfunktion"""

    def __init__(self, model: str = "qwen3-max"):
        api_key = "sk-xxx"
        base_url = "https://dashscope.aliyuncs.com/compatible-mode/v1"

        if not api_key:
            raise ValueError("Bitte setzen Sie die Umgebungsvariable OPENAI_API_KEY (DashScope Key)")

        self.client = OpenAI(
            api_key=api_key,
            base_url=base_url
        )
        self.model = model

        self.system_prompt = """
Sie sind ein hilfreicher KI-Assistent.

Wenn die Frage Echtzeitinformationen, aktuelle Ereignisse oder Inhalte betrifft, die eine Faktenprüfung erfordern,
können Sie über die Websuche die neuesten Informationen erhalten und in Ihren Antworten angeben, dass die Informationen aus dem Internet stammen.
"""


    def ask(self, question: str) -> str:
        messages = [
            {"role": "system", "content": self.system_prompt},
            {"role": "user", "content": question}
        ]

        try:
            response = self.client.chat.completions.create(
                model=self.model,
                messages=messages,
                temperature=0.7,
                max_tokens=800,
                extra_body={
                    "enable_search": True
                }
            )

            return response.choices[0].message.content

        except Exception as e:
            return f"Fehler: {repr(e)}"

    def interactive_chat(self):
        print("=== Qwen Websuche-Agent ===")
        print("Geben Sie quit / exit ein, um die Unterhaltung zu beenden")

        while True:
            question = input("\n"Sie: ").strip()
            if question.lower() in {"quit", "exit"}:
                break

            print("Assistent:", self.ask(question))

Suchagent testen

Erstellen Sie die Datei test_search_agent.py im Stammverzeichnis:

Beispiel

# test_search_agent.py
from src.agent_with_search import AgentWithSearch

def test_search_agent():
    agent = AgentWithSearch()

    questions = [
        "Wie ist das Wetter heute in Peking?",
        "Was sind die neuesten Technologienachrichten?",
        "Wo fanden die Olympischen Spiele 2024 statt?",
        "Was ist Python?"
    ]

    for q in questions:
        print(f"\n"Benutzer: {q}")
        print("Assistent:", agent.ask(q)[:300], "...")

if __name__ == "__main__":
    test_search_agent()

Test ausführen:

python test_search_agent.py
User: 今天北京的天气怎么样?
助理: 今天是2026年2月7日,星期六。根据最新天气预报信息,北京今天的天气情况如下:

- **天气状况**:多云转晴  
- **气温范围**:最低气温约 **-9℃**,最高气温约 **2℃**(部分区域如海淀区记录为 **-5℃ ~ 5℃**)  
- **风向风力**:白天到夜间有 **东北风1级**,部分地区午后转为 **南风转西北风,小于3级**  
- **空气质量**:**37(优)**  
- **穿衣建议**:建议穿棉衣、冬大衣、皮夹克、厚呢外套、羽绒服等厚重保暖衣物,并佩戴手套、帽子等防寒配件  
...
Weitere Erweiterungen