前段时间 Claude 很火,在网上被说成是 ChatGPT 的最强对手,是 ChatGPT 的替代品。本文我将介绍下 Claude 是什么,以及如何免费使用 Claude。
当然本篇文章肯定不会只说这些无聊的内容,最后我会实践下如何免费接入我们的 web 服务。注意,这里接入是在没有申请到 api 的情况下做的。
Claude
我们让 Claude 自我介绍下:
Claude 是一款开源的中文聊天机器人。它由 Anthropic 开发,用于自然对话和问答。Claude 具有以下主要功能:
- 自然语言理解能力。claude 可以理解人类的自然语言,并作出相应的响应。
- 知识图谱。claude 内置了大量常识知识,这些知识来源于维基百科和其他开放数据源。
- 智能问答。claude 可以自动回答关于常识知识的问题。如果它没有找到准确的答案,它会说“我不知道”。
- 可扩展的知识。claude 的知识是动态扩展的,会随着时间的推移而不断丰富。
- 中文支持。claude 可以理解和生成中文文本,这是它区别于其他机器人的一个重要特点。
- 个性管理。claude 有不同的语言风格和个性,用户可以选择不同的语言风格和个性。
- 安全考虑。claude 在回答问题和生成响应时会考虑安全和道德因素。它不会生成任何有害、欺诈、危险或非法的内容。
综上,claude 是一个功能强大而且安全可靠的中文智能聊天机器人。它可以应用于各种场景,如智能客服、线上助手等。
Claude in Slack
Slack 是一款流行的团队协作和通讯软件。
Claude 官方给我定义了很方便的 Slack 应用 Claude-in-Slack
,我们直接把它添加到 Slack 中即可使用。添加的操作也很简单:
Slack API
当然这些内容在搜索引擎上能检索出一大堆,那我写这篇文章干啥呢,就为了水一篇吗? 当然不是,标题是如何接入到个人服务,这里说的当然不是仅仅通过 slack 使用。
虽然 Claude 开放了 API 的申请,我的 ChatGPT 4.0 API 都通过了,Claude API 还是没有下文。但是我想接入到我的服务中,只是通过 slack 来使用的话,显然不满足我的需求。
难道没有 API 权限就无法使用了吗?
我在查询了各大论坛,直到看到一个网友说:
Slack 为我们提供了各个语言的 SDK,我们以 python-slack-sdk 来作为演示示例。代码会提供在 GitHub,觉得有用的大伙给个 Star 吧。
Slack Token
为了使用 Slack 的 SDK,我们需要新建一个 Slack APP。
输入 app 名称并选择自己的 workspace。 创建后点击我们的 APP,然后点击左侧栏的 OAuth & Permissions。下拉找到 Scopes,为我们的 User Token 添加 Scope。
这里 Slack 下面也说了,可以根据使用到的 API 来选择 scope。具体 API 对应的 scope 大家可以自行通过 Slack API methods 了解。本次演示我只用到了如下 API:
conversations.open
:打开会话。依赖 scopes:channels:write
chat.postMessage
:频道内发送消息。依赖 scopes:chat:write
im:write
conversations.history
:获取对话的消息和事件历史记录。依赖 scopes:channels:history
im:history
我们把依赖的三个 scopes,依次添加到 User Token Scopes 中。
然后我们把 APP 安装到我们的 workspace 中:
安装后,这里会生成我们需要的 User OAuth Token
,我们复制这个 Token,后面需要用。
Claude Bot ID
我们进入我们的 Slack 应用页面,找到我们的 Claude 应用,右击然后选择查看应用详情,复制 Claude 的成员 ID。后面需要用到。
Slack Claude Server
走完上面的流程后,我们已经拿到了我们需要的两个值。
- User Token
- Claude Bot ID
下面就开始开发我们的服务了。
打开频道
首先,我们要先通过 API 开启我们的会话。因为我的服务都是 async 的,这里我选择使用 Slack-SDK 的AsyncWebClient
客户端类。我们定义 Client 类封装下:
from slack_sdk.web.async_client import AsyncWebClient
from slack_sdk.errors import SlackApiError
CLAUDE_BOT_ID = "xxxxxxx" # 我们上面获取到的 Claude Bot ID
class SlackClient(AsyncWebClient):
CHANNEL_ID = None # 属性:频道ID
我们通过 sdk 提供的conversations_open
来打开频道会话:
async def open_channel(self):
response = await self.conversations_open(users=CLAUDE_BOT_ID)
self.CHANNEL_ID = response["channel"]["id"]
发送消息
通过chat_postMessage
发送消息:
async def chat(self, text):
if not self.CHANNEL_ID:
raise Exception("Channel not found.")
resp = await self.chat_postMessage(channel=self.CHANNEL_ID, text=text)
self.LAST_TS = resp["ts"]
这里我们记录下我们消息的时间,用于后面获取回复时作为参数。
获取回复
这里我们循环去获取 Claude 最新的回复消息列表,我们取最后一条结果:
async def get_reply(self):
for _ in range(150):
try:
resp = await self.conversations_history(channel=self.CHANNEL_ID, oldest=self.LAST_TS, limit=2)
msg = [msg["text"] for msg in resp["messages"] if msg["user"] == CLAUDE_BOT_ID]
if msg and not msg[-1].endswith("Typing…_"):
return msg[-1]
except (SlackApiError, KeyError) as e:
print(f"Get reply error: {e}")
await asyncio.sleep(2)
raise Exception("Get replay timeout")
我设定了 300 秒内,无响应则抛出异常。
测试
async def server():
client = SlackClient(token=getenv("SLACK_USER_TOKEN")) # 自己的Token
await client.open_channel()
while True:
prompt = input("You: ")
await client.chat(prompt)
reply = await client.get_reply()
print(f"Claude: {reply}\n--------------------")
asyncio.run(server())
可以看到我已经成功和 Claude 交流了。这样的话我们的目的就达成了,后面怎么把它接入我们的自己的系统,大家可以自由发挥。
这里我给大家部署了个单进程 api 服务(不会长期开启),大家可以体验下 Claude 的能力。
对话
有多并发可能会消息错乱,只作为 demo 使用。对话完记得调用清除接口清空会话。
curl -X 'POST' \
'https://claude.yokonsan.com/claude/chat' \
-H 'accept: application/json' \
-H 'x-token: 13832bf5-ed7c-4b5c-a30b-e7db48d25b86' \
-H 'Content-Type: application/json' \
-d '{
"prompt": "你好"
}'
清空会话
curl -X 'POST' \
'https://claude.yokonsan.com/claude/reset' \
-H 'x-token: 13832bf5-ed7c-4b5c-a30b-e7db48d25b86' \
-H 'accept: application/json' \
-d ''
总结
本文介绍了 Claude,以及如何在 Slack 中免费使用 Claude。然后我带大家搭建了自己的个人 Claude 服务,演示如何将 Claude 免费接入自己的系统。
大家可以在 GitHub 我的仓库 claude-in-slack-api查看我的代码,大家觉得有用的话,可以点个 star。
Claude 虽然被吹捧的很高,但对比下还是比 ChatGPT 差很多。大家自行多多体验。