Diese inoffizielle Python-API bietet über eine einfache Chat-Messaging-Schnittstelle Zugriff auf die Konversationsfunktionen von Claude AI von Anthropic.
Obwohl diese Bibliothek nicht offiziell von Anthropic unterstützt wird, kann sie interessante Konversationsanwendungen ermöglichen.
Es ermöglicht:
Stellen Sie Fragen zu den unterschiedlichsten Themen. Claude kann über aktuelle Ereignisse, Popkultur, Sport und mehr chatten.
Erhalten Sie hilfreiche Erklärungen zu komplexen Themen. Bitten Sie Claude, Konzepte und Ideen in einfachen Worten zu erklären.
Generieren Sie Zusammenfassungen aus Langtexten oder Dokumenten. Geben Sie einfach den Dateipfad als Anhang an Claude weiter und Sie erhalten eine kurze Zusammenfassung zurück.
Erhalten Sie durchdachte Antworten auf offene Aufforderungen und Ideen. Claude kann Ideen sammeln, Konzepte vertiefen und philosophische Diskussionen führen.
Senden Sie Bilder und lassen Sie Claude sie für Sie analysieren.
pip install unofficial-claude-api
pip uninstall unofficial-claude-api
(Wenn Sie durch diese README-Datei scrollen, finden Sie auch eine manuelle Alternative.)
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
ist dasselbe JSON-Wörterbuch, das durch den Aufruf von /api/organizations/{organization_id}/chat_conversations/{chat_id}
zurückgegeben wird.
Hier ist ein Beispiel für diesen 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" : []
}
]
}
Wenn Sie aus irgendeinem Grund die automatische Sitzungserfassung mit Selen vermeiden möchten, müssen Sie nur manuell eine SessionData
Klasse für ClaudeAPIClient
-Konstruktor erstellen, etwa so ...
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 )
HINWEIS (Es werden nur Proxys ohne Benutzer-/Passwort-Authentifizierung unterstützt.)
Wenn Sie einen HTTP-Proxy für alle Anfragen festlegen möchten, folgen Sie diesem Beispiel:
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 )
Wenn Sie sich stattdessen für SOCKS-Proxys entscheiden möchten, ist die Vorgehensweise dieselbe, Sie müssen jedoch stattdessen die SOCKSProxy
-Klasse importieren und sie mit der Versionsnummer konfigurieren.
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 )
Falls Sie das verwendete Modell ändern möchten oder Konten haben, die nicht auf das neueste Modell migrieren können, können Sie den Zeichenfolgenparameter model_name
des ClaudeAPIClient
-Konstruktors wie folgt überschreiben:
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" )
Sie können die Zeichenfolgen model_name
aus den offiziellen API-Dokumenten abrufen
Wie in Problem Nr. 23 berichtet, sollten Sie die abgerufene Standardorganisation überschreiben, wenn Sie bei der Verwendung von Selenium zum automatischen Abrufen einer SessionData
Klasse auf 403-Fehler stoßen und Ihr Konto über mehrere Organisationen verfügt.
Standardmäßig ruft get_session_data
die letzte Organisation aus dem hier gefundenen Ergebnisarray ab. Sie können den abzurufenden Index überschreiben, indem Sie den Parameter organization_index
verwenden:
from claude_api . session import get_session_data
# Defaults to -1 (last entry)
session = get_session_data ( organization_index = - 1 )
Einige häufige Fehler, die bei der Verwendung dieser API auftreten können:
Fehler [400] (Dateianhang konnte nicht vorbereitet werden):
Um diesen Fehler zu beheben, ändern Sie die Erweiterung der Anhangdatei in etwa .txt. Da diese API standardmäßig auf Octet-Stream für unbekannte Dateierweiterungen zurückgreift, lehnt Claude die Dateidaten möglicherweise ab.
Fehler [403] :
* Dieser Fehler sollte bereits nach Version 0.2.2 behoben sein *
Diese API gibt beim Aufruf von send_message
manchmal den Statuscode 403 zurück. In diesem Fall wird empfohlen, nach folgenden Dingen zu suchen:
Überprüfen Sie, ob Ihr IP-Standort zulässig ist. Er sollte sich in den USA/Großbritannien befinden. Andere Standorte funktionieren möglicherweise sporadisch.
Versuchen Sie nicht, die gleiche Eingabeaufforderung/Datei immer wieder zu senden, sondern warten Sie stattdessen einige Zeit und ändern Sie die Eingabe.
Dieses Repository bietet eine inoffizielle API zur Automatisierung kostenloser Konten auf claude.ai. Bitte beachten Sie, dass diese API von Anthropic nicht unterstützt, unterstützt oder verwaltet wird. Die Nutzung erfolgt nach eigenem Ermessen und auf eigenes Risiko. Anthropic kann jederzeit Änderungen an seinem offiziellen Produkt oder seinen APIs vornehmen, die sich auf die Funktionalität dieser inoffiziellen API auswirken könnten. Wir übernehmen keine Gewähr für die Genauigkeit, Zuverlässigkeit oder Sicherheit der über diese API abgerufenen Informationen und Daten. Durch die Nutzung dieses Repositorys erklären Sie sich damit einverstanden, dass die Betreuer nicht für Schäden, Probleme oder Konsequenzen verantwortlich sind, die sich aus seiner Nutzung ergeben können. Beachten Sie immer die offizielle Dokumentation und Nutzungsbedingungen von Anthropic. Dieses Projekt wird unabhängig von Mitwirkenden gepflegt, die nicht mit Anthropic verbunden sind.
Ein großes Dankeschön im Voraus an alle, die spenden möchten :)