大模型 Claude API 还要申请?那就自己来封装一个吧

好记性,不如烂笔头,趁热记录下,给未来的自己。

0 | 前言

自从 OpenAI 的 chatGPT 出现,被誉为第四次工业革命的开始。语言大模型这个话题,占据了互联网的半壁江山,围绕大模型的上下游生态、竞品大模型层出不穷。除了 chatGPT 外, 已经发布的还有 百度的文心一言、阿里的通义千问、MiniMax、Google的Palm、Fackbook的LLAMA 以及 Anthropic 的 Claude。

由于团队业务需要,需要对接各个大模型的API,在对接Claude的时候,发现其API需要申请+等待,无法即可使用(即使花钱也不行)。所以本文,会结合开源社区的一些方案,来实现Claude API的封装和调用。

在第一章节中,主要介绍 Claude 调用的两种方式;在第二章节中,会对基于slack bot的方式调用 Claude做详细展开,包括如何在 slack 页面使用,以及配置 slack 的 API;在第三章节里,会基于slack API 来进行基于python代码的实现。

1 | Claude 调用的几种姿势

很多大模型已经开放了 API 调用,免费的,收费的,商用的等等。但是,部分大模型的 API 调用还是需要申请,进 waiting list,然后遥遥无期的等待。Claude 的调用方式有两种:

  1. 申请 API
  2. 通过Slack

image.png

第一种方式,在目前来说约等于无,因为 Claude 目前只针对其关键的合作伙伴(如 Notion,Quora等)提供 API,对公众的 API的申请,目前还处于一个小心谨慎的逐步放开阶段

After working for the past few months with key partners like Notion, Quora, and DuckDuckGo in a closed alpha, we’ve been able to carefully test out our systems in the wild, and are ready to offer Claude more broadly so it can power crucial, cutting-edge use cases at scale.

第二种方式,开源社区有一些现成的方案可以使用(在这里衷心感谢)。其中用 slack bot 就是比较靠谱和稳定的一种方式,在第二章节里,会详细介绍如何通过 slack bot 来调用 claude。

2 | Claude in slack 教程

本章节会分以下两个部分:

  1. 如何在 slack 里接入 ,并在 slack web端调用 Claude;
  2. 如何设置 slack API 所需的 Token 和 Member ID。

2.1 | slack 接入 Claude

  1. 登录 slack, 如果没有注册需要先进行注册:
    image.png需要注意的是,邮箱注册会被check failed,建议使用 Google/Apple 账号登录

image.png

  1. 创建 workspace
    image.png

  2. 选择 slack connect
    image.png

  3. 点击 create a channel (PRO)
    image.pngimage.png

  4. 添加 Claude app

image.png
如果出现 Authorization hasn’t been set up for this app, so you won’t be able to install it., 点击右上角的 Manage(图1)-> App Management Settings(图2) -> Require APP Approval(图2) -> Approve(图3) -> Learn More(图3) -> Add to Slack(图4) -> Allow(图5) -> Enjoy(图6)!

图1
图1
图2
图2
图3
图3
图4
图4
图5
图5
图6
图6

2.2 | slack token 信息获取

  1. 进入 slack api 并创建 app, 选择 From scratch
    image.png

image.png

image.png

  1. 配置权限
    image.png

image.png

  1. 获取 token (下面会用到)
    image.png

image.png

image.png

  1. 获取member id (下面会用到)

image.png

image.png

3 | python 代码实例

  • python 核心代码
import time  
from slack_sdk import WebClient  
from slack_sdk.errors import SlackApiError  
from ClaudeDto import ClaudeChatReqDto  
from ReturnBase import ReturnBase
  

def send_message(client, channel, text):  
    try:  
        return client.chat_postMessage(channel=channel, text=text)  
    except SlackApiError as e:  
        print(f"Error sending message: {e}")  
  
  
def fetch_messages(client, channel, last_message_timestamp, bot_user_id):  
    response = client.conversations_history(channel=channel, oldest=last_message_timestamp)  
    return [msg['text'] for msg in response['messages'] if msg['user'] == bot_user_id]  
  
  
def get_new_messages(client, channel, last_message_timestamp, bot_user_id):  
    while True:  
        messages = fetch_messages(client, channel, last_message_timestamp, bot_user_id)  
        if messages and not messages[-1].endswith('Typing…_'):  
            return messages[-1]  
        time.sleep(1) # 这里的时间设置需要 balance 一下,越小越可能被限流,越大返回时间越长
  
  
def find_direct_message_channel(client, user_id):  
    try:  
        response = client.conversations_open(users=user_id)  
        return response['channel']['id']  
    except SlackApiError as e:  
        print(f"Error opening DM channel: {e}")  
  
  
def claude_chat_by_slack_svc(req_dto: ClaudeChatReqDto):  
    slack_user_token = {上面获得的token}  
    bot_user_id = {上面获得的member id}
    client = WebClient(token=slack_user_token)  
    dm_channel_id = find_direct_message_channel(client, bot_user_id)  
    if not dm_channel_id:  
        print("Could not find DM channel with the bot.")  
        return  
  
    last_message_timestamp = None  
    prompt = req_dto.prompt  
    response = send_message(client, dm_channel_id, prompt)  
    if response:  
        last_message_timestamp = response['ts']  
    new_message = get_new_messages(client, dm_channel_id, last_message_timestamp, bot_user_id)  

    return ReturnBase(
        data=new_message  
    )  
  
if __name__ == "__main__":  
    pass
  • ClaudeDto.py
from pydantic import BaseModel  

  
class ClaudeChatReqDto(BaseModel):  
    prompt: str
  • ReturnBase.py
from pydantic import BaseModel  

from typing import Optional  
  
  
class ReturnBase(BaseModel):  
    msg: Optional[str] = "ok"  
    msgCode: Optional[str] = "10000"  
    data: Optional[object] = None
  • requirements.txt
pydantic~=1.10.7  
requests~=2.25.1  
openai~=0.27.4  
cchardet  
slack_sdk  
pyjwt  

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYHbPT1p' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片