Этот неофициальный API Python обеспечивает доступ к диалоговым возможностям 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
будет тем же словарем JSON, который возвращается при вызове /api/organizations/{organization_id}/chat_conversations/{chat_id}
Вот пример этого 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" : [] } ] }
Если по какой-либо причине вы хотите избежать автоматического сбора сеансов с использованием селена, вам просто нужно вручную создать класс SessionData
для конструктора ClaudeAPIClient
, например так...
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 )
ПРИМЕЧАНИЕ (поддерживаются только прокси без аутентификации пользователя/пароля).
Если вы хотите установить 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 )
Если вы хотите изменить используемую модель или у вас есть учетные записи, которые не могут перейти на последнюю модель, вы можете переопределить строковый параметр model_name
конструктора ClaudeAPIClient
следующим образом:
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" )
Вы можете получить строки model_name
из официальной документации API.
Как сообщается в проблеме № 23, если вы столкнулись с ошибкой 403 при использовании Selenium для автоматического получения класса SessionData
и в вашей учетной записи имеется несколько организаций, вы можете переопределить полученную организацию по умолчанию.
По умолчанию 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 когда-нибудь вернет код статуса 403 при вызове send_message
. Когда это произойдет, рекомендуется искать следующие вещи:
Проверьте, разрешено ли ваше местоположение по IP. Оно должно находиться в США/Великобритании, другие местоположения могут работать время от времени.
Не пытайтесь отправлять одно и то же приглашение/файл снова и снова, вместо этого подождите некоторое время и измените ввод.
Этот репозиторий предоставляет неофициальный API для автоматизации бесплатных учетных записей на claude.ai. Обратите внимание, что этот API не одобрен, не поддерживается и не поддерживается Anthropic. Используйте его на свое усмотрение и на свой риск. Anthropic может в любое время вносить изменения в свой официальный продукт или API, что может повлиять на функциональность этого неофициального API. Мы не гарантируем точность, надежность и безопасность информации и данных, полученных с помощью этого API. Используя этот репозиторий, вы соглашаетесь с тем, что его сопровождающие не несут ответственности за любой ущерб, проблемы или последствия, которые могут возникнуть в результате его использования. Всегда обращайтесь к официальной документации и условиям использования Anthropic. Этот проект поддерживается независимо участниками, не связанными с Anthropic.
Заранее огромное спасибо всем, кто захочет сделать пожертвование :)