Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .translation-init
Original file line number Diff line number Diff line change
@@ -1 +1 @@
Translation initialization: 2025-08-07T01:11:56.293652
Translation initialization: 2025-08-07T08:04:44.577984
44 changes: 23 additions & 21 deletions docs/cn/guides/51-ai-functions/01-external-functions.md
Original file line number Diff line number Diff line change
@@ -1,26 +1,28 @@
---
title: 使用外部函数实现自定义 AI/ML
title: 使用外部函数(External Function)自定义 AI/ML
---

# 使用外部函数实现自定义 AI/ML
# 使用外部函数(External Function)自定义 AI/ML

对于高级 AI/ML 场景,Databend 支持外部函数(External Function),可将您的数据与使用 Python 等语言编写的自定义 AI/ML 基础设施连接起来
通过将 Databend 与您自己的基础设施连接,构建强大的 AI/ML 能力。外部函数(External Function)让您部署自定义模型、利用 GPU 加速,并与任何 ML 框架集成,同时确保数据安全

| 特性 | 描述 | 优势 |
|---------|-------------|----------|
| **模型灵活性** | 使用开源模型或您内部的 AI/ML 基础设施 | • 自由选择任何模型<br/>• 利用现有的 ML 投资<br/>• 紧跟最新的 AI 发展 |
| **GPU 加速** | 在配备 GPU 的机器上部署外部函数服务器 | • 加快深度学习模型的推理速度<br/>• 处理更大的批处理大小<br/>• 支持计算密集型工作负载 |
| **自定义 ML 模型** | 部署和使用您自己的机器学习模型 | • 专有算法<br/>• 领域特定模型<br/>• 针对您的数据进行微调 |
| **高级 AI Pipeline(流水线)** | 使用专业库构建复杂的 AI 工作流 | • 多步处理<br/>• 自定义转换<br/>• 与 ML 框架集成 |
| **可扩展性** | 在 Databend 外部处理资源密集型 AI 操作 | • 独立扩展<br/>• 优化资源分配<br/>• 高吞吐量处理 |
## 核心能力

## 实现概述
| 功能 | 优势 |
|---------|----------|
| **自定义模型** | 使用任何开源或专有的 AI/ML 模型 |
| **GPU 加速** | 部署在配备 GPU 的机器上以加快推理速度 |
| **数据隐私** | 将数据保留在您的基础设施内 |
| **可扩展性** | 独立扩展并优化资源 |
| **灵活性** | 支持任何编程语言和 ML 框架 |

1. 使用您的 AI/ML 代码(Python 配合 [databend-udf](https://pypi.org/project/databend-udf))创建一个外部服务器
2. 使用 `CREATE FUNCTION` 在 Databend 中注册该服务器
3. 在 SQL 查询中直接调用您的 AI/ML 函数
## 工作原理

## 示例:自定义 AI 模型集成
1. **创建 AI 服务器**:使用 Python 和 [databend-udf](https://pypi.org/project/databend-udf) 构建您的 AI/ML 服务器
2. **注册函数**:使用 `CREATE FUNCTION` 将您的服务器连接到 Databend
3. **在 SQL 中使用**:直接在 SQL 查询中调用您的自定义 AI 函数

## 示例:文本嵌入函数

```python
# 简单的嵌入 UDF 服务器演示
Expand All @@ -37,17 +39,17 @@ model = SentenceTransformer('all-mpnet-base-v2') # 768 维向量
def ai_embed_768(inputs: list[str], headers) -> list[list[float]]:
"""为输入文本生成 768 维嵌入"""
try:
# 在单个批次中处理输入
# 单批次处理输入
embeddings = model.encode(inputs)
# 转换为列表格式
return [embedding.tolist() for embedding in embeddings]
except Exception as e:
print(f"生成嵌入时出错:{e}")
# 如果出错,则返回空列表
# 如果出错则返回空列表
return [[] for _ in inputs]

if __name__ == '__main__':
print("正在端口 8815 上启动嵌入 UDF 服务器...")
print(" 8815 端口启动嵌入 UDF 服务器...")
server = UDFServer("0.0.0.0:8815")
server.add_function(ai_embed_768)
server.serve()
Expand All @@ -74,7 +76,7 @@ ORDER BY similarity ASC
LIMIT 5;
```

## 后续步骤
## 了解更多

1. **[外部函数指南](/guides/query/external-function)** - 详细的设置说明
2. **[Databend Cloud](https://databend.cn)** - 免费试用 AI 函数
- **[外部函数(External Function)指南](/guides/query/external-function)** - 完整的设置和部署说明
- **[Databend Cloud](https://databend.cn)** - 使用免费账户试用外部函数(External Function)
227 changes: 227 additions & 0 deletions docs/cn/guides/51-ai-functions/02-mcp.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,227 @@
# 适用于 Databend 的 MCP 服务器

[mcp-databend](https://github.com/databendlabs/mcp-databend) 是一个 MCP(Model Context Protocol,模型上下文协议)服务器,它让 AI 助手能够使用自然语言直接与你的 Databend 数据库交互。

## mcp-databend 能做什么

- **execute_sql** - 执行 SQL 查询,并带有超时保护
- **show_databases** - 列出所有可用数据库
- **show_tables** - 列出数据库中的表(支持可选过滤)
- **describe_table** - 获取详细的表结构信息

## 构建 ChatBI 工具

本教程将演示如何使用 mcp-databend 和 Agno 框架构建一个对话式商业智能(Business Intelligence)工具。你将创建一个本地代理,能够用自然语言回答数据问题。

## 分步教程

### 步骤 1:配置 Databend 连接

首先,你需要一个可连接的 Databend 数据库:

1. **注册 [Databend Cloud](https://app.databend.cn)**(提供免费套餐)
2. **创建计算集群(Warehouse)和数据库**
3. **在控制台获取连接字符串**

有关 DSN 格式和示例的详细信息,请参阅[连接字符串文档](https://docs.databend.cn/developer/drivers/#connection-string-dsn)。

| 部署方式 | 连接字符串示例 |
|------------|---------------------------|
| **Databend Cloud** | `databend://user:pwd@host:443/database?warehouse=wh` |
| **自托管** | `databend://user:pwd@localhost:8000/database?sslmode=disable` |

### 步骤 2:安装依赖

创建虚拟环境并安装所需包:

```bash
# Create virtual environment
python3 -m venv .venv
source .venv/bin/activate

# Install packages
pip install packaging openai agno openrouter sqlalchemy fastapi mcp-databend
```

### 步骤 3:创建 ChatBI 代理

现在创建 ChatBI 代理,它将使用 mcp-databend 与数据库交互。

创建文件 `agent.py`:

```python
from contextlib import asynccontextmanager
import os
import logging
import sys

from agno.agent import Agent
from agno.playground import Playground
from agno.storage.sqlite import SqliteStorage
from agno.tools.mcp import MCPTools
from agno.models.openrouter import OpenRouter
from fastapi import FastAPI

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

def check_env_vars():
"""Check required environment variables"""
required = {
"DATABEND_DSN": "https://docs.databend.cn/developer/drivers/#connection-string-dsn",
"OPENROUTER_API_KEY": "https://openrouter.ai/settings/keys"
}

missing = [var for var in required if not os.getenv(var)]

if missing:
print("❌ Missing environment variables:")
for var in missing:
print(f" • {var}: {required[var]}")
print("\nExample: export DATABEND_DSN='...' OPENROUTER_API_KEY='...'")
sys.exit(1)

print("✅ Environment variables OK")

check_env_vars()

class DatabendTool:
def __init__(self):
self.mcp = None
self.dsn = os.getenv("DATABEND_DSN")

def create(self):
env = os.environ.copy()
env["DATABEND_DSN"] = self.dsn
self.mcp = MCPTools(
command="python -m mcp_databend",
env=env,
timeout_seconds=300
)
return self.mcp

async def init(self):
try:
await self.mcp.connect()
logger.info("✓ Connected to Databend")
return True
except Exception as e:
logger.error(f"✗ Databend connection failed: {e}")
return False

databend = DatabendTool()

agent = Agent(
name="ChatBI",
model=OpenRouter(
id=os.getenv("MODEL_ID", "anthropic/claude-sonnet-4"),
api_key=os.getenv("OPENROUTER_API_KEY")
),
tools=[],
instructions=[
"You are ChatBI - a Business Intelligence assistant for Databend.",
"Help users explore and analyze their data using natural language.",
"Always start by exploring available databases and tables.",
"Format query results in clear, readable tables.",
"Provide insights and explanations with your analysis."
],
storage=SqliteStorage(table_name="chatbi", db_file="chatbi.db"),
add_datetime_to_instructions=True,
add_history_to_messages=True,
num_history_responses=5,
markdown=True,
show_tool_calls=True,
)

@asynccontextmanager
async def lifespan(app: FastAPI):
tool = databend.create()
if not await databend.init():
logger.error("Failed to initialize Databend")
raise RuntimeError("Databend connection failed")

agent.tools.append(tool)
logger.info("ChatBI initialized successfully")

yield

if databend.mcp:
await databend.mcp.close()

playground = Playground(
agents=[agent],
name="ChatBI with Databend",
description="Business Intelligence Assistant powered by Databend"
)

app = playground.get_app(lifespan=lifespan)

if __name__ == "__main__":
print("🤖 Starting MCP Server for Databend")
print("Open http://localhost:7777 to start chatting!")
playground.serve(app="agent:app", host="127.0.0.1", port=7777)
```

### 步骤 4:配置环境

设置 API 密钥和数据库连接:

```bash
# Set your OpenRouter API key
export OPENROUTER_API_KEY="your-openrouter-key"

# Set your Databend connection string
export DATABEND_DSN="your-databend-connection-string"
```

### 步骤 5:启动 ChatBI 代理

运行代理以启动本地服务器:

```bash
python agent.py
```

你应该会看到:
```
✅ Environment variables OK
🤖 Starting MCP Server for Databend
Open http://localhost:7777 to start chatting!
INFO Starting playground on http://127.0.0.1:7777
INFO: Started server process [189851]
INFO: Waiting for application startup.
INFO:agent:✓ Connected to Databend
INFO:agent:ChatBI initialized successfully
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:7777 (Press CTRL+C to quit)
```

### 步骤 6:设置 Web 界面

为获得更佳体验,可配置 Agno 的 Web 界面:

```bash
# Create the Agent UI
npx create-agent-ui@latest

# Enter 'y' when prompted, then run:
cd agent-ui && npm run dev
```

**连接到代理:**
1. 打开 [http://localhost:3000](http://localhost:3000)
2. 选择 "localhost:7777" 作为端点
3. 开始用自然语言提问数据问题!

**试试这些查询:**
- "Show me all databases"
- "What tables do I have?"
- "Describe the structure of my tables"
- "Run a query to show sample data"

## 资源

- **GitHub 仓库**:[databendlabs/mcp-databend](https://github.com/databendlabs/mcp-databend)
- **PyPI 包**:[mcp-databend](https://pypi.org/project/mcp-databend)
- **Agno 框架**:[Agno MCP](https://docs.agno.com/tools/mcp/mcp)
- **Agent UI**:[Agent UI](https://docs.agno.com/agent-ui/introduction)
26 changes: 19 additions & 7 deletions docs/cn/guides/51-ai-functions/index.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,31 @@
# Databend 中的 AI 函数
# AI 与 ML 集成

Databend 通过外部函数(External Function)提供 AI 和 ML 功能,允许您集成自定义 AI 模型并利用先进的 ML 基础设施,同时确保数据隐私与可控性
Databend 通过两种互补的方法实现强大的 AI 和 ML 功能:使用您自己的基础设施构建自定义 AI 函数,或使用自然语言创建对话式数据体验

## 外部函数(External Function)- 推荐方案
## 外部函数(External Function) - 推荐方法

外部函数(External Function)能够将您的数据与自定义 AI/ML 基础设施连接,为 AI 工作负载提供最大的灵活性和性能。
外部函数(External Function)使您能够将数据与自定义的 AI/ML 基础设施连接,为 AI 工作负载提供最大的灵活性和性能。

| 特性 | 优势 |
|---------|----------|
| **自定义模型** | 使用任何开源或专有的 AI/ML 模型 |
| **GPU 加速** | 部署在配备 GPU 的机器上以加快推理速度 |
| **数据隐私** | 将数据保留在您的基础设施内 |
| **可扩展性** | 独立扩展与资源优化 |
| **可扩展性** | 独立扩展和资源优化 |
| **灵活性** | 支持任何编程语言和 ML 框架 |

## 快速入门
## MCP 服务器(MCP Server) - 自然语言数据交互

**[外部函数指南](01-external-functions.md)** - 学习如何通过实践示例和实施指导创建并部署自定义 AI 函数。
模型上下文协议(Model Context Protocol,MCP)服务器使 AI 助手能够使用自然语言与您的 Databend 数据库进行交互,非常适合构建对话式 BI 工具。

| 特性 | 优势 |
|---------|----------|
| **自然语言** | 使用简单的英语查询您的数据 |
| **AI 助手集成** | 可与 Claude、ChatGPT 和自定义代理配合使用 |
| **实时分析** | 从您的数据中即时获取洞察 |

## 入门指南

**[外部函数(External Function)指南](01-external-functions.md)** - 学习如何通过实际示例和实施指导创建和部署自定义 AI 函数

**[MCP 服务器(MCP Server)指南](02-mcp.md)** - 使用 mcp-databend 和自然语言查询构建对话式 BI 工具
Loading