背景:

    鉴于目前ChatGpt4 访问困难,同时对话token收费,一直在寻找同类替代品。而google的对话模型Claude目前bate版公测,趁着还没有收费,先白嫖一波。


环境准备:

  •     一点魔法

  •     一个google邮箱

  •     slack账号,(用google邮箱注册就行)


准备步骤:

    1、注册slack

    • 打开https://slack.com/官网

    • 使用谷歌账号注册

    • 创建工作区间

    按着人家官网的流程下一步就行。

    2、使用claude

         1) 访问这个地址  Claude in Slack | Anthropic

            点击add to slack
            一步一步流程往下走就行。

           2)还有一种添加方法

            访问   https://www.anthropic.com/index/claude-now-in-slack

            添加应用,按着流程就行

        在slack中工作区点击app,把claude添加进来

        可以进行对话了,但有可能无法回复

        解决办法如下:

image.png

        一直按就可以,创建一个频道

        在频道中@claude ,弹出授权,同意就可以进行对话了。

    3、配置slack用户权限 

            访问 https://api.slack.com/methods

            创建一个新项目

            选择 From scratch

            输入app名字和选择工作区间

            创建成功后,点击 OAuth & Permissions

            在 User Token Scopes 中点击Add an OAuth Scope

           添加如下权限:- channels:history,  channels:read,   channels:write

                                   - groups:history,  groups:read,  groups:write

                                   - im:history,  im:write,  

                                   - mpim:history,  mpim:write

                                   - chat:write

            回到 OAuth Tokens for Your Workspace,点击install to Workpace

            生成的 User OAuth Token 后续用来配置后端

    image.png

image.png

            记录好这三个token 

      4、   配置后端

            1. 打开https://laf.run

            2. 新建后开发应用          

            3. 在包管理器安装claude-api-slack            

            4. 创建函数send-claude

import cloud from '@lafjs/cloud'
   
   export default async function (ctx: FunctionContext) {
     ctx.response.setHeader('Content-Type', 'application/octet-stream');
     const { message, conversationId } = ctx.body
     const question = message
     return await askCluadeAPi(question, conversationId, ctx)
   }
   
   async function askCluadeAPi(question, conversationId, ctx) {
     //用户授权token
     const token = ''
     //用户ID,在Cladue应用详情获取
     const bot = ''
     //频道名称
     const chatId = ""
   
     // 初始化claude
     const { Authenticator } = await import('claude-api-slack')
   
     // 通过缓存保存客户端,可以避免每次提问都是在新会话
     let claudeClient = cloud.shared.get('claudeClient')
     if (!claudeClient) {
       claudeClient = new Authenticator(token, bot)
       cloud.shared.set('claudeClient', claudeClient)
     }
     // 创建频道并返回房间ID:channel
     const channel = await claudeClient.newChannel(chatId)
   
     let result
     if (conversationId) {
       result = await claudeClient.sendMessage({
         text: question,
         channel,
         conversationId,
         onMessage: (originalMessage) => {
           if (ctx.request.readableAborted) {
             ctx.response.end()
           }
           console.log("loadingC", originalMessage)
           ctx.response.write("⭐" + originalMessage.text);
         }
       })
     } else {
       result = await claudeClient.sendMessage({
         text: question,
         channel,
         onMessage: (originalMessage) => {
           console.log("loading", originalMessage)
           if (ctx.request.readableAborted) {
             ctx.response.end()
           }
           ctx.response.write("⭐" + originalMessage.text);
         }
       })
     }
     ctx.response.write("--!" + result.conversationId);
     ctx.response.end()
     console.log("success", result)
     return {
       code: 0,
       msg: result.text,
       conversationId: result.conversationId
     }
   }

发布就完成了


5、配置前端

        在https://github.com/loveEight/claude下载源码

        解压到文件夹

        安装nodejs并配置环境变量

        新建终端,输入npm i 安装项目依赖

            网络原因,或者管理员权限,等安装问题,请自行解决。

        修改请求地址,改为你自己的

        输入npm run dev启动项目

        可以在public修改头像,文件名不变就可以了


6、laf部署上线

        在终端输入npm run build 进行打包

        laf新建云存储save-claude

image.png

        打开dist文件夹

        先将图片上传

        创建assets文件夹,把文件上传

        点击部署

image.png

会得到一个域名,访问就可以进行对话了。

但是这里的对话,有可能没有上下文能力,猜测是因为访问的slack频道。

image.png


7、部署到自己的服务器上,通过api进行访问

        


import time
import slack
from flask import Flask,request
from flask_slack import Slack

token = ''
channel_id="" #频道 ID

app = Flask(__name__)
slack_app = Slack(app)

client = slack.WebClient(token=token)
yesterday = (time.time() - 24 * 60)
yesterday = str(yesterday).split('.')[0]

def get_history():
  history = client.conversations_history(channel=channel_id, oldest=yesterday)
  text = history['messages'][0]['text']
  return text



@app.route('/',methods=['GET','POST'])
def wechat():
   message = request.args.get("message", "")
   # message="hello"
   
print(message)
   # 发送到指定频道
   
client.chat_postMessage(channel=channel_id, text=message, as_user=True)

   # 捕获最新的回答
   
text = get_history()
   temp = ''
   
while True:
       temp = get_history()
       if temp != text and 'Typing' not in temp:
           break
       else
:
           time.sleep(1)
   temp = temp.replace('\n\n', '\n')
   print(temp)
   return(temp)




if __name__ == '__main__':
   app.run(host='0.0.0.0', port=6324, debug=True)#开放xxxx端口

import引包就行,有可能需要一个slackclient包

测试结果如下:

直接访问的Claude app,具备上下文理解能力

8、部署到服务器

    宝塔通过python控制面板,选择python启动方式,

    开通端口,映射域名

至此,调用结束,可以接入到自己的app中了。


总结:

    使用上感觉还是可以的,程序开发,文字理解等claude表现都不错,思维逻辑上可能有一些薄弱,无伤大雅。


参考:

1. laf的项目https://github.com/labring/laf

2. https://github.com/loveEight/claude

3.保姆级教你搭建自己的Claude_哔哩哔哩_bilibili







点赞(1)

备注