メインコンテンツまでスキップ

プログラムからAI校正APIを使おう

Shodoで提供しているAI校正APIをお使いのプログラミング言語でお客様のアプリケーションやシステムに組み込むことができます。

備考

APIを使用するためには、Shodoのアカウントが必要です。
アカウントを作成しようを参照してください。

詳細なAPIリファレンスはAPIガイドを参照してください。

Shodo Pythonを使用する

ShodoのAI校正APIを使ってみようで説明をした shodo パッケージはPythonでのAI校正APIを簡単に実装できる機能を提供しています。

また、非同期処理での実装を行う場合は以下のコマンドを実行してください。

pip install shodo[async]

実装例

同期処理での実装例
from shodo import lint

lint_result = lint("文章をタイポや間違いを見つけてくれます。")
for msg in lint_result.messages:
print(f"{msg.from_.line}:{msg.from_.ch} {msg.message}")
非同期処理での実装例
import asyncio
from shodo.aio import lint

lint_result = asyncio.run(lint("文章をタイポや間違いを見つけてくれます."))
for msg in lint_result.messages:
print(f"{msg.from_.line}:{msg.from_.ch} {msg.message}")

それぞれの関数の戻り値( lint_result )は、データクラスで取得されるため安全にAI校正の結果を使用できます。

校正APIを使用して校正をリクエストする

Shodoでは、校正APIを使用して日本語の文章を校正をリクエストし結果を取得するように設計されています。
校正結果を取得する方法は校正結果APIから結果を取得するを参照してください。

curl -X POST https://api.shodo.ink/@{organization}/{project}/lint/ \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{"body": "文章をタイポや間違いを見つけてくれます。"}'

上記を実行するといずれも以下のようなレスポンスがJSONで取得できます。 正常なレスポンスの取得ができたら lint_id を使用して校正結果を取得します。

以下、正常なレスポンスの例です。

{
"monthly_amount": 1000000,
"current_usage": 222,
"lint_id": "4c5aeef4-44c0-4020-887a-9d06a82d55fb",
"len_body": 20,
"len_used": 0
}

校正結果APIから結果を取得する

ここでは、校正APIを使用して校正をリクエストするで取得した lint_id を使用して校正結果を取得します。

curl https://api.shodo.ink/@{organization}/{project}/lint/{lint_id}/ \
-H "Authorization: Bearer {token}"

文章の校正は非同期によって処理が実行されます。上記の実行によって得られたレスポンスの status を確認してください。

{
"messages": [],
"status": "processing",
"updated": 1730957727
}

レスポンス内容の statusprocessing (校正中)である場合は、校正が完了していないことを示しています。少し時間をおいて再度リクエストを行ってください。 statusdone (完了)になると校正結果が messages に格納されます。
また、 statusdone であり messages が空の配列である場合、校正案はない状態となります。

以下、校正結果がある場合の例です。

{
"messages": [
{
"code": "ai_recommend",
"message": "もしかして:タイプミス",
"severity": "warning",
"from": {
"line": 0,
"ch": 2
},
"to": {
"line": 0,
"ch": 3
},
"index": 2,
"index_to": 3,
"before": "を",
"after": "の",
"operation": "replace",
"score": 0.8658215999603271,
"meta": {
}
}
],
"status": "done",
"updated": 1730958753
}