製造業の工艺最適化において、AI Agent導入の成功与否はコスト管理异常处理机制の设计にあります。本稿ではHolySheep AIを活用した制造业工艺最適化Agentの構築方法を実践的に解説します。

結論:まず確認してほしいこと

価格比較:HolySheep vs 公式API vs 主要競合

サービス レート GPT-4.1
(/MTok)
Claude Sonnet 4.5
(/MTok)
Gemini 2.5 Flash
(/MTok)
DeepSeek V3.2
(/MTok)
レイテンシ 決済手段 向いているチーム
HolySheep AI ¥1=$1(85%節約) $8 → ¥8 $15 → ¥15 $2.50 → ¥2.50 $0.42 → ¥0.42 <50ms WeChat Pay
Alipay
Visa/MasterCard
コスト重視・複数モデル混在・中国本地法人
OpenAI 公式 ¥7.3=$1 $8 -$15 - - 80-200ms Visa/MasterCard
のみ
OpenAI exclusively 사용
Anthropic 公式 ¥7.3=$1 - $15 - - 100-250ms Visa/MasterCard
のみ
Anthropic exclusively 使用
Google Vertex AI ¥7.3=$1 - - $2.50 - 60-150ms 法人請求書 エンタープライズGCPユーザー
硅基流动 ¥1.5=$1 $8 $15 $2.50 $0.42 40-100ms WeChat Pay
Alipay
中国本地決済+低コスト

向いている人・向いていない人

向いている人

向いていない人

HolySheepを選ぶ理由

私は複数の製造業客户提供のサポートでHolySheepを採用しましたが、最大の理由はコスト構造です。OpenAI公式APIでGPT-4.1を1億トークン使用した場合、约530万円ですが、HolySheepなら约58万円で同量処理可能です。

さらに、制造业工艺最適化では以下の要件が重要ですが、HolySheepは全て满足しています:

多模型参数解释 Agent:実装コード

制造业工艺では各モデルに得意領域があります。以下はHolySheep APIを使って场景ごとに最適なモデルを選択するAgent実装です。

import requests
import json
from typing import Dict, Any, Optional
from dataclasses import dataclass
from datetime import datetime
import time

@dataclass
class ModelConfig:
    """製造業工艺最適化用のモデル設定"""
    model_id: str
    task_type: str
    max_tokens: int
    temperature: float

HolySheep API 設定

HOLYSHEEP_BASE_URL = "https://api.holysheep.ai/v1" API_KEY = "YOUR_HOLYSHEEP_API_KEY" # HolySheep登録後に取得

製造業场景별 模型選択

MODEL_CONFIGS = { "cost_analysis": ModelConfig( model_id="deepseek-ai/DeepSeek-V3.2", task_type="成本分析・数式計算", max_tokens=2048, temperature=0.1 ), "anomaly_detection": ModelConfig( model_id="anthropic/claude-sonnet-4.5", task_type="异常パターン判定", max_tokens=1024, temperature=0.2 ), "process_optimization": ModelConfig( model_id="openai/gpt-4.1", task_type="工艺パラメータ最適化提案", max_tokens=4096, temperature=0.4 ), "quick_classification": ModelConfig( model_id="google/gemini-2.5-flash", task_type="高速分类・筛选", max_tokens=512, temperature=0.3 ) } class ManufacturingAgent: """製造業工艺最適化 Agent""" def __init__(self, api_key: str): self.api_key = api_key self.base_url = HOLYSHEEP_BASE_URL self.request_count = 0 self.total_cost = 0.0 self.cost_history = [] def _call_holysheep(self, model: str, messages: list, max_tokens: int, temperature: float) -> Dict[str, Any]: """HolySheep API呼び出し(共通処理)""" headers = { "Authorization": f"Bearer {self.api_key}", "Content-Type": "application/json" } payload = { "model": model, "messages": messages, "max_tokens": max_tokens, "temperature": temperature, "stream": False } start_time = time.time() response = requests.post( f"{self.base_url}/chat/completions", headers=headers, json=payload, timeout=30 ) latency_ms = (time.time() - start_time) * 1000 if response.status_code != 200: raise Exception(f"API Error: {response.status_code} - {response.text}") result = response.json() # コスト記録 usage = result.get("usage", {}) prompt_tokens = usage.get("prompt_tokens", 0) completion_tokens = usage.get("completion_tokens", 0) self._track_cost(model, prompt_tokens, completion_tokens, latency_ms) return { "content": result["choices"][0]["message"]["content"], "usage": usage, "latency_ms": latency_ms, "model": model } def _track_cost(self, model: str, prompt_tokens: int, completion_tokens: int, latency_ms: float): """コスト监控记录""" # HolySheep 2026年 价格表 PRICES = { "openai/gpt-4.1": {"input": 2.0, "output": 8.0}, # $2/$8 per MTok "anthropic/claude-sonnet-4.5": {"input": 3.0, "output": 15.0}, "google/gemini-2.5-flash": {"input": 0.35, "output": 2.50}, "deepseek-ai/DeepSeek-V3.2": {"input": 0.27, "output": 0.42} } price = PRICES.get(model, {"input": 0, "output": 0}) cost = (prompt_tokens / 1_000_000 * price["input"] + completion_tokens / 1_000_000 * price["output"]) self.request_count += 1 self.total_cost += cost self.cost_history.append({ "timestamp": datetime.now().isoformat(), "model": model, "prompt_tokens": prompt_tokens, "completion_tokens": completion_tokens, "cost_usd": cost, "latency_ms": latency_ms }) def analyze_process_parameters(self, process_data: Dict[str, Any]) -> Dict[str, Any]: """工艺パラメータ分析与最適化提案""" # Step 1: 成本分析(DeepSeek - 高速・低コスト) cost_prompt = [ {"role": "system", "content": "你是制造业成本分析专家。请分析以下工艺参数的成本效益。"}, {"role": "user", "content": f"分析工艺数据: {json.dumps(process_data, ensure_ascii=False)}"} ] cost_result = self._call_holysheep( **{ **MODEL_CONFIGS["cost_analysis"].__dict__, "messages": cost_prompt } ) # Step 2: 异常判定(Claude Sonnet - 高精度パターン認識) anomaly_prompt = [ {"role": "system", "content": "你是制造业异常检测专家。请判断工艺参数是否存在异常。"}, {"role": "user", "content": f"工艺数据: {json.dumps(process_data, ensure_ascii=False)}\\n成本分析: {cost_result['content']}"} ] anomaly_result = self._call_holysheep( **{ **MODEL_CONFIGS["anomaly_detection"].__dict__, "messages": anomaly_prompt } ) # Step 3: 最適化提案(GPT-4.1 - 高品質生成) optimization_prompt = [ {"role": "system", "content": "你是制造业工艺优化专家。请提供具体的工艺参数优化方案。"}, {"role": "user", "content": f"工艺数据: {json.dumps(process_data, ensure_ascii=False)}\\n成本分析: {cost_result['content']}\\n异常判定: {anomaly_result['content']}"} ] optimization_result = self._call_holysheep( **{ **MODEL_CONFIGS["process_optimization"].__dict__, "messages": optimization_prompt } ) return { "cost_analysis": cost_result, "anomaly_detection": anomaly_result, "optimization": optimization_result, "total_cost_usd": self.total_cost, "request_count": self.request_count } def get_cost_dashboard(self) -> Dict[str, Any]: """コスト监控ダッシュボードデータ取得""" return { "total_requests": self.request_count, "total_cost_usd": round(self.total_cost, 4), "total_cost_jpy": round(self.total_cost * 1, 2), # ¥1=$1 "cost_history": self.cost_history[-10:], # 最新10件 "model_usage": self._aggregate_by_model() } def _aggregate_by_model(self) -> Dict[str, Any]: """モデル別 使用量集計""" aggregation = {} for record in self.cost_history: model = record["model"] if model not in aggregation: aggregation[model] = { "count": 0, "total_cost": 0, "avg_latency_ms": [] } aggregation[model]["count"] += 1 aggregation[model]["total_cost"] += record["cost_usd"] aggregation[model]["avg_latency_ms"].append(record["latency_ms"]) for model in aggregation: latencies = aggregation[model]["avg_latency_ms"] aggregation[model]["avg_latency_ms"] = round(sum(latencies) / len(latencies), 2) aggregation[model]["total_cost"] = round(aggregation[model]["total_cost"], 4) return aggregation

使用例

if __name__ == "__main__": agent = ManufacturingAgent(api_key="YOUR_HOLYSHEEP_API_KEY") # テスト工艺データ test_process_data = { "process_name": "CNC切削加工", "parameters": { "spindle_speed": 3500, "feed_rate": 1200, "depth_of_cut": 2.5, "material": " aluminum_6061" }, "production_volume": 10000, "current_cost_per_unit": 45.5 } try: result = agent.analyze_process_parameters(test_process_data) print("=== 工艺最適化結果 ===") print(f"コスト分析: {result['cost_analysis']['content'][:200]}...") print(f"异常判定: {result['anomaly_detection']['content'][:200]}...") print(f"最適化提案: {result['optimization']['content'][:200]}...") print(f"\\n総コスト: ${result['total_cost_usd']}") # ダッシュボード確認 dashboard = agent.get_cost_dashboard() print(f"\\n=== コストダッシュボード ===") print(f"総リクエスト数: {dashboard['total_requests']}") print(f"総コスト: ¥{dashboard['total_cost_jpy']}") except Exception as e: print(f"Error: {e}")

异常重试机制:自動リトライの実装

製造業のproduction環境では、网络异常やAPI一時的障害に備えたリトライ机制が不可欠です。以下は指数バックオフ方式是装した异常リトライ実装です。

import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
from typing import Callable, Any, Optional
import time
import logging

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

class HolySheepClientWithRetry:
    """HolySheep API クライアント(异常重试机制内置)"""
    
    def __init__(self, api_key: str, base_url: str = "https://api.holysheep.ai/v1"):
        self.api_key = api_key
        self.base_url = base_url
        self.session = self._create_session_with_retry()
    
    def _create_session_with_retry(self) -> requests.Session:
        """指数バックオフ方式是装のセッション作成"""
        session = requests.Session()
        
        # 制造业环境向け 設定
        retry_strategy = Retry(
            total=5,                    # 最大5回リトライ
            backoff_factor=1.0,          # 指数バックオフ: 1s, 2s, 4s, 8s, 16s
            status_forcelist=[429, 500, 502, 503, 504],
            allowed_methods=["POST", "GET"],
            respect_retry_after_header=True
        )
        
        adapter = HTTPAdapter(max_retries=retry_strategy)
        session.mount("http://", adapter)
        session.mount("https://", adapter)
        
        return session
    
    def chat_completion_with_retry(
        self,
        model: str,
        messages: list,
        max_tokens: int = 2048,
        temperature: float = 0.7,
        timeout: int = 60
    ) -> dict:
        """
        HolySheep API 呼び出し(自动重试付き)
        
        Args:
            model: モデルID (e.g., "deepseek-ai/DeepSeek-V3.2")
            messages: メッセージリスト
            max_tokens: 最大出力トークン数
            temperature: 生成多様性
            timeout: タイムアウト秒数
        
        Returns:
            API応答辞書
        """
        headers = {
            "Authorization": f"Bearer {self.api_key}",
            "Content-Type": "application/json"
        }
        
        payload = {
            "model": model,
            "messages": messages,
            "max_tokens": max_tokens,
            "temperature": temperature
        }
        
        attempt = 0
        last_error = None
        
        while attempt < 5:
            try:
                logger.info(f"[Attempt {attempt + 1}] Calling HolySheep API...")
                
                response = self.session.post(
                    f"{self.base_url}/chat/completions",
                    headers=headers,
                    json=payload,
                    timeout=timeout
                )
                
                if response.status_code == 200:
                    result = response.json()
                    usage = result.get("usage", {})
                    logger.info(
                        f"[Success] Model: {model}, "
                        f"Tokens: {usage.get('total_tokens', 0)}, "
                        f"Latency: {response.elapsed.total_seconds()*1000:.0f}ms"
                    )
                    return result
                
                elif response.status_code == 429:
                    # Rate limit の場合はヘッダー内のRetry-Afterを参考
                    retry_after = response.headers.get("Retry-After", "60")
                    logger.warning(f"Rate limit hit. Waiting {retry_after}s...")
                    time.sleep(int(retry_after))
                    attempt += 1
                    continue
                
                elif response.status_code >= 500:
                    # サーバーエラーは指数バックオフでリトライ
                    logger.warning(f"Server error {response.status_code}. Retrying...")
                    attempt += 1
                    continue
                
                else:
                    # クライアントエラーはリトライしない
                    logger.error(f"Client error: {response.status_code} - {response.text}")
                    raise Exception(f"API Error: {response.status_code}")
                
            except requests.exceptions.Timeout:
                logger.warning(f"Timeout on attempt {attempt + 1}. Retrying...")
                attempt += 1
                time.sleep(2 ** attempt)  # 指数バックオフ
                
            except requests.exceptions.ConnectionError as e:
                logger.warning(f"Connection error on attempt {attempt + 1}: {e}")
                attempt += 1
                time.sleep(2 ** attempt)
                
            except Exception as e:
                last_error = e
                logger.error(f"Unexpected error: {e}")
                raise
        
        raise Exception(f"All retry attempts failed. Last error: {last_error}")
    
    def batch_process_with_fallback(
        self,
        tasks: list,
        primary_model: str,
        fallback_model: Optional[str] = None
    ) -> list:
        """
        批量処理:プライマリモデル失败時にフォールバック
        
        製造業场景:GPT-4.1が不安定な場合、Gemini Flashに自動切り替え
        """
        results = []
        
        for i, task in enumerate(tasks):
            logger.info(f"Processing task {i + 1}/{len(tasks)}")
            
            try:
                result = self.chat_completion_with_retry(
                    model=primary_model,
                    messages=task["messages"],
                    max_tokens=task.get("max_tokens", 2048),
                    temperature=task.get("temperature", 0.3)
                )
                results.append({
                    "task_id": task.get("id", i),
                    "status": "success",
                    "model": primary_model,
                    "result": result
                })
                
            except Exception as e:
                logger.error(f"Primary model failed: {e}")
                
                if fallback_model:
                    logger.info(f"Falling back to {fallback_model}")
                    try:
                        result = self.chat_completion_with_retry(
                            model=fallback_model,
                            messages=task["messages"],
                            max_tokens=task.get("max_tokens", 2048),
                            temperature=task.get("temperature", 0.3)
                        )
                        results.append({
                            "task_id": task.get("id", i),
                            "status": "fallback_success",
                            "model": fallback_model,
                            "result": result
                        })
                    except Exception as fallback_error:
                        results.append({
                            "task_id": task.get("id", i),
                            "status": "failed",
                            "error": str(fallback_error)
                        })
                else:
                    results.append({
                        "task_id": task.get("id", i),
                        "status": "failed",
                        "error": str(e)
                    })
        
        # 成功率集計
        success_count = sum(1 for r in results if r["status"] == "success")
        fallback_count = sum(1 for r in results if r["status"] == "fallback_success")
        
        logger.info(
            f"Batch complete: {success_count} success, "
            f"{fallback_count} fallback, "
            f"{len(tasks) - success_count - fallback_count} failed"
        )
        
        return results

使用例

if __name__ == "__main__": client = HolySheepClientWithRetry(api_key="YOUR_HOLYSHEEP_API_KEY") # 工艺パラメータ异常检测タスク tasks = [ { "id": "param_001", "messages": [ {"role": "user", "content": "CNC切削パラメータ异常检测: 主軸回転数=5000rpm, 送り速度=2000mm/min, 切削深さ=5mm - 判定してください"} ], "max_tokens": 512, "temperature": 0.2 }, { "id": "param_002", "messages": [ {"role": "user", "content": "焊接工艺参数检测: 电流=180A, 电压=24V, 速度=15cm/min - 正常ですか?"} ], "max_tokens": 512, "temperature": 0.2 } ] # GPT-4.1が不安定な时可以自动切换到Gemini Flash results = client.batch_process_with_fallback( tasks=tasks, primary_model="openai/gpt-4.1", fallback_model="google/gemini-2.5-flash" ) for r in results: print(f"[{r['status']}] Task {r['task_id']}: {r.get('model', 'N/A')}")

コスト监控ダッシュボード:リアルタイム可視化

import json
from datetime import datetime, timedelta
from typing import Dict, List
from collections import defaultdict

class CostMonitorDashboard:
    """
    制造业工艺最適化 Agent コスト监控ダッシュボード
    
    機能:
    - リアルタイムコスト追跡
    - モデル别 使用量分析
    - 予算アラート設定
    - 日次/週次/月次レポート生成
    """
    
    # HolySheep 2026年 价格表($/MTok)
    PRICE_TABLE = {
        "openai/gpt-4.1": {"input": 2.0, "output": 8.0},
        "anthropic/claude-sonnet-4.5": {"input": 3.0, "output": 15.0},
        "google/gemini-2.5-flash": {"input": 0.35, "output": 2.50},
        "deepseek-ai/DeepSeek-V3.2": {"input": 0.27, "output": 0.42}
    }
    
    def __init__(self, monthly_budget_jpy: float = 100000):
        self.records: List[Dict] = []
        self.monthly_budget_jpy = monthly_budget_jpy
        self.exchange_rate = 1.0  # ¥1 = $1 (HolySheep special rate)
    
    def record_request(
        self,
        model: str,
        prompt_tokens: int,
        completion_tokens: int,
        latency_ms: float,
        metadata: Dict = None
    ):
        """APIリクエストを記録"""
        prices = self.PRICE_TABLE.get(model, {"input": 0, "output": 0})
        
        cost_usd = (
            prompt_tokens / 1_000_000 * prices["input"] +
            completion_tokens / 1_000_000 * prices["output"]
        )
        
        record = {
            "timestamp": datetime.now().isoformat(),
            "model": model,
            "prompt_tokens": prompt_tokens,
            "completion_tokens": completion_tokens,
            "total_tokens": prompt_tokens + completion_tokens,
            "cost_usd": cost_usd,
            "cost_jpy": cost_usd * self.exchange_rate,
            "latency_ms": latency_ms,
            "metadata": metadata or {}
        }
        
        self.records.append(record)
        
        # 予算アラートチェック
        current_month_cost = self._get_current_month_cost()
        budget_ratio = current_month_cost / self.monthly_budget_jpy
        
        if budget_ratio >= 0.8:
            print(f"⚠️  ALERT: 月次予算の{budget_ratio*100:.0f}%に達しました")
        if budget_ratio >= 1.0:
            print(f"🚨 CRITICAL: 月次予算を超過しました!")
    
    def _get_current_month_cost(self) -> float:
        """当月コスト合計計算"""
        current_month = datetime.now().month
        return sum(
            r["cost_jpy"] for r in self.records
            if datetime.fromisoformat(r["timestamp"]).month == current_month
        )
    
    def get_summary(self) -> Dict:
        """コストサマリー取得"""
        if not self.records:
            return {"error": "No data available"}
        
        total_cost_jpy = sum(r["cost_jpy"] for r in self.records)
        total_cost_usd = sum(r["cost_usd"] for r in self.records)
        
        # 公式APIとの比較
        official_rate = 7.3  # ¥7.3 = $1
        official_cost_jpy = total_cost_usd * official_rate
        savings_jpy = official_cost_jpy - total_cost_jpy
        
        # モデル别集計
        model_stats = defaultdict(lambda: {
            "count": 0, "tokens": 0, "cost": 0, "latencies": []
        })
        
        for r in self.records:
            model = r["model"]
            model_stats[model]["count"] += 1
            model_stats[model]["tokens"] += r["total_tokens"]
            model_stats[model]["cost"] += r["cost_jpy"]
            model_stats[model]["latencies"].append(r["latency_ms"])
        
        # 平均レイテンシ計算
        for model in model_stats:
            latencies = model_stats[model]["latencies"]
            model_stats[model]["avg_latency_ms"] = round(
                sum(latencies) / len(latencies), 2
            )
            model_stats[model]["max_latency_ms"] = round(max(latencies), 2)
            model_stats[model]["min_latency_ms"] = round(min(latencies), 2)
        
        return {
            "period": {
                "start": self.records[0]["timestamp"],
                "end": self.records[-1]["timestamp"],
                "total_requests": len(self.records)
            },
            "cost": {
                "total_jpy": round(total_cost_jpy, 2),
                "total_usd": round(total_cost_usd, 4),
                "official_estimate_jpy": round(official_cost_jpy, 2),
                "savings_jpy": round(savings_jpy, 2),
                "savings_percent": round((savings_jpy / official_cost_jpy) * 100, 1) if official_cost_jpy > 0 else 0,
                "monthly_budget_jpy": self.monthly_budget_jpy,
                "budget_used_percent": round(
                    (self._get_current_month_cost() / self.monthly_budget_jpy) * 100, 1
                )
            },
            "models": dict(model_stats),
            "performance": {
                "avg_latency_ms": round(
                    sum(r["latency_ms"] for r in self.records) / len(self.records), 2
                ),
                "p95_latency_ms": self._calculate_percentile("latency_ms", 95)
            }
        }
    
    def _calculate_percentile(self, field: str, percentile: int) -> float:
        """パーセンタイル計算"""
        values = sorted(r[field] for r in self.records)
        if not values:
            return 0
        index = int(len(values) * percentile / 100)
        return round(values[min(index, len(values) - 1)], 2)
    
    def export_dashboard_html(self) -> str:
        """HTMLダッシュボード生成"""
        summary = self.get_summary()
        
        html = f"""
        <div class="cost-dashboard">
            <h2>制造业工艺最適化コストダッシュボード</h2>
            
            <div class="metrics-grid">
                <div class="metric-card">
                    <h3>当月コスト</h3>
                    <p class="metric-value">¥{summary['cost']['total_jpy']:,.0f}</p>
                    <p class="metric-note">{summary['period']['total_requests']} リクエスト</p>
                </div>
                
                <div class="metric-card highlight">
                    <h3>HolySheep節約額</h3>
                    <p class="metric-value">¥{summary['cost']['savings_jpy']:,.0f}</p>
                    <p class="metric-note">公式比 {summary['cost']['savings_percent']}% 節約</p>
                </div>
                
                <div class="metric-card">
                    <h3>予算使用率</h3>
                    <p class="metric-value">{summary['cost']['budget_used_percent']}%</p>
                    <p class="metric-note">上限 ¥{summary['cost']['monthly_budget_jpy']:,.0f}</p>
                </div>
                
                <div class="metric-card">
                    <h3>平均レイテンシ</h3>
                    <p class="metric-value">{summary['performance']['avg_latency_ms']}ms</p>
                    <p class="metric-note">P95: {summary['performance']['p95_latency_ms']}ms</p>
                </div>
            </div>
            
            <h3>モデル別使用量</h3>
            <table class="model-table">
                <tr>
                    <th>モデル</th>
                    <th>リクエスト数</th>
                    <th>総トークン数</th>
                    <th>コスト(¥)</th>
                    <th>平均レイテンシ</th>
                </tr>
        """
        
        for model, stats in summary["models"].items():
            html += f"""
                <tr>
                    <td>{model}</td>
                    <td>{stats['count']:,}</td>
                    <td>{stats['tokens']:,}</td>
                    <td>¥{stats['cost']:,.2f}</td>
                    <td>{stats['avg_latency_ms']}ms</td>
                </tr>
            """
        
        html += """
            </table>
        </div>
        """
        
        return html

ダッシュボード使用例

if __name__ == "__main__": dashboard = CostMonitorDashboard(monthly_budget_jpy=100000) # 模拟リクエスト記録 test_records = [ ("deepseek-ai/DeepSeek-V3.2", 1500, 800, 45.2), ("anthropic/claude-sonnet-4.5", 2000, 1200, 78.5), ("openai/gpt-4.1", 3000, 2000, 95.3), ("google/gemini-2.5-flash", 800, 400, 38.7), ("deepseek-ai/DeepSeek-V3.2", 1500, 900, 42.1), ] for model, prompt, completion, latency in test_records: dashboard.record_request(model, prompt, completion, latency) # レポート出力 summary = dashboard.get_summary() print("=== コストダッシュボード ===") print(f"総コスト: ¥{summary['cost']['total_jpy']:,.2f}") print(f"節約額: ¥{summary['cost']['savings_jpy']:,.2f} ({summary['cost']['savings_percent']}%)") print(f"平均レイテンシ: {summary['performance']['avg_latency_ms']}ms") print("\\n=== モデル別内訳 ===") for model, stats in summary['models'].items(): print(f"{model}: ¥{stats['cost']:.2f} ({stats['count']} requests)")

よくあるエラーと対処法

エラー1:APIキー無効(401 Unauthorized)

症状:API呼び出し時に {"error": {"message": "Invalid API key"}} {"type": "invalid_request_error"} が返る

原因:APIキーが正しく設定されていない、または有効期限切れ