Cette API Python non officielle donne accès aux capacités conversationnelles de Claude AI d'Anthropic via une simple interface de messagerie de chat.
Bien qu'elle ne soit pas officiellement prise en charge par Anthropic, cette bibliothèque peut permettre des applications conversationnelles intéressantes.
Il permet :
Posez des questions sur une grande variété de sujets. Claude peut discuter de l'actualité, de la culture pop, du sport et bien plus encore.
Obtenez des explications utiles sur des sujets complexes. Demandez à Claude d'expliquer les concepts et les idées en termes simples.
Générez des résumés à partir de longs textes ou documents. Donnez simplement le chemin du fichier en pièce jointe à Claude et récupérez un résumé concis.
Recevez des réponses réfléchies aux invites et idées ouvertes. Claude peut réfléchir à des idées, développer des concepts et avoir des discussions philosophiques.
Envoyez des images et laissez Claude les analyser pour vous.
pip install unofficial-claude-api
pip uninstall unofficial-claude-api
(en parcourant ce README, vous trouverez également une alternative manuelle)
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
sera le même dictionnaire json renvoyé en appelant /api/organizations/{organization_id}/chat_conversations/{chat_id}
Voici un exemple de ce json :
{ "uuid" : "" , "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" : "" , "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" : "" , "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" : [] } ] }
Si, pour une raison quelconque, vous souhaitez éviter la collecte automatique de sessions à l'aide de sélénium, il vous suffit de créer manuellement une classe SessionData
pour le constructeur ClaudeAPIClient
, comme ceci...
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 = ""
session = SessionData ( cookie_header_value , user_agent , organization_id )
REMARQUE (Seuls les proxys sans authentification utilisateur/mot de passe sont pris en charge)
Si vous souhaitez définir un proxy HTTP pour toutes les requêtes, suivez cet exemple :
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 )
Si vous souhaitez plutôt opter pour les proxys SOCKS, la procédure est la même, mais vous devez plutôt importer la classe SOCKSProxy
, en la configurant avec le numéro de version.
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 )
Si vous souhaitez modifier le modèle utilisé ou si vous avez des comptes qui ne peuvent pas migrer vers le dernier modèle, vous pouvez remplacer le paramètre de chaîne model_name
du constructeur ClaudeAPIClient
comme ceci :
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" )
Vous pouvez récupérer les chaînes model_name
à partir de la documentation officielle de l'API
Comme indiqué dans le numéro 23, si vous rencontrez des erreurs 403 lorsque vous utilisez Selenium pour récupérer automatiquement une classe SessionData
et que votre compte possède plusieurs organisations, vous souhaiterez peut-être remplacer l'organisation par défaut récupérée.
Par défaut, get_session_data
récupère la dernière organisation du tableau de résultats trouvé ici. Vous pouvez remplacer l'index à récupérer en utilisant le paramètre organization_index
:
from claude_api . session import get_session_data
# Defaults to -1 (last entry)
session = get_session_data ( organization_index = - 1 )
Quelques erreurs courantes pouvant survenir lors de l'utilisation de cette API :
Erreur [400] (Impossible de préparer la pièce jointe) :
Pour corriger cette erreur, modifiez l'extension du fichier joint en quelque chose comme .txt, car par défaut cette API reviendra au flux d'octets pour les extensions de fichier inconnues, Claude peut rejeter les données du fichier.
Erreur [403] :
* Ce bug devrait déjà être corrigé après la version 0.2.2 *
Cette API renverra parfois un status_code 403 lors de l'appel send_message
, lorsque cela se produit, il est recommandé de rechercher ces éléments :
Vérifiez si votre emplacement IP est autorisé, doit être aux États-Unis/au Royaume-Uni, d'autres emplacements peuvent fonctionner sporadiquement.
N'essayez pas d'envoyer la même invite/le même fichier encore et encore, attendez plutôt un certain temps et modifiez l'entrée.
Ce référentiel fournit une API non officielle pour automatiser les comptes gratuits sur claude.ai. Veuillez noter que cette API n'est pas approuvée, prise en charge ou maintenue par Anthropic. Utilisez-le à votre propre discrétion et à vos risques. Anthropic peut apporter des modifications à son produit officiel ou à ses API à tout moment, ce qui pourrait affecter la fonctionnalité de cette API non officielle. Nous ne garantissons pas l'exactitude, la fiabilité ou la sécurité des informations et des données récupérées à l'aide de cette API. En utilisant ce référentiel, vous acceptez que les responsables ne soient pas responsables des dommages, problèmes ou conséquences pouvant découler de son utilisation. Référez-vous toujours à la documentation officielle et aux conditions d'utilisation d'Anthropic. Ce projet est maintenu indépendamment par des contributeurs qui ne sont pas affiliés à Anthropic.
Un immense merci d'avance à tous ceux qui souhaitent faire un don :)