Skip to content

Commit 07a4b22

Browse files
AI Translate 51-ai-functions to Simplified-Chinese (#2648)
* [INIT] Start translation to Simplified-Chinese * 🌐 Translate 01-external-functions.md to Simplified-Chinese * 🌐 Translate 01-external-functions.md to Simplified-Chinese * 🌐 Translate 01-external-functions.md to Simplified-Chinese --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: z <[email protected]>
1 parent 0814a4c commit 07a4b22

File tree

4 files changed

+270
-29
lines changed

4 files changed

+270
-29
lines changed

.translation-init

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
Translation initialization: 2025-08-07T01:11:56.293652
1+
Translation initialization: 2025-08-07T08:04:44.577984

docs/cn/guides/51-ai-functions/01-external-functions.md

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,28 @@
11
---
2-
title: 使用外部函数实现自定义 AI/ML
2+
title: 使用外部函数(External Function)自定义 AI/ML
33
---
44

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

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

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

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

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

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

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

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

77-
## 后续步骤
79+
## 了解更多
7880

79-
1. **[外部函数指南](/guides/query/external-function)** - 详细的设置说明
80-
2. **[Databend Cloud](https://databend.cn)** - 免费试用 AI 函数
81+
- **[外部函数(External Function)指南](/guides/query/external-function)** - 完整的设置和部署说明
82+
- **[Databend Cloud](https://databend.cn)** - 使用免费账户试用外部函数(External Function)
Lines changed: 227 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,227 @@
1+
# 适用于 Databend 的 MCP 服务器
2+
3+
[mcp-databend](https://github.com/databendlabs/mcp-databend) 是一个 MCP(Model Context Protocol,模型上下文协议)服务器,它让 AI 助手能够使用自然语言直接与你的 Databend 数据库交互。
4+
5+
## mcp-databend 能做什么
6+
7+
- **execute_sql** - 执行 SQL 查询,并带有超时保护
8+
- **show_databases** - 列出所有可用数据库
9+
- **show_tables** - 列出数据库中的表(支持可选过滤)
10+
- **describe_table** - 获取详细的表结构信息
11+
12+
## 构建 ChatBI 工具
13+
14+
本教程将演示如何使用 mcp-databend 和 Agno 框架构建一个对话式商业智能(Business Intelligence)工具。你将创建一个本地代理,能够用自然语言回答数据问题。
15+
16+
## 分步教程
17+
18+
### 步骤 1:配置 Databend 连接
19+
20+
首先,你需要一个可连接的 Databend 数据库:
21+
22+
1. **注册 [Databend Cloud](https://app.databend.cn)**(提供免费套餐)
23+
2. **创建计算集群(Warehouse)和数据库**
24+
3. **在控制台获取连接字符串**
25+
26+
有关 DSN 格式和示例的详细信息,请参阅[连接字符串文档](https://docs.databend.cn/developer/drivers/#connection-string-dsn)
27+
28+
| 部署方式 | 连接字符串示例 |
29+
|------------|---------------------------|
30+
| **Databend Cloud** | `databend://user:pwd@host:443/database?warehouse=wh` |
31+
| **自托管** | `databend://user:pwd@localhost:8000/database?sslmode=disable` |
32+
33+
### 步骤 2:安装依赖
34+
35+
创建虚拟环境并安装所需包:
36+
37+
```bash
38+
# Create virtual environment
39+
python3 -m venv .venv
40+
source .venv/bin/activate
41+
42+
# Install packages
43+
pip install packaging openai agno openrouter sqlalchemy fastapi mcp-databend
44+
```
45+
46+
### 步骤 3:创建 ChatBI 代理
47+
48+
现在创建 ChatBI 代理,它将使用 mcp-databend 与数据库交互。
49+
50+
创建文件 `agent.py`
51+
52+
```python
53+
from contextlib import asynccontextmanager
54+
import os
55+
import logging
56+
import sys
57+
58+
from agno.agent import Agent
59+
from agno.playground import Playground
60+
from agno.storage.sqlite import SqliteStorage
61+
from agno.tools.mcp import MCPTools
62+
from agno.models.openrouter import OpenRouter
63+
from fastapi import FastAPI
64+
65+
logging.basicConfig(level=logging.INFO)
66+
logger = logging.getLogger(__name__)
67+
68+
def check_env_vars():
69+
"""Check required environment variables"""
70+
required = {
71+
"DATABEND_DSN": "https://docs.databend.cn/developer/drivers/#connection-string-dsn",
72+
"OPENROUTER_API_KEY": "https://openrouter.ai/settings/keys"
73+
}
74+
75+
missing = [var for var in required if not os.getenv(var)]
76+
77+
if missing:
78+
print("❌ Missing environment variables:")
79+
for var in missing:
80+
print(f"{var}: {required[var]}")
81+
print("\nExample: export DATABEND_DSN='...' OPENROUTER_API_KEY='...'")
82+
sys.exit(1)
83+
84+
print("✅ Environment variables OK")
85+
86+
check_env_vars()
87+
88+
class DatabendTool:
89+
def __init__(self):
90+
self.mcp = None
91+
self.dsn = os.getenv("DATABEND_DSN")
92+
93+
def create(self):
94+
env = os.environ.copy()
95+
env["DATABEND_DSN"] = self.dsn
96+
self.mcp = MCPTools(
97+
command="python -m mcp_databend",
98+
env=env,
99+
timeout_seconds=300
100+
)
101+
return self.mcp
102+
103+
async def init(self):
104+
try:
105+
await self.mcp.connect()
106+
logger.info("✓ Connected to Databend")
107+
return True
108+
except Exception as e:
109+
logger.error(f"✗ Databend connection failed: {e}")
110+
return False
111+
112+
databend = DatabendTool()
113+
114+
agent = Agent(
115+
name="ChatBI",
116+
model=OpenRouter(
117+
id=os.getenv("MODEL_ID", "anthropic/claude-sonnet-4"),
118+
api_key=os.getenv("OPENROUTER_API_KEY")
119+
),
120+
tools=[],
121+
instructions=[
122+
"You are ChatBI - a Business Intelligence assistant for Databend.",
123+
"Help users explore and analyze their data using natural language.",
124+
"Always start by exploring available databases and tables.",
125+
"Format query results in clear, readable tables.",
126+
"Provide insights and explanations with your analysis."
127+
],
128+
storage=SqliteStorage(table_name="chatbi", db_file="chatbi.db"),
129+
add_datetime_to_instructions=True,
130+
add_history_to_messages=True,
131+
num_history_responses=5,
132+
markdown=True,
133+
show_tool_calls=True,
134+
)
135+
136+
@asynccontextmanager
137+
async def lifespan(app: FastAPI):
138+
tool = databend.create()
139+
if not await databend.init():
140+
logger.error("Failed to initialize Databend")
141+
raise RuntimeError("Databend connection failed")
142+
143+
agent.tools.append(tool)
144+
logger.info("ChatBI initialized successfully")
145+
146+
yield
147+
148+
if databend.mcp:
149+
await databend.mcp.close()
150+
151+
playground = Playground(
152+
agents=[agent],
153+
name="ChatBI with Databend",
154+
description="Business Intelligence Assistant powered by Databend"
155+
)
156+
157+
app = playground.get_app(lifespan=lifespan)
158+
159+
if __name__ == "__main__":
160+
print("🤖 Starting MCP Server for Databend")
161+
print("Open http://localhost:7777 to start chatting!")
162+
playground.serve(app="agent:app", host="127.0.0.1", port=7777)
163+
```
164+
165+
### 步骤 4:配置环境
166+
167+
设置 API 密钥和数据库连接:
168+
169+
```bash
170+
# Set your OpenRouter API key
171+
export OPENROUTER_API_KEY="your-openrouter-key"
172+
173+
# Set your Databend connection string
174+
export DATABEND_DSN="your-databend-connection-string"
175+
```
176+
177+
### 步骤 5:启动 ChatBI 代理
178+
179+
运行代理以启动本地服务器:
180+
181+
```bash
182+
python agent.py
183+
```
184+
185+
你应该会看到:
186+
```
187+
✅ Environment variables OK
188+
🤖 Starting MCP Server for Databend
189+
Open http://localhost:7777 to start chatting!
190+
INFO Starting playground on http://127.0.0.1:7777
191+
INFO: Started server process [189851]
192+
INFO: Waiting for application startup.
193+
INFO:agent:✓ Connected to Databend
194+
INFO:agent:ChatBI initialized successfully
195+
INFO: Application startup complete.
196+
INFO: Uvicorn running on http://127.0.0.1:7777 (Press CTRL+C to quit)
197+
```
198+
199+
### 步骤 6:设置 Web 界面
200+
201+
为获得更佳体验,可配置 Agno 的 Web 界面:
202+
203+
```bash
204+
# Create the Agent UI
205+
npx create-agent-ui@latest
206+
207+
# Enter 'y' when prompted, then run:
208+
cd agent-ui && npm run dev
209+
```
210+
211+
**连接到代理:**
212+
1. 打开 [http://localhost:3000](http://localhost:3000)
213+
2. 选择 "localhost:7777" 作为端点
214+
3. 开始用自然语言提问数据问题!
215+
216+
**试试这些查询:**
217+
- "Show me all databases"
218+
- "What tables do I have?"
219+
- "Describe the structure of my tables"
220+
- "Run a query to show sample data"
221+
222+
## 资源
223+
224+
- **GitHub 仓库**[databendlabs/mcp-databend](https://github.com/databendlabs/mcp-databend)
225+
- **PyPI 包**[mcp-databend](https://pypi.org/project/mcp-databend)
226+
- **Agno 框架**[Agno MCP](https://docs.agno.com/tools/mcp/mcp)
227+
- **Agent UI**[Agent UI](https://docs.agno.com/agent-ui/introduction)
Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,31 @@
1-
# Databend 中的 AI 函数
1+
# AI 与 ML 集成
22

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

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

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

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

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

19-
**[外部函数指南](01-external-functions.md)** - 学习如何通过实践示例和实施指导创建并部署自定义 AI 函数。
19+
模型上下文协议(Model Context Protocol,MCP)服务器使 AI 助手能够使用自然语言与您的 Databend 数据库进行交互,非常适合构建对话式 BI 工具。
20+
21+
| 特性 | 优势 |
22+
|---------|----------|
23+
| **自然语言** | 使用简单的英语查询您的数据 |
24+
| **AI 助手集成** | 可与 Claude、ChatGPT 和自定义代理配合使用 |
25+
| **实时分析** | 从您的数据中即时获取洞察 |
26+
27+
## 入门指南
28+
29+
**[外部函数(External Function)指南](01-external-functions.md)** - 学习如何通过实际示例和实施指导创建和部署自定义 AI 函数
30+
31+
**[MCP 服务器(MCP Server)指南](02-mcp.md)** - 使用 mcp-databend 和自然语言查询构建对话式 BI 工具

0 commit comments

Comments
 (0)