mirror of
https://github.com/EstrellaXD/Auto_Bangumi.git
synced 2026-10-31 04:34:51 +08:00
34 lines
2.2 KiB
Markdown
34 lines
2.2 KiB
Markdown
# LLM プロバイダー (llm_provider)
|
||
|
||
LLM 解析プロバイダーを追加します。`@provider(points.LLM_PROVIDER, id=...)` は `ab_sdk.llm.LLMProviderAdapter` のサブクラスを返します。**`id` は `info.id` と同じにする必要があります。** ユーザーは設定 → LLM → プロバイダーで選びます。組み込みプロバイダーの id は上書きできません。
|
||
|
||
```python
|
||
from ab_sdk import Plugin, points, provider
|
||
from ab_sdk.llm import AdapterContext, LLMProviderAdapter, ProviderInfo
|
||
|
||
|
||
class MyAdapter(LLMProviderAdapter):
|
||
info = ProviderInfo(
|
||
id="my-llm",
|
||
display_name="My LLM",
|
||
auth_kind="api_key",
|
||
needs_base_url=True,
|
||
default_model="my-model",
|
||
)
|
||
... # parse / list_models などの抽象メソッドを実装
|
||
|
||
|
||
class MyPlugin(Plugin):
|
||
@provider(points.LLM_PROVIDER, id="my-llm")
|
||
def adapter(self):
|
||
return MyAdapter
|
||
```
|
||
|
||
## 要点
|
||
|
||
- `ProviderInfo` がフロントエンドのフォームとプロバイダー一覧を決めます。`auth_kind` は `api_key`、`oauth`、`device_code` のいずれかです。
|
||
- アダプターは `AdapterContext` から、モデル名、キー、`base_url`、タイムアウト、プロキシ対応の httpx2 クライアントのファクトリを受け取ります。グローバル設定は読みません。
|
||
- ファクトリは `httpx2.AsyncClient` を返します(SDK 0.6 から。以前は `httpx`)。ネットワークエラーを捕捉するには `httpx2.HTTPError` などのクラスを使います。`httpx` の例外クラスではこのエラーを捕捉できません。
|
||
- サブスクリプション型のプロバイダー(`oauth` / `device_code`)は、認証フローのフック(`AuthChallenge`、`TokenSet`)を実装します。認証情報が無効になり、更新にも失敗したときは `AuthExpiredError` を送出します。AB はこのプロバイダーのブレーカーを作動させ、`llm_auth_failure` イベントを送ります。
|
||
- `plugin.json` 形式の既存の LLM プラグイン(`llm-plugins` として公開)は引き続き使えます。新しいプラグインは `plugin.toml` とこの拡張ポイントを使います。
|