Exemple de questions-réponses d'agent IA

Dans ce chapitre, nous allons construire notre premier véritable agent IA.

Nous commencerons par un agent de questions-réponses simple et ajouterons progressivement davantage de fonctionnalités.

Préparation de la structure du projet

Tout d'abord, créez le répertoireexample-ai-agent:

mkdir example-ai-agent

Entrez dans le répertoireexample-ai-agent, et utilisez la commande uv pour créer un environnement virtuel :

cd example-ai-agent

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

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

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

Utilisez uv pour créer et activer un environnement virtuel. Pour plus de détails, vous pouvez consulterle tutoriel uv。

Créez la structure du répertoire du projet :

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

Demander une clé API sur Alibaba Bailian

Ce chapitre nécessite la fonction de recherche, nous utilisons donc le modèle Alibaba Qwen car il dispose d'une fonctionnalité de recherche intégrée.

Le modèle Tongyi Qianwen sur Alibaba Cloud Bailian prend en charge les API compatibles OpenAI. Il vous suffit d'ajuster la clé API, BASE_URL et le nom du modèle pour migrer votre code OpenAI existant vers Alibaba Cloud Bailian.

  • base_url : Remplacez par https://dashscope.aliyuncs.com/compatible-mode/v1
  • api_key : Remplacez par votre clé API Alibaba Cloud Bailian
  • model : Remplacez par qwen3-max

Lien de référence :https://help.aliyun.com/zh/model-studio/compatibility-of-openai-with-dashscope

Nous devons activer le service de modèle Alibaba Cloud Bailian et obtenir une API-KEY.

Tout d'abord, utilisez votre compte principal Alibaba Cloud pour accéder à la plateforme Bailian Model Studio :https://bailian.console.aliyun.com/, puis cliquez sur Connexion dans le coin supérieur droit. Après vous être connecté, cliquez sur l'icône d'engrenage ⚙️ dans le coin supérieur droit, sélectionnez Clé API et copiez-la. Si vous n'en avez pas, vous pouvez également créer une clé API :

L'activation d'Alibaba Cloud Bailian n'entraîne aucuns frais. Des frais s'appliquent uniquement aux appels de modèles (après dépassement du quota gratuit), au déploiement de modèles et à l'affinage de modèles.

] Les API sont désormais facturées au token. Heureusement, les tarifs sont plutôt abordables, nous pouvons donc commencer par acheter le forfait le moins cher :Plateforme de service de grands modèles Alibaba Cloud Bailian。

Vous pouvez également utiliser directement le forfait Coding Plan de Bailian et Ark :https://www.example.com/claude-code/coding-plan.html。

Créez la classe Agent de base :

Exemple

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

# Charger les variables d'environnement
load_dotenv()

class SimpleQAAgent:
    """Agent simple de questions-réponses"""

    def __init__(self, model: str = "qwen3-max"): # Définir le modèle par défaut sur DeepSeek
        """
Initialiser l'agent

        Arguments :
model : nom du modèle à utiliser, par défaut DeepSeek
        """

        # api_key = os.getenv("OPENAI_API_KEY")
        api_key = "sk-xxx" # Votre clé API
        base_url = "https://dashscope.aliyuncs.com/compatible-mode/v1"
        if not api_key:
            raise ValueError("Veuillez définir la variable d'environnement 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 = "Vous êtes un assistant IA utile. Veuillez répondre aux questions des utilisateurs de manière polie et précise."

    def add_to_history(self, role: str, content: str):
        """Ajouter un message à l'historique de conversation"""
        self.conversation_history.append({
            "role": role,
            "content": content
        })

        # Garder la longueur de l'historique dans la limite de 10 tours (pour éviter le dépassement de jetons)
        if len(self.conversation_history) > 10:
            self.conversation_history = self.conversation_history[-10:]

    def ask(self, question: str) -> str:
        """
Poser une question à l'Agent

        Arguments :
question: La question de l'utilisateur

        Retourne :
La réponse de l'Agent
        """

        # Ajouter la question de l'utilisateur à l'historique
        self.add_to_history("user", question)

        # Préparer la liste des messages
        messages = [
            {"role": "system", "content": self.system_prompt}
        ]
        messages.extend(self.conversation_history)

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

            # Extraire la réponse
            answer = response.choices[0].message.content

            # Ajouter la réponse de l'assistant à l'historique
            self.add_to_history("assistant", answer)

            return answer

        except Exception as e:
            error_msg = f"Erreur lors de l'appel à l'API : {str(e)}"
            print(error_msg)
            return error_msg

    def clear_history(self):
        """Effacer l'historique de conversation"""
        self.conversation_history.clear()

Créer un script de test pour tester l'agent de base :

Exemple

# test_basic_agent.py
from src.simple_agent import SimpleQAAgent

def test_basic_agent():
    """Tester l'agent Q&R de base"""
    print("=== Test de l'agent Q&R de base ===")

    # Créer l'agent
    agent = SimpleQAAgent()

    # Test Q&R
    questions = [
        "Bonjour, veuillez vous présenter",
        "Qu'est-ce que Python ?",
        "Quelle est la différence entre l'apprentissage automatique et l'intelligence artificielle ?"
    ]

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

    # Tester la cohérence de la conversation
    print("\n=== Test de cohérence de la conversation ===")
    agent.clear_history()

    # Premier tour
    q1 = "Ma couleur préférée est le bleu"
    a1 = agent.ask(q1)
    print(f"Utilisateur : {q1}")
    print(f"Assistant : {a1}")

    # Deuxième tour (doit se souvenir de la conversation précédente)
    q2 = "Quelle couleur ai-je dit être ma préférée ?"
    a2 = agent.ask(q2)
    print(f"\nUtilisateur : {q2}")
    print(f"Assistant : {a2}")

    print("\nTest terminé !")

if __name__ == "__main__":
    test_basic_agent()

Exécuter le test :

python test_basic_agent.py

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

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

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

Cet agent de base présente plusieurs limitations évidentes :

  • Ne peut répondre qu'à partir des connaissances présentes dans les données d'entraînement
  • Ne peut pas accéder aux informations en temps réel
  • Ne peut pas effectuer de calculs
  • Ne peut pas exploiter des systèmes externes

C'est exactement pourquoi nous devons ajouter des outils à l'Agent.


Ajouter l'outil de recherche

Qwen dispose d'une fonctionnalité de recherche intégrée ; passerenable_search: trueen paramètre peut activer la fonctionnalité de recherche web.

# 导入依赖与创建客户端...
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}
)

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

Agent avec outil de recherche intégré

Nous intégrons maintenant l'outil de recherche dans l'Agent. Créez le fichier agent_with_search.py dans le répertoire src :

Exemple

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

load_dotenv()


class AgentWithSearch:
    """Agent basé sur la capacité de recherche web intégrée de Qwen"""

    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("Veuillez définir la variable d'environnement OPENAI_API_KEY (clé DashScope)")

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

        self.system_prompt = """
Vous êtes un assistant IA utile.

Lorsque la question implique des informations en temps réel, des événements récents ou un contenu nécessitant une vérification des faits,
vous pouvez obtenir les dernières informations via une recherche web et indiquer dans vos réponses que les informations proviennent d'Internet.
"""


    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"Erreur : {repr(e)}"

    def interactive_chat(self):
        print("=== Agent de recherche web Qwen ===")
        print("Entrez quit / exit pour terminer la conversation")

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

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

Test de l'agent de recherche

Créez le fichier test_search_agent.py dans le répertoire racine :

Exemple

# test_search_agent.py
from src.agent_with_search import AgentWithSearch

def test_search_agent():
    agent = AgentWithSearch()

    questions = [
        "Quel temps fait-il à Pékin aujourd'hui ?",
        "Quelles sont les dernières actualités technologiques ?",
        "Où se sont déroulés les Jeux olympiques de 2024 ?",
        "Qu'est-ce que Python ?"
    ]

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

if __name__ == "__main__":
    test_search_agent()

Exécuter le test :

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

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