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
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
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
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
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
