这个非官方的 Python API 通过简单的聊天消息界面提供对 Anthropic 的 Claude AI 的对话功能的访问。
虽然没有得到 Anthropic 的正式支持,但该库可以启用有趣的对话应用程序。
它允许:
提出有关各种主题的问题。克劳德可以谈论时事、流行文化、体育等等。
获取有关复杂主题的有用解释。请克劳德用简单的术语解释概念和想法。
从长文本或文档生成摘要。只需将文件路径作为附件提供给 Claude,即可获得简洁的摘要。
收到对开放式提示和想法的深思熟虑的回应。克劳德可以集思广益,扩展概念,并进行哲学讨论。
发送图像并让 Claude 为您分析。
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
将与调用/api/organizations/{organization_id}/chat_conversations/{chat_id}
返回的 json 字典相同
下面是这个 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" : [] } ] }
如果出于某种原因您想避免使用 selenium 进行自动会话收集,您只需为ClaudeAPIClient
构造函数手动创建一个SessionData
类,如下所示...
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 )
如果您想更改使用的模型,或者您的帐户无法迁移到最新模型,您可以覆盖ClaudeAPIClient
构造函数的model_name
字符串参数,如下所示:
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" )
您可以从官方 API 文档中检索model_name
字符串
如问题 #23 中所述,如果您在使用 Selenium 自动检索SessionData
类时遇到 403 错误,并且您的帐户有多个组织,您可能需要覆盖检索到的默认组织。
默认情况下, 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] :
*这个bug在0.2.2版本之后应该已经修复了*
当调用send_message
时,此 api 有时会返回 403 status_code,当发生这种情况时,建议查找以下内容:
检查您的 IP 位置是否允许,应该在美国/英国,其他位置可能会偶尔工作。
不要尝试一遍又一遍地发送相同的提示/文件,而是等待一段时间,然后更改输入。
该存储库提供了一个非官方 API,用于自动化 claude.ai 上的免费帐户。请注意,该 API 并未得到 Anthropic 的认可、支持或维护。您自行决定使用它并承担风险。 Anthropic 可能随时对其官方产品或 API 进行更改,这可能会影响该非官方 API 的功能。我们不保证使用此 API 检索的信息和数据的准确性、可靠性或安全性。通过使用此存储库,您同意维护者对其使用可能引起的任何损坏、问题或后果不承担任何责任。请务必参阅 Anthropic 的官方文档和使用条款。该项目由不隶属于 Anthropic 的贡献者独立维护。
预先非常感谢任何想要捐赠的人:)