💭

Dify Knowledge API で Invalid エラーに悩んでる方向け

2024/10/27に公開

ハマりにハマったので自分への備忘録も兼ねて。

Knowledge API 経由でナレッジ記録すると400エラーになる

例:
/datasets/{dataset_id}/document/create_by_text
→ 新しいナレッジを記録しようとするとエラーが出る……書式は合っているはずなのに、なんで?

結論

こちらのIssueが参考になった。

bad_request: The browser (or proxy) sent a request that this server could not understand. #5279
https://github.com/langgenius/dify/issues/5279

→ name と text 本文に含まれるTabコード・改行コードをエスケープしてあげればOK。

エスケープ処理のサンプル

エスケープ処理するための参考コードはこちら。

def main(text: str) -> dict:
    return {
        "result": json.dumps(text,
        ensure_ascii=False),
    }

HTTPノードの指定

name / text をエスケープ処理してあれば、RAW TEXTに入力するときはダブルクオーテーションを付けずに指定する。
HTTPノードはこんな感じ。エスケープ済みなのでダブルクオーテーションを付けずに指定する

{
    "name": {{name.result}},
    "text": {{text.result}},
    "indexing_technique": "high_quality",
    "process_rule": {
        "mode": "custom",
        "rules": {
            "pre_processing_rules": [{
                "id": "remove_extra_spaces",
                "enumerateremove_extra_spaces": "Replace consecutive spaces, newlines, tabs",
                "enabled": true
            }, {
                "id": "remove_urls_emails",
                "remove_urls_emails": "Delete URL, email address",
                "enabled": false
            }],
        "segmentation": {
            "separator": "***",
            "max_tokens": 2000
            }
        }
    }
}

現場からは以上です。

Discussion