wwwzhouhui / claude2-pyapi Goto Github PK
View Code? Open in Web Editor NEW一个使用python 实现Claude2 创建会话、聊天、发送附件、获取历史会话,清理历史记录等功能的api接口,可以对接第三方系统作为二次开发使用。
License: MIT License
一个使用python 实现Claude2 创建会话、聊天、发送附件、获取历史会话,清理历史记录等功能的api接口,可以对接第三方系统作为二次开发使用。
License: MIT License
rt是否可以接入企业微信应用
requests.exceptions.ProxyError: HTTPSConnectionPool(host='claude.ai', port=443): Max retries exceeded with url: /api/organizations (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x00000279EFE8C1C8>: Failed to establish a new connection: [WinError 10061]
由于目标计算机积极拒绝,无法连接。')))
错误:You are out of free messages
似乎有限流策略
def send_message(self, prompt, conversation_id, attachment=None):
# ......
buffer = BytesIO()
c = Curl()
headers_list = [f"{k}: {v}".encode() for k, v in headers.items()]
def stream_callback(data):
json_str = data.decode('utf-8')
decoded_data = re.sub('\n+', '\n', json_str).strip()
data_strings = decoded_data.split('\n')
for data_string in data_strings:
json_str = data_string[6:].strip()
_data = json.loads(json_str)
if 'completion' in _data:
buffer.write(str(_data['completion']).encode('utf-8'))
print(_data['completion'], end="")
c.setopt(CurlOpt.URL, b'https://claude.ai/api/append_message')
c.setopt(CurlOpt.WRITEFUNCTION, stream_callback)
c.setopt(CurlOpt.HTTPHEADER, headers_list)
c.setopt(CurlOpt.POSTFIELDS, payload)
c.impersonate("chrome110")
c.perform()
c.close()
body = buffer.getvalue()
print(body.decode())
return body
报错如下
response = claude.send_message(user_input, conversation_id)
File "E:\0nlp\split\Claude-API-main\claude-api\claude_api.py", line 181, in send_message
c.perform()
File "E:\0nlp\split\Claude-API-main\venv\lib\site-packages\curl_cffi\curl.py", line 251, in perform
self._check_error(ret, action="perform")
File "E:\0nlp\split\Claude-API-main\venv\lib\site-packages\curl_cffi\curl.py", line 106, in _check_error
raise error
curl_cffi.curl.CurlError: Failed to perform, ErrCode: 23, Reason: 'Failure writing output to destination'. This may be a libcurl error, See https://curl.se/libcurl/c/libcurl-errors.html first for more details.
res = json.loads(response.text)时报标题的错误
已经开了美国节点,浏览器端也能正常使用。
Expecting value: line 1 column 1 (char 0)
StopIteration: 0
During handling of the above exception, another exception occurred:
File "C:\Users\Administrator\Desktop\yuni_dev\yuniverse\Claude2-PyAPI-master\claude_api.py", line 152, in send_message
data = json.loads(json_str)
^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Administrator\Desktop\yuni_dev\yuniverse\Claude2-PyAPI-master\claude_api.py", line 345, in
response = claude_api.send_message(prompt, conversation_id)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
请问可以改换端口可以的吗,在那里改呢
如果支持,应该怎么做?
飞书机器人http调用老是超时,能做对接飞书机器人得接口嘛?
求一个对接到gocqhttp的教程
raise RequestsError(str(e), e.code, rsp) from e
curl_cffi.requests.errors.RequestsError: Failed to perform, ErrCode: 7, Reason: 'Failed to connect to 127.0.0.1 port 10808 after 2026 ms: Connection refused'. This may be a libcurl error, See https://curl.se/libcurl/c/libcurl-errors.html first for more details.
作者大大你好!我在测试机上部署claude_flask项目,目前可以正常使用history接口获取历史提问数据。但在请求chat/时请求被挂起。
直接本地调用send_message方法会报 curl的char *不能为str。
由于UUID已经是能正常获取,使用的又是同个header,这让我找不到切入点。
我尝试在curl模块代码中捕获并跳过这些出错的参数,但这显然是无法正常运行的。
再次尝试修改claude_api下send_message的请求方法为requests.post,此时返回的respones为:
{'error': {'type': 'permission_error', 'message': 'We are unable to serve your request'}}
是否必须严格使用代码中CURL()的请求方式,抑或是我缺少了某些参数?
Traceback (most recent call last):
File "C:\Python311\Lib\runpy.py", line 198, in _run_module_as_main
return _run_code(code, main_globals, None,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\runpy.py", line 88, in run_code
exec(code, run_globals)
File "c:\Users\Administrator.vscode\extensions\ms-python.python-2023.4.1\pythonFiles\lib\python\debugpy\adapter/../..\debugpy\launcher/../..\debugpy_main.py", line 39, in
cli.main()
File "c:\Users\Administrator.vscode\extensions\ms-python.python-2023.4.1\pythonFiles\lib\python\debugpy\adapter/../..\debugpy\launcher/../..\debugpy/..\debugpy\server\cli.py", line 430, in main
run()
File "c:\Users\Administrator.vscode\extensions\ms-python.python-2023.4.1\pythonFiles\lib\python\debugpy\adapter/../..\debugpy\launcher/../..\debugpy/..\debugpy\server\cli.py", line 284, in run_file
runpy.run_path(target, run_name="main")
File "c:\Users\Administrator.vscode\extensions\ms-python.python-2023.4.1\pythonFiles\lib\python\debugpy_vendored\pydevd_pydevd_bundle\pydevd_runpy.py", line 320, in run_path
code, fname = _get_code_from_file(run_name, path_name)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "c:\Users\Administrator.vscode\extensions\ms-python.python-2023.4.1\pythonFiles\lib\python\debugpy_vendored\pydevd_pydevd_bundle\pydevd_runpy.py", line 294, in _get_code_from_file
code = compile(f.read(), fname, 'exec')
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Administrator\Desktop\yuni_dev\test\claudeapi1.py", line 4
claude_cookie = "C:\Users\Administrator\Desktop\yuni_dev\test\claude_cookies.json"
^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in
position 2-3: truncated \UXXXXXXXX escape
感觉是被发现了
Sending any message will result in:
{"error":{"type":"permission_error","message":"Endpoint disabled"}}
Does anyone have this problem?
使用几天账号就会被disable
Traceback (most recent call last):
File "e:\projects\Claude2-PyAPI\bot.py", line 2, in
from claude_api import Client
File "e:\projects\Claude2-PyAPI\claude_api.py", line 9, in
import docx
File "E:\prgramfiles\python3\lib\site-packages\docx.py", line 30, in
from exceptions import PendingDeprecationWarning
ModuleNotFoundError: No module named 'exceptions'是什么问题
发现Chat里面background_tasks.add_task(client.send_message, prompt, conversation_id) 这里会报错,就是说send_message函数出现了报错
ERROR: Exception in ASGI application
Traceback (most recent call last):
File "D:\miniconda3\envs\py310\lib\site-packages\uvicorn\protocols\http\httptools_impl.py", line 435, in run_asgi
result = await app( # type: ignore[func-returns-value]
File "D:\miniconda3\envs\py310\lib\site-packages\uvicorn\middleware\proxy_headers.py", line 78, in __call__
return await self.app(scope, receive, send)
File "D:\miniconda3\envs\py310\lib\site-packages\fastapi\applications.py", line 290, in __call__
await super().__call__(scope, receive, send)
File "D:\miniconda3\envs\py310\lib\site-packages\starlette\applications.py", line 122, in __call__
await self.middleware_stack(scope, receive, send)
File "D:\miniconda3\envs\py310\lib\site-packages\starlette\middleware\errors.py", line 184, in __call__
raise exc
File "D:\miniconda3\envs\py310\lib\site-packages\starlette\middleware\errors.py", line 162, in __call__
await self.app(scope, receive, _send)
File "D:\miniconda3\envs\py310\lib\site-packages\starlette\middleware\cors.py", line 83, in __call__
await self.app(scope, receive, send)
File "D:\miniconda3\envs\py310\lib\site-packages\starlette\middleware\exceptions.py", line 79, in __call__
raise exc
File "D:\miniconda3\envs\py310\lib\site-packages\starlette\middleware\exceptions.py", line 68, in __call__
await self.app(scope, receive, sender)
File "D:\miniconda3\envs\py310\lib\site-packages\fastapi\middleware\asyncexitstack.py", line 20, in __call__
raise e
File "D:\miniconda3\envs\py310\lib\site-packages\fastapi\middleware\asyncexitstack.py", line 17, in __call__
await self.app(scope, receive, send)
File "D:\miniconda3\envs\py310\lib\site-packages\starlette\routing.py", line 718, in __call__
await route.handle(scope, receive, send)
File "D:\miniconda3\envs\py310\lib\site-packages\starlette\routing.py", line 276, in handle
await self.app(scope, receive, send)
File "D:\miniconda3\envs\py310\lib\site-packages\starlette\routing.py", line 66, in app
response = await func(request)
File "D:\miniconda3\envs\py310\lib\site-packages\fastapi\routing.py", line 241, in app
raw_response = await run_endpoint_function(
File "D:\miniconda3\envs\py310\lib\site-packages\fastapi\routing.py", line 167, in run_endpoint_function
return await dependant.call(**values)
File "c:\Users\TD\Desktop\python\LC server\APP\fastapi\main.py", line 150, in create_chat
return client.send_message(prompt, conversation_id)
File "c:\Users\TD\Desktop\python\LC server\APP\fastapi\claude_api.py", line 179, in send_message
data = json.loads(json_str)
File "D:\miniconda3\envs\py310\lib\json\__init__.py", line 346, in loads
return _default_decoder.decode(s)
File "D:\miniconda3\envs\py310\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "D:\miniconda3\envs\py310\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
请问有人遇到过吗
问题就是标题
File "e:\人工智能\claude\Claude2-PyAPI-master\Claude2-PyAPI-master\claude_api.py", line 34, in get_organization_id
uuid = res[0]['uuid']
KeyError: 0
ImApp.py运行后发送消息报错如下
[2023-09-04 04:16:36,824] ERROR in app: Exception on /wechat [POST]
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/urllib3/connection.py", line 203, in _new_conn
sock = connection.create_connection(
File "/usr/local/lib/python3.10/site-packages/urllib3/util/connection.py", line 85, in create_connection
raise err
File "/usr/local/lib/python3.10/site-packages/urllib3/util/connection.py", line 73, in create_connection
sock.connect(sa)
ConnectionRefusedError: [Errno 111] Connection refused
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/urllib3/connectionpool.py", line 776, in urlopen
self._prepare_proxy(conn)
File "/usr/local/lib/python3.10/site-packages/urllib3/connectionpool.py", line 1041, in _prepare_proxy
conn.connect()
File "/usr/local/lib/python3.10/site-packages/urllib3/connection.py", line 611, in connect
self.sock = sock = self._new_conn()
File "/usr/local/lib/python3.10/site-packages/urllib3/connection.py", line 218, in _new_conn
raise NewConnectionError(
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPSConnection object at 0x7f105b7f8280>: Failed to establish a new connection: [Errno 111] Connection refused
The above exception was the direct cause of the following exception:
urllib3.exceptions.ProxyError: ('Unable to connect to proxy', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f105b7f8280>: Failed to establish a new connection: [Errno 111] Connection refused'))
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/requests/adapters.py", line 486, in send
resp = conn.urlopen(
File "/usr/local/lib/python3.10/site-packages/urllib3/connectionpool.py", line 844, in urlopen
retries = retries.increment(
File "/usr/local/lib/python3.10/site-packages/urllib3/util/retry.py", line 515, in increment
raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type]
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='qyapi.weixin.qq.com', port=443): Max retries exceeded with url: /cgi-bin/message/send?access_token=1000005 (Caused by ProxyError('Unable to connect to proxy', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f105b7f8280>: Failed to establish a new connection: [Errno 111] Connection refused')))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/flask/app.py", line 2190, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python3.10/site-packages/flask/app.py", line 1486, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib/python3.10/site-packages/flask/app.py", line 1484, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python3.10/site-packages/flask/app.py", line 1469, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
File "/home/claude/channel/wechatcom/wechatenterprise_channel.py", line 25, in handler_msg
return WechatEnterpriseChannel().handle()
File "/home/claude/channel/wechatcom/wechatenterprise_channel.py", line 89, in handle
self.client.message.send_text(self.AppId,msg.source,reply)
File "/usr/local/lib/python3.10/site-packages/wechatpy/enterprise/client/api/message.py", line 62, in send_text
return self.send(
File "/usr/local/lib/python3.10/site-packages/wechatpy/enterprise/client/api/message.py", line 58, in send
return self._post('message/send', data=data)
File "/usr/local/lib/python3.10/site-packages/wechatpy/client/api/base.py", line 19, in _post
return self._client.post(url, **kwargs)
File "/usr/local/lib/python3.10/site-packages/wechatpy/client/base.py", line 182, in post
return self._request(
File "/usr/local/lib/python3.10/site-packages/wechatpy/client/base.py", line 85, in _request
res = self._http.request(
File "/usr/local/lib/python3.10/site-packages/requests/sessions.py", line 589, in request
resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python3.10/site-packages/requests/sessions.py", line 703, in send
r = adapter.send(request, **kwargs)
File "/usr/local/lib/python3.10/site-packages/requests/adapters.py", line 513, in send
raise ProxyError(e, request=request)
requests.exceptions.ProxyError: HTTPSConnectionPool(host='qyapi.weixin.qq.com', port=443): Max retries exceeded with url: /cgi-bin/message/send?access_token=1000005 (Caused by ProxyError('Unable to connect to proxy', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f105b7f8280>: Failed to establish a new connection: [Errno 111] Connection refused')))
183.47.98.227 - - [04/Sep/2023 04:16:36] "POST /wechat?msg_signature=0c10c5427f385f5346b577e89f3c350fc2706cbd×tamp=1693800996&nonce=1693700453 HTTP/1.1" 500 -
No ID found. Creating new ID
[ERROR][2023-09-04 04:16:36][wechatenterprise_channel.py:57] - You are using http proxy WRONG, the prefix should be 'http://' not 'https://',see: https://github.com/yifeikong/curl_cffi/issues/6
Traceback (most recent call last):
File "/home/claude/channel/wechatcom/wechatenterprise_channel.py", line 53, in _do_send
reply_text = super().build_reply_content(query, context)
File "/home/claude/channel/channel.py", line 31, in build_reply_content
return Bridge().fetch_reply_content(query, context)
File "/home/claude/bridge/bridge.py", line 11, in fetch_reply_content
return bot_factory.create_bot("claudeAI").reply(query, context)
File "/home/claude/bot/claude/claude_ai_bot.py", line 19, in reply
result= self.create_chat(query,Conversation_id)
File "/home/claude/bot/claude/claude_ai_bot.py", line 30, in create_chat
client = Client(self.cookie,self.isproxy)
File "/home/claude/claude_api.py", line 18, in __init__
self.organization_id =self.get_organization_id()
File "/home/claude/claude_api.py", line 51, in get_organization_id
response = self.send_request("GET",url,headers=headers)
File "/home/claude/claude_api.py", line 325, in send_request
return requests.request(method, url, headers=headers, data=data, files=files, params=params,impersonate="chrome110",proxies=self.proxies,timeout=500)
File "/usr/local/lib/python3.10/site-packages/curl_cffi/requests/__init__.py", line 46, in request
return s.request(
File "/usr/local/lib/python3.10/site-packages/curl_cffi/requests/session.py", line 407, in request
req, buffer, header_buffer = self._set_curl_options(
File "/usr/local/lib/python3.10/site-packages/curl_cffi/requests/session.py", line 267, in _set_curl_options
raise RequestsError(
curl_cffi.requests.errors.RequestsError: You are using http proxy WRONG, the prefix should be 'http://' not 'https://',see: https://github.com/yifeikong/curl_cffi/issues/6
发任何消息回复: {"error": {"type": "permission_error", "message": "We are unable to serve your request"}}
是不是被封了?
from Claude2_PyAPI.claude_api import Client
COOKIE=None
with root.joinpath("claude_cookie").open('r',encoding='utf8') as ck:
COOKIE=ck.read().strip()
chat_uuid=[
'ec4adbca-c7a0-4935-8a29-494c803a5793',
'c92660e3-7f0f-4d3c-a9eb-6e7bd63ee4f7',
'7ca6b8f1-aeb9-4ea3-a278-4806f6a2fb35',
'08aa6cfd-8bb4-47e0-932a-9256512d2517',
'26d967a0-ff0d-4b63-bd62-a38aa24748eb'
]
claude_api=Client(COOKIE)
prompt="Hello Claude! How are you?"
conversation_id = "<conversation_id>"
conversation_id = chat_uuid[0]
response = claude_api.send_message(prompt, conversation_id)
print(response)
简单想尝试下但报错:
Exception has occurred: TypeError (note: full exception trace is shown but execution is paused at: _run_module_as_main)
initializer for ctype 'char *' must be a bytes or list or tuple, not str
File "C:\Users\admin\AppData\Roaming\Python\Python310\site-packages\curl_cffi\curl.py", line 174, in setopt
self._headers = lib.curl_slist_append(self._headers, header)
File "D:\models\datasets\claude2(fetch)\Claude2_PyAPI\claude_api.py", line 179, in send_message
c.setopt(CurlOpt.HTTPHEADER, str(headers))
File "D:\models\datasets\claude2(fetch)\claude2.py", line 26, in
response = claude_api.send_message(prompt, conversation_id)
File "C:\Program Files\Python310\Lib\runpy.py", line 86, in _run_code
exec(code, run_globals)
File "C:\Program Files\Python310\Lib\runpy.py", line 196, in _run_module_as_main (Current frame)
return _run_code(code, main_globals, None,
TypeError: initializer for ctype 'char *' must be a bytes or list or tuple, not str
curl_cffi如何实现requests那样返回流呢?
带附件请求总是会遇到这个问题,不带附件偶尔遇到,请问有没有解决方案
Traceback (most recent call last):
File ~\anaconda3\envs\compe\lib\site-packages\curl_cffi\requests\session.py:436 in request
c.perform()
File ~\anaconda3\envs\compe\lib\site-packages\curl_cffi\curl.py:191 in perform
self._check_error(ret, action="perform")
File ~\anaconda3\envs\compe\lib\site-packages\curl_cffi\curl.py:84 in _check_error
raise error
CurlError: Failed to perform, ErrCode: 92, Reason: 'HTTP/2 stream 1 was not closed cleanly before end of the underlying stream'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File ~\anaconda3\envs\compe\lib\site-packages\spyder_kernels\py3compat.py:356 in compat_exec
exec(code, globals, locals)
File e:\repositories\claude2\test.py:49
response = claude_api.send_message(prompt, conversation_id)
File E:\Repositories\claude2\Claude2-PyAPI\claude_api.py:146 in send_message
response = self.send_request("POST",url,headers=headers, data=payload, stream=True)
File E:\Repositories\claude2\Claude2-PyAPI\claude_api.py:344 in send_request
return requests.request(method, url, headers=headers, data=data, files=files, params=params,impersonate="chrome110",timeout=500)
File ~\anaconda3\envs\compe\lib\site-packages\curl_cffi\requests_init_.py:46 in request
return s.request(
File ~\anaconda3\envs\compe\lib\site-packages\curl_cffi\requests\session.py:438 in request
raise RequestsError(e)
RequestsError: Failed to perform, ErrCode: 92, Reason: 'HTTP/2 stream 1 was not closed cleanly before end of the underlying stream'
cookies is change, no data response
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.