Framework de développement d'agents intelligents basé sur le modèle Qwen, prenant en charge l'appel de fonctions, l'interpréteur de code, le RAG et l'extension de navigateur.
Présentation détaillée du projet Qwen-Agent
Aperçu du projet
Qwen-Agent est un framework de développement d'agents intelligents basé sur le modèle de langage étendu Qwen, spécialement conçu pour développer des applications LLM dotées de capacités de suivi des instructions, d'utilisation d'outils, de planification et de mémorisation. Ce projet est développé et maintenu par l'équipe Qwen d'Alibaba et sert actuellement de support backend au service de chat Qwen (Qwen Chat).
Caractéristiques principales
1. Prise en charge des agents intelligents multifonctionnels
- Assistant de navigateur (Browser Assistant) : Navigation et manipulation de pages web
- Interpréteur de code (Code Interpreter) : Exécution et analyse de code Python
- Assistant personnalisé (Custom Assistant) : Personnalisation d'agents intelligents
- Augmentation de la récupération RAG (RAG Retrieval Augmentation) : Questions-réponses sur les documents et recherche de connaissances
- Extension Chrome : Assistant intelligent sous forme de plugin de navigateur
2. Intégration de technologies avancées
- Appel de fonction (Function Calling) : Prise en charge de l'intégration d'outils et d'API
- Prise en charge du protocole MCP (MCP Protocol Support) : Compatibilité avec le protocole de contexte de modèle
- Appel d'outils parallèle (Parallel Tool Calling) : Utilisation d'outils en plusieurs étapes et à plusieurs reprises
- Capacité de raisonnement (Reasoning Ability) : Intégration de modèles de raisonnement tels que QwQ-32B
Dernières mises à jour
- 18 mars 2025 : Prise en charge du champ
reasoning_content
, ajustement du modèle d'appel de fonction par défaut - 7 mars 2025 : Ajout d'une démonstration d'appel d'outils QwQ-32B, prise en charge des appels parallèles et en plusieurs étapes
- 3 décembre 2024 : Mise à niveau de l'interface graphique vers Gradio 5, nécessite Python 3.10+
- 18 septembre 2024 : Ajout d'une démonstration Qwen2.5-Math, présentant la capacité de raisonnement de l'intégration d'outils
Installation
Installation de la version stable
pip install -U "qwen-agent[gui,rag,code_interpreter,mcp]"
# Ou installation minimale
pip install -U qwen-agent
Installation de la version de développement
git clone https://github.com/QwenLM/Qwen-Agent.git
cd Qwen-Agent
pip install -e ./"[gui,rag,code_interpreter,mcp]"
Dépendances optionnelles
[gui]
: Prise en charge de l'interface graphique Gradio[rag]
: Fonctionnalité d'augmentation de la récupération RAG[code_interpreter]
: Fonctionnalité d'interpréteur de code[mcp]
: Prise en charge du protocole MCP
Configuration du service de modèle
Méthode 1 : Utilisation du service DashScope
llm_cfg = {
'model': 'qwen-max-latest',
'model_server': 'dashscope',
# 'api_key': 'YOUR_DASHSCOPE_API_KEY',
'generate_cfg': {
'top_p': 0.8
}
}
Méthode 2 : Auto-déploiement du service de modèle
llm_cfg = {
'model': 'Qwen2.5-7B-Instruct',
'model_server': 'http://localhost:8000/v1',
'api_key': 'EMPTY',
}
Architecture des composants principaux
Composants de base
- BaseChatModel : Classe de base LLM, prend en charge l'appel de fonction
- BaseTool : Classe de base d'outil, extensible pour des fonctionnalités personnalisées
- Agent : Classe de base d'agent intelligent, prend en charge la personnalisation par héritage
Composants avancés
- Assistant : Agent intelligent d'assistant général
- FnCallAgent : Agent intelligent d'appel de fonction
- ReActChat : Agent intelligent de dialogue d'action de raisonnement
Exemples d'applications pratiques
Création d'un agent intelligent d'outil personnalisé
import pprint
import urllib.parse
import json5
from qwen_agent.agents import Assistant
from qwen_agent.tools.base import BaseTool, register_tool
from qwen_agent.utils.output_beautify import typewriter_print
# Étape 1 : Ajouter un outil personnalisé
@register_tool('my_image_gen')
class MyImageGen(BaseTool):
description = 'Service de peinture IA (génération d'images), entrez une description textuelle et renvoyez l'URL de l'image dessinée en fonction des informations textuelles.'
parameters = [{
'name': 'prompt',
'type': 'string',
'description': 'Description détaillée du contenu d'image souhaité, en anglais',
'required': True
}]
def call(self, params: str, **kwargs) -> str:
prompt = json5.loads(params)['prompt']
prompt = urllib.parse.quote(prompt)
return json5.dumps(
{'image_url': f'https://image.pollinations.ai/prompt/{prompt}'},
ensure_ascii=False)
# Étape 2 : Configurer LLM
llm_cfg = {
'model': 'qwen-max-latest',
'model_server': 'dashscope',
'generate_cfg': {
'top_p': 0.8
}
}
# Étape 3 : Créer un agent intelligent
system_instruction = '''Après avoir reçu la demande de l'utilisateur, vous devez :
- d'abord dessiner une image et obtenir l'URL de l'image,
- puis exécuter le code `request.get(image_url)` pour télécharger l'image,
- et enfin sélectionner une opération d'image dans le document fourni pour traiter l'image.
Veuillez afficher l'image en utilisant `plt.show()`.'''
tools = ['my_image_gen', 'code_interpreter']
files = ['./examples/resource/doc.pdf']
bot = Assistant(llm=llm_cfg,
system_message=system_instruction,
function_list=tools,
files=files)
# Étape 4 : Exécuter le chat de l'agent intelligent
messages = []
while True:
query = input('\nuser query: ')
messages.append({'role': 'user', 'content': query})
response = []
response_plain_text = ''
print('bot response:')
for response in bot.run(messages=messages):
response_plain_text = typewriter_print(response, response_plain_text)
messages.extend(response)
Lancer l'interface utilisateur Web
from qwen_agent.gui import WebUI
WebUI(bot).run()
Intégration du protocole MCP
Exemple de configuration du serveur MCP
{
"mcpServers": {
"memory": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-memory"]
},
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/allowed/files"]
},
"sqlite": {
"command": "uvx",
"args": [
"mcp-server-sqlite",
"--db-path",
"test.db"
]
}
}
}
Exigences de l'environnement de dépendance
- Node.js (dernière version)
- uv 0.4.18 ou version ultérieure
- Git
- SQLite
Capacité de questions-réponses sur les documents RAG
Le projet fournit une solution RAG rapide, ainsi qu'un agent intelligent compétitif pour les documents très longs, qui surpasse les modèles de contexte natifs dans deux benchmarks difficiles et obtient des résultats parfaits dans un test de stress unique de "recherche d'une aiguille dans une botte de foin" impliquant un contexte de 1 million de tokens.
Assistant de navigateur BrowserQwen
BrowserQwen est un assistant de navigateur basé sur Qwen-Agent, qui offre des capacités de navigation, de manipulation et d'extraction d'informations sur le web.
Caractéristiques et avantages techniques
- Conception modulaire : Composants atomiques, faciles à étendre et à personnaliser
- Prise en charge de plusieurs modèles : Compatible avec les différentes versions des modèles de la série Qwen
- Riche écosystème d'outils : Plusieurs outils pratiques intégrés
- Déploiement flexible : Prise en charge des services cloud et du déploiement local
- Maintenance active : Mises à jour et améliorations de fonctionnalités continues
Liens vers les ressources pertinentes
- Dépôt GitHub : https://github.com/QwenLM/Qwen-Agent
- Documentation officielle : https://qwen.readthedocs.io/
- Expérience en ligne : https://chat.qwen.ai/
- Blog technique : https://qwenlm.github.io/blog/qwen-agent-2405/
- Hugging Face : https://huggingface.co/Qwen
- ModelScope : https://modelscope.cn/organization/qwen
Conclusion
Qwen-Agent est un framework de développement d'agents intelligents puissant et facile à utiliser, qui fournit aux développeurs une chaîne d'outils complète pour construire des applications LLM complexes. Qu'il s'agisse d'un simple chatbot ou d'un assistant intelligent multifonctionnel complexe, il peut être rapidement mis en œuvre et déployé grâce à ce framework.