Esta API de Python no oficial proporciona acceso a las capacidades de conversación de Claude AI de Anthropic a través de una sencilla interfaz de mensajería de chat.
Si bien Anthropic no admite oficialmente, esta biblioteca puede permitir aplicaciones conversacionales interesantes.
Permite:
Haga preguntas sobre una amplia variedad de temas. Claude puede conversar sobre eventos actuales, cultura pop, deportes y más.
Obtenga explicaciones útiles sobre temas complejos. Pídale a Claude que explique conceptos e ideas en términos simples.
Genera resúmenes a partir de textos o documentos extensos. Simplemente proporcione la ruta del archivo como archivo adjunto a Claude y obtenga un resumen conciso.
Reciba respuestas reflexivas a sugerencias e ideas abiertas. Claude puede generar ideas, ampliar conceptos y tener debates filosóficos.
Envía imágenes y deja que Claude las analice por ti.
pip install unofficial-claude-api
pip uninstall unofficial-claude-api
(al desplazarse por este archivo README encontrará también una alternativa manual)
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
será el mismo diccionario json devuelto al llamar /api/organizations/{organization_id}/chat_conversations/{chat_id}
Aquí hay un ejemplo de este 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" : []
}
]
}
Si por alguna razón desea evitar la recopilación automática de sesiones usando selenio, solo necesita crear manualmente una clase SessionData
para el constructor ClaudeAPIClient
, así...
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 )
NOTA (Solo se admiten servidores proxy sin autenticación de usuario/contraseña)
Si desea configurar un proxy HTTP para todas las solicitudes, siga este ejemplo:
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 desea optar por los proxies SOCKS, el procedimiento es el mismo, pero debe importar la clase SOCKSProxy
y configurarla con el número de versión.
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 )
En caso de que desee cambiar el modelo utilizado, o tenga cuentas que no puedan migrar al último modelo, puede anular el parámetro de cadena model_name
del constructor ClaudeAPIClient
de esta manera:
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" )
Puede recuperar las cadenas model_name
de los documentos oficiales de la API.
Como se informó en el número 23, si encuentra errores 403 al usar Selenium para recuperar automáticamente una clase SessionData
y su cuenta tiene varias organizaciones, es posible que desee anular la organización predeterminada recuperada.
De forma predeterminada, get_session_data
recupera la última organización de la matriz de resultados que se encuentra aquí. Puede anular el índice a recuperar utilizando el parámetro organization_index
:
from claude_api . session import get_session_data
# Defaults to -1 (last entry)
session = get_session_data ( organization_index = - 1 )
Algunos errores comunes que pueden surgir durante el uso de esta API:
Error [400] (No se puede preparar el archivo adjunto):
Para corregir este error, cambie la extensión del archivo adjunto a algo como .txt, ya que de forma predeterminada esta API recurrirá a octet-stream para extensiones de archivo desconocidas, Claude puede rechazar los datos del archivo.
Error [403] :
* Este error ya debería estar solucionado después de la versión 0.2.2 *
Esta API en algún momento devolverá un código de estado 403 al llamar send_message
. Cuando esto suceda, se recomienda buscar estas cosas:
Verifique si su ubicación IP está permitida; debe estar en EE. UU./Reino Unido; otras ubicaciones pueden funcionar esporádicamente.
No intente enviar el mismo mensaje/archivo una y otra vez; en lugar de eso, espere un tiempo y cambie la entrada.
Este repositorio proporciona una API no oficial para automatizar cuentas gratuitas en claude.ai. Tenga en cuenta que Anthropic no respalda, respalda ni mantiene esta API. Úselo bajo su propia discreción y riesgo. Anthropic puede realizar cambios en su producto oficial o API en cualquier momento, lo que podría afectar la funcionalidad de esta API no oficial. No garantizamos la exactitud, confiabilidad o seguridad de la información y los datos recuperados mediante esta API. Al utilizar este repositorio, usted acepta que los mantenedores no son responsables de ningún daño, problema o consecuencia que pueda surgir de su uso. Consulte siempre la documentación oficial y los términos de uso de Anthropic. Este proyecto es mantenido de forma independiente por contribuyentes que no están afiliados a Anthropic.
Muchas gracias de antemano a cualquiera que quiera donar :)