Source code for airflow.providers.common.ai.example_dags.example_agent_skills

# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
"""Example DAGs demonstrating Agent Skills with ``AgentOperator``.

`Agent Skills <https://agentskills.io>`__ are ``SKILL.md`` bundles the model
discovers and loads on demand (progressive disclosure). They are passed to the
agent as an ``AgentSkillsToolset`` in the operator's ``toolsets=`` list. Skill
sources are resolved when the task runs, on the worker (not while the DAG
processor parses the file), so a Git token resolved from an Airflow connection
is never baked into the serialized DAG.

These DAGs need the optional ``skills`` extra::

    pip install "apache-airflow-providers-common-ai[skills]"
"""

from __future__ import annotations

from pathlib import Path

from airflow.providers.common.ai.operators.agent import AgentOperator
from airflow.providers.common.ai.skills import GitSkills
from airflow.providers.common.ai.toolsets.skills import AgentSkillsToolset
from airflow.providers.common.ai.toolsets.sql import SQLToolset
from airflow.providers.common.compat.sdk import dag

# Skills ship next to this DAG file; resolve relative to __file__ so the path
# holds regardless of the dag-processor's working directory.
[docs] SKILLS_DIR = Path(__file__).parent / "skills"
# --------------------------------------------------------------------------- # 1. Local filesystem skills (a directory of SKILL.md bundles) # --------------------------------------------------------------------------- # [START howto_operator_agent_skills_local] @dag(tags=["example"])
[docs] def example_agent_skills_local(): AgentOperator( task_id="reporter", prompt="How many orders did our top 5 customers place last month?", llm_conn_id="pydanticai_default", system_prompt="You are a data analyst. Consult your skills before writing SQL.", toolsets=[ AgentSkillsToolset(sources=[str(SKILLS_DIR)]), SQLToolset( db_conn_id="postgres_default", allowed_tables=["customers", "orders"], max_rows=50, ), ], )
# [END howto_operator_agent_skills_local] example_agent_skills_local() # --------------------------------------------------------------------------- # 2. Remote skills from a Git repo, credentials from an Airflow connection # --------------------------------------------------------------------------- # ``github_skills`` is a git connection (HTTPS token in the password, or an SSH # key in the extra). The DAG only references it by id; no credential is inlined. # [START howto_operator_agent_skills_git] @dag(tags=["example"])
[docs] def example_agent_skills_git(): AgentOperator( task_id="support_agent", prompt="Summarize our refund policy and apply it to order 12345.", llm_conn_id="pydanticai_default", system_prompt="You are a support agent. Load the relevant skill before answering.", toolsets=[ AgentSkillsToolset( sources=[ GitSkills( repo_url="https://github.com/my-org/agent-skills", conn_id="github_skills", path="skills", ), ], ), ], )
# [END howto_operator_agent_skills_git] example_agent_skills_git()

Was this entry helpful?