API Python tidak resmi ini menyediakan akses ke kemampuan percakapan Claude AI Anthropic melalui antarmuka pesan obrolan sederhana.
Meskipun tidak didukung secara resmi oleh Anthropic, perpustakaan ini dapat mengaktifkan aplikasi percakapan yang menarik.
Hal ini memungkinkan untuk:
Ajukan pertanyaan tentang berbagai macam topik. Claude dapat mengobrol tentang kejadian terkini, budaya pop, olahraga, dan banyak lagi.
Dapatkan penjelasan bermanfaat tentang topik yang kompleks. Minta Claude untuk menjelaskan konsep dan ide secara sederhana.
Hasilkan ringkasan dari teks atau dokumen panjang. Berikan saja jalur file sebagai lampiran ke Claude dan dapatkan ringkasan singkatnya.
Menerima tanggapan yang bijaksana terhadap petunjuk dan ide terbuka. Claude dapat melakukan brainstorming ide, memperluas konsep, dan melakukan diskusi filosofis.
Kirim gambar dan biarkan Claude menganalisisnya untuk Anda.
pip install unofficial-claude-api
pip uninstall unofficial-claude-api
(menelusuri README ini Anda juga akan menemukan alternatif 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
akan menjadi kamus json yang sama yang dikembalikan dengan memanggil /api/organizations/{organization_id}/chat_conversations/{chat_id}
Berikut ini contoh json ini:
{ "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" : [] } ] }
Jika karena alasan apa pun Anda ingin menghindari pengumpulan sesi otomatis menggunakan Selenium, Anda hanya perlu membuat kelas SessionData
secara manual untuk konstruktor ClaudeAPIClient
, seperti...
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 )
CATATAN (Hanya proxy tanpa otentikasi pengguna/passwd yang didukung)
Jika Anda ingin menyetel proksi HTTP untuk semua permintaan, ikuti contoh ini:
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 )
Jika Anda ingin memilih proksi SOCKS, prosedurnya sama, tetapi Anda perlu mengimpor kelas SOCKSProxy
dan mengonfigurasinya dengan nomor versi.
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 )
Jika Anda ingin mengubah model yang digunakan, atau Anda memiliki akun yang tidak dapat bermigrasi ke model terbaru, Anda dapat mengganti parameter string model_name
dari konstruktor ClaudeAPIClient
seperti:
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" )
Anda dapat mengambil string model_name
dari dokumen API resmi
Seperti yang dilaporkan dalam edisi #23, jika Anda mengalami kesalahan 403 saat menggunakan Selenium untuk mengambil kelas SessionData
secara otomatis dan akun Anda memiliki beberapa organisasi, Anda mungkin ingin mengganti organisasi default yang diambil.
Secara default get_session_data
mengambil organisasi terakhir dari array hasil yang ditemukan di sini. Anda dapat mengganti indeks yang akan diambil dengan menggunakan parameter organization_index
:
from claude_api . session import get_session_data
# Defaults to -1 (last entry)
session = get_session_data ( organization_index = - 1 )
Beberapa kesalahan umum yang mungkin timbul selama penggunaan API ini:
Kesalahan [400] (Tidak dapat menyiapkan lampiran file):
Untuk memperbaiki kesalahan ini, ubah ekstensi file lampiran menjadi seperti .txt, karena secara default api ini akan kembali ke aliran oktet untuk ekstensi file yang tidak diketahui, Claude mungkin menolak data file.
Kesalahan [403] :
* Bug ini seharusnya sudah diperbaiki setelah versi 0.2.2 *
Api ini suatu saat akan mengembalikan 403 status_code saat memanggil send_message
, jika ini terjadi disarankan untuk mencari hal-hal berikut:
Periksa apakah lokasi IP Anda diperbolehkan, harus di AS/Inggris, lokasi lain mungkin berfungsi secara sporadis.
Jangan mencoba mengirim prompt/file yang sama berulang kali, tunggu beberapa saat, dan ubah input.
Repositori ini menyediakan API tidak resmi untuk mengotomatisasi akun gratis di claude.ai. Harap dicatat bahwa API ini tidak didukung, didukung, atau dikelola oleh Anthropic. Gunakan sesuai kebijaksanaan dan risiko Anda sendiri. Anthropic dapat membuat perubahan pada produk atau API resminya kapan saja, yang dapat memengaruhi fungsi API tidak resmi ini. Kami tidak menjamin keakuratan, keandalan, atau keamanan informasi dan data yang diambil menggunakan API ini. Dengan menggunakan repositori ini, Anda setuju bahwa pengelola tidak bertanggung jawab atas segala kerusakan, masalah, atau konsekuensi yang mungkin timbul dari penggunaannya. Selalu mengacu pada dokumentasi resmi Anthropic dan ketentuan penggunaan. Proyek ini dikelola secara independen oleh kontributor yang tidak berafiliasi dengan Anthropic.
Terima kasih banyak sebelumnya kepada siapapun yang ingin berdonasi :)