「データベース查询の専門知識がなくても、日本語でお 원하는データを取得できたら素晴らしいと思いませんか?本記事では、HolySheep AIのFunction Calling機能を使って、プログラミング初心者の場合でも数据库と自然语言で対話できる方法をゼロ부터優しく解説します。
Function Callingとは?
Function Callingは、大规模言語モデル(LLM)に「外部の道具」を使う能力を与える技術です。例えば、LLMに「このデータを取ってきて」と日本語で依頼すると、適切なSQLクエリを自动生成して数据库に問い合せ、結果をあなたに返すことができます。
- 专业知識が不要:SQLを覚える必要なし
- 直感的な操作:日本語で質問するだけでOK
- HolySheep AIの利点:レートが¥1=$1(公式¥7.3=$1より85%節約)、<50msの低レイテンシで快速な响应
准备工作
必要なもの
- HolySheep AIアカウント(登録で無料クレジット进呈)
- Python 3.8以降がインストールされた环境
- サンプルデータベース( SQLite 사용)
Python библиотека 安装
pip install openai requests sqlite3
サンプルデータベースの创建
まず练习用のデータベースを作成しましょう。商品テーブルを持つ簡単なECサイトのデータベースを用意します。
import sqlite3
import os
データベースファイルのパス
db_path = "sample_shop.db"
既存のデータベースがあれば削除
if os.path.exists(db_path):
os.remove(db_path)
データベース连接
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
商品テーブルを作成
cursor.execute('''
CREATE TABLE products (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
category TEXT NOT NULL,
price INTEGER NOT NULL,
stock INTEGER DEFAULT 0,
created_at TEXT DEFAULT CURRENT_TIMESTAMP
)
''')
샘플 데이터를 삽입
sample_products = [
('ノートPC Pro 15', 'electronics', 128000, 25, '2026-01-15'),
('ワイヤレスマウス', 'electronics', 3200, 150, '2026-01-20'),
('メカニカルキーボード', 'electronics', 8900, 45, '2026-02-01'),
('モニター 27インチ', 'electronics', 45000, 30, '2026-02-10'),
('USB-Cハブ', 'electronics', 4500, 200, '2026-02-15'),
('参考書 Python入門', 'books', 2800, 80, '2026-01-10'),
('参考書 データサイエンス', 'books', 4200, 35, '2026-01-25'),
('ノートブック A5', 'stationery', 450, 500, '2026-02-05'),
('ボールペン 6本パック', 'stationery', 800, 300, '2026-02-08'),
('クリアファイル 10枚', 'stationery', 350, 450, '2026-02-12'),
]
cursor.executemany(
'INSERT INTO products (name, category, price, stock, created_at) VALUES (?, ?, ?, ?, ?)',
sample_products
)
conn.commit()
print(f"✅ データベース作成完了: {db_path}")
print(f"📦 {len(sample_products)}件の商品を登録しました")
確認
cursor.execute('SELECT COUNT(*) FROM products')
print(f"📊 合計商品数: {cursor.fetchone()[0]}")
conn.close()
スクリーンショットヒント:上記コードを实行すると、「✅ データベース作成完了」と「📦 10件の商品を登録しました」と表示され、sample_shop.dbファイルが作成されます。
Function Callingの実装
функции 정의(関数の定义)
まず、LLMに使用可能な「関数」を定義します。SQLクエリを実行する 기능을 만들겠습니다。
# functions.py
LLM에 제공할関数定義
get_products_schema = {
"name": "get_products",
"description": "データベースから商品情報を取得する関数。カテゴリ별、価格でフィルター 가능하다。",
"parameters": {
"type": "object",
"properties": {
"category": {
"type": "string",
"description": "商品的カテゴリ(electronics/books/stationery)",
"enum": ["electronics", "books", "stationery"]
},
"min_price": {
"type": "integer",
"description": "最低価格(下限)"
},
"max_price": {
"type": "integer",
"description": "最高価格(上限)"
},
"low_stock_only": {
"type": "boolean",
"description": "在庫が30以下の商品のみを取得する場合はtrue"
},
"order_by": {
"type": "string",
"description": "排序基準(price_asc/price_desc/stock_asc/name)",
"enum": ["price_asc", "price_desc", "stock_asc", "name"]
},
"limit": {
"type": "integer",
"description": "取得する最大件数(デフォルト10)"
}
},
"properties": {
"category": {"type": "string"},
"min_price": {"type": "integer"},
"max_price": {"type": "integer"},
"low_stock_only": {"type": "boolean"},
"order_by": {"type": "string"},
"limit": {"type": "integer", "default": 10}
}
}
}
def execute_sql(category=None, min_price=None, max_price=None,
low_stock_only=False, order_by="name", limit=10):
"""
实际にSQLを実行して商品を取得する関数
"""
import sqlite3
db_path = "sample_shop.db"
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
# SQLクエリ構築
where_clauses = []
params = []
if category:
where_clauses.append("category = ?")
params.append(category)
if min_price is not None:
where_clauses.append("price >= ?")
params.append(min_price)
if max_price is not None:
where_clauses.append("price <= ?")
params.append(max_price)
if low_stock_only:
where_clauses.append("stock <= 30")
where_sql = " AND ".join(where_clauses) if where_clauses else "1=1"
# 排序
order_mapping = {
"price_asc": "price ASC",
"price_desc": "price DESC",
"stock_asc": "stock ASC",
"name": "name ASC"
}
order_sql = order_mapping.get(order_by, "name ASC")
query = f"SELECT name, category, price, stock FROM products WHERE {where_sql} ORDER BY {order_sql} LIMIT ?"
params.append(limit)
cursor.execute(query, params)
results = cursor.fetchall()
conn.close()
return results
メインプログラム(自然言語クエリを处理)
# main.py
import openai
from functions import get_products_schema, execute_sql
HolySheep AI API設定
openai.api_key = "YOUR_HOLYSHEEP_API_KEY"
openai.api_base = "https://api.holysheep.ai/v1"
def query_database_natural_language(user_question):
"""
自然言語の質問からSQLクエリを実行し結果を返す
"""
# システムプロンプトで役割を设定
system_prompt = """あなたは商品のデータベース查询助手です。
用户の日本語の質問から、function callingを使ってデータを取得してください。
対応カテゴリ: electronics(電子機器)、books(書籍)、stationery(文房具)
价格の範囲: 350円〜128,000円
在庫の一般的な范围: 0〜500個
常に日本語で結果を説明してください。"""
# メッセージ 구성
messages = [
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_question}
]
# Function Callingを実行
response = openai.ChatCompletion.create(
model="gpt-4o-mini", # HolySheep AI対応モデル
messages=messages,
functions=[get_products_schema],
function_call="auto"
)
assistant_message = response['choices'][0]['message']
# Functionが呼び出されたか確認
if assistant_message.get("function_call"):
function_name = assistant_message["function_call"]["name"]
arguments = assistant_message["function_call"]["arguments"]
# 文字列として受け取った引数を辞書に変換
import json
args_dict = json.loads(arguments)
print(f"🔧 実行された関数: {function_name}")
print(f"📋 引数: {args_dict}")
# SQLを実行
results = execute_sql(**args_dict)
return results
return assistant_message.get("content", "结果なし")
===== 實際の問い合わせ例 =====
print("=" * 60)
print("【查询1】電子機器の商品を価格顺で表示して")
print("=" * 60)
result1 = query_database_natural_language("電子機器の商品を価格安い顺で表示して")
for row in result1:
print(f" 📦 {row[0]} | カテゴリ: {row[1]} | 価格: ¥{row[2]:,} | 在庫: {row[3]}個")
print("\n" + "=" * 60)
print("【查询2】5000円以下の文房具有哪些?")
print("=" * 60)
result2 = query_database_natural_language("5000円以下の文房具有哪些?")
for row in result2:
print(f" 📦 {row[0]} | カテゴリ: {row[1]} | 価格: ¥{row[2]:,} | 在庫: {row[3]}個")
print("\n" + "=" * 60)
print("【查询3】在庫が少なくなっている商品")
print("=" * 60)
result3 = query_database_natural_language("在庫が少なくなっている商品を探して")
for row in result3:
print(f" ⚠️ {row[0]} | カテゴリ: {row[1]} | 価格: ¥{row[2]:,} | 在庫: {row[3]}個")
print("\n" + "=" * 60)
print("【查询4】書籍で5000円以上のもの")
print("=" * 60)
result4 = query_database_natural_language("書籍で5000円以上のものを教えて")
for row in result4:
print(f" 📚 {row[0]} | カテゴリ: {row[1]} | 価格: ¥{row[2]:,} | 在庫: {row[3]}個")
スクリーンショットヒント:上記のクエリを実行すると、以下のような出力が表示されます:
============================================================
【查询1】電子機器の商品を価格顺で表示して
============================================================
🔧 実行された関数: get_products
📋 引数: {'category': 'electronics', 'order_by': 'price_asc', 'limit': 10}
📦 USB-Cハブ | カテゴリ: electronics | 価格: ¥4,500 | 在庫: 200個
📦 ワイヤレスマウス | カテゴリ: electronics | 価格: ¥3,200 | 在庫: 150個
📦 メカニカルキーボード | カテゴリ: electronics | 価格: ¥8,900 | 在庫: 45個
...
результатов 분석と应用例
作成したシステムを応用して、より高度な 功能を作成することも可能です:
- 売上分析:カテゴリ別の平均価格や在庫总额の計算
- レポート生成:查询結果を元に自然语言で分析コメントを追加
- ダッシュボード:定期的にデータを更新する自動化スクリプト
HolySheep AIを利用すれば、DeepSeek V3.2モデルが$0.42/1Mトークンと非常に 저렴なため、コストを気にせず 다양한 实验を行うことができます。
よくあるエラーと対処法
エラー1:APIキーが無効です
# ❌ 错误な例
openai.api_key = "sk-xxxx" # 实际のキーを入力してください
✅ 正しい例
openai.api_key = "YOUR_HOLYSHEEP_API_KEY" # HolySheepから取得したAPIキーに置換
openai.api_base = "https://api.holysheep.ai/v1" # 正しいエンドポイントを指定
解決方法:HolySheep AIダッシュボードでAPIキーを発行し、正しいbase_urlを設定してください。
エラー2:Function Callingが動作しない
# ❌ 错误:functionsパラメータがない
response = openai.ChatCompletion.create(
model="gpt-4o-mini",
messages=messages
# functionsパラメータ缺失
)
✅ 正しい:functionsとfunction_callを追加
response = openai.ChatCompletion.create(
model="gpt-4o-mini",
messages=messages,
functions=[get_products_schema], # 関数の定義を渡す
function_call="auto" # 自動的に関数を呼び出す
)
解決方法:functionsパラメータを必ず含め、function_callを"auto"に設定してください。
エラー3:SQL引数の 타입エラー
# ❌ 错误:引数のタイプが一致しない
args_dict = {"min_price": "1000"} # 文字列で渡している
✅ 正しい:適切なタイプに変換
import json
arguments = assistant_message["function_call"]["arguments"]
args_dict = json.loads(arguments) # 自動的に適切なタイプに変換される
min_priceが整数が必要な场合は明示的に変換
if "min_price" in args_dict and isinstance(args_dict["min_price"], str):
args_dict["min_price"] = int(args_dict["min_price"])
解決方法:JSONの引数をパースする際に 타입が崩れる场合は、明示的にタイプ変換を行ってください。
エラー4:カテゴリ名が认识されない
# ❌ 错误:别の表现を使用
{'category': '電子機器'} # 「electronics」であるべき
✅ 正しい:定義されたenum値を使用
{'category': 'electronics'}
またはLLMに任せる(自然言語からの转换)
LLMが「電子機器」→「electronics」に自動変換してくれる
解決方法:Function定義のenumに明記された値(electronics/books/stationery)を使用してください。
まとめ
本記事では、HolySheep AIのFunction Calling機能を使って、数据库を自然言語で查询するシステムを构建しました。
- ✅ SQL专业知识不要でデータベースを操作可能
- ✅ 日本語での直感的なインターフェースを実現
- ✅ HolySheep AIなら¥1=$1のレートで、成本効率良く運用可能
- ✅ WeChat Pay/Alipay対応で支払いも簡単
この技術を応用すれば、BIツールや、业务アプリケーションに自然な对话型インターフェースを追加することができます。
👉 HolySheep AI に登録して無料クレジットを獲得