توفر واجهة برمجة تطبيقات Python غير الرسمية هذه إمكانية الوصول إلى إمكانيات المحادثة الخاصة بـ Anthropic's Claude AI من خلال واجهة مراسلة دردشة بسيطة.
على الرغم من أن هذه المكتبة غير مدعومة رسميًا من قبل Anthropic، إلا أنها يمكنها تمكين تطبيقات المحادثة المثيرة للاهتمام.
يسمح بـ:
اطرح أسئلة حول مجموعة واسعة من المواضيع. يستطيع كلود الدردشة حول الأحداث الجارية والثقافة الشعبية والرياضة والمزيد.
احصل على تفسيرات مفيدة حول المواضيع المعقدة. اطلب من كلود أن يشرح المفاهيم والأفكار بعبارات بسيطة.
إنشاء ملخصات من النصوص الطويلة أو المستندات. ما عليك سوى تقديم مسار الملف كمرفق إلى كلود والحصول على ملخص موجز.
تلقي استجابات مدروسة للمطالبات والأفكار المفتوحة. يستطيع كلود تبادل الأفكار والتوسع في المفاهيم وإجراء مناقشات فلسفية.
أرسل الصور ودع كلود يحللها لك.
pip install unofficial-claude-api
pip uninstall unofficial-claude-api
(بالتمرير خلال هذا الملف التمهيدي ستجد أيضًا بديلاً يدويًا)
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" : " <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" : []
}
]
}
إذا كنت ترغب لأي سبب من الأسباب في تجنب التجميع التلقائي للجلسات باستخدام السيلينيوم، فأنت بحاجة فقط إلى إنشاء فئة 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 = "<org_uuid>"
session = SessionData ( cookie_header_value , user_agent , organization_id )
ملاحظة (يتم دعم فقط الوكلاء الذين ليس لديهم مصادقة مستخدم/passwd)
إذا كنت ترغب في تعيين وكيل 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 عند استخدام السيلينيوم لاسترداد فئة 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 )
بعض الأخطاء الشائعة التي قد تنشأ أثناء استخدام واجهة برمجة التطبيقات هذه:
خطأ [400] (تعذر تحضير الملف المرفق):
لإصلاح هذا الخطأ، قم بتغيير امتداد الملف المرفق إلى شيء مثل .txt، نظرًا لأن واجهة برمجة التطبيقات هذه سترجع بشكل افتراضي إلى تدفق ثماني لامتدادات الملفات غير المعروفة، وقد يرفض كلود بيانات الملف.
خطأ [403] :
* يجب أن يتم إصلاح هذا الخطأ بالفعل بعد الإصدار 0.2.2 *
ستعيد واجهة برمجة التطبيقات هذه في وقت ما رمز الحالة 403 عند الاتصال send_message
، وعندما يحدث ذلك، يوصى بالبحث عن هذه الأشياء:
تحقق مما إذا كان موقع IP الخاص بك مسموحًا به، ويجب أن يكون في الولايات المتحدة/المملكة المتحدة، وقد تعمل المواقع الأخرى بشكل متقطع.
لا تحاول إرسال نفس المطالبة/الملف مرارًا وتكرارًا، بل انتظر بعض الوقت وقم بتغيير الإدخال.
يوفر هذا المستودع واجهة برمجة تطبيقات غير رسمية لأتمتة الحسابات المجانية على claude.ai. يرجى ملاحظة أن واجهة برمجة التطبيقات هذه غير معتمدة أو مدعومة أو صيانتها بواسطة Anthropic. استخدامه وفقا لتقديرك والمخاطر الخاصة بك. يجوز لشركة Anthropic إجراء تغييرات على منتجها الرسمي أو واجهات برمجة التطبيقات (APIs) الخاصة بها في أي وقت، مما قد يؤثر على وظيفة واجهة برمجة التطبيقات (API) غير الرسمية هذه. نحن لا نضمن دقة أو موثوقية أو أمان المعلومات والبيانات التي يتم استردادها باستخدام واجهة برمجة التطبيقات هذه. باستخدام هذا المستودع، فإنك توافق على أن المشرفين ليسوا مسؤولين عن أي أضرار أو مشاكل أو عواقب قد تنشأ عن استخدامه. قم دائمًا بالرجوع إلى الوثائق الرسمية وشروط الاستخدام الخاصة بشركة Anthropic. يتم الحفاظ على هذا المشروع بشكل مستقل من قبل المساهمين الذين لا ينتمون إلى Anthropic.
وشكرًا جزيلًا مقدمًا لأي شخص يريد التبرع :)