淘优惠

淘优惠

小白如何用chatgpt帮你写代码 如何使用chatgpt写方案

热门文章 0
小白如何用一台电脑赚钱

最近ChatGPT大火,boss也蠢蠢欲动要求我们把ChatGPT接入飞书,经过一上午的研究,终于注册成功并且实现了飞书机器人对接到ChatGPT。

下面给大家分享一下接入飞书的详细步骤。

飞书与chatgpt的交互如下,我们的自定义服务就是充当一个中间人的角色,进行消息的转发。

1,进入飞书开放平台,选择创建企业自建应用。

2,创建完应用以后,点击进入应用,添加机器人。

3,给机器人配置消息相关的权限,如果不确定需要什么权限,可以先全部开通。

4,配置事件订阅。事件订阅需要先开发一个接口供飞书验证。接口需要可以公网访问。

这个接口的代码可以参考如下:

@【【微信】】(value="/【【微信】】")public FeishuE【【微信】】 【【微信】】(@Re【【微信】】) { log.info("收到消息:{}", body); FeishuE【【微信】】tParams=JSON.parseObject(body, FeishuE【【微信】】.class); FeishuE【【微信】】 e【【微信】】=new FeishuE【【微信】】(); e【【微信】】.setChallenge(feishuE【【微信】】.getChallenge()); return e【【微信】】;}@Datapublic class FeishuE【【微信】】 { pri【【微信】】; private String token; pri【【微信】】;}@Datapublic class FeishuE【【微信】】 { pri【【微信】】;}

有一点需要注意的是,这个校验接口和下面接收飞书消息的接口是同一个地址,但是消息体不一样。

也就是说校验接口是一次性的,校验完之后需要对这个接口进行改造。

我们先将这个接口发布到一个可以公网访问的项目中,比如接口地址是 http://xx.xx.xx.xx/xx/xx/【【微信】】,将其填写到飞书中保存,飞书如果可以成功保存就没问题了。

OK,到这里飞书的配置基本搞定了,下面就是我们需要进行处理的逻辑了。

先说一下我司对接的大致逻辑,供大家参考。

用户发送消息到飞书之后,飞书会将消息转发到我们自己的服务上。

但是这里会存在一个问题,就是当多个用户并发发起会话时,或者一个大群里很多人都在@我们的机器人时,我们需要记住每一个人的回话,在chatgpt查询到结果后,准确的回复这个人。

由于我司目前也是用于内部测试不想实现太复杂,所以我们采用的思路是:每一个用户的会话转发到我们的服务上时,先将会话内容保存到一个全局的ConcurrentLinkedQueue队列中,然后启动一个线程,不停的消费这个队列。

队列的泛型是一个提前构造好的对象,这个对象保存着当前消息的消息id,发送人,提问内容等。

每消费一个对象,就将对象的提问内容发送到chatgpt,获取响应结果以后,调用飞书提供的会话回复接口去回复用户。(如果并发量比较大,这里可以搞成异步的)。

好了,大致思路就说到这,我们看一下具体的代码。

1,打开我们的项目,引入chatgpt提供的jar。

<dependency> <【【微信】】>com.theokanning.openai-gpt3-java</【【微信】】> <【【微信】】>service</【【微信】】> <【【微信】】>0.10.0</【【微信】】></dependency>

2,重写上面的校验接口,改造成接收飞书消息。(接口路径不要变)

@Slf4j@RestController@Re【【微信】】(value="/query")【【微信】】roller { public static ConcurrentLinkedQueue<【【微信】】> consumer =new ConcurrentLinkedQueue<>(); @【【微信】】(value="/【【微信】】") public String 【【微信】】(@Re【【微信】】) { log.info("收到飞书消息:{}", body); JSONObject 【【微信】】=JSONObject.parseObject(body); JSONObject header=【【微信】】.【【微信】】("header"); String e【【微信】】ader.getString("e【【微信】】"); if ("im.【【微信】】.receive_v1".【【微信】】(e【【微信】】)) { JSONObject event=【【微信】】.【【微信】】("event"); JSONObject 【【微信】】=event.【【微信】】("【【微信】】"); String 【【微信】】Type=【【微信】】.getString("【【微信】】_type"); if ("text".【【微信】】(【【微信】】Type)) { String 【【微信】】Id=【【微信】】.getString("【【微信】】_id"); String content=【【微信】】.getString("content"); JSONObject contentJson=JSON.parseObject(content); String text=contentJson.getString("text"); 【【微信】】 feishuResponse=new 【【微信】】(); feishuResponse.setMessageId(【【微信】】Id); feishuResponse.setQuery(text); log.info("投递用户消息,{}", JSON.toJSON(feishuResponse)); consumer.add(feishuResponse); } else { log.info("非文本消息"); } } return "suc"; }}

【【微信】】的结构如下。

@Datapublic class 【【微信】】 { private String 【【微信】】Id; pri【【微信】】;}

3,写一个任务线程

@Slf4jpublic class AutoSendTask implements Runnable { //你的chatgpt的key public static final String token=""; public static OpenAiSer【【微信】】=null; static { openAiService=【【微信】】(token, Duration.ofSeconds(60)); } @Override public void run() { while (true) { try { 【【微信】】 poll=consumer.poll(); if (poll==null) { log.info("no query,【【微信】】"); TimeUnit.SECONDS.sleep(2); } else { String query=this.query(poll.【【微信】】()); this.reply(poll, query); } } catch (【【微信】】 e) { log.error("Thread exception...", e); } } } pri【【微信】】(String q) { log.info("开始提问:{}", q); 【【微信】】pletionRequest=CompletionRequest.【【微信】】() .prompt(q) .model("【【微信】】") .maxTokens(2048) .echo(false) .build(); StringBuilder sb=new StringBuilder(); CompletionResult completion=openAiServi【【微信】】(completionRequest); log.info("q:{},获取响应:{}", q, JSON.【【微信】】(completion)); completion.getChoices().forEach(v -> { sb.【【微信】】(v.getText()); }); String rs=sb.toString(); if (rs.startsWith("?")) { rs=rs.replaceFirst("?", ""); } if (rs.startsWith(" ")) { rs=rs.replaceFirst(" ", ""); } log.info("格式化后的rs:{}", rs); return rs; } pri【【微信】】(【【微信】】 poll, String rs) { JSONObject params=new JSONObject(); params.put("uuid", RandomUtil.randomNumbers(10)); params.put("msg_type", "text"); JSONObject content=new JSONObject(); content.put("text", rs); params.put("content", content.【【微信】】()); String url=String.format("https://open.feishu.cn/open-apis/im/v1/【【微信】】s/%s/reply", poll.getMessageId()); String tenantAccessToken=FeishuUtils.getTenantAccessToken(); String body=null; try (HttpResponse authorization=HttpUtil.createPost(url) .header("Authorization", "Bearer " + tenantAccessToken) .body(params.【【微信】】()) .execute()) { body=authorization.body(); } return body; }}

获取飞书token的工具类如下:

@Slf4jpublic class FeishuUtils { public static final String tokenUrl ="https://open.feishu.cn/open-apis/auth/v3/【【微信】】ternal/"; //构建一个cache 缓存飞书的token static Cache<String, String> tokenCache= CacheBuilder.newBuilder().expireAfterWrite(Duration.ofSeconds(3500)).build(); //这个是飞书应用的appid和key,可以在创建的飞书应用中找到 public static final String appId=""; public static final String appKey=""; public static String getTenantAccessToken() { String token=null; try { token=tokenCache.get("token", () -> { JSONObject params=new JSONObject(); params.put("app_id", appId); params.put("app_secret", appKey); String body; try (HttpResponse execute=HttpUtil.createPost(tokenUrl) .body(params.【【微信】】()).execute()) { body=execute.body(); } log.info("获取飞书token:{}", body); if (StrUtil.isNotBlank(body)) { String tenantAccessToken=JSON.parseObject(body).getString("tenant_access_token"); tokenCache.put("token", tenantAccessToken); return tenantAccessToken; } return null; }); } catch (ExecutionException e) { throw new RuntimeException(e); } return token; }}

4,启动线程类即可

最后,出于隐私,chatgpt群会话的效果就不展示了,展示一下直接对话机器人的效果吧。

由于我们引入chatgpt也只是抱着尝试的态度,所以代码相对也比较粗糙,如果有哪里写的不好的地方,还望大家海涵。

文中代码还额外引入的jar有:guava、【【微信】】、fastjson。

#万物皆可ChatGPT#

我是@程序员拾山,坚持技术分享,期待与大家一起学习成长,也感谢您的点赞和关注。

举报/反馈

濡備綍鍒嗚鲸chatgpt鐪熷亣 鎬庝箞鍒嗚鲸chatgpt 鐪熷亣

濡れ什么意思

文/陈根

务必警惕借ChatGPT名义而引发的诈骗事件。由于ChatGPT概念的火爆,在一夜之间各种网站版、小程序、手机版的类ChatGPT产品,或者打着所谓的中文版ChatGPT、ChatGPT机器人之类的应用,可以说都是虚假的ChatGPT产品。

原因在于ChatGPT的禁用名单中明确将中国列为其中,那么就不可能会在中国推出相应的产品,而我们目前真正国产的类ChatGPT只有百度明确在3月份发布测试。

而这类打着ChatGPT旗号的各种中文应用,对于用户而言存在着极大的个人隐私信息泄露的风险。其中不乏打着ChatGPT名义而干着信息钓鱼的事情。当用户使用了这类产品之后,注册与使用过程中的各种权限的授权,会导致基于手机或者电脑的各种隐私数据泄露。

而这些个人隐私数据的泄露,会给个人的安全造成极大的风险。尤其是一些应用在收集到了个人隐私数据之后,会将这些数据通过数据黑市进行兜售,出售给一些电信诈骗机构。因此大家务必要谨慎对待中文领域的类ChatGPT应用。


香港大学宣布禁用ChatGPT ,违规用视为抄袭

现在整个香港大学都停课了吗,香港大学不再承认学生会,香港大学停课了吗,香港大学怎么了

原标题:香港大学宣布禁用ChatGPT ,违规用视为抄袭

近日,香港大学宣布禁止使用ChatGPT和其他AI工具在所有课堂、作业和评估中,否则将被视为抄袭。学生需要在使用前获得相关课程讲师的书面同意。如果教师怀疑学生使用了ChatGPT或其他AI工具,教师有权进行额外口试、考试等措施。

虽然AI工具可以提高效率和准确性,但大学必须确保学生得到适当的指导,不会对学术诚信构成威胁。这项禁令将严格执行,以维护学术诚信和大学的声誉。

此外,澳大利亚、印度和英国的多所大学也对学生使用ChatGPT进行了限制,尤其是在校园内和考试期间。返回搜狐,查看更多

责任编辑: