mirror of
https://github.com/langgenius/dify-docs.git
synced 2026-03-27 13:28:32 +07:00
140 lines
6.3 KiB
Plaintext
140 lines
6.3 KiB
Plaintext
---
|
||
title: "コード"
|
||
description: "データ処理のためのカスタムPythonまたはJavaScriptの実行"
|
||
icon: "code"
|
||
---
|
||
|
||
<Note> ⚠️ このドキュメントはAIによって自動翻訳されています。不正確な部分がある場合は、[英語版](/en/use-dify/nodes/code)を参照してください。</Note>
|
||
|
||
|
||
コードノードは、カスタムPythonまたはJavaScriptを実行して、ワークフロー内で複雑なデータ変換、計算、ロジックを処理します。事前設定されたノードが特定の処理ニーズに十分でない場合に使用してください。
|
||
|
||
<Frame caption="コードノード設定インターフェース">
|
||
<img src="https://assets-docs.dify.ai/dify-enterprise-mintlify/en/guides/workflow/node/9969aa1bc1912aebe366f5d8f5dde296.png" alt="Code node interface" />
|
||
</Frame>
|
||
|
||
## 設定
|
||
|
||
**入力変数**を定義してワークフロー内の他のノードからデータにアクセスし、これらの変数をコード内で参照します。関数は、宣言した**出力変数**を含む辞書を返す必要があります。
|
||
|
||
```python
|
||
def main(input_variable: str) -> dict:
|
||
# 入力を処理
|
||
result = input_variable.upper()
|
||
return {
|
||
'output_variable': result
|
||
}
|
||
```
|
||
|
||
## 言語サポート
|
||
|
||
ニーズと習熟度に基づいて、**Python**と**JavaScript**から選択できます。どちらの言語も、データ処理用の一般的なライブラリにアクセス可能な安全なサンドボックス内で実行されます。
|
||
|
||
<Tabs>
|
||
<Tab title="Python">
|
||
Pythonには`json`、`math`、`datetime`、`re`などの標準ライブラリが含まれています。データ分析、数学的演算、テキスト処理に最適です。
|
||
|
||
```python
|
||
def main(data: list) -> dict:
|
||
import json
|
||
import math
|
||
|
||
average = sum(data) / len(data)
|
||
return {'result': math.ceil(average)}
|
||
```
|
||
</Tab>
|
||
|
||
<Tab title="JavaScript">
|
||
JavaScriptは標準の組み込みオブジェクトとメソッドを提供します。JSON操作と文字列演算に適しています。
|
||
|
||
```javascript
|
||
function main(data) {
|
||
const processed = data.map(item => item.toUpperCase());
|
||
return { result: processed };
|
||
}
|
||
```
|
||
</Tab>
|
||
</Tabs>
|
||
|
||
## エラーハンドリングと再試行
|
||
|
||
失敗したコード実行に対する自動再試行動作を設定し、コードがエラーに遭遇した場合のフォールバック戦略を定義します。
|
||
|
||
<Frame caption="エラーハンドリング設定オプション">
|
||
<img src="https://assets-docs.dify.ai/2024/12/58f392734ce44b22cd8c160faf28cd14.png" alt="Code Error handling" />
|
||
</Frame>
|
||
|
||
**再試行設定**では、設定可能な間隔(最大5000ms)で最大10回の自動再試行が可能です。一時的な処理問題の対処にこれを有効にしてください。
|
||
|
||
**エラーハンドリング**では、コード実行が失敗した場合のフォールバックパスを定義でき、コードが問題に遭遇してもワークフローの実行を継続できます。
|
||
|
||
<Frame caption="再試行設定インターフェース">
|
||
<img src="https://assets-docs.dify.ai/2024/12/9fdd5525a91dc925b79b89272893becf.png" alt="Retry settings" />
|
||
</Frame>
|
||
|
||
## 出力検証と制限
|
||
|
||
コード出力は厳格な制限で自動的に検証されます:
|
||
- **文字列**:最大長80,000文字、nullバイトは削除されます
|
||
- **数値**:-999999999から999999999の範囲、浮動小数点数は小数点以下10桁に制限
|
||
- **オブジェクト/配列**:複雑なネスト構造を防ぐため最大深度5レベル
|
||
|
||
これらの制限により、パフォーマンスが確保され、ワークフローでのメモリー問題が防止されます。
|
||
|
||
## セキュリティ上の考慮事項
|
||
|
||
コアクセス、ネットワークリクエスト、システムコマンドを防ぐ厳格なサンドボックス内で実行されます。これにより、プログラミングの柔軟性を提供しながらセキュリティが維持されます。
|
||
|
||
セキュリティ上の理由から、一部の操作は自動的にブロックされます。システムファイルへのアクセスや潜在的に危険な操作の実行を試みることは避けてください:
|
||
|
||
<Frame caption="Cloudflare WAFによるセキュリティフィルタリング">
|
||
<img src="https://assets-docs.dify.ai/2024/12/ad4dc065c4c567c150ab7fa7bfd123a3.png" alt="Cloudflare WAF blocking" />
|
||
</Frame>
|
||
|
||
コードが保存されない場合は、ブラウザのネットワークタブを確認してください - セキュリティフィルタが潜在的に危険な操作をブロックしている可能性があります。
|
||
|
||
## 依存関係サポート
|
||
|
||
コードノードは、PythonとJavaScript両方の外部依存関係をサポートします:
|
||
|
||
```python
|
||
# Python: numpy、pandas、requestsなどをインポート
|
||
import numpy as np
|
||
import pandas as pd
|
||
|
||
def main(data: list) -> dict:
|
||
df = pd.DataFrame(data)
|
||
return {'mean': float(np.mean(df['values']))}
|
||
```
|
||
|
||
```javascript
|
||
// JavaScript: lodash、momentなどをインポート
|
||
const _ = require('lodash');
|
||
|
||
function main(data) {
|
||
return { unique: _.uniq(data) };
|
||
}
|
||
```
|
||
|
||
依存関係はサンドボックス環境に事前インストールされています。Difyインストールで利用可能なパッケージリストを確認してください。
|
||
|
||
## セルフホスト型セットアップ
|
||
|
||
セルフホスト型Difyインストールの場合、安全なコード実行のためにサンドボックスサービスを開始してください:
|
||
|
||
```bash
|
||
docker-compose -f docker-compose.middleware.yaml up -d
|
||
```
|
||
|
||
サンドボックスサービスはDockerが必要で、セキュリティのためにメインシステムからコード実行を分離します。
|
||
|
||
## 一般的な使用例
|
||
|
||
**データ解析** - APIや他のノードから返される複雑なJSON構造から特定の値を抽出します。
|
||
|
||
**数学的演算** - 事前設定されたノードでは処理できない計算、統計分析、データ集約を実行します。
|
||
|
||
**データ変換** - データ形式の変換、複数のデータソースの結合、下流処理のための情報の再構築を行います。
|
||
|
||
**条件ロジック** - 単純なif-else条件を超える複雑な意思決定ロジックを実装します。
|