Qwen-Agent
Um framework para desenvolver aplicações LLM com capacidades como uso de ferramentas, planejamento e memória, baseado no modelo Qwen.
Documentação
中文 | English
💜 Qwen Chat | 🤗 Hugging Face | 🤖 ModelScope | 📑 Blog | 📖 Documentation
📊 Benchmark | 💬 WeChat (微信) | 🫨 Discord
Qwen-Agent é um framework para desenvolver aplicações de LLM baseadas nas capacidades de seguir instruções, uso de ferramentas, planejamento e memória do Qwen. Ele também inclui aplicações de exemplo, como Assistente de Navegador, Interpretador de Código e Assistente Personalizado. Atualmente, o Qwen-Agent atua como backend do Qwen Chat.
Novidades
- 🔥🔥🔥16 de fev de 2026: Qwen3.5 de código aberto. Para exemplos de uso, consulte a Demonstração do Agente Qwen3.5.
- 27 de jan de 2026: Benchmark de avaliação de agentes DeepPlanning de código aberto e adicionada a documentação do Qwen-Agent.
- 23 de set de 2025: Adicionada a Demonstração de Chamada de Ferramentas Qwen3-VL, com suporte a ferramentas como zoom, busca de imagens e busca na web.
- 23 de jul de 2025: Adicionada a Demonstração de Chamada de Ferramentas Qwen3-Coder; adicionado suporte nativo à interface de chamada de ferramentas via API, como o uso do parser de chamada de ferramentas integrado do vLLM.
- 1 de mai de 2025: Adicionada a Demonstração de Chamada de Ferramentas Qwen3 e os MCP Cookbooks.
- 18 de mar de 2025: Suporte ao campo
reasoning_content; ajuste do template de Function Call padrão, aplicável aos modelos gerais da série Qwen2.5 e ao QwQ-32B. Se você precisar usar a versão antiga do template, consulte o exemplo para passar parâmetros. - 7 de mar de 2025: Adicionada a Demonstração de Chamada de Ferramentas QwQ-32B. Ela suporta chamadas de ferramentas paralelas, de múltiplas etapas e de múltiplas rodadas.
- 3 de dez de 2024: Atualização da GUI para base Gradio 5. Observação: a GUI requer Python 3.10 ou superior.
- 18 de set de 2024: Adicionada a Demonstração Qwen2.5-Math para mostrar as capacidades de Raciocínio Integrado com Ferramentas do Qwen2.5-Math. Observação: o executor Python não é isolado em sandbox e destina-se apenas a testes locais, não a uso em produção.
Primeiros Passos
Instalação
- Instale a versão estável do PyPI:
pip install -U "qwen-agent[gui,rag,code_interpreter,mcp]"
# Or use `pip install -U qwen-agent` for the minimal requirements.
# The optional requirements, specified in double brackets, are:
# [gui] for Gradio-based GUI support;
# [rag] for RAG support;
# [code_interpreter] for Code Interpreter support;
# [mcp] for MCP support.
- Alternativamente, você pode instalar a versão de desenvolvimento mais recente a partir do código-fonte:
git clone https://github.com/QwenLM/Qwen-Agent.git
cd Qwen-Agent
pip install -e ./"[gui,rag,code_interpreter,mcp]"
# Or `pip install -e ./` for minimal requirements.
Preparação: Serviço de Modelos
Você pode usar o serviço de modelos fornecido pelo DashScope da Alibaba Cloud, ou implantar e usar seu próprio serviço de modelos com os modelos Qwen de código aberto.
-
Se você optar por usar o serviço de modelos oferecido pelo DashScope, certifique-se de definir a variável de ambiente
DASHSCOPE_API_KEYcom sua chave de API exclusiva do DashScope. -
Alternativamente, se você preferir implantar e usar seu próprio serviço de modelos, siga as instruções fornecidas no README do Qwen2 para implantar um serviço de API compatível com OpenAI. Especificamente, consulte a seção vLLM para implantação em GPU de alto throughput ou a seção Ollama para implantação local em CPU (+GPU). Para os modelos QwQ e Qwen3, é recomendado não adicionar os parâmetros
--enable-auto-tool-choicee--tool-call-parser hermes, pois o Qwen-Agent fará o parsing das saídas de ferramentas do vLLM por conta própria. Para o Qwen3-Coder, é recomendado habilitar ambos os parâmetros acima, usar o parsing de ferramentas integrado do vLLM e combinar com o uso do parâmetrouse_raw_api.
Desenvolvendo Seu Próprio Agente
O Qwen-Agent oferece componentes atômicos, como LLMs (que herdam de class BaseChatModel e vêm com function calling) e Ferramentas (que herdam de class BaseTool), além de componentes de alto nível, como Agentes (derivados de class Agent).
O exemplo a seguir ilustra o processo de criação de um agente capaz de ler arquivos PDF e utilizar ferramentas, além de incorporar uma ferramenta personalizada:
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
# Step 1 (Optional): Add a custom tool named `my_image_gen`.
@register_tool('my_image_gen')
class MyImageGen(BaseTool):
# The `description` tells the agent the functionality of this tool.
description = 'AI painting (image generation) service, input text description, and return the image URL drawn based on text information.'
# The `parameters` tell the agent what input parameters the tool has.
parameters = [{
'name': 'prompt',
'type': 'string',
'description': 'Detailed description of the desired image content, in English',
'required': True
}]
def call(self, params: str, **kwargs) -> str:
# `params` are the arguments generated by the LLM agent.
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)
# Step 2: Configure the LLM you are using.
llm_cfg = {
# Use the model service provided by DashScope:
'model': 'qwen-max-latest',
'model_type': 'qwen_dashscope',
# 'api_key': 'YOUR_DASHSCOPE_API_KEY',
# It will use the `DASHSCOPE_API_KEY' environment variable if 'api_key' is not set here.
# Use a model service compatible with the OpenAI API, such as vLLM or Ollama:
# 'model': 'Qwen2.5-7B-Instruct',
# 'model_server': 'http://localhost:8000/v1', # base_url, also known as api_base
# 'api_key': 'EMPTY',
# (Optional) LLM hyperparameters for generation:
'generate_cfg': {
'top_p': 0.8
}
}
# Step 3: Create an agent. Here we use the `Assistant` agent as an example, which is capable of using tools and reading files.
system_instruction = '''After receiving the user's request, you should:
- first draw an image and obtain the image url,
- then run code `request.get(image_url)` to download the image,
- and finally select an image operation from the given document to process the image.
Please show the image using `plt.show()`.'''
tools = ['my_image_gen', 'code_interpreter'] # `code_interpreter` is a built-in tool for executing code. For configuration details, please refer to the FAQ.
files = ['./examples/resource/doc.pdf'] # Give the bot a PDF file to read.
bot = Assistant(llm=llm_cfg,
system_message=system_instruction,
function_list=tools,
files=files)
# Step 4: Run the agent as a chatbot.
messages = [] # This stores the chat history.
while True:
# For example, enter the query "draw a dog and rotate it 90 degrees".
query = input('\nuser query: ')
# Append the user query to the chat history.
messages.append({'role': 'user', 'content': query})
response = []
response_plain_text = ''
print('bot response:')
for response in bot.run(messages=messages):
# Streaming output.
response_plain_text = typewriter_print(response, response_plain_text)
# Append the bot responses to the chat history.
messages.extend(response)
Além de usar implementações de agente integradas, como class Assistant, você também pode desenvolver sua própria implementação de agente herdando de class Agent.
O framework também fornece uma interface GUI conveniente, com suporte à implantação rápida de Demos Gradio para Agentes. Por exemplo, no caso acima, você pode iniciar rapidamente uma Demo Gradio usando o seguinte código:
from qwen_agent.gui import WebUI
WebUI(bot).run() # bot is the agent defined in the above code, we do not repeat the definition here for saving space.
Agora você pode conversar com o Agente na interface web. Consulte o diretório de exemplos para mais exemplos de uso.
FAQ
Como Usar a Ferramenta de Interpretador de Código?
Implementamos uma ferramenta de interpretador de código baseada em contêineres Docker locais. Você pode habilitar a ferramenta integrada code interpreter para seu agente, permitindo que ele escreva código de forma autônoma de acordo com cenários específicos, execute-o com segurança em um ambiente de sandbox isolado e retorne os resultados da execução.
⚠️ Observação: Antes de usar esta ferramenta, certifique-se de que o Docker esteja instalado e em execução no seu sistema operacional local. O tempo necessário para criar a imagem do contêiner pela primeira vez depende das condições da sua rede. Para instruções de instalação e configuração do Docker, consulte a documentação oficial.
Como Usar MCP?
Você pode selecionar as ferramentas necessárias no site de servidores MCP de código aberto e configurar o ambiente relevante.
Exemplo de formato de invocação 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"
]
}
}
}
Para mais detalhes, consulte o exemplo de uso do MCP
As dependências necessárias para executar este exemplo são as seguintes:
# Node.js (Download and install the latest version from the Node.js official website)
# uv 0.4.18 or higher (Check with uv --version)
# Git (Check with git --version)
# SQLite (Check with sqlite3 --version)
# For macOS users, you can install these components using Homebrew:
brew install uv git sqlite3
# For Windows users, you can install these components using winget:
winget install --id=astral-sh.uv -e
winget install git.git sqlite.sqlite
Você tem function calling (também conhecido como chamada de ferramentas)?
Sim. As classes de LLM fornecem function calling. Além disso, algumas classes de Agente também são construídas sobre a capacidade de function calling, por exemplo, FnCallAgent e ReActChat.
O template atual padrão de chamada de ferramentas suporta nativamente Chamadas de Função Paralelas.
Como passar parâmetros de LLM para o Agente?
llm_cfg = {
# The model name being used:
'model': 'qwen3-32b',
# The model service being used:
'model_type': 'qwen_dashscope',
# If 'api_key' is not set here, it will default to reading the `DASHSCOPE_API_KEY` environment variable:
'api_key': 'YOUR_DASHSCOPE_API_KEY',
# Using an OpenAI API compatible model service, such as vLLM or Ollama:
# 'model': 'qwen3-32b',
# 'model_server': 'http://localhost:8000/v1', # base_url, also known as api_base
# 'api_key': 'EMPTY',
# (Optional) LLM hyperparameters:
'generate_cfg': {
# This parameter will affect the tool-call parsing logic. Default is False:
# Set to True: when content is `<think>this is the thought</think>this is the answer`
# Set to False: when response consists of reasoning_content and content
# 'thought_in_content': True,
# tool-call template: default is nous (recommended for qwen3):
# 'fncall_prompt_type': 'nous'
# Maximum input length, messages will be truncated if they exceed this length, please adjust according to model API:
# 'max_input_tokens': 58000
# Parameters that will be passed directly to the model API, such as top_p, enable_thinking, etc., according to the API specifications:
# 'top_p': 0.8
# Using the API's native tool call interface
# 'use_raw_api': True,
}
}
Como fazer perguntas e respostas sobre documentos superlongos envolvendo 1M de tokens?
Disponibilizamos uma solução RAG rápida, bem como um agente caro, porém competitivo, para responder perguntas sobre documentos superlongos. Eles conseguiram superar modelos nativos de contexto longo em dois benchmarks desafiadores, sendo mais eficientes, e apresentam desempenho perfeito no teste de pressão "agulha no palheiro" de agulha única envolvendo contextos de 1M de tokens. Consulte o blog para detalhes técnicos.
Aplicação: BrowserQwen
O BrowserQwen é um assistente de navegador construído sobre o Qwen-Agent. Consulte sua documentação para detalhes.
Aviso Legal
O interpretador de código baseado em contêiner Docker monta apenas o diretório de trabalho especificado e implementa isolamento básico de sandbox, mas ainda deve ser usado com cautela em ambientes de produção.