关于写vscode ChatGPT插件遇到的一些问题

这篇具有很好参考价值的文章主要介绍了关于写vscode ChatGPT插件遇到的一些问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

出于对技术的专研想还原ChatGPT里面的一些交互,中间遇到遇到一些小问题做下总结

一、还原里面的富文本展示

chatgpt返回结果是这样的

"冒泡排序是一种简单直观的排序算法,它重复地比较相邻的两个元素,如果顺序错误就交换它们的位置,直到没有任何一对数字需要比较为止。以下是 JavaScript 实现冒泡排序的代码:\n\n```\nfunction bubbleSort(arr) {\n  var len = arr.length;\n  for (var i = 0; i < len - 1; i++) {\n    for (var j = 0; j < len - 1 - i; j++) {\n      if (arr[j] > arr[j + 1]) {\n        // 交换相邻两个元素\n        var temp = arr[j];\n        arr[j] = arr[j + 1];\n        arr[j + 1] = temp;\n      }\n    }\n  }\n  return arr;\n}\n\n// 测试代码\nvar arr = [5, 2, 4, 6, 1, 3];\nconsole.log(bubbleSort(arr)); // [1, 2, 3, 4, 5, 6]\n```\n\n上述代码中,外层循环执行 len - 1 次,内层循环执行 len - 1 - i 次。如果 arr[j] 大于 arr[j + 1],则交换它们的位置。最后返回排好序的数组 arr。"

最终实现效果
关于写vscode ChatGPT插件遇到的一些问题
这里不仅还原了文本格式的展示,而且也还原了代码高亮。
可以看出chatgpt返回的是markdawn文本格式,要对markdawn文本格式做下处理,采用的是很强大的marked.js工具,感情兴趣的同学可以到官网看看:https://marked.js.org/

// Create reference instance
import { marked } from 'marked';

// Set options
// `highlight` example uses https://highlightjs.org
marked.setOptions({
  renderer: new marked.Renderer(),
  highlight: function(code, lang) {
    const hljs = require('highlight.js');
    const language = hljs.getLanguage(lang) ? lang : 'plaintext';
    return hljs.highlight(code, { language }).value;
  },
  langPrefix: 'hljs language-', // highlight.js css expects a top-level 'hljs' class.
  pedantic: false,
  gfm: true,
  breaks: false,
  sanitize: false,
  smartypants: false,
  xhtml: false
});

// Compile
console.log(marked.parse(markdownString));

这是给出的官方示例,开箱即用。
关于写vscode ChatGPT插件遇到的一些问题
项目里面引入marked.min.jshighlight.min.js文件

项目初始化时引入上面配置,marked.parse()方法会把markdawn格式转化为html格式。

二、消息发送框还原文本格式

消息发送框一共有两种实现方案: div模拟textarea

div模拟textarea

效果如图
关于写vscode ChatGPT插件遇到的一些问题
这里保留了原问题的换行符等格式,一开始实现简单的消息发送,采用的是input框,当然input框肯定保留不了文本格式,看了一下chatgpt网站,发现他们使用的是textarea文本框,textarea文本框可以保留文本格式,我就采用dom的一个属性 contenteditable 去模拟了一个textarea,
关于写vscode ChatGPT插件遇到的一些问题

<div class="ask-input" ref="ask-input3" @input="setAsk3" @keydown.enter.prevent="askSubmit3" contenteditable="true" placeholder="请输入内容..." @paste="paste"></div>

去掉粘贴文本格式

paste(event) {
	let e = event || window.event
	// 阻止默认粘贴
	e.preventDefault();
	let text =  (e.originalEvent || e).clipboardData.getData('text/plain');
	document.execCommand("insertText", false, text);

}

设置placeholder

.ask-input:empty:before{
    content: attr(placeholder);
    color:#bbb;
}

文本折行

.input-container .ask-input-box .ask-input * {
	word-break: break-all;
	white-space: pre-wrap !important;
}  

去掉滚动条

.ask-input::-webkit-scrollbar {
	display: none
};

关于写vscode ChatGPT插件遇到的一些问题
关于写vscode ChatGPT插件遇到的一些问题

编辑的时候做了一个简单切换,这样也就能保留原来文本格式

textarea实现高度自适应
textareaHeight1: 22
<textarea
	ref="textarea1"
	v-model="askInput1"
	@input="autoResize1"
	placeholder="请输入内容..."
	@keydown="eventListen1"
	:style="{ height: `${textareaHeight1}px` }"
></textarea>
autoResize1() {
	this.textareaHeight1 = 22; // 自适应减小
	this.$nextTick(() => {
		this.textareaHeight1 = this.$refs.textarea1.scrollHeight;
	});
},
.input-container .ask-input-box textarea {
	width: 100%;
	max-height: 200px !important;
	color: var(--vscode-foreground);
	font-size: 14px;
	/* 去掉默认字体样式 */
	font-family: inherit; 
	font-weight: inherit;
	border: 1px solid #ccc;
	border-radius: 4px;
	resize: none;
	padding: 0;
	border: none;
	outline: none;
}

实现起来也很简单!

使用innerHTML一样显示html标签

为了保留文本的原格式我们都会设置innerHTML,但是有一个缺陷就是 如果想显示标签怎么办,html标签可以做转义处理

str.replaceAll('<', '&lt;').replaceAll('>', '&gt;')

关于写vscode ChatGPT插件遇到的一些问题

其他的就不多讲了,感兴趣的小伙伴可以自己动手实现。文章来源地址https://www.toymoban.com/news/detail-433866.html

到了这里,关于关于写vscode ChatGPT插件遇到的一些问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 关于stm32控制esp8266链接阿里云时遇到的一些问题

    关于stm32控制esp8266链接阿里云时遇到的一些问题

    目录 问题一:关于mqtt的AT命令 固件问题而产生的其他问题: 关于mqtt报文连接阿里云的问题 用串口调试助手发送: AT+MQTTCONN=0,\\\"iot-06z00fmgtrunfzt.mqtt.iothub.aliyuncs.com\\\",1883,0 一直回复error,连不上的问题 当我的esp8266烧录的是1112号的固件,这个固件我不知道是不是有问题,有时候能

    2024年01月25日
    浏览(6)
  • UE4 关于使用Webbrowser插件遇到的问题以及解决办法

    UE4 关于使用Webbrowser插件遇到的问题以及解决办法

    解决办法:第一种办法,重新编译了cef源码,改成支持H.264,然后在UE4安装目录下替换相关文件,网上有教程自己搜。第二种办法是直接找改好的插件,桃宝 解决办法:使用webbrowser的ExecuteJavascript函数执行js代码,这段代码的大概意思就是将滑动条的长宽设置为0以此来达到隐

    2024年02月12日
    浏览(32)
  • 关于ChatGPT的一些随笔

    关于ChatGPT的一些随笔

    大家好,我是老三,最近几个月关于ChatGPT的信息可以说是铺天盖地。 “王炸,ChatGPT……” “xxx震撼发布……” “真的要失业了,xxx来袭……” “普通如何利用ChatGPT……” …… 不过老三前一阵比较忙,对ChatGPT的使用基本只限于一些简单的问答,比如: 可以说是落伍到家

    2023年04月10日
    浏览(9)
  • 关于大语言模型LLM插件和Agent的一些想法

    关于大语言模型LLM插件和Agent的一些想法

    What is a Plugin? A  plugin  is a software add-on that is installed on a program, enhancing its capabilities. For example, if you wanted to watch a video on a website, you may need a plugin to do so. If the plugin is not installed, your browser will not understand how to play the video. 插件是安装在程序上的软件附加组件,目的是增强其功

    2024年02月04日
    浏览(9)
  • 关于ChatGPT的个人的一些观点

    关于ChatGPT的个人的一些观点

    Q: 你认为ChatGPT是一款非常有用的工具吗? A: 我认为ChatGPT是一款非常有用的工具。它可以帮助人们解决各种问题,包括技术问题、心理问题、生活问题等等。同时,ChatGPT也可以成为人们分享想法和交流的平台,增强人与人之间的联系。 Q: 你认为ChatGPT的功能和性能将会越来越

    2024年02月09日
    浏览(6)
  • 【C++】一些关于visual stdio,vscode,Mingw的思考 |bug

    【C++】一些关于visual stdio,vscode,Mingw的思考 |bug

    今天在做YOLOV8的C++部署时遇到的一些问题: 在进行一系列的操作之后会生成解决方案文件sln: 当然按道理到这一步之后,应该使用make命令进行下一步操作(但是我确实不会make命令,所以准备进sln来生成解决方案): 点开后会发现有一个解析命令行参数的库文件没有(因为这

    2024年02月11日
    浏览(9)
  • 解决 git clone 时遇到的一些问题

    解决 git clone 时遇到的一些问题

    在使用 git clone 时,出现了以下报错: GnuTLS recv error (-110): The TLS connection was non-properly terminated. 依次输入以下代码: 然后再次使用 git clone 发现可以正常下载了。 输入以下两行代码解决:

    2024年02月16日
    浏览(11)
  • 记一个有关 Vuetify 组件遇到的一些问题

    记一个有关 Vuetify 组件遇到的一些问题

    Vuetify 官网地址 所有Vuetify 组件 — Vuetify Combobox 组合框 — Vuetify   items数据使用对象数组时,默认选中的是整个对象,要对数据进行处理   variableList是一个对象数组,设置了item-value无效,需要在数据变化时实时取需要的字段值 Text field 输入框 — Vuetify 要实现下方文本框标题

    2024年01月16日
    浏览(10)
  • Python: Django 服务部署可能遇到的一些问题

    不要用 python3 manage.py runserver 启动服务, 而要用: 此外,在 setting.py 中,修改: 在 setting.py 中,修改: 其中,域名有无 https:// 均可 此外,在 应用名/views.py 中,修改: 运行: 在 script 中,声明 WebSocket 时,注意 https 与 wss 对应,http 与 ws 对应:

    2024年02月14日
    浏览(8)
  • 如何安装wsl以及安装时遇到的一些问题

    如何安装wsl以及安装时遇到的一些问题

    首先我安装wsl是参考这篇文章:Windows安装WSL详解 讲得挺具体,如果安装过程一切顺利就可以跳过下面的内容了 当我在终端输入 wsl --install 返回了一列数据,但显然不是安装成功 于是我输入 wsl install 时报错显示 适用于 Linux 的 Windows 子系统没有已安装的分发版。 可以通过访

    2024年02月05日
    浏览(11)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包