Content
<div align="center">
# 🚀 DAT (Data Ask Tool)
**Enterprise-level AI tool for conversing with data in natural language**
*Dating with your data*
[](https://github.com/hexinfo/dat/releases/latest)
[](https://github.com/hexinfo/dat)
[](https://github.com/hexinfo/dat/releases/latest)
[](https://github.com/hexinfo/dat/blob/main/LICENSE)
[](https://openjdk.java.net/projects/jdk/17/)
[](https://maven.apache.org/)
[](https://deepwiki.com/hexinfo/dat)
[](https://zread.ai/hexinfo/dat)

</div>
---
> **[🇬🇧 English Version](./README-EN.md)**
---
## 🎯 Project Vision
> We are entering a new era of generative artificial intelligence, where **language is the interface, and data is the fuel**.
DAT aims to solve the last mile problem of enterprise data query - allowing business personnel to directly converse with databases in natural language, without the need to write complex SQL queries. Through a pre-modeled semantic layer, DAT ensures that AI not only expresses confidently but also correctly.
DAT's core driving force does not solely come from the intelligence explosion of large language models but from the Askdata Agent workflow we designed for it.
Everything we do is essentially exchanging for something crucial in the real business world - the result's **"high quality"** and **"certainty"** - with `"more accurate and complete knowledge"` (the current main focus of development), `"more computing steps"`, and `"longer thinking time"`.
## ✨ Core Features
### 🏗️ Enterprise-level Architecture Design
- **🔌 Pluggable SPI Architecture** - Supports flexible expansion of multiple databases, LLMs, and embedded models
- **🏭 Factory Mode Implementation** - Standardized component creation and management mechanism
- **📦 Modular Design** - Clear separation of responsibilities, easy to maintain and expand
### 🗃️ Multi-Database Support
- **MySQL** - Complete support, including connection pool and dialect conversion
- **PostgreSQL** - Enterprise-level database support
- **Oracle** - Traditional enterprise database compatibility
- **More databases** - Easily extended through SPI mechanism
### 🤖 Intelligent Semantic SQL Generation
- **Natural Language Understanding** - Semantic parsing based on LLM
- **SQL Dialect Conversion** - Automatic adaptation to different database syntax
- **Semantic Model Binding** - Ensures query accuracy through predefined models
### 📊 Rich Semantic Modeling
- **Entities** - Primary key, foreign key relationship definition
- **Dimensions** - Time, classification, enumeration dimension support
- **Measures** - Aggregation function, calculation field definition
- **YAML Configuration** - Intuitive model definition method
### 🔍 Vectorized Retrieval Enhancement
- **Content Storage** - SQL question and answer pairs, synonyms, business knowledge vectorization
- **Semantic Retrieval** - Intelligent matching based on Embedding models
- **Multi-Storage Backends** - DuckDB, Weaviate, PGVector, and other storage options
---
## 🏗️ System Architecture
```
┌─────────────────────────────────────────────────────────────┐
│ DAT Framework │
├─────────────────────────────────────────────────────────────┤
│ 🎯 DAT Language (Creation Layer) │
│ ├── 📝 Semantic Model Definition (YAML) │
│ ├── 🗃️ Data Model Configuration │
│ └── 🤖 Intelligent Agent Configuration │
├─────────────────────────────────────────────────────────────┤
│ ⚙️ DAT Engine (Execution Layer) │
│ ├── 🔤 Natural Language Understanding │ 📊 Semantic SQL Generation │ 🗄️ Data Query Execution │
│ ├── 🧠 LLM Call Management │ 🔍 Vector Retrieval Enhancement │ 📈 Result Formatting │
│ └── 🔌 SPI Component Management │ 🏭 Factory Mode Creation │ ⚡ Cache Optimization │
└─────────────────────────────────────────────────────────────┘
```
- 1. DAT CLI is used for local development, unit testing, and debugging. It allows development of DAT intelligent question-answering projects locally through an IDE (vscode, idea, or eclipse), transforming the prompt (context) project into a data project.
Therefore, the development mode of DAT Project naturally fits with AI Coding tools (such as Cursor, Claude Code, etc.), helping to achieve a more intelligent and automated intelligent question-answering development process.
- 2. DAT is not a platform but a `framework`; secondary developers can develop their own Web UI based on `dat-sdk`, which can be a web IDE, a drag-and-drop workflow, a list, or other interactive methods; or provide `OpenAPI` or `MCP` services.
- 3. This mode allows data engineers or data analysts to develop intelligent question-answering applications like software engineers develop applications.
---
## 🚀 Quick Start
### 📋 Environment Requirements
- **Java 17+** - Recommended to use OpenJDK
- **Database** - MySQL / PostgreSQL / Oracle / DuckDB (choose one)
- **LLM API** - OpenAI / Anthropic / Ollama / Gemini, etc.
### ⚡ 5-Minute Quick Experience
#### 1️⃣ Install DAT CLI
##### 🐧 Linux/macOS System
```bash
# Download the latest version
wget https://github.com/hexinfo/dat/releases/latest/download/dat-cli-0.7.2-full.tar.gz
# Unzip and configure environment variables
tar -xzf dat-cli-x.x.x.tar.gz
mv dat-cli-x.x.x dat-cli
export PATH=$PATH:$(pwd)/dat-cli/bin
```
##### 🪟 Windows System
1. Visit the [Releases page](https://github.com/hexinfo/dat/releases/latest)
2. Download the `dat-cli-x.x.x.tar.gz` file
3. Unzip using WinRAR, 7-Zip, or Windows built-in extraction tools
4. Add the unzipped `dat-cli\bin` directory to the system PATH environment variable:
- Right-click "This PC" → "Properties" → "Advanced system settings"
- Click "Environment Variables" → Edit "Path" variable
- Add the DAT CLI bin directory path
#### 2️⃣ Initialize Project
```bash
# Create a new DAT project
dat init
# Follow the prompts to input project information
# Project name: my-dat-project
# Description: My first intelligent question-answering project
# Database type: mysql
```

> 💡 <strong style="color: orange;">Tip:</strong> If you don't have an existing database to access or just want to query local CSV data, you can choose `duckdb` as the database when initializing the project. It will create a local embedded data storage with the 'duckdb' prefix in the project's `.dat` directory by default.
#### 3️⃣ Configure Data Source
Edit the generated `dat_project.yaml`:
```yaml
version: 1
name: my-dat-project
description: My first intelligent question-answering project
# Database configuration
db:
provider: mysql
configuration:
url: jdbc:mysql://localhost:3306/mydb
username: your_username
password: your_password
timeout: 1 min
# LLM configuration
llm:
provider: openai
configuration:
api-key: your-openai-api-key
model-name: gpt-4
base-url: https://api.openai.com/v1
# Embedding model configuration
embedding:
provider: bge-small-zh-v15-q
```
> 💡 <strong style="color: orange;">Tip:</strong> For more project configurations, please refer to `dat_project.yaml.template` in the project.
> 💡 <strong style="color: orange;">Tip:</strong>
>
> If you don't have existing data, you can execute the `seed` command to load the seed data provided in the initialized project into the database.
>
> ```
> # Load seed data
> dat seed -p ./my-dat-project
> ```
>
> Then skip step 4️⃣ and use the semantic model provided in the initialized project to proceed to step 5️⃣ “Start intelligent question-answering.”
#### 4️⃣ Create Semantic Model
Create `sales.yaml` in the `models/` directory:
```yaml
version: 1
semantic_models:
- name: sales_data
description: Sales data analysis model
model: ref('sales_table')
entities:
- name: product_id
description: Product ID
type: primary
dimensions:
- name: sale_date
description: Sales date
type: time
type_params:
time_granularity: day
- name: region
description: Sales region
type: categorical
enum_values:
- value: "North"
label: "North"
- value: "South"
label: "South"
measures:
- name: sales_amount
description: Sales amount
agg: sum
- name: order_count
description: Order quantity
agg: count
```
> 💡 <strong style="color: orange;">Tip:</strong> This is just an example. Please configure according to your actual data.
> For more semantic model configuration instructions, please view the `MODEL_GUIDE.md` manual in the project.
#### 5️⃣ Start Intelligent Question-Answering
```bash
# Start interactive question-answering
dat run -p ./my-dat-project -a default
# Or start API service
dat server openapi -p ./my-dat-project
```
Now you can query data using natural language!
```
💬 Please ask how much the sales amount was in the North region last month?
📊 Analyzing your question...
🔍 Generating semantic SQL: SELECT SUM(sales_amount) FROM sales_data WHERE region='North' AND sale_date >= '2024-11-01'
✅ Query result: The sales amount in the North region last month was ¥1,234,567
```
### 🌐 Multiple Usage Methods
DAT provides multiple usage methods (CLI is mainly used for development and debugging) to meet different scenario requirements:
#### 1️⃣ Use through Dify Plugin (WEB End Question-Answering)
If you need to perform intelligent question-answering through a **WEB interface**, you can directly use the DAT plugin on the **Dify platform** without developing your own front-end.
🔗 **Plugin Address**: [https://marketplace.dify.ai/plugins/hexinfo/dat](https://marketplace.dify.ai/plugins/hexinfo/dat)
First, [start DAT's OpenAPI service](#-dat-server---service-deployment), then install the DAT plugin in Dify and configure `DAT OpenAPI Base URL` to connect with it. You can create intelligent question-answering applications in Dify's visual interface and provide a friendly WEB interactive experience.
#### 2️⃣ Integrate into Your Own Project (Streaming Question-Answering API)
If you need to integrate streaming question-answering functionality into your **own WEB project**, you can [start DAT's OpenAPI service](#-dat-server---service-deployment) for docking.
#### 3️⃣ Integrate into Agent (Supports MCP Tools)
If you use an Agent that supports **MCP (Model Context Protocol)** (such as Claude Desktop, Cline, etc.), you can [start DAT's MCP service](#-mcp-service) to integrate intelligent question-answering capabilities into these Agents.
---
## 🛠️ CLI Command Details
### 📖 Command Overview

### 🎯 Core Commands
#### 🚀 `dat init` - Project Initialization
```bash
dat init --help
```

**Example usage**:
```bash
# Interactive initialization of DAT project to the current working directory
dat init
# Interactive initialization of DAT project to a specified project workspace directory
dat init -w ./my-workspace
```

#### 🤖 `dat run` - Intelligent Question-Answering
```bash
dat run --help
```

**Example usage**:
```bash
# The current working directory is the DAT project directory and starts the default agent
dat run
# The current working directory is the DAT project directory and starts a specific agent
dat run -a sales-agent
# Specify the DAT project directory and start a specific agent
dat run -p ./my-project -a sales-agent
```

#### 🌐 `dat server` - Service Deployment
```bash
dat server --help
```

##### 🔌 OpenAPI Service
```bash
dat server openapi --help
```

**Start Service**:
```bash
# Current working directory is DAT project directory
dat server openapi
# Specify DAT project directory
dat server openapi -p ./my-project
# Custom port
dat server openapi --port=9090
```

**Swagger UI Interface**:

**API Call Example**:
```bash
# Streaming question and answer API
curl -X POST http://localhost:8080/api/v1/ask/stream \
-H "Content-Type: application/json" \
-d '{"question": "What are the total cases in various countries?"}' \
--no-buffer
```
##### 🔗 MCP Service
```bash
dat server mcp --help
```

**Start Service**:
```bash
# Current working directory is DAT project directory
dat server mcp
# Specify DAT project directory
dat server mcp -p ./my-project
# Custom port
dat server mcp --port=9091
```

#### 🌱 `dat seed` - Load Seed Data
```bash
dat seed --help
```

**Usage Example**:
```bash
# Current working directory is DAT project directory and load seed CSV file
dat seed
# Specify DAT project directory and load seed CSV file
dat seed -p ./my-project
```

---
## 🏗️ Development Guide
### 📦 Module Architecture
DAT adopts a modular design, with each module having clear responsibilities:
```
dat-parent/
├── ❤️ dat-core/ # Core interfaces and factory management
├── 🔌 dat-adapters/ # Database adapters
│ ├── dat-adapter-duckdb/ # [Local built-in database]
│ ├── dat-adapter-mysql/
│ ├── dat-adapter-oracle/
│ └── dat-adapter-postgresql/
├── 🧠 dat-llms/ # LLM integration module
│ ├── dat-llm-anthropic/
│ ├── dat-llm-gemini/
│ ├── dat-llm-ollama/
│ ├── dat-llm-openai/
│ ├── dat-llm-xinference/
│ └── dat-llm-azure-openai/
├── 📍 dat-embedders/ # Embedding model integration
│ ├── dat-embedder-bge-small-zh/ # [Local built-in embedding model]
│ ├── dat-embedder-bge-small-zh-q/ # [Local built-in embedding model]
│ ├── dat-embedder-bge-small-zh-v15/ # [Local built-in embedding model]
│ ├── dat-embedder-bge-small-zh-v15-q/ # [Local built-in embedding model]
│ ├── dat-embedder-jina/
│ ├── dat-embedder-ollama/
│ ├── dat-embedder-openai/
│ ├── dat-embedder-xinference/
│ └── dat-embedder-azure-openai/
├── ⚖️ dat-rerankers/ # Re-ranking model integration
│ ├── dat-reranker-onnx-builtin/
│ ├── dat-reranker-ms-marco-minilm-l6-v2/ # [Local built-in re-ranking model]
│ ├── dat-reranker-ms-marco-minilm-l6-v2-q/ # [Local built-in re-ranking model]
│ ├── dat-reranker-ms-marco-tinybert-l2-v2/ # [Local built-in re-ranking model]
│ ├── dat-reranker-ms-marco-tinybert-l2-v2-q/ # [Local built-in re-ranking model]
│ ├── dat-reranker-onnx-local/ # [Local re-ranking model]
│ ├── dat-reranker-jina/
│ └── dat-reranker-xinference/
├── 💾 dat-storers/ # Vector storage backends
│ ├── dat-storer-duckdb/ # [Local built-in vector storage]
│ ├── dat-storer-pgvector/
│ ├── dat-storer-weaviate/
│ ├── dat-storer-qdrant/
│ └── dat-storer-milvus/
├── 🤖 dat-agents/ # Intelligent agent implementation
│ └── dat-agent-agentic/
├── 🌐 dat-servers/ # Server-side components
│ ├── dat-server-mcp/
│ └── dat-server-openapi/
├── 📦 dat-sdk/ # Development toolkit
└── 🖥️ dat-cli/ # Command-line tool
```
### 🔧 Local Development Environment
#### Environment Preparation
```bash
# Clone project
git clone https://github.com/hexinfo/dat.git
cd dat
# Install dependencies and compile
mvn clean install -DskipTests
```
### 🚀 Secondary Development Guide
DAT provides the `dat-sdk` development toolkit, making it convenient for developers to integrate DAT's intelligent question-answering capabilities into their own Java applications. You can develop custom web UI, API services, or integrate them into existing systems.
#### Maven Dependency Configuration
Add the following dependency to your project's `pom.xml`:
```xml
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-sdk</artifactId>
<version>0.7.2</version>
</dependency>
```
#### Quick Start Example
```java
import ai.dat.boot.ProjectRunner;
import ai.dat.core.agent.data.StreamAction;
import ai.dat.core.agent.data.StreamEvent;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Collections;
import java.util.Map;
public class DatProjectRunnerExample {
private static final ObjectMapper JSON_MAPPER = new ObjectMapper();
public static void main(String[] args) {
// Initialize Project Runner
Path projectPath = Paths.get("/path/to/your/dat-project").toAbsolutePath();
String agentName = "default";
Map<String, Object> variables = Collections.emptyMap();
ProjectRunner runner = new ProjectRunner(projectPath, agentName, variables);
// Ask Question
StreamAction action = runner.ask("Total number of medical records by country");
// Handle Streaming Events
for (StreamEvent event : action) {
System.out.println("-------------------" + event.name() + "-------------------");
event.getIncrementalContent().ifPresent(content -> System.out.println(content));
event.getSemanticSql().ifPresent(content -> System.out.println(content));
event.getQuerySql().ifPresent(content -> System.out.println(content));
event.getQueryData().ifPresent(data -> {
try {
System.out.println(JSON_MAPPER.writeValueAsString(data));
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
});
event.getToolExecutionRequest().ifPresent(request -> System.out.println("id: " + request.id()
+ "\nname: " + request.name() + "\narguments: " + request.arguments()));
event.getToolExecutionResult().ifPresent(result -> System.out.println("result: " + result));
event.getHitlAiRequest().ifPresent(request -> System.out.println(request));
event.getHitlToolApproval().ifPresent(request -> System.out.println(request));
event.getMessages().forEach((k, v) -> {
try {
System.out.println(k + ": " + JSON_MAPPER.writeValueAsString(v));
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
});
}
}
}
```
It is recommended to use high-level classes such as `ai.dat.boot.ProjectRunner`, `ai.dat.boot.ProjectBuilder`, and `ai.dat.boot.ProjectSeeder`.
For more SDK usage examples and best practices, please refer to:
- [Example 1: OpenAPI Server](./dat-servers/dat-server-openapi)
- [Example 2: MCP Server](./dat-servers/dat-server-mcp)
Add other required modules as needed:
```xml
<!-- DAT Embedding Store -->
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-storer-duckdb</artifactId> <!-- In-process -->
</dependency>
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-storer-weaviate</artifactId>
</dependency>
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-storer-pgvector</artifactId>
</dependency>
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-storer-qdrant</artifactId>
</dependency>
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-storer-milvus</artifactId>
</dependency>
<!-- DAT Embedding Model -->
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-embedder-bge-small-zh</artifactId> <!-- In-process -->
</dependency>
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-embedder-bge-small-zh-q</artifactId> <!-- In-process -->
</dependency>
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-embedder-bge-small-zh-v15</artifactId> <!-- In-process -->
</dependency>
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-embedder-bge-small-zh-v15-q</artifactId> <!-- In-process -->
</dependency>
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-embedder-onnx-local</artifactId> <!-- In-process -->
</dependency>
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-embedder-openai</artifactId>
</dependency>
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-embedder-ollama</artifactId>
</dependency>
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-embedder-jina</artifactId>
</dependency>
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-embedder-xinference</artifactId>
</dependency>
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-embedder-azure-openai</artifactId>
</dependency>
<!-- DAT Reranking Model -->
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-reranker-ms-marco-minilm-l6-v2</artifactId> <!-- In-process -->
</dependency>
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-reranker-ms-marco-minilm-l6-v2-q</artifactId> <!-- In-process -->
</dependency>
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-reranker-ms-marco-tinybert-l2-v2</artifactId> <!-- In-process -->
</dependency>
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-reranker-ms-marco-tinybert-l2-v2-q</artifactId> <!-- In-process -->
</dependency>
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-reranker-onnx-local</artifactId> <!-- In-process -->
</dependency>
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-reranker-jina</artifactId>
</dependency>
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-reranker-xinference</artifactId>
</dependency>
<!-- DAT Chat Model -->
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-llm-openai</artifactId>
</dependency>
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-llm-anthropic</artifactId>
</dependency>
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-llm-ollama</artifactId>
</dependency>
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-llm-gemini</artifactId>
</dependency>
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-llm-xinference</artifactId>
</dependency>
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-llm-azure-openai</artifactId>
</dependency>
<!-- DAT Database Adapter -->
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-adapter-duckdb</artifactId> <!-- In-process -->
</dependency>
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-adapter-mysql</artifactId>
</dependency>
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-adapter-oracle</artifactId>
</dependency>
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-adapter-postgresql</artifactId>
</dependency>
<!-- DAT Askdata Agent -->
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-agent-agentic</artifactId>
</dependency>
```
You can also develop your own interface class implementation on top of `dat-core`.
```xml
<dependency>
<groupId>cn.hexinfo</groupId>
<artifactId>dat-core</artifactId>
</dependency>
```
---
## Contribution Guide
We welcome all forms of contributions! Whether it's bug reports, feature suggestions, documentation improvements, or code submissions.
### Report Issues
Before submitting an issue, please ensure:
1. **Search existing issues** - Avoid duplicate submissions
2. **Provide detailed information** - Include error logs, configuration files, and reproduction steps
3. **Use issue templates** - Help us quickly understand the problem
### Submit Feature Suggestions
We encourage innovative ideas! When submitting feature suggestions, please include:
- **Use case description** - What practical problem does it solve?
- **Design ideas** - Preliminary implementation thoughts
- **Impact assessment** - Evaluation of the impact on existing functionality
### Code Contributions
#### Development Process
1. **Fork the project** and create a feature branch
```bash
git checkout -b feature/awesome-new-feature
```
2. **Follow code specifications**:
- Use clear and concise comments to explain business logic
- Follow Alibaba Java coding specifications
- Maintain test coverage > 80%
3. **Submit code**:
```bash
git commit -m "feat: Add ClickHouse database adapter
- Implement ClickHouse connection and query functionality
- Add SQL dialect conversion support
- Improve unit test coverage
- Update relevant documentation
Closes #123"
```
4. **Create a Pull Request**:
- Describe changes in detail
- Associate relevant issues
- Ensure CI checks pass
#### Code Review Standards
- ☑️ **Functional completeness** - Implementation meets requirements
- ☑️ **Code quality** - Follows design patterns and best practices
- ☑️ **Test coverage** - Includes unit tests and integration tests
- ☑️ **Documentation updates** - Synchronize updates to relevant documentation
- ☑️ **Backward compatibility** - Does not break existing APIs
### Development Task List
- ✅ Configuration of data models (tables or views);
- ✅ Configuration of semantic models (bound to data models), including: entities, dimensions, metrics, etc.;
- ✅ Generate semantic SQL based on LLM, convert semantic SQL to real SQL, and execute and return data;
- ✅ Intelligent questioning supports HITL (Human-in-the-Loop) interaction;
- ✅ Supports providing OpenAPI services for intelligent questioning projects;
- ✅ Supports providing MCP services for intelligent questioning projects;
- ✅ Supports the seed command to initialize and load CSV files into the database;
- ✅ Vectorized storage and retrieval of SQL questions, synonyms, business knowledge, etc.;
- ✅ Data models support Jinja template language, and data permission control can be achieved by passing variables through the command line;
- ⬜ Provide DAT project auxiliary development plugins for VSCode, IDEA, Eclipse, and other IDEs;
- ⬜ Data exploration auxiliary generation of semantic models based on LLM;
- ⬜ Unit testing of data models, semantic models, and intelligent questions;
- ⬜ Configuration of metrics (can add metrics after building a semantic model);
---
## Community and Support
### Communication Channels
- **GitHub Discussions** - Technical discussions and Q&A
- **WeChat Group** - Add WeChat `slime_liu` with备注 `DAT` to join the community group
### Contributor Acknowledgment
Thanks to all developers who have contributed to the DAT project!
<a href="https://github.com/hexinfo/dat/graphs/contributors">
<img src="https://contrib.rocks/image?repo=hexinfo/dat" />
</a>
---
## Project Statistics
### Star History
[](https://star-history.com/#hexinfo/dat&Date)
---
## License
This project is licensed under the Apache 2.0 License. See the [LICENSE](https://github.com/hexinfo/dat/blob/main/LICENSE) file for details.
---
<div align="center">
**🎯 Make data queries simple and natural**
**⭐ If this project helps you, give us a Star!**
[🚀 Quick Start](#-quick-start) • [📖 Documentation](https://github.com/hexinfo/dat) • [💬 Join Community](#-community-and-support) • [🤝 Contribute](#-contribution-guide)
---
*Built with ❤️ by the DAT Community*
</div>
Connection Info
You Might Also Like
awesome-mcp-servers
A collection of MCP servers.
cc-switch
All-in-One Assistant for Claude Code, Codex & Gemini CLI across platforms.
git
A Model Context Protocol server for Git automation and interaction.
oh-my-opencode
Background agents · Curated agents like oracle, librarians, frontend...
TrendRadar
TrendRadar: Your hotspot assistant for real news in just 30 seconds.
Appwrite
Build like a team of hundreds