
sidebar.wechat

sidebar.feishu
sidebar.chooseYourWayToJoin

sidebar.scanToAddConsultant
AskTable is redefining the boundary of AI Agent capabilities. The newly introduced Skill system transforms agents from fixed capability collections into intelligent bodies that can dynamically invoke professional skills based on scenarios. This article deeply analyzes this system's architecture design and implementation principles.
Traditional AI agents typically compile all capabilities into system prompts or tool lists:
┌─────────────────────────────────────────────────────────────┐
│ AskTable Skill System │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ Skill 1 │ │ Skill 2 │ │ Skill N │ ← Project-level Skill Library │
│ │ Sales analysis│ │ Financial report│ │ User profiling│ │
│ └────┬────┘ └────┬────┘ └────┬────┘ │
│ │ │ │ │
│ └──────────────┼──────────────┘ │
│ ▼ │
│ ┌─────────────────────┐ │
│ │ Skill Loader │ ← Three-layer loading mechanism │
│ │ explicit > agent > project │
│ └─────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────┐ │
│ │ activate_skill() │ ← On-demand activation │
│ │ Dynamic tool registration │ │
│ └─────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
Core idea: Transform skills from compile-time decisions to runtime selections.
Skill's data model is clean and efficient:
class SkillModel(Base):
id: UUID # Skill unique identifier
project_id: str # Project affiliation
name: str # Skill name
description: str # Skill description (for agent understanding)
content: str # Skill instruction content
created_at: datetime
modified_at: datetime
Design points:
project_id implements project-level isolationcontent is plain text storing skill instructions (similar to system prompt fragments)Skills associate with Data Agents and Conversations via skill_ids:
# Data Agent association
class DataAgentModel:
skill_ids: list[str] # List of skills available to this Agent
# Conversation association
class ConversationModel:
skill_ids: list[str] # List of skills available to this conversation
Skill loading follows priority order:
| Priority | Source | Description |
|---|---|---|
| 1 | explicit | Explicitly passed skills |
| 2 | agent | Skills associated with conversation's Data Agent |
| 3 | project | Project-level default skills |
The core is the activate_skill tool, which allows agents to activate skills on demand during conversations:
async def activate_skill(
skill_name: Annotated[str, Field(description="Skill name to activate")]
) -> str:
"""Activate specified skill, return complete skill instructions."""
if skill_name not in skill_map:
return f"Skill '{skill_name}' does not exist. Available: {available_skills}"
return skill_map[skill_name]
Workflow:
User question → Agent reasoning → Judge need for professional capability → Call activate_skill → Get skill instructions → Continue execution
When an agent loads skills, system prompts include available skill catalog:
Available skills:
- Sales analysis: Analyze sales data, identify trends and anomalies
- Financial report: Generate standard financial statements and analysis
- User profiling: Build user characteristics and behavior analysis
This allows agents to understand when to invoke skills, not just passively respond.
System introduced skill_editor conversation type:
class ConversationType(str, Enum):
chat = "chat" # Regular data analysis conversation
skill_editor = "skill_editor" # Skill editing conversation
Skill Editor is equipped with exclusive tools:
| Tool | Function |
|---|---|
read_skill | Read skill content |
update_skill_desc | Update skill description |
update_skill_content | Update skill instructions |
edit_skill_content | AI-assisted skill content editing |
Skill Editor's highlight is AI-assisted optimization capability:
User: This is a sales data analysis skill, help me improve it
AI: [Analyze existing skill content] →
[Identify missing scenarios] →
[Generate enhancement suggestions] →
[Update skill content]
Agents can optimize skills through conversation, rather than directly editing JSON or text.
Requirement: Enable AI Agent to have financial industry professional terminology and reporting standards.
Solution:
# Financial Report Skill
## Report Standards
- Use standard financial terminology (EBITDA, ROE, ROA, etc.)
- Follow regulatory disclosure formats
- Auto-calculate YoY, QoQ growth rates
## Analysis Framework
1. Profitability analysis
2. Solvency analysis
3. Operating efficiency analysis
Requirement: Different customers have different analysis needs for the same data.
Solution:
skill_ids combination# Project A's Agent
skill_ids = ["sales_common_analysis", "retail_customerA_exclusive"]
# Project B's Agent
skill_ids = ["sales_common_analysis", "manufacturing_customerB_exclusive"]
Skill content stored in database supports:
modified_at)Skill loading logic separated through three layers:
View layer → Service layer → Repository layer → Database
Easy to extend later (e.g., Git storage, external skill marketplace).
type field has default value "chat":
type: Mapped[str] = mapped_column(String(50), nullable=False, default="chat")
Existing conversations unaffected.
Skills implement complete isolation via project_id:
AskTable Skill system has similarities with MCP (Model Context Protocol), but different positioning:
| Dimension | MCP | AskTable Skill |
|---|---|---|
| Positioning | Protocol-level standard | Application-level implementation |
| Granularity | Tool/API | Natural language instructions |
| Management | External service | Built-in database |
| Usage | Static registration | Dynamic activation |
| Applicable scenario | System integration | Domain knowledge |
Simply put:
AskTable Skill system represents a new paradigm for agent capability expansion:
Core philosophy: Capabilities aren't fixed, but assembled on demand.
Three major characteristics:
Applicable scenarios:
As the Skill system matures, AskTable is evolving from "general-purpose data analysis tool" to "customizable domain expert platform."
sidebar.noProgrammingNeeded
sidebar.startFreeTrial