この非公式 Python API は、シンプルなチャット メッセージング インターフェイスを通じて、Anthropic の Claude AI の会話機能へのアクセスを提供します。
Anthropic では正式にサポートされていませんが、このライブラリを使用すると興味深い会話型アプリケーションが可能になります。
これにより次のことが可能になります。
さまざまなトピックについて質問してください。クロードは、時事問題、ポップ カルチャー、スポーツなどについてチャットできます。
複雑なトピックについて役立つ説明が得られます。クロードに概念やアイデアを簡単な言葉で説明してもらいます。
長いテキストやドキュメントから要約を生成します。ファイルパスを添付ファイルとしてクロードに渡すだけで、簡潔な概要が返されます。
自由回答のプロンプトやアイデアに対して思慮深い応答を受け取ります。クロードはアイデアをブレインストーミングし、概念を拡張し、哲学的な議論を行うことができます。
画像を送信し、クロードに分析させましょう。
pip install unofficial-claude-api
pip uninstall unofficial-claude-api
(この README をスクロールすると、手動による代替方法も見つかります)
from sys import exit as sys_exit
from claude_api . client import (
ClaudeAPIClient ,
SendMessageResponse ,
)
from claude_api . session import SessionData , get_session_data
from claude_api . errors import ClaudeAPIError , MessageRateLimitError , OverloadError
# Wildcard import will also work the same as above
# from claude_api import *
# List of attachments filepaths, up to 5, max 10 MB each
FILEPATH_LIST = [
"test1.txt" ,
"test2.txt" ,
]
# This function will automatically retrieve a SessionData instance using selenium
# It will auto gather cookie session, user agent and organization ID.
# Omitting profile argument will use default Firefox profile
session : SessionData = get_session_data ()
# Initialize a client instance using a session
# Optionally change the requests timeout parameter to best fit your needs...default to 240 seconds.
client = ClaudeAPIClient ( session , timeout = 240 )
# Create a new chat and cache the chat_id
chat_id = client . create_chat ()
if not chat_id :
# This will not throw MessageRateLimitError
# But it still means that account has no more messages left.
print ( " n Message limit hit, cannot create chat..." )
sys_exit ( 1 )
try :
# Used for sending message with or without attachments
# Returns a SendMessageResponse instance
res : SendMessageResponse = client . send_message (
chat_id , "Hello!" , attachment_paths = FILEPATH_LIST
)
# Inspect answer
if res . answer :
print ( res . answer )
else :
# Inspect response status code and raw answer bytes
print ( f" n Error code { res . status_code } , raw_answer: { res . raw_answer } " )
except ClaudeAPIError as e :
# Identify the error
if isinstance ( e , MessageRateLimitError ):
# The exception will hold these informations about the rate limit:
print ( f" n Message limit hit, resets at { e . reset_date } " )
print ( f" n { e . sleep_sec } seconds left until -> { e . reset_timestamp } " )
elif isinstance ( e , OverloadError ):
print ( f" n Overloaded error: { e } " )
else :
print ( f" n Got unknown Claude error: { e } " )
finally :
# Perform chat deletion for cleanup
client . delete_chat ( chat_id )
# Get a list of all chats ids
all_chat_ids = client . get_all_chat_ids ()
# Delete all chats
for chat in all_chat_ids :
client . delete_chat ( chat )
# Or by using a shortcut utility
client . delete_all_chats ()
sys_exit ( 0 )
# A convenience method to access a specific chat conversation is
chat_data = client . get_chat_data ( chat_id )
chat_data
/api/organizations/{organization_id}/chat_conversations/{chat_id}
を呼び出して返されるのと同じ JSON 辞書になります。
この JSON の例は次のとおりです。
{
"uuid" : " <ConversationUUID> " ,
"name" : " " ,
"summary" : " " ,
"model" : null ,
"created_at" : " 1997-12-25T13:33:33.959409+00:00 " ,
"updated_at" : " 1997-12-25T13:33:39.487561+00:00 " ,
"chat_messages" : [
{
"uuid" : " <MessageUUID> " ,
"text" : " Who is Bugs Bunny? " ,
"sender" : " human " ,
"index" : 0 ,
"created_at" : " 1997-12-25T13:33:39.487561+00:00 " ,
"updated_at" : " 1997-12-25T13:33:40.959409+00:00 " ,
"edited_at" : null ,
"chat_feedback" : null ,
"attachments" : []
},
{
"uuid" : " <MessageUUID> " ,
"text" : " <Claude response's text> " ,
"sender" : " assistant " ,
"index" : 1 ,
"created_at" : " 1997-12-25T13:33:40.959409+00:00 " ,
"updated_at" : " 1997-12-25T13:33:42.487561+00:00 " ,
"edited_at" : null ,
"chat_feedback" : null ,
"attachments" : []
}
]
}
何らかの理由で、Selenium を使用した自動セッション収集を回避したい場合は、次のようにClaudeAPIClient
コンストラクターのSessionData
クラスを手動で作成する必要があります。
from claude_api . session import SessionData
cookie_header_value = "The entire Cookie header value string when you visit https://claude.ai/chats"
user_agent = "User agent to use, required"
# You can retrieve this string from /api/organizations endpoint
# If omitted or None it will be auto retrieved when instantiating ClaudeAPIClient
organization_id = "<org_uuid>"
session = SessionData ( cookie_header_value , user_agent , organization_id )
注 (ユーザー/パスワード認証のないプロキシのみがサポートされています)
すべてのリクエストに対して HTTP プロキシを設定する場合は、次の例に従います。
from claude_api . client import HTTPProxy , ClaudeAPIClient
from claude_api . session import SessionData
# Create HTTPProxy instance
http_proxy = HTTPProxy (
"the.proxy.ip.addr" , # Proxy IP
8080 , # Proxy port
use_ssl = False # Set to True if proxy uses HTTPS schema
)
session = SessionData (...)
# Give the proxy instance to ClaudeAPIClient constructor, along with session data.
client = ClaudeAPIClient ( session , proxy = http_proxy )
代わりに SOCKS プロキシを選択する場合も手順は同じですが、代わりにSOCKSProxy
クラスをインポートし、バージョン番号を使用して構成する必要があります。
from claude_api . client import SOCKSProxy , ClaudeAPIClient
from claude_api . session import SessionData
# Create SOCKSProxy instance
socks_proxy = SOCKSProxy (
"the.proxy.ip.addr" , # Proxy IP
8080 , # Proxy port
version_num = 5 # Either 4 or 5, defaults to 4
)
session = SessionData (...)
# Give the proxy instance to ClaudeAPIClient constructor as usual
client = ClaudeAPIClient ( session , proxy = socks_proxy )
使用するモデルを変更したい場合、または最新のモデルに移行できないアカウントがある場合は、次のようにClaudeAPIClient
コンストラクターのmodel_name
文字列パラメーターをオーバーライドできます。
from claude_api . client import ClaudeAPIClient
from claude_api . session import SessionData
session = SessionData (...)
# Defaults to None (latest Claude model)
client = ClaudeAPIClient ( session , model_name = "claude-2.0" )
公式 API ドキュメントからmodel_name
文字列を取得できます。
問題 #23 で報告されているように、Selenium を使用してSessionData
クラスを自動取得するときに 403 エラーが発生し、アカウントに複数の組織がある場合は、取得したデフォルトの組織をオーバーライドすることができます。
デフォルトでは、 get_session_data
ここで見つかった結果配列から最後の組織を取得します。パラメータorganization_index
を使用して、フェッチするインデックスをオーバーライドできます。
from claude_api . session import get_session_data
# Defaults to -1 (last entry)
session = get_session_data ( organization_index = - 1 )
この API の使用中に発生する可能性のある一般的なエラーは次のとおりです。
エラー [400] (添付ファイルを準備できません):
このエラーを修正するには、添付ファイルの拡張子を .txt などに変更します。デフォルトでは、この API は未知のファイル拡張子に対してオクテット ストリームにフォールバックするため、クロードはファイル データを拒否する可能性があります。
エラー [403] :
*このバグはバージョン 0.2.2 以降ではすでに修正されているはずです*
この API は、 send_message
呼び出すときに 403 status_code を返すことがあります。これが発生した場合は、次のことを探すことをお勧めします。
IP ロケーションが許可されているかどうかを確認してください。米国/英国である必要があります。他のロケーションは散発的に機能する可能性があります。
同じプロンプト/ファイルを何度も送信しようとせず、代わりにしばらく待ってから入力を変更してください。
このリポジトリは、claude.ai の無料アカウントを自動化するための非公式 API を提供します。この API は Anthropic によって承認、サポート、または保守されていないことに注意してください。ご自身の判断とリスクにおいてご使用ください。 Anthropic は、いつでも公式製品または API に変更を加える可能性があり、その変更はこの非公式 API の機能に影響を与える可能性があります。当社は、本APIを利用して取得される情報およびデータの正確性、信頼性、安全性を保証するものではありません。このリポジトリを使用することにより、その使用から生じる可能性のある損害、問題、または結果に対して管理者が責任を負わないことに同意するものとします。 Anthropic の公式ドキュメントと利用規約を必ず参照してください。このプロジェクトは、Anthropic とは関係のない寄稿者によって独立して維持されています。
寄付を希望される方には事前に多大な感謝を申し上げます:)