0Pricing
AI Agents · درس

بناء واجهات وكلاء لسطر الأوامر

argparse وclick وTyper لمعالجة وسائط CLI الخاصة بالوكلاء

بناء واجهات وكلاء لسطر الأوامر درس مجاني في AI Agents على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في AI Agents، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة AI Agents 4 دروس في المجموع.

لماذا تنشئ CLI لوكيلك؟

تجعل واجهة سطر الأوامر (CLI) وكيلك متاحًا من الطرفية، وقابلًا للتشغيل ضمن مسارات العمل، وسهل الاختبار من دون واجهة ويب. ويُنشر كثير من الوكلاء في بيئات الإنتاج كأدوات CLI.

تتضمن Python ثلاث مكتبات ممتازة لبناء واجهات CLI: argparse (من المكتبة القياسية)، وTyper، وClick.

argparse: خيار المكتبة القياسية

تأتي argparse مضمّنة في Python — ولا تتطلب تثبيتًا. استخدم ArgumentParser() لتعريف واجهتك، وadd_argument() للإعلان عن المعاملات، وparse_args() لمعالجتها.

import argparse

def main(argv=None):
    parser = argparse.ArgumentParser(
        description='AI Agent CLI — ask questions and get answers'
    )
    parser.add_argument('--query', type=str, required=True, help='The question to ask the agent')
    parser.add_argument('--model', type=str, default='gpt-4o-mini', help='OpenAI model to use (default: gpt-4o-mini)')
    args = parser.parse_args(argv)

    print(f'Querying agent with: {args.query}')
    print(f'Using model: {args.model}')

if __name__ == '__main__':
    main(['--query', 'What is the weather today?'])

تشغيل CLI باستخدام argparse والتعليمات التلقائية

تنشئ argparse رسالة --help تلقائيًا من تعريفات المعاملات لديك. شغّل python agent_cli.py --help لعرضها. وتنتج المعاملات المطلوبة المفقودة رسائل خطأ مفيدة تلقائيًا.

# How users invoke the CLI:
# python agent_cli.py --query 'What is the weather in Paris?'
# python agent_cli.py --query 'Summarize this' --model gpt-4o
# python agent_cli.py --help

# Auto-generated help output:
# usage: agent_cli.py [-h] --query QUERY [--model MODEL]
#
# AI Agent CLI -- ask questions and get answers
#
# options:
#   -h, --help     show this help message and exit
#   --query QUERY  The question to ask the agent
#   --model MODEL  OpenAI model to use (default: gpt-4o-mini)

print('argparse generates help text automatically from your definitions')

Typer: واجهة سطر أوامر حديثة مع تلميحات الأنواع

تنشئ Typer واجهات سطر الأوامر من تلميحات أنواع Python، مع تعليمات برمجية متكررة أقل مقارنةً بـ argparse. ثبّتوها باستخدام pip install typer. وتتحول معاملات الدوال تلقائيًا إلى وسائط لسطر الأوامر.

# pip install typer
import typer

app = typer.Typer(help='AI Agent CLI')

@app.command()
def ask(
    query: str = typer.Option(..., '--query', '-q', help='Question for the agent'),
    model: str = typer.Option('gpt-4o-mini', '--model', '-m', help='Model to use'),
    verbose: bool = typer.Option(False, '--verbose', '-v', help='Show reasoning steps')
):
    typer.echo(f'Query: {query}')
    typer.echo(f'Model: {model}')
    if verbose:
        typer.echo('Verbose mode enabled')
    # result = run_agent(query, model=model, verbose=verbose)

if __name__ == '__main__':
    app()

Click: إطار عمل لواجهات سطر الأوامر قائم على المزخرفات

تستخدم Click المزخرفات لتعريف أوامر وخيارات سطر الأوامر. ثبّتوها باستخدام pip install click. وتوفر ميزات متقدمة مثل مجموعات الأوامر والمطالبات وأشرطة التقدم.

# pip install click
import click

@click.command()
@click.option('--query', '-q', required=True, help='Question for the agent')
@click.option('--model', '-m', default='gpt-4o-mini', help='LLM model to use')
@click.option('--output', '-o', type=click.Path(), help='Save output to file')
def ask(query: str, model: str, output: str):
    click.echo(f'Sending: {query}')
    # result = run_agent(query, model=model)
    # click.echo(result['answer'])

    if output:
        with open(output, 'w') as f:
            f.write('result["answer"]')
        click.echo(f'Saved to {output}')

if __name__ == '__main__':
    ask()

إضافة الأوامر الفرعية

مع توسع وكيلكم، نظّموا وظائفه في أوامر فرعية مثل agent ask وagent search وagent history. يدعم كل من Click وTyper مجموعات الأوامر الفرعية بشكل أصلي.

import typer

app = typer.Typer(help='AI Research Agent')

@app.command()
def ask(query: str = typer.Argument(..., help='Question to ask')):
    'Ask the agent a question'
    typer.echo(f'Asking: {query}')

@app.command()
def search(topic: str = typer.Argument(..., help='Topic to research')):
    'Search and summarize a topic'
    typer.echo(f'Researching: {topic}')

@app.command()
def history(limit: int = typer.Option(10, help='Number of past queries to show')):
    'Show recent query history'
    typer.echo(f'Showing last {limit} queries')

if __name__ == '__main__':
    app()

# Usage: python agent.py ask 'What is AI?'
#        python agent.py search 'Python async'
#        python agent.py history --limit 5

القراءة من stdin للإدخال عبر الأنابيب

يمكن استخدام وكيل سطر أوامر يقرأ من stdin ضمن أنابيب Unix. استخدموا sys.stdin أو نوع الوسيط stdin في Click لقبول المحتوى المُمرَّر عبر الأنابيب.

import sys
import click

@click.command()
@click.argument('input', default='-', type=click.File('r'))
@click.option('--task', default='summarize', help='Task: summarize, translate, or analyze')
def process(input, task: str):
    text = input.read().strip()
    if not text:
        click.echo('Error: no input provided', err=True)
        raise SystemExit(1)

    click.echo(f'Task: {task}')
    click.echo(f'Input length: {len(text)} chars')
    # result = agent.run(task=task, content=text)
    # click.echo(result)

# Usage:
# echo 'Hello world' | python agent_cli.py --task translate
# cat article.txt | python agent_cli.py --task summarize
if __name__ == '__main__':
    process()

مؤشرات التقدم للمهام الطويلة

قد تستغرق مهام الوكيل عدة ثوانٍ. اعرضوا مؤشر انتظار أو رسالة تقدم حتى يعرف المستخدمون أن الوكيل يعمل. يوفر Typer دعمًا مدمجًا للتقدم من خلال مكتبة rich.

import typer
from time import sleep

app = typer.Typer()

@app.command()
def research(topic: str = typer.Argument(...)):
    typer.echo(f'Researching: {topic}')

    with typer.progressbar(range(5), label='Gathering sources') as progress:
        for i in progress:
            sleep(0.5)  # simulate work

    typer.echo('Done!')
    typer.echo('Result: [mocked research result]')

# Or with a spinner from rich:
# from rich.console import Console
# console = Console()
# with console.status('Thinking...'):
#     result = agent.run(topic)
# console.print(result)

if __name__ == '__main__':
    app()

تنسيق المخرجات: JSON مقابل النص العادي

اسمحوا للمستخدمين بالاختيار بين تنسيقات المخرجات القابلة للقراءة من قِبل البشر والقابلة للمعالجة آليًا. ويُعد الخيار --json مفيدًا لتمرير مخرجات الوكيل إلى أدوات أخرى.

import json
import typer

app = typer.Typer()

@app.command()
def ask(
    query: str = typer.Argument(...),
    as_json: bool = typer.Option(False, '--json', help='Output as JSON')
):
    result = {
        'query': query,
        'answer': 'Paris is the capital of France.',
        'confidence': 0.98,
        'sources': ['https://wikipedia.org/France']
    }

    if as_json:
        typer.echo(json.dumps(result, indent=2))
    else:
        typer.echo(f'Answer: {result["answer"]}')
        typer.echo(f'Sources: {', '.join(result["sources"])}')

if __name__ == '__main__':
    app()

معالجة الأخطاء في وكلاء سطر الأوامر

اخرجوا برمز غير صفري عند حدوث أخطاء حتى تتمكن البرامج النصية المستدعية من اكتشاف حالات الفشل. استخدموا typer.echo(..., err=True) أو click.echo(..., err=True) لكتابة رسائل الخطأ إلى stderr.

import sys
import typer

app = typer.Typer()

@app.command()
def ask(query: str = typer.Argument(...)):
    try:
        # result = agent.run(query)
        result = {'status': 'ok', 'answer': 'Result here'}

        if result['status'] != 'ok':
            typer.echo(f'Agent error: {result.get("error")}', err=True)
            raise typer.Exit(code=1)

        typer.echo(result['answer'])

    except Exception as e:
        typer.echo(f'Unexpected error: {e}', err=True)
        raise typer.Exit(code=2)

# Exit codes: 0 = success, 1 = agent error, 2 = unexpected error
# These allow shell scripts to handle failures:
# python agent.py 'query' || echo 'Agent failed'
if __name__ == '__main__':
    app()

تحويل وكيلكم إلى أداة CLI قابلة للتثبيت

استخدموا نقطة إدخال في pyproject.toml لإتاحة وكيلكم كأمر على مستوى النظام. بعد تنفيذ pip install -e .، يمكن للمستخدمين تشغيل myagent ask 'question' مباشرةً من أي مجلد.

# pyproject.toml
# [project]
# name = 'myagent'
# version = '0.1.0'
# dependencies = ['typer', 'openai', 'httpx']
#
# [project.scripts]
# myagent = 'myagent.cli:app'

# After pip install -e .:
# myagent ask 'What is AI?'
# myagent search 'Python tutorials'
# myagent --help

# This is how production CLI agents like 'gh', 'poetry', and 'ruff' work
print('Entry points turn your Python module into a system CLI command')

اختبار المعرفة: واجهات وكلاء CLI

اختبروا مدى فهمكم لبناء واجهات سطر الأوامر للوكلاء.

مراجعة: بناء واجهات وكلاء CLI

أصبح بإمكانكم الآن بناء واجهات احترافية لسطر الأوامر لوكلائكم:

  • استخدموا argparse لواجهات CLI الخالية من التبعيات (من المكتبة القياسية)
  • استخدموا typer لواجهات CLI واضحة تعتمد على تلميحات الأنواع
  • استخدموا click لواجهات CLI غنية بالميزات وقائمة على المزخرفات
  • نظّموا الوكلاء الكبيرة باستخدام الأوامر الفرعية
  • ادعموا stdin للتكامل مع الأنابيب
  • استخدموا خيارات --json للمخرجات القابلة للمعالجة آليًا
  • اخرجوا برموز غير صفرية عند حدوث الأخطاء لضمان التوافق مع البرامج النصية للصدفة

الأسئلة الشائعة

هل درس «بناء واجهات وكلاء لسطر الأوامر» مجاني؟

نعم — نص درس «بناء واجهات وكلاء لسطر الأوامر» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة AI Agents، انتقل إلى CoddyKit PRO. تتضمن دورة AI Agents 4 دروس في المجموع.

ماذا ستتعلم في «بناء واجهات وكلاء لسطر الأوامر»؟

argparse وclick وTyper لمعالجة وسائط CLI الخاصة بالوكلاء تتمرن على AI Agents مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ AI Agents؟

لا تُشترط خبرة سابقة. AI Agents على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «بناء واجهات وكلاء لسطر الأوامر»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس AI Agents هذا؟

نعم. كل درس في AI Agents يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. بناء واجهات وكلاء لسطر الأوامر
  2. وكلاء تفاعليون بنمط REPL
  3. تحليل الوسائط ونص التعليمات
  4. تدفق المخرجات في وكلاء CLI
← العودة إلى AI Agents