Claude|媲美 ChatGPT,如何免费接入到个人服务

date
May 14, 2023
slug
1684041898
status
Published
tags
文章
人工智能
Claude
summary
前段时间 Claude 很火,在网上被说成是 ChatGPT 的最强对手,是 ChatGPT 的替代品。本文我将介绍下 Claude 是什么,以及如何免费使用 Claude。 当然本篇文章肯定不会只说这些无聊的内容,最后我会实践下如何免费接入我们的 web 服务。注意,这里接入是在没有申请到 api 的情况下做的。
type
Post
前段时间 Claude 很火,在网上被说成是 ChatGPT 的最强对手,是 ChatGPT 的替代品。本文我将介绍下 Claude 是什么,以及如何免费使用 Claude。
当然本篇文章肯定不会只说这些无聊的内容,最后我会实践下如何免费接入我们的 web 服务。注意,这里接入是在没有申请到 api 的情况下做的。

Claude

我们让 Claude 自我介绍下:
Claude 是一款开源的中文聊天机器人。它由 Anthropic 开发,用于自然对话和问答。Claude 具有以下主要功能:
  1. 自然语言理解能力。claude 可以理解人类的自然语言,并作出相应的响应。
  1. 知识图谱。claude 内置了大量常识知识,这些知识来源于维基百科和其他开放数据源。
  1. 智能问答。claude 可以自动回答关于常识知识的问题。如果它没有找到准确的答案,它会说 “我不知道”。
  1. 可扩展的知识。claude 的知识是动态扩展的,会随着时间的推移而不断丰富。
  1. 中文支持。claude 可以理解和生成中文文本,这是它区别于其他机器人的一个重要特点。
  1. 个性管理。claude 有不同的语言风格和个性,用户可以选择不同的语言风格和个性。
  1. 安全考虑。claude 在回答问题和生成响应时会考虑安全和道德因素。它不会生成任何有害、欺诈、危险或非法的内容。
综上,claude 是一个功能强大而且安全可靠的中文智能聊天机器人。它可以应用于各种场景, 如智能客服、线上助手等。
notion image

Claude in Slack

Slack 是一款流行的团队协作和通讯软件。
Claude 官方给我定义了很方便的 Slack 应用 Claude-in-Slack,我们直接把它添加到 Slack 中即可使用。添加的操作也很简单:
  1. 先注册 Slack[1]
  1. 到 Claude 官网 [2],点击 Add to Slack
  1. 在跳转的页面点击 添加到 Slack
  1. 在 Slack 中选择 Claude 应用,进入聊天窗口开始使用

Slack API

当然这些内容在搜索引擎上能检索出一大堆,那我写这篇文章干啥呢,就为了水一篇吗?当然不是,标题是如何接入到个人服务,这里说的当然不是仅仅通过 slack 使用。
虽然 Claude 开放了 API 的申请,我的 ChatGPT 4.0 API 都通过了,Claude API 还是没有下文。但是我想接入到我的服务中,只是通过 slack 来使用的话,显然不满足我的需求。
难道没有 API 权限就无法使用了吗?
我在查询了各大论坛,直到看到一个网友说:
notion image

Slack 为我们提供了各个语言的 SDK,我们以 python-slack-sdk[3] 来作为演示示例。代码会提供在 GitHub,觉得有用的大伙给个 Star 吧。

Slack Token

为了使用 Slack 的 SDK,我们需要新建一个 Slack APP[4]。
notion image
输入 app 名称并选择自己的 workspace。
notion image
创建后点击我们的 APP,然后点击左侧栏的 OAuth & Permissions[5]。下拉找到 Scopes,为我们的 User Token 添加 Scope。
notion image
这里 Slack 下面也说了,可以根据使用到的 API 来选择 scope。具体 API 对应的 scope 大家可以自行通过 Slack API methods[6] 了解。本次演示我只用到了如下 API:
  1. conversations.open:打开会话。依赖 scopes:
  • channels:write
  1. chat.postMessage:频道内发送消息。依赖 scopes:
  • chat:write
  • im:write
  1. conversations.history:获取对话的消息和事件历史记录。依赖 scopes:
  • channels:history
  • im:history
我们把依赖的三个 scopes,依次添加到 User Token Scopes 中。
然后我们把 APP 安装到我们的 workspace 中:
notion image
安装后,这里会生成我们需要的 User OAuth Token,我们复制这个 Token,后面需要用。

Claude Bot ID

我们进入我们的 Slack 应用页面,找到我们的 Claude 应用,右击然后选择查看应用详情,复制 Claude 的成员 ID。后面需要用到。
notion image

Slack Claude Server

走完上面的流程后,我们已经拿到了我们需要的两个值。
  1. User Token
  1. Claude Bot ID
下面就开始开发我们的服务了。

打开频道

首先,我们要先通过 API 开启我们的会话。因为我的服务都是 async 的,这里我选择使用 Slack-SDK 的AsyncWebClient客户端类。我们定义 Client 类封装下:
from slack_sdk.web.async_client import AsyncWebClientfrom slack_sdk.errors import SlackApiErrorCLAUDE_BOT_ID = "xxxxxxx"  # 我们上面获取到的 Claude Bot IDclass 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())
notion image
可以看到我已经成功和 Claude 交流了。这样的话我们的目的就达成了,后面怎么把它接入我们的自己的系统,大家可以自由发挥。
这里我给大家部署了个单进程 api 服务 [7](不会长期开启),大家可以体验下 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[8] 查看我的代码,大家觉得有用的话,可以点个 star。
Claude 虽然被吹捧的很高,但对比下还是比 ChatGPT 差很多。大家自行多多体验。

外部链接

[1]
Slack: https://app.slack.com/
[2]
Claude 官网: https://www.anthropic.com/index/claude-now-in-slack
[3]
python-slack-sdk: https://github.com/SlackAPI/python-slack-sdk
[4]
新建一个 Slack APP: https://api.slack.com/apps
[5]
OAuth & Permissions: https://api.slack.com/apps/A056XHA4NN5/oauth?
[6]
Slack API methods: https://api.slack.com/methods
[7]
api 服务: https://claude.yokonsan.com/docs
[8]
claude-in-slack-api: https://github.com/yokonsan/claude-in-slack-api
·················END·················

© CXPLAY 2024