当前位置:   article > 正文

ClaudeAPi接入_claude 中转 url

claude 中转 url

一,实现目标
接入钉钉机器人支持群聊和私聊

chatgpt体验:http://me.chat129.com   

chatgpt学习:http://www.chat129.com


网上看了很多方案,因为Claude的api申请难度非常大,大部分都是说使用Slack,但是Slack只能免费使用一个月。作为一个完美主义怎么可能允许这样的事情发生。何如处理,抓网页。

只能美,英,魔法这些都是入门小菜,这里不再赘述。自行解决。

 二,关键接口
1,获取organizationUuid

String url = "https://claude.ai/api/organizations";

2,新增会话

String url = String.format("https://claude.ai/api/organizations/%s/chat_conversations", organizationUuid);

返回 conversationUuid

3,获取单个会话

String url = String.format("https://claude.ai/api/organizations/%s/chat_conversations/%s", organizationUuid, conversationUuid);

4,获取会话列表

String url = String.format("https://claude.ai/api/organizations/%s/chat_conversations", organizationUuid);

5,删除会话

String url = String.format("https://claude.ai/api/organizations/%s/chat_conversations/%s", organizationUuid, conversationUuid);

7,发送消息

String url = "https://claude.ai/api/append_message";

三,关键代码
一下代码都是他自己生成的,活学活用。

1,请求代理

public class RestTemplateFactory {
 
    public static RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
 
    public static RestTemplate getProxyRestTemplate(Integer type) {
        RestTemplateConf restTemplateConf = new RestTemplateConf();
        try {
            if (type == 1) {
                return restTemplateConf.getRestTemplateHongKong();
            } else if (type == 2) {
                return restTemplateConf.getRestTemplateWashington();
            } else if (type == 3) {
                return restTemplateConf.getProxyRestLocal();
            } else if (type == 4) {
                return restTemplateConf.getRestTemplate();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new RestTemplate();
    }
 
}
public class RestTemplateConf {
 
    private String hostname;
    private Integer port;
    private String username;
    private String password;
 
    public RestTemplateConf() {
 
    }
 
    private RestTemplateConf(String hostname, Integer port, String username, String password) {
        this.hostname = hostname;
        this.port = port;
        this.username = username;
        this.password = password;
    }
 
    public RestTemplate getRestTemplateHongKong() throws NoSuchAlgorithmException, KeyStoreException, KeyManagementException {
        RestTemplateConf restTemplateConf = new RestTemplateConf("xxxx", xxxx, "xxxx", "xxxx");
        return restTemplateConf.getRestTemplateProxy();
    }
 
    public RestTemplate getRestTemplateWashington() throws NoSuchAlgorithmException, KeyStoreException, KeyManagementException {
        RestTemplateConf restTemplateConf = new RestTemplateConf("xxxx", xxxx, "xxxx", "xxxx");
        return restTemplateConf.getRestTemplateProxy();
    }
 
    public RestTemplate getProxyRestLocal() {
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        // 配置代理
        HttpHost proxy = new HttpHost("127.0.0.1", 1087);
        httpClientBuilder.setProxy(proxy);
 
        // 配置其他HttpClient的相关参数
        RequestConfig requestConfig = RequestConfig.custom()
                // 可根据需求进行配置
                .setConnectTimeout(120000)
                .setSocketTimeout(120000)
                .build();
        httpClientBuilder.setDefaultRequestConfig(requestConfig);
 
        // 将配置好的HttpClient应用到RestTemplate
        return new RestTemplate(new HttpComponentsClientHttpRequestFactory(httpClientBuilder.build()));
    }
 
    public RestTemplate getRestTemplate() {
        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
        factory.setConnectTimeout(120000);
        factory.setReadTimeout(120000);
        return new RestTemplate(factory);
    }
 
    private RestTemplate getRestTemplateProxy() throws NoSuchAlgorithmException, KeyStoreException, KeyManagementException {
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        // 配置其他HttpClient的相关参数
        RequestConfig requestConfig = RequestConfig.custom()
                // 可根据需求进行配置
                .setConnectTimeout(120000)
                .setSocketTimeout(120000)
                .build();
        httpClientBuilder.setDefaultRequestConfig(requestConfig);
        SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
            public boolean isTrusted(X509Certificate[] arg0, String arg1) {
                return true;
            }
        }).build();
        httpClientBuilder.setSSLContext(sslContext);
        //设置代理
        this.setProxy(restTemplate);
        //设置代理密码
        this.setCredentialsProvider(httpClientBuilder);
        HttpClient httpClient = httpClientBuilder.build();
        // httpClient连接配置
        HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
        restTemplate.setRequestFactory(clientHttpRequestFactory);
        return restTemplate;
    }
 
 
    private void setProxy(RestTemplate restTemplate) {
        SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
        Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(hostname, port));
        requestFactory.setProxy(proxy);
        restTemplate.setRequestFactory(requestFactory);
    }
 
    private void setCredentialsProvider(HttpClientBuilder httpClientBuilder) {
        CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(
                new AuthScope(hostname, port),
                new UsernamePasswordCredentials(username, password)
        );
        HttpHost proxy = new HttpHost(hostname, port);
        httpClientBuilder.setProxy(proxy).setDefaultCredentialsProvider(credentialsProvider).disableCookieManagement();
 
    }
2,发送消息

/**
     * 获取问题答案
     */
    public static String getAnswer(List<Message> messages, String organizationUuid, String conversationUuid) {
        String organizations = null;
        String conversations = null;
        if (organizationUuid == null || conversationUuid == null) {
            organizations = getOrganizations();
            organizationUuid = JSONUtil.parseArray(organizations).getJSONObject(0).getStr("uuid");
            conversations = addChatConversation(organizationUuid, "问答");
            conversationUuid = JSONUtil.parseObj(conversations).getStr("uuid");
        }
        List<String> attachments = new ArrayList<>();
        if (messages.size() != 1) {
            for (int i = 0; i < messages.size() - 1; i++) {
                Message message = messages.get(i);
                if ("user".equals(message.getRole())) {
                    try {
                        sendMessage(organizationUuid, conversationUuid, messages.get(i).getContent(), attachments);
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        Message message = messages.get(messages.size() - 1);
        List<String> responses = null;
        try {
            responses = sendMessage(organizationUuid, conversationUuid, message.getContent(), attachments);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        //deleteChatConversation(organizationUuid, conversationUuid);
        return String.join("", responses).trim();
四,机器人配置
1,方案一,不能用挺久了,这种支持外部群


2,方案二 

企业内部应用 

开发者后台统一登录 - 钉钉统一身份认证

配置好即可

五,源码
项目地址,欢迎交流

java 版和 python 版都有

https://gitee.com/g7go/chat-ai

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/993775
推荐阅读
  

闽ICP备14008679号