Python SDK
qwen-code-sdk
qwen-code-sdk — экспериментальный Python SDK для Qwen Code. Версия v1 работает с
существующим CLI-протоколом stream-json и сохраняет минимальную и легко тестируемую
поверхность транспорта.
Область применения
- Имя пакета:
qwen-code-sdk - Путь импорта:
qwen_code_sdk - Требования к среде выполнения: Python
>=3.10 - Зависимость от CLI: в v1 требуется внешний исполняемый файл
qwen - Транспорт: только через процессы
- Не входит в v1: транспорт ACP, встроенные в SDK MCP-серверы
Установка
pip install qwen-code-sdkЕсли qwen отсутствует в PATH, передайте path_to_qwen_executable явно.
Быстрый старт
import asyncio
from qwen_code_sdk import is_sdk_result_message, query
async def main() -> None:
result = query(
"Explain the repository structure.",
{
"cwd": "/path/to/project",
"path_to_qwen_executable": "qwen",
},
)
async for message in result:
if is_sdk_result_message(message):
print(message["result"])
asyncio.run(main())Доступный API
Точки входа верхнего уровня
query(prompt, options=None) -> Queryquery_sync(prompt, options=None) -> SyncQuery
Параметр prompt поддерживает:
strдля одношаговых запросовAsyncIterable[SDKUserMessage]для многошаговых потоков
Query
- Асинхронный итератор по сообщениям SDK
close()interrupt()set_model(model)set_permission_mode(mode)supported_commands()mcp_server_status()get_session_id()is_closed()
QueryOptions
Поддерживаемые опции в v1:
cwdmodelpath_to_qwen_executablepermission_modecan_use_toolenvsystem_promptappend_system_promptdebugmax_session_turnscore_toolsexclude_toolsallowed_toolsauth_typeinclude_partial_messagesresumecontinue_sessionsession_idtimeoutmcp_serversstderr
Приоритет аргументов сессии фиксирован:
resumecontinue_sessionsession_id
Обработка разрешений
Когда CLI отправляет управляющий запрос can_use_tool, SDK направляет его через
can_use_tool(tool_name, tool_input, context).
- Поведение по умолчанию: запрет
- Таймаут по умолчанию: 60 секунд
- Действие при таймауте: запрет
- Исключения в колбэке: преобразуются в запрет с сообщением об ошибке
- Контекст колбэка:
cancel_event,suggestionsиblocked_path - Контракт колбэка:
can_use_toolдолжен быть асинхронным и принимать 3 позиционных аргумента;stderrдолжен принимать 1 позиционный строковый аргумент
Модель ошибок
ValidationError: некорректные опции, невалидные UUID, неподдерживаемые комбинацииControlRequestTimeoutError: истекло время ожидания инициализации, прерывания или другого управляющего запросаProcessExitError: CLI завершился с ненулевым кодом выходаAbortError: управляющий запрос или сессия были отменены
Устранение неполадок
Если SDK не может запустить CLI:
- Убедитесь, что
qwen --versionработает в целевой среде - Передайте
path_to_qwen_executable, если ваша оболочка используетnvm,pyenvили другую нестандартную настройкуPATH - Используйте
debug=Trueилиstderr=print, чтобы выводить stderr CLI при отладке
Если вызовы управления сессией завершаются по таймауту:
- Убедитесь, что целевая версия
qwenподдерживает--input-format stream-json - Увеличьте
timeout.control_request - Убедитесь, что скрипт-обёртка не поглощает stdout/stderr
Интеграция с репозиторием
Вспомогательные команды на уровне репозитория:
npm run test:sdk:pythonnpm run lint:sdk:pythonnpm run typecheck:sdk:pythonnpm run smoke:sdk:python -- --qwen qwen
Реальное E2E-тестирование (Smoke)
Для реальной проверки в среде выполнения (фактический процесс qwen + реальный вызов модели) запустите команду из
корня репозитория. npm-хелпер использует python3, поэтому убедитесь, что он указывает на
интерпретатор Python >=3.10:
npm run smoke:sdk:python -- --qwen qwenЭтот скрипт выполняет:
- асинхронный одношаговый запрос
- асинхронный управляющий поток (
supported_commands, обновление режима разрешений) - синхронный запрос
query_sync
Скрипт выводит JSON и возвращает ненулевой код при ошибке.