我的创作纪念日-一周年

😀前言
不知不觉过了一年了很感慨也很期待未来

🏠个人主页:尘觉主页

文章目录

  • 我的创作纪念日-一周年
    • 机缘
    • 收获(荣誉)
    • 日常
    • 成就
    • 憧憬

我的创作纪念日-一周年

机缘

在我开始在 CSDN 上发布文章之前,我对这个平台几乎一无所知。随着时间的推移和知识的积累,以及老师的指导,我开始意识到将我的学习笔记分享出来的重要性。但当时,我对 Markdown 语法毫无了解,甚至从未听说过 Typora 这个编辑软件。因此,我只能依赖富文本编辑器,尝试着去调整格式,然而这一过程却异常艰难。

后来,我在一个讨论区里了解到了 Markdown 的便捷性和流行程度。我向一位经验丰富的“大佬”请教,并开始探索 Typora 软件的功能。我开始逐步学习 Markdown 语法,虽然一开始感到有些困难,但我并没有放弃。随着时间的推移,我逐渐掌握了 Markdown 的基本语法,并且发现它比富文本编辑器更加高效和方便。

为了方便,我开始探索图床的搭建和使用。


收获(荣誉)

我获得了6300左右的粉丝——很感谢他们的支持非常感谢
在这里插入图片描述

我在csdn的积累巩固了我的基础也为我在学校努力和比赛提供了信息
我主要收获是 获得了 国家级3项,省级7项,校级8项以及证书12项这些是我最大的收获,也希望以后进csdn工作看看哈哈哈
在这里插入图片描述

日常

  1. 创作是否已经是你生活的一部分了

我感觉我也没有之前的创作激情了就像进入了平淡期但是我也清楚的感觉到以及成为我生活的一部分了我有时间还是会抽空写一篇博文吧 希望可以帮助到更多人

  1. 有限的精力下,如何平衡创作和工作学习
    我觉得还是热爱吧以及看到越来越多的粉丝关注我和我的浏览量增加内心的成就感也会激励我
    在学习工作的经验以及笔记然后在休闲时刻总结发布吧

成就

  1. 无重复字符的最长子串
    public int lengthOfLongestSubstring(String s) {
        // 记录字符上一次出现的位置
        int[] last = new int[128];
        for(int i = 0; i < 128; i++) {
            last[i] = -1;
        }
        int n = s.length();

        int res = 0;
        int start = 0; // 窗口开始位置
        for(int i =0 ; i < n; i++) {
            int index = s.charAt(i);
            start = Math.max(start, last[index] + 1);
            res   = Math.max(res, i - start + 1);
            last[index] = i;
        }

        return res;
    }
  1. OpenaiChatBusinessServiceImpl
@Slf4j
@Service
public class OpenaiChatBusinessServiceImpl implements ChatBusinessService<ChatCompletionRequest> {

    @Resource
    private ChatResponseSyncDataService chatResponseSyncDataService;

    @Override
    public ChatSdkType type() {
        return ChatSdkType.openai;
    }

    @Override
    public ChatSdkStorageResponse chatCompletionStream(List<RecordData> recordList, ChatSdkAccount chatSdkAccount) {

        String connectId = chatSdkAccount.getConnectId();

        log.info("[平台-{}]  流式请求参数:{}", chatSdkAccount.getSdkUniqueKey(), JSON.toJSONString(recordList));

        MessageSendHandler messageSendHandler = new MessageSendHandler(connectId);

        ChatSdkStorageResponse response = new ChatSdkStorageResponse();
        response.setAccount(chatSdkAccount);

        try {
            OpenAiService service = OpenaiClientFactory.getService(chatSdkAccount);
            ChatCompletionRequest chatCompletionRequest = this.convertRequest(recordList, chatSdkAccount, e -> e.setStream(true));

            RecordData recordData = response.pushData(new RecordData());
            try {
                service.streamChatCompletion(chatCompletionRequest)
                        .blockingForEach(chunk -> {
                            List<ChatCompletionChoice> choices = chunk.getChoices();

                            Optional.ofNullable(choices).orElseGet(ArrayList::new).forEach(res -> {
                                ChatMessage message = Optional.ofNullable(res.getMessage()).orElseGet(ChatMessage::new);
                                OR.run(message.getRole(), StrUtil::isNotEmpty, recordData::setRole);
                                String resContent = Optional.ofNullable(message.getContent()).orElse("");
                                recordData.getContentSB().append(resContent);
                                // 发送消息
                                messageSendHandler.queueAdd(resContent);
                            });
                        });
            } catch (BusinessException e) {
                if (e.getCode() == HttpStatus.HTTP_OK) {
                    return response;
                }
                throw e;
            } finally {
                recordData.setContent(recordData.getContentSB().toString());
                service.shutdownExecutor();
            }
        } catch (Exception throwable) {
            throwable.printStackTrace();
            if (throwable.getCause() instanceof ConnectException) {
                throw new BusinessException("服务器节点异常,请稍后重试或联系管理员");
            }
            if (throwable instanceof OpenAiHttpException e) {
                int statusCode = e.statusCode;
                String code = e.code;
                List<Integer> accountErrorCode = CollUtil.newArrayList(HttpStatus.HTTP_UNAUTHORIZED, 429);
                if (accountErrorCode.contains(statusCode) || "insufficient_quota".equals(code)) {
                    response.setAccountError(true);
                }
                return response;
            }
            throw new BusinessException(throwable.getMessage());
        } finally {
            messageSendHandler.close();
        }

        chatResponseSyncDataService.syncChatResponse(chatSdkAccount, response, recordList);

        return response;
    }

    @Override
    public ChatSdkStorageResponse chatCompletion(List<RecordData> recordList, ChatSdkAccount chatSdkAccount) {
        String connectId = chatSdkAccount.getConnectId();

        log.info("[平台-{}]  非流式请求参数:{}", chatSdkAccount.getSdkUniqueKey(), JSON.toJSONString(recordList));

        MessageSendHandler messageSendHandler = new MessageSendHandler(connectId);

        ChatSdkStorageResponse response = new ChatSdkStorageResponse();

        try {
            OpenAiService service = OpenaiClientFactory.getService(chatSdkAccount);
            ChatCompletionRequest chatCompletionRequest = this.convertRequest(recordList, chatSdkAccount, e -> e.setStream(true));

            RecordData recordData = response.pushData(new RecordData());
            try {
                chatCompletionRequest.setStream(false);
                ChatCompletionResult chatCompletion = service.createChatCompletion(chatCompletionRequest);

                Optional.ofNullable(chatCompletion.getChoices()).orElseGet(ArrayList::new).forEach(res -> {
                    ChatMessage message = Optional.ofNullable(res.getMessage()).orElseGet(ChatMessage::new);
                    OR.run(message.getRole(), StrUtil::isNotEmpty, recordData::setRole);
                    String resContent = Optional.ofNullable(message.getContent()).orElse("");
                    recordData.getContentSB().append(resContent);
                    // 发送消息
                    messageSendHandler.queueAdd(resContent);
                });
            } catch (BusinessException e) {
                if (e.getCode() == HttpStatus.HTTP_OK) {
                    return response;
                }
                throw e;
            } finally {
                recordData.setContent(recordData.getContentSB().toString());
                service.shutdownExecutor();
            }
        } catch (Exception e) {
            e.printStackTrace();
            if (e.getCause() instanceof ConnectException) {
                throw new BusinessException("服务器节点异常,请稍后重试或联系管理员");
            }
            throw new BusinessException(e.getMessage());
        } finally {
            messageSendHandler.close();
        }
        chatResponseSyncDataService.syncChatResponse(chatSdkAccount, response, recordList);

        return response;
    }

    /**
     * 转换为api请求参数
     *
     * @param recordList
     * @param account
     * @param requestConsumer
     * @return
     */
    @Override
    public ChatCompletionRequest convertRequest(List<RecordData> recordList, ChatSdkAccount account, Consumer<ChatCompletionRequest> requestConsumer) {
        ChatCompletionRequest request = new ChatCompletionRequest();
        request.setModel(account.getModelValue());
        request.setN(1);
        request.setMaxTokens(account.getOnceToken());
        request.setLogitBias(new HashMap<>());

        List<ChatMessage> chatMessageList = recordList.stream().map(item -> {
            ChatMessage chatMessage = new ChatMessage();
            chatMessage.setRole(item.getRole());
            chatMessage.setContent(item.getContent());
            return chatMessage;
        }).toList();
        request.setMessages(chatMessageList);

        OR.run(account.getExtendParam(), CollUtil::isNotEmpty, extendParam -> {
            OR.run(extendParam.get("temperature"), Objects::nonNull, e -> {
                request.setTemperature(Double.valueOf(e.toString()));
            });
            OR.run(extendParam.get("topP"), Objects::nonNull, e -> {
                request.setTopP(Double.valueOf(e.toString()));
            });
            OR.run(extendParam.get("presencePenalty"), Objects::nonNull, e -> {
                request.setPresencePenalty(Double.valueOf(e.toString()));
            });
            OR.run(extendParam.get("frequencyPenalty"), Objects::nonNull, e -> {
                request.setFrequencyPenalty(Double.valueOf(e.toString()));
            });
            OR.run(extendParam.get("user"), Objects::nonNull, e -> {
                request.setUser(e.toString());
            });
        });
        requestConsumer.accept(request);
        return request;
    }

}

憧憬

我很荣幸获得了湖南省首届职业规划大赛省一我对自己的职业规划是先学和基础以及融汇贯通并且落地实战,因为博主还是专科学历我是打算把学历提升增加自己的知识储备

创作规划就是把自己的心得和收获干货分享给更多人,也希望在开源领域做出自己的一份贡献吧,众人拾柴火焰高嘛

😁热门专栏推荐
想学习vue的可以看看这个

java基础合集

数据库合集

redis合集

nginx合集

linux合集

手写机制

微服务组件

spring_尘觉

springMVC

mybits

等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持

🤔欢迎大家加入我的社区 尘觉社区

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/504768.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[创业之路-102] :结构化思考:产学研人才联合创业公司的特点、优点与困境

目录 前言&#xff1a; 一、什么是产学研 1.1 什么是产学研 1.2 什么是产学研人才联合创业 二、产、学、研的区别、各自的特点 2.1 产业&#xff08;产&#xff09;特点 2.2 其次&#xff0c;学术&#xff08;学&#xff09;特点 2.3 科学研究&#xff08;研&#xff0…

VS Code常用前端开发插件和基础配置

VS Code插件安装 VS Code提供了非常丰富的插件功能&#xff0c;根据你的需要&#xff0c;安装对应的插件可以大大提高开发效率。 完成前端开发&#xff0c;常见插件介绍&#xff1a; 1、Chinese (Simplified) Language Pack 适用于 VS Code 的中文&#xff08;简体&#xff…

PostCSS的安装及使用 (2):使用及问题解决

PostCSS是一个CSS处理器&#xff0c;它通过插件系统可以转换CSS代码&#xff0c;使其具备更多的功能或符合特定规范。 PostCSS的使用&#xff1a; 安装PostCSS CLI和插件 # 全局安装PostCSS CLI&#xff08;可选&#xff0c;一般在项目内安装&#xff09;npm install -g postc…

Kerberos 认证 javax.security.auth.logon.LoginException:拒绝链接 (Connection refused)

kerberos 服务重启之后异常 项目中用到了hive 和hdfs &#xff0c;权限认证使用了Kerberos&#xff0c;因为机房异常&#xff0c;导致了Kerberos 服务重启&#xff0c;结果发现本来运行正常的应用服务hive 和hdfs 认证失败&#xff0c;报错信息是 典型的网络连接异常 排查思路…

鸿蒙开发之ArkUI组件常用组件图片和文本

ArkUI即方舟开发框架是HarmonyOS应用的UI开发提供了完整的基础设施&#xff0c;包括简洁的UI语法、丰富的UI功能&#xff08;组件、布局、动画以及交互事件&#xff09;&#xff0c;以及实时界面预览工具等&#xff0c;可以支持开发者进行可视化界面开发。 开发文档地址 &…

AI大模型学习在医疗领域的应用与挑战

AI大模型学习在医疗领域的应用与挑战 文章正文&#xff1a;一、AI大模型学习在医疗领域的应用二、AI大模型学习在医疗领域面临的挑战总结&#xff1a; 文章正文&#xff1a; 随着人工智能技术的飞速发展&#xff0c;AI大模型学习在各个领域都取得了显著的成果。本文将探讨AI大…

使用Sui CLI在Sui上创建和执行PTBs

Sui命令行界面&#xff08;CLI&#xff09;中的新命令允许用户直接从终端或Bash脚本创建和执行可编程交易区块&#xff08;PTB&#xff09;。这个新命令为开发人员在实现和执行PTB方面提供了更大的灵活性。 PTB为开发人员提供了一种非常强大的编程工具&#xff0c;这在其他区块…

商务口语每天学习,柯桥英语培训

今天天气好 Its a nice day today. 今天天气真好。(搭讪) Ive heard too much about you. 久仰大名。(恭维) Remember me to... 请代我向……问好。(问候) 半个句型要记牢 Its a ~(nice/good/bad) day today. Tip: 如果你想和某人搭讪而找不着好的借口时&#xff0c;就说天气…

Macs Fan Control Pro--精准掌控Mac风扇,优化散热新选择

Macs Fan Control Pro是一款专为Mac电脑设计的高级风扇控制工具。它具备强大的温度监测能力&#xff0c;可以实时监测Mac电脑各个核心组件的温度&#xff0c;并通过直观的界面展示给用户。同时&#xff0c;用户可以根据个人需求自定义风扇速度&#xff0c;或者选择预设的自动风…

【STL】vector的模拟实现

目录 前言 vector概述 vector的数据结构 vector迭代器的运用 vector的构造和析构 vector的拷贝构造与赋值 拷贝构造 传统写法 现代写法 赋值重载 vector的扩容 reserve() resize() vector的元素操作 push_back() pop_back() insert() erase() 迭代器…

[linux初阶][vim-gcc-gdb] TwoCharter: gcc编译器

目录 一.Linux中gcc编译器的下载与安装 二.使用gcc编译器来翻译 C语言程序 ①.编写C语言代码 ②翻译C语言代码 a.预处理 b.编译 c.汇编 d.链接 ③.执行Main 二进制可执行程序(.exe文件) 三.总结 一.Linux中gcc编译器的下载与安装 使用yum命令(相当于手机上的应用…

HTTPS RSA 握手解析(计算机网络)

传统的 TLS 握手基本都是使用 RSA 算法来实现密钥交换的&#xff0c;在将 TLS 证书部署服务端时&#xff0c;证书文件其实就是服务端的公钥&#xff0c;会在 TLS 握手阶段传递给客户端&#xff0c;而服务端的私钥则一直留在服务端。 在 RSA 密钥协商算法中&#xff0c;客户端会…

算法学习——LeetCode力扣动态规划篇5(198. 打家劫舍、213. 打家劫舍 II、337. 打家劫舍 III )

算法学习——LeetCode力扣动态规划篇5 198. 打家劫舍 198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; 描述 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统…

Python|OpenCV-实现检测人脸以及性别检测(12)

前言 本文是该专栏的第13篇,后面将持续分享OpenCV计算机视觉的干货知识,记得关注。 性别检测是计算机视觉领域里面的一个重要学习领域,简单的来说,它可以实现自动识别一张图片中的人物性别。为此在本文中,笔者将结合OpenCV和Tensorflow来实现对一张图进行“图片中的人物人…

探索c++:string常用接口 迷雾

个人主页&#xff1a;日刷百题 系列专栏&#xff1a;〖C/C小游戏〗〖Linux〗〖数据结构〗 〖C语言〗 &#x1f30e;欢迎各位→点赞&#x1f44d;收藏⭐️留言&#x1f4dd; ​ ​ 一、string类 这里我们对string类进行一个简单的总结&#xff1a; string是表示字符串的字…

【更新】在湘源7、8中使用2023年11月国空用地用海分类

之前为了做控规&#xff0c;从湘源8中扒了一套国空用地用海的绘图参数给湘源7使用。 【预告】在湘源控规7中使用 国空用地用海分类标准 但是部里在2023年11月又发布了一套新的用地用海分类。 本想去湘源8里面再扒一下&#xff0c;结果发现湘源8自己还没有更新呢&#xff0c;…

使用STM32 MCU模拟实现PPS+TOD授时信号

简介 PPSTOD是授时信号的一种&#xff0c;用来传递准确的时间信息。 PPS&#xff0c;Pulse Per Second&#xff0c;是每秒一次的脉冲信号&#xff0c;其上升沿表示整秒的时刻。TOD&#xff0c;Time of Day&#xff0c;是时间信息。是跟随在每个PPS信号后的由串口发出的一句报…

Servlet Response的常用方法 缓存和乱码处理

前言 Servlet Response相关的信息&#xff0c;在service方法中使用的是HttpServletResponse&#xff0c;它继承自ServletResponse&#xff0c;扩展了Http协议相关的内容&#xff0c;下面简单记录一下它的基本用法。 一、response组成内容 以下是一个常见response响应的内容&…

红黑树介绍及插入操作的实现

&#x1f389;个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名乐于分享在学习道路上收获的大二在校生 &#x1f648;个人主页&#x1f389;&#xff1a;GOTXX &#x1f43c;个人WeChat&#xff1a;ILXOXVJE &#x1f43c;本文由GOTXX原创&#xff0c;首发CSDN&…

node.js的错误处理

当我打开一个不存在的文件时&#xff0c;错误如下&#xff1a; 在读取文件里面写入console.log&#xff08;err&#xff09;&#xff0c;在控制台中可以看到我的错误代码类型&#xff1a;文件不存在的错误代码 ENOENT。见更多错误代码---打开node.js官方API文档Error 错误 | N…