Python API อย่างไม่เป็นทางการนี้ให้การเข้าถึงความสามารถด้านการสนทนาของ Claude AI ของ Anthropic ผ่านอินเทอร์เฟซการส่งข้อความแชทที่เรียบง่าย
แม้ว่า Anthropic จะไม่ได้รับการสนับสนุนอย่างเป็นทางการ แต่ไลบรารีนี้สามารถเปิดใช้งานแอปพลิเคชันการสนทนาที่น่าสนใจได้
ช่วยให้:
ถามคำถามเกี่ยวกับหัวข้อที่หลากหลาย Claude สามารถพูดคุยเกี่ยวกับเหตุการณ์ปัจจุบัน วัฒนธรรมป๊อป กีฬา และอื่นๆ อีกมากมาย
รับคำอธิบายที่เป็นประโยชน์เกี่ยวกับหัวข้อที่ซับซ้อน ขอให้โคลดอธิบายแนวคิดและแนวคิดด้วยคำศัพท์ง่ายๆ
สร้างบทสรุปจากข้อความหรือเอกสารขนาดยาว เพียงให้ filepath เป็นไฟล์แนบกับ Claude และรับข้อมูลสรุปที่กระชับกลับมา
รับคำตอบที่รอบคอบต่อคำแนะนำและแนวคิดปลายเปิด Claude สามารถระดมความคิด ขยายแนวคิด และอภิปรายเชิงปรัชญาได้
ส่งภาพและให้ Claude วิเคราะห์ให้คุณ
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" : " <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 )
หมายเหตุ (รองรับเฉพาะพร็อกซีที่ไม่มีการตรวจสอบผู้ใช้/รหัสผ่านเท่านั้น)
หากคุณต้องการตั้งค่าพร็อกซี 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 นี้จะถอยกลับไปเป็น octet-stream สำหรับนามสกุลไฟล์ที่ไม่รู้จัก Claude อาจปฏิเสธข้อมูลไฟล์
ข้อผิดพลาด [403] :
* ข้อผิดพลาดนี้ควรได้รับการแก้ไขแล้วหลังจากเวอร์ชัน 0.2.2 *
API นี้จะส่งคืน status_code 403 ในบางครั้งเมื่อเรียก send_message
เมื่อเกิดเหตุการณ์นี้ขึ้น ขอแนะนำให้ค้นหาสิ่งเหล่านี้:
ตรวจสอบว่าตำแหน่ง IP ของคุณได้รับอนุญาตหรือไม่ ควรอยู่ในสหรัฐอเมริกา/สหราชอาณาจักร ส่วนตำแหน่งอื่นๆ อาจทำงานเป็นระยะๆ
อย่าพยายามส่งข้อความพร้อมท์/ไฟล์เดิมซ้ำแล้วซ้ำเล่า ให้รอสักครู่แล้วเปลี่ยนอินพุตแทน
พื้นที่เก็บข้อมูลนี้มี API อย่างไม่เป็นทางการสำหรับการดำเนินการบัญชีฟรีบน claude.ai โดยอัตโนมัติ โปรดทราบว่า API นี้ไม่ได้รับการรับรอง สนับสนุน หรือดูแลรักษาโดย Anthropic ใช้ตามดุลยพินิจและความเสี่ยงของคุณเอง Anthropic อาจทำการเปลี่ยนแปลงผลิตภัณฑ์หรือ API อย่างเป็นทางการของตนได้ตลอดเวลา ซึ่งอาจส่งผลต่อการทำงานของ API ที่ไม่เป็นทางการนี้ เราไม่รับประกันความถูกต้อง ความน่าเชื่อถือ หรือความปลอดภัยของข้อมูลและข้อมูลที่ดึงมาโดยใช้ API นี้ โดยการใช้พื้นที่เก็บข้อมูลนี้ คุณยอมรับว่าผู้ดูแลจะไม่รับผิดชอบต่อความเสียหาย ปัญหา หรือผลที่ตามมาใด ๆ ที่อาจเกิดขึ้นจากการใช้งาน โปรดดูเอกสารอย่างเป็นทางการและข้อกำหนดการใช้งานของ Anthropic เสมอ โครงการนี้ได้รับการดูแลอย่างอิสระโดยผู้ร่วมให้ข้อมูลที่ไม่เกี่ยวข้องกับ Anthropic
ขอบคุณมากล่วงหน้าสำหรับทุกคนที่ต้องการบริจาค :)