前端开发神器之 VsCode AI 辅助插件 DevChat

目录

  • 前言
  • DevChat介绍
  • DevChat 独特优势
    • 注册账号
    • 安装插件
    • 设置密钥访问
    • 指令
    • AI 解疑
  • 最后

#AI编程助手哪家好?DevChat“真”好用 #

前言

我们都有过写代码时反复看了半天也不知道bug在哪,大大浪费了时间。一些基础的代码可能看一会儿能够解决,但是复杂的代码就要花上一二个小时去检查,甚至更久。如果有个AI工具,可以帮助我们搞定基础代码,复杂的逻辑给我们提供给逻辑,那岂不是更好啦。本文给大家介绍一款VS Code AI辅助工具-DevChat,开发效率直接翻倍!

DevChat介绍

在这里插入图片描述
DevChat 是一个集成了多种主流大模型的 AI 编程工具,专注于提升程序员的编程效率。它整合了ChatGPT等热门 AI 应用,支持自然语言编程、代码编写、代码生成、代码补全等功能。Devchat 最大的优势是一站式服务,集成热门大模型,并且可以根据需求随心切换,省去了选择和整合不同AI模型的麻烦,无需过多配置就可以快速上手,从而全面提升开发效率。

产品务实高效,近期还在2023QCon全球软件大会亮相,斩获众多圈内开发者的好评 |

DevChat 独特优势

DevChat 兼容多种主流大模型,多种模板快速响应,不用纠结AI编程助手哪家好,大模型包括GPT-4 8k/32k、GPT-3.5 4k/16k、Claude2、文心一言、星火、ChatGLM、Code Llama等;可根据需求选择代码片段进行AI咨询。所以DevChat AI辅助工具对开发者提高工作效率真的很有帮助,具体优势如下:

1、多种大模型任意选。复杂任务非 GPT-4 莫属,简单任务交给低成本模型,组合使用效能最佳。

2、精准的“上下文”管理。对上下文的精确控制是有效使用人工智能的关键。DevChat 将控制权交给用户,以实现真正的生产力,并提供用户友好的方法来简化上下文选择。

3、上手简单。您不必学习特定编程语言的新框架来扩展人工智能以满足您的需求。 提示应该对用户可见且易于编辑,而不是隐藏在复杂的框架中。您不需要复杂的框架来让人工智能为您服务。所需要的只是一个在您的文件系统上运行的标准编辑器。

4、实用。利用人工智能编码能力的瓶颈在于如何在提示中嵌入正确的上下文,仅当人工智能真正增加价值时才使用它

5、简单可扩展的提示词目录。开放提示词扩展,Prompts as Code,满足团队和个人自定义需求。

6、灵活的 Prompt 模板管理,ask-code功能解答代码库的各类问题。

7、产品设计务实,迭代反馈快。

8、代码和文档自由生成,而非简单补全。

9、对接微软 Azure 服务,可信赖的企业级数据安全

官方地址:https://meri.co/tvy

注册账号

DevChat账号注册地址:链接直达,注册之后发送到邮箱的key,注意保存下来,在安装插件之后需要用到。

安装插件

打开VS Code开发工具,在应用市场搜索DevChat,然后点击install
在这里插入图片描述
安装完之后就可以在侧边栏有个类似小兔子图标,点击之后就可以看到插件的视图。

设置密钥访问

插件需要密钥访问,密钥是在注册时发送到邮箱里的。

在 Visual Studio Code 中按 ⇧⌘P / Ctrl+Shift+PF1 打开命令面板。接下来,输入devchat access key并输入上面的访问密钥。注意不要忘记安装Python 3.8+和Git来使用 DevChat。

在这里插入图片描述
然后输入邮箱里的key就可以啦
在这里插入图片描述
之后就可以正常使用啦!

指令

DevChat提供了下面的指令,方便了我们在开发时的操作以及对代码的分析。

  • 自定义本地命令
    单击此项并输入您想要的命令以运行。返回将被添加到上下文中。
  • git diff --cached
    自上次提交以来已暂存的更改
  • git diff HEAD
    自上次提交以来的所有更改
  • git log for release note
    自指定提交以来的格式化提交历史记录
  • symbol definitions
    在所选代码中查找类、函数等的相关定义
  • symbol references
    查找引用所选符号(类、函数、变量等)的代码站点

比如我要用symbol references分析下面的代码:

let transAudioData = {transcode(audioData) {let output = transAudioData.to16kHz(audioData)output = transAudioData.to16BitPCM(output)output = Array.from(new Uint8Array(output.buffer))self.postMessage(output)// return output},

选择symbol references之后,可以看到控制台中的OUTPUT输出一段JSON。
在这里插入图片描述
将图中的字符串转JSON之后如下:

{"languageId": "javascript","path": "../study-demo/kedaxunfei/src/until/transcode.worker.js","startLine": 6,"content": "  transcode(audioData) {\r\n    let output = transAudioData.to16kHz(audioData)\r\n    output = transAudioData.to16BitPCM(output)\r\n    output = Array.from(new Uint8Array(output.buffer))\r\n    self.postMessage(output)"
}

AI 解疑

DevChat提供了图中8种AI模型,根据需求选择其中一种进行对话操作。

选择GPT-3.5模型,然后向DevChat输入需求:手写Promise,让其帮助我们进行解答。DevChat回答如下:
在这里插入图片描述
下面是回答的全部代码,可见回答的十分详细。

enum PromiseStatus {Pending = 'pending',Fulfilled = 'fulfilled',Rejected = 'rejected'
}class MyPromise<T> {private status: PromiseStatus;private value: T;private reason: any;private onFulfilledCallbacks: ((value: T) => void)[];private onRejectedCallbacks: ((reason: any) => void)[];constructor(executor: (resolve: (value?: T) => void, reject: (reason?: any) => void) => void) {this.status = PromiseStatus.Pending;this.value = undefined;this.reason = undefined;this.onFulfilledCallbacks = [];this.onRejectedCallbacks = [];const resolve = (value?: T) => {if (this.status === PromiseStatus.Pending) {this.status = PromiseStatus.Fulfilled;this.value = value;this.onFulfilledCallbacks.forEach(callback => callback(this.value));}};const reject = (reason?: any) => {if (this.status === PromiseStatus.Pending) {this.status = PromiseStatus.Rejected;this.reason = reason;this.onRejectedCallbacks.forEach(callback => callback(this.reason));}};try {executor(resolve, reject);} catch (err) {reject(err);}}then<U>(onFulfilled?: (value: T) => U | PromiseLike<U>, onRejected?: (reason: any) => U | PromiseLike<U>): MyPromise<U> {onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : value => value;onRejected = typeof onRejected === 'function' ? onRejected : reason => { throw reason };const promise = new MyPromise<U>((resolve, reject) => {const handleFulfilled = (value: T) => {try {const result = onFulfilled!(value);if (result instanceof MyPromise) {result.then(resolve, reject);} else {resolve(result);}} catch (err) {reject(err);}};const handleRejected = (reason: any) => {try {const result = onRejected!(reason);if (result instanceof MyPromise) {result.then(resolve, reject);} else {resolve(result);}} catch (err) {reject(err);}};if (this.status === PromiseStatus.Pending) {this.onFulfilledCallbacks.push(handleFulfilled);this.onRejectedCallbacks.push(handleRejected);} else if (this.status === PromiseStatus.Fulfilled) {setTimeout(() => {handleFulfilled(this.value);}, 0);} else if (this.status === PromiseStatus.Rejected) {setTimeout(() => {handleRejected(this.reason);}, 0);}});return promise;}catch<U>(onRejected: (reason: any) => U | PromiseLike<U>): MyPromise<U> {return this.then(undefined, onRejected);}static resolve<U>(value?: U | PromiseLike<U>): MyPromise<U> {return new MyPromise<U>(resolve => resolve(value));}static reject<U>(reason?: any): MyPromise<U> {return new MyPromise<U>((_, reject) => reject(reason));}static all<U>(promises: (U | PromiseLike<U>)[]): MyPromise<U[]> {return new MyPromise<U[]>((resolve, reject) => {const results: U[] = [];let count = 0;const handleResolve = (value: U, idx: number) => {results[idx] = value;count++;if (count === promises.length) {resolve(results);}};promises.forEach((promise, idx) => {if (promise instanceof MyPromise) {promise.then(value => handleResolve(value, idx), reject);} else {handleResolve(promise, idx);}});});}static race<U>(promises: (U | PromiseLike<U>)[]): MyPromise<U> {return new MyPromise<U>((resolve, reject) => {promises.forEach(promise => {if (promise instanceof MyPromise) {promise.then(resolve, reject);} else {resolve(promise);}});});}
}

当然,如果我们在编辑器中有部分代码有疑惑,可以右键选择Add to AddChat,然后在左侧对话框输入我们的问题。比如,编辑器中我对下面的代码有疑惑,然后询问DevChat帮我解答疑惑。

  resolve: {alias: {'@': path.resolve(__dirname, 'src'),'components': path.resolve(__dirname, 'src/components'),},extensions: ['.js', '.json', '.ts', '.vue'], // 使用路径别名时想要省略的后缀名,可以自己 增减},

在这里插入图片描述

可以看到当点击Add to AddChat后,左侧输入框就多个图标内容,主要记录的是你的操作。

下面是DevChat的回答:

这段代码是设置在一个使用Vite的项目中的路径别名(alias)和默认文件后缀(extensions)的配置。

  • alias: 这个属性允许你创建一些路径别名,在你引用这个路径时,可以使用别名代替真实路径。例如,在此代码中,‘@’ 代表了 ‘src’
    目录,‘components’ 代表了 ‘src/components’ 目录。所以如果你在项目中想引用 ‘src/components’
    目录下的 ‘Example.vue’ 文件,你可以这么做:import Example from
    ‘components/Example.vue’ 或 import Example from ‘@/Example.vue’。

  • extensions: 这个属性可以设置一些默认的文件后缀。例如在此代码中,设置了 ‘.js’, ‘.json’, ‘.ts’,
    ‘.vue’ 这几种文件后缀名,这样在引用文件时就可以省略这些后缀了。例如 import Example from
    ‘@/Example’,系统会自动尝试加载 ‘src/Example’ + 这些后缀名的文件。

这两个选项的配置都是用于简化路径引用和提高代码的可读性。

DevChat进行解答,这种形式不需要我们通过搜索引擎去搜索问题答案,真的是太高效了!

最后

体验之后,真的感受到人工智能的强大。提高开发效率是每一位程序猿的综合素养。在互联网降本增效的时代,希望我们每位程序猿都能顺应潮流,更高效地工作,减少无用功,将自身价值发挥到有意义的地方!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

k8s(三): 基本概念-ReplicaSet与Deployment

PeplicaSet ReplicaSet 的目的是维护一组在任何时候都处于运行状态的 Pod 副本的稳定集合&#xff0c;通常用来保证给定数量的、完全相同的 Pod 的可用性。 最佳实践 Deployment 是一个可以拥有 ReplicaSet 并使用声明式方式在服务器端完成对 Pod 滚动更新的对象。 尽管 Rep…

oracle sql相关语法

SQL*PLUS 在SQL*PLUS执行&#xff0c;会在执行后显示查询的执行计划和统计信息 SET AUTOTRACE ON;SELECT * FROM your_table WHERE column_name value;SET AUTOTRACE OFF;PLSQL PLSQL查询sql界面&#xff0c;鼠标右键&#xff0c;点击执行计划&#xff0c;会出现sql的执行计…

matlab 汽车单车模型固定点跟踪算法

1、内容简介 略 29-可以交流、咨询、答疑 2、内容说明 单车模型固定点跟踪算法 单车模型&#xff0c;固定点跟踪算法&#xff0c;动画演示&#xff0c; 汽车单车模型、转弯动画、固定点跟踪算法、pid控制 3、仿真分析 略 A[0,5;0,0];B[0;1]; Q10*eye(2);R1; Klqr(A…

Java高级技术-反射

认识反射、获取类 获取类的方法 获取类的构造器 获取类的构造器、并对其进行操作 获取构造器的作用&#xff1a;依然是初始化对象返回 获取成员变量 获取成员变量的方法 获取成员变量的作用&#xff1a;赋值、取值 获取类的成员方法 方法 作用&#xff1a;依然是执行 作用、…

webGL开发学科演示项目方案

开发学科演示项目需要考虑到教育目标、互动性和用户体验。以下是一个可能的技术方案&#xff0c;可用于实现这样的项目&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.WebGL 框架&#xff1a; 选择…

golang 函数选项模式

一 什么是函数选项模式 函数选项模式允许你使用接受零个或多个函数作为参数的可变构造函数来构建复杂结构。我们将这些函数称为选项&#xff0c;由此得名函数选项模式。 例子&#xff1a; 有业务实体Animal结构体&#xff0c;构造函数NewAnimal&#xff08;&#xff09;&…

网络运维与网络安全 学习笔记2023.12.2

网络运维与网络安全 学习笔记 第三十三天 今日目标 Linux系统综述、部署本地Linux、配置Linux网络 SSH远程控制、远程文档管理、选购ECS云主机 Linux系统综述 Linux是一种操作系统 Linux之父&#xff0c;Linus Torwalds 1991年10月&#xff0c;发布0.02版&#xff08;第一…

Redis集群详解

1.1 什么是Redis集群 Redis集群是一种通过将多个Redis节点连接在一起以实现高可用性、数据分片和负载均衡的技术。它允许Redis在不同节点上同时提供服务&#xff0c;提高整体性能和可靠性。根据搭建的方式和集群的特性&#xff0c;Redis集群主要有三种模式&#xff1a;主从复制…

海林猴头菇 区域公用品牌形象正式发布

猴头菇是中国八大“山珍”之一&#xff0c;自古就有“山珍猴头&#xff0c;海味燕窝”之说&#xff0c;猴头菇在中国既是食用珍品&#xff0c;又是重要的药用菌。 海林市位于黑龙江省东南部&#xff0c;地处长白山脉张广才岭东麓&#xff0c;素有“林海雪原”之称。 海林猴头菇…

zookeeper集群+kaafka集群

kafka3.0之前依赖于zookeeper zookeeper开源&#xff0c;分布式的架构&#xff0c;提供协调服务&#xff08;Apache项目&#xff09; 基于观察者模式涉及的分布式服务管理架构 存储和管理数据&#xff0c;分布式节点上的服务接受观察者的注册&#xff0c;一旦分布式节点上的…

计算机网络TCP篇②

一、TCP 重传、滑动窗口、流量控制、拥塞控制 1.1、重传机制 在 TCP 中&#xff0c;当发送端的数据达到接受主机时&#xff0c;接收端主机会返回一个确认应答消息&#xff0c;表示已收到消息。但是在复杂的网络中&#xff0c;并一定能顺利正常的进行数据传输&#xff0c;&…

Linux 匿名页反向映射

1. 何为反向映射 正向映射&#xff1a; 用户进程在申请内存时&#xff0c;内核并不会立刻给其分配物理内存&#xff0c;而是先为其分配一段虚拟地址空间&#xff0c;当进程访问该虚拟地址空间时&#xff0c;触发page fault异常&#xff0c;异常处理流程中会为其分配物理页面&am…

关于Typora如何插入自己的云端视频的方法

关于Typora如何插入自己的云端视频的方法 文章目录 关于Typora如何插入自己的云端视频的方法前言&#xff1a;实现步骤&#xff1a;小结 前言&#xff1a; 我本来使用gitee来作为typora的图床&#xff0c;但我现在想要把我自己的视频上传到云端&#xff0c;然后通过超链接在ty…

215. 数组中的第K个最大元素

题目&#xff1a; 解法一、优先级队列 代码 #include<queue> class Solution { public:int findKthLargest(vector<int>& nums, int k){//使用优先级队列直接秒杀&#xff01;priority_queue<int ,vector<int>,less<int>> q;for(int i0;i&…

链表数组插入排序

InsertSort 插入排序算法&#xff0c;比如打扑克牌的算法时&#xff0c;按照从左到右&#xff0c;找到对应的位置插入排序 最重要的是位置移动 找到对应位置值 #include "iostream" #include "bits/stdc.h"using namespace std;void sort(vector<in…

关于微信公众号授权的几件事

背景 项目需要使用微信公众号发消息&#xff0c;然后就来接入这个微信授权啦&#xff0c;微信公众号发消息前提是还需要用户先关注公众号~ 微信授权是有点恶心的&#xff0c;真的真的需要先配置好环境&#xff0c;开发的话目前是可以使用测试号申请公众号使用测试号的appid~ …

【云备份】业务处理

文章目录 1. 业务处理作用功能 2. 代码框架编写构造函数UpLoad ——文件上传请求ListShow —— 展示页面请求处理实现Download —— 下载请求的处理实现断点续传实现 1. 业务处理 作用 业务处理模块是对客户端的业务请求进行处理 功能 1.文件上传请求&#xff1a;备份客户端…

lv11 嵌入式开发 中断处理 15

前言&#xff1a;中断属于7种异常的1种&#xff0c;这节主要讲CPU接收到中断之后怎么处理&#xff0c;回顾之前的知识。 目录 1 异常 1.1 概念 1.2 异常处理机制 1.3 ARM异常源 1.4 异常模式 1.5 ARM异常响应 1.6 异常向量表 1.7 异常返回 ​编辑 1.8 IRQ异常举例 …

scrapyd及gerapy的使用及docker-compse部署

一、scrapyd的介绍 scrapyd是一个用于部署和运行scrapy爬虫的程序&#xff0c;它允许你通过JSON API(也即是web api)来部署爬虫项目和控制爬虫运行&#xff0c;scrapyd是一个守护进程&#xff0c;监听爬虫的运行和请求&#xff0c;然后启动进程来执行它们 scrapyd的安装 scr…

从“芯”到云,看亚马逊云科技如何让未来“平等”发生

文章目录 业界最全面算力选择&#xff0c;有效解决多样性需求多年自研芯片积累&#xff0c;带来性能与性价比双重优势全球基础设施与独特的业务模式&#xff0c;让创新不受限 “科幻作家威廉吉布森说‘未来已至&#xff0c;只是还没有均匀分布’。”2023年6月底&#xff0c;当亚…