【AI 编程助手】DevChat 指南:精准控制、简单扩展、多模型选择,助力开发者高效开发

在这里插入图片描述

文章目录

    • 一、前言
    • 二、认识了解 DevChat
      • 2.1 什么是 DevChat
      • 2.2 DevChat 优势以及特点
        • 2.2.1 精准控制提示上下文
        • 2.1.2 简单的扩展机制
        • 2.1.3 多种大模型任选
    • 三、构建安装 DevChat
      • 3.1 注册 DevChat
      • 3.2 DevChat 插件安装指南
        • 3.2.1 在 Windows 上安装git(如已安装,可跳过该步骤)
        • 3.2.2 在 VS Code 中安装插件
        • 3.2.3 设置Access Key
    • 四、DevChat 实践操作案例
      • 4.1 优化整个代码文件
      • 4.2 使用 DevChat 进行代码审计
    • 五、文末总结

一、前言

本次评测聚焦于 VSCode 插件 DevChat,为开发者提供即时通信功能,提高编程效率。文章深入探讨了插件的安装、使用和特性,通过代码示例详细说明其在开发过程中的实际帮助。在软件开发领域,VS Code 作为灵活而功能强大的编辑器,通过丰富的插件满足各类开发需求。对于对 GPT 感兴趣的人,推荐使用 DevChat,这款基于 GPT-4 的聊天式编程辅助工具。与 ChatGPT 不同,DevChat 直接为 VS Code 提供插件,使得在编程环境中与之对话更加便捷。

二、认识了解 DevChat

2.1 什么是 DevChat

DevChat是一个集成了多种主流大模型的AI编程工具,专注于提升程序员的编程效率。它整合了ChatGPT、Codex等热门AI大模型,支持自然语言编程、代码编写、代码生成、代码补全等功能。Devchat最大的优势是一站式服务,集成热门大模型,并且可以根据需求随心切换,省去了选择和整合不同AI模型的麻烦,无需过多配置就可以快速上手,从而全面提升开发效率。产品务实高效,近期还在QCon全球软件大会亮相,斩获众多圈内开发者的好评

2.2 DevChat 优势以及特点

尽管有许多AI编码工具可用,但我们基于通过生成数万行代码积累的实际见解开发了DevChat。DevChat做出了以下的独特的设计选择。

在这里插入图片描述

2.2.1 精准控制提示上下文

对上下文的精准掌控是有效使用人工智能的关键。例如,假设你希望AI为一个函数生成一些测试用例。瓶颈不在于制定请求本身或嵌入给 AI 的指令,比如“你是一个很棒的测试者”。相反,对于请求而言,被称为上下文的所需信息是最关键的因素。在这种情况下,上下文可能不仅涵盖被测试的函数,还包括它调用的任何其他主要函数,这可能影响测试用例。此外,上下文还可能包括一个类似的工作测试用例,以帮助 AI 理解和复制测试用例在你特定环境中的设置和格式。

我们发现大多数其他“智能”或“自动”工具倾向于过度猜测用户需要将什么放入提示中,目的是减轻用户的工作量。这通常导致比 LLMs 能够有效处理的更多噪音。DevChat 将控制权交还给人类以实现真正的生产力,并提供用户友好的方法来简化上下文选择。在实践中,人类仍然是驾驶员,只有在提供清晰请求和适当上下文的情况下,AI 才能真正发挥作用。

2.1.2 简单的扩展机制

为了满足你的需求,你不必学习特定编程语言的新框架。提示应该对用户可见且易于编辑,而不是隐藏在复杂的框架中。

自定义你的提示,建立适合你和团队的工作库。将自己的提示模板轻松集成到 DevChat 中,无需进行大量工程努力或陡峭的学习曲线。你不需要一个复杂的框架来让 AI 为你工作。只需使用操作你文件系统的标准编辑器即可。

2.1.3 多种大模型任选

现阶段 DevChat 支持多种大模型,现阶段可以看到支持 GPT-4(OpenAI)、GPT-3(OpenAI)、Claude-2 等。

从下图可以看到,支持的模型种类很多:

在这里插入图片描述

三、构建安装 DevChat

3.1 注册 DevChat

直接访问官方网站进行注册

DevChat 官方网站:https://www.devchat.ai/

在这里插入图片描述

输入注册信息进行注册

在这里插入图片描述

注册成功后,在你的邮箱内会收到注册成功的提示邮件,类似如下,请保存该邮件,如果没有收到,先去垃圾箱检查一下,可能会被误判为垃圾邮件了。里面包含一个 Access Key 信息,要保存好,后面会使用到。

在这里插入图片描述

3.2 DevChat 插件安装指南

3.2.1 在 Windows 上安装git(如已安装,可跳过该步骤)

环境中需要安装 Git 依赖,安装方法可以参考我以前的博文:[Git & GitHub] Windows安装git和环境变量配置

完成安装后,在命令行终端运行git --version返回版本号表明成功。

在这里插入图片描述

3.2.2 在 VS Code 中安装插件

在 VS Code 插件市场中搜索devchat,如下图,点击安装(或访问 Visual Studio Marketplace,点击 Install)。

在这里插入图片描述

安装可能持续若干分钟(在这里我确实等了几分钟)

完成安装后的提示:如下图

在这里插入图片描述

3.2.3 设置Access Key

在访问 https://web.devchat.ai/ 注册的账号后,会收到邮件,里面会带有 Access Key(上文有提示),完整复制粘贴到 VS Code 中,具体方法为:

点击左下角管理(“齿轮”图标),命令面板(Command Palette),在弹出的命令面板中输入devchat key,点击如下命令后,如下图:

在这里插入图片描述

在弹出的输入框中粘贴进 DevChat Access Key,回车。右下方状态栏 DevChat 前出现如下对勾,表明安装配置完成

在这里插入图片描述

到此步骤,我们已经将 DevChat 成功安装到 VS Code 中,接下来我们实际操作一下,来体验 DevChat 的强大。

四、DevChat 实践操作案例

4.1 优化整个代码文件

在这个例子里,我们可以直接讲某一个代码文件,添加到 DevChat 中,之后让 DevChat 直接进行分析,得到代码策略。

如下图所示,直接右键点击代码文件,添加到 DevChat 中

在这里插入图片描述

在下图可以看到,我们添加的代码文件,并且在聊天框中,可以直接添加输入你想做的事情,之后让 DevChat 进行优化代码,并且 DevChat 给出了建议方案。

在这里插入图片描述

DevChat 给出的建议参考如下。

你的代码写得不错,只有一小部分可以进一步优化,具体的优化点如下:

  1. 数据库操作分离:

你可以将数据库连接配置项抽象为一个函数,如此可以在三个执行数据库操作的函数中复用。同时你可以使用with语句,这样在语句结束之后,连接和游标就会自动关闭,无需手动关闭。

  1. 路径拼接:

你可以使用 os.path.join(path, i) 来代替 path + '/' + i,这样可以避免在不同操作系统上出现的路径分隔符不统一的问题。

以下为对应的优化代码:

import pymysql
import pandas as pd
import os
import wordcloud
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt

# MySQL数据库连接配置
db_config = {
    'host': "gz-cynosdbmysql-grp-d27hp6vl.sql.tencentcdb.com",
    'port': 27529,
    'user': "root",
    'password': "TDSQL-C.@GMbe#P!",
    'database': 'experience-12',
}


def get_connection_cursor():
    # 建立MySQL数据库连接
    conn = pymysql.connect(**db_config)
    cursor = conn.cursor()
    return conn, cursor


def create_table(table_name, columns):
    with get_connection_cursor() as (conn, cursor):
        query = f"CREATE TABLE IF NOT EXISTS {table_name} ("
        for col_name, col_type in columns.items():
            query += f"{col_name} {col_type}, "
        query = query.rstrip(", ")
        query += ")"
        cursor.execute(query)
        conn.commit()


def excelTomysql():
    path = '词频'
    files = [os.path.join(path, i) for i in os.listdir(path)]
    for file_path in files:
        print(file_path)
        filename = os.path.basename(file_path)
        table_name = os.path.splitext(filename)[0]
        data = pd.read_excel(file_path, engine="openpyxl", header=0)
        columns = {col: "VARCHAR(255)" for col in data.columns}
        create_table(table_name, columns)
        save_to_mysql(data, table_name)
        print(filename + ' uploaded and saved to MySQL successfully')


def save_to_mysql(data, table_name):
    with get_connection_cursor() as (conn, cursor):
        for index, row in data.iterrows():
            query = f"INSERT INTO {table_name} ("
            for col_name in data.columns:
                query += f"{col_name}, "
            query = query.rstrip(", ")
            query += ") VALUES ("
            values = tuple(row)
            query += ("%s, " * len(values)).rstrip(", ")
            query += ")"
            cursor.execute(query, values)
        conn.commit()


def query_data():
    with get_connection_cursor() as (conn, cursor):
        cursor.execute("SHOW TABLES")
        tables = cursor.fetchall()

    data = []
    dic_list = []
    table_name_list = []
    for table in tables:
        table_name = table[0]
        table_name_list.append(table_name)
        query = f"SELECT * FROM {table_name}"
        with get_connection_cursor() as (conn, cursor):
            cursor.execute(query)
            result = cursor.fetchall()

        if len(result) > 0:
            columns = [desc[0] for desc in cursor.description]
            table_data = [{columns[i]: row[i] for i in range(len(columns))} for row in result]
            data.extend(table_data)
        dic = {}
        for i in data:
            dic[i['word']] = float(i['count'])
        dic_list.append(dic)

    conn.commit()
    cursor.close()
    conn.close()
    return dic_list, table_name_list


if __name__ == '__main__':
    excelTomysql()
    print("excel写入到mysql成功!")
    result_list, table_name_list = query_data()
    print("从mysql获取数据成功!")
    for i in range(len(result_list)):
        maskImage = np.array(Image.open('background.PNG'))
        wc = wordcloud.WordCloud(
            font_path='PingFangBold.ttf',
            mask=maskImage,
            max_words=500,
            max_font_size=100)
        wc.generate_from_frequencies(result_list[i])
        wc.to_file("词云图/{}.png".format(table_name_list[i]))
        print("生成的词云图【{}】已经保存成功!".format(table_name_list[i] + '.png'))
        plt.imshow(wc)
        plt.axis('off')
        plt.show()

4.2 使用 DevChat 进行代码审计

另一个推荐的比较强大的功能是,可以利用 DevChat 对 PR 的代码进行代码审计操作。

下面我们来演示如何用 DevChat 对分支:adapt-prompt-for-3.5-instruct 进行代码审计操作
在这里插入图片描述

我们在 DevChat 窗口中,给出所要审计的分支关键词等信息,对代码分支进行 Review。

效果如下图:

在这里插入图片描述

DevChat 会给出专业的 Review 建议点,返回给用户,如下图所示:

在这里插入图片描述

五、文末总结

在本文中,我们介绍了 DevChat,探讨了其在开发过程中的重要性和优势。通过精准控制提示上下文、简单的扩展机制以及多种大模型任选,DevChat为开发者提供了强大的工具,助力优化整个代码文件并进行高效的代码审计。通过详细的构建安装步骤,我们帮助读者轻松入门,并展示了在实际操作中如何利用 DevChat 提升开发效率。无论是注册、插件安装,还是设置 Access Key,我们提供了清晰的指南。希望这篇文章能够成为你在 DevChat 使用过程中的有力伙伴,让你在开发中更加游刃有余。

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

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

相关文章

高效批量剪辑、处理和添加水印,用视频批量剪辑高手轻松搞定!

您是否曾经在处理大量视频时,因为剪辑、处理和添加水印等问题而感到烦恼?是否因为这些问题而大大降低了您的工作效率?现在,我们为您推荐一款全新的视频批量剪辑工具——视频批量剪辑高手,让您的工作效率瞬间翻倍&#…

msvcr110.dll文件丢失的解决方法

msvcr110.dll是一个动态链接库文件,属于Microsoft Visual C运行时库(Runtime Library)版本11.0。它包含了在Visual C程序中使用的函数和变量。当一个程序编译完成后,仍然需要一些运行时库来在操作系统上运行。这些库提供了程序所需…

联邦学习研究综述笔记

联邦学习 联邦学习的定义:联邦学习是一种分布式机器学习架构,包含多个客户端(参与者)和一个聚合服务器。客服端(参与方):在本地使用自己的私有数据训练模型,训练完成之后将模型的参…

【机器学习】K近邻算法:原理、实例应用(红酒分类预测)

案例简介:有178个红酒样本,每一款红酒含有13项特征参数,如镁、脯氨酸含量,红酒根据这些特征参数被分成3类。要求是任意输入一组红酒的特征参数,模型需预测出该红酒属于哪一类。 1. K近邻算法介绍 1.1 算法原理 原理&a…

数据结构(超详细讲解!!)第二十三节 树型结构

1.定义 树型结构是一类重要的非线性数据结构,是以分支关系定义的层次结构。是一种一对多的逻辑关系。 树型结构是结点之间有分支,并且具有层次关系的结构,它非常类似于自然界中的树。树结构在客观世界中是大量存在的,例如家谱、…

【数据结构】树与二叉树(十四):二叉树的基础操作:查找给定结点的父亲(算法Father )

文章目录 5.2.1 二叉树二叉树性质引理5.1:二叉树中层数为i的结点至多有 2 i 2^i 2i个,其中 i ≥ 0 i \geq 0 i≥0。引理5.2:高度为k的二叉树中至多有 2 k 1 − 1 2^{k1}-1 2k1−1个结点,其中 k ≥ 0 k \geq 0 k≥0。引理5.3&…

基于头脑风暴算法优化概率神经网络PNN的分类预测 - 附代码

基于头脑风暴算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于头脑风暴算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于头脑风暴优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神…

基于RK3399的室内健身魔镜方案

I 方案背景 一、健身魔镜的兴起 2020年疫情席卷全球,宅家是防疫的措施之一,因而宅家运动火爆,随之而来的宅家运动器材也风靡起来,其中包含既有颜值又具有多种功能的健身魔镜。 Ⅱ 方案介绍 一、健身魔镜的方案介绍 …

020线上线下融合商业模式 新零售系统定制开发

020线上线下融合商业模式将传统的线下实体店和线上电子商务相结合,通过双通道销售、互联网服务等方式,实现线上线下渠道的整合与协同发展。这种商业模式的核心在于通过整合线上线下资源,提供更优质的产品和服务,增强消费者体验和提…

查看包是由哪个依赖引入的

问题:在Maven项目中,如何查看某个包是由pom.xml文件的哪个依赖引入的? 示例: mvn dependency:tree -Dverbose -Dincludesjakarta.validation:jakarta.validation-api或者: mvn dependency:tree -Dincludesvelocity:…

微服务概览

单体架构 传统的软件应用为单体架构。尽管也是模块化逻辑,但是最终还是会打包并并部署为单体应用。最主要的原因是太复杂。并且应用扩展性低,可靠性也低。敏捷开发和部署变得无法完成。 治理办法:化繁为简,分而治之。 微服务起源…

基于回溯搜索算法优化概率神经网络PNN的分类预测 - 附代码

基于回溯搜索算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于回溯搜索算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于回溯搜索优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神…

【Python小程序】浮点矩阵加减法

一、内容简介 本文使用Python编写程序,实现2个m * n矩阵的加、减法。具体过程如下: 给定两个m*n矩阵A和B,返回A与B的和或差。 二、求解方法 将两个矩阵对应位置上的元素相加。 三、Python代码 import numpy as np# 用户输入两个矩阵的维…

Spring Bean 生命周期的执行流程

(mic老师面试文档摘录) 普通人的回答: Spring Bean 的生命周期,可以分为单例、多实例。呃... 不对,这个是 Spring Bean 的作用域。 生命周期,我想想.... 我记得 Bean 的生命周期会有加载、实例化、销毁…

开源供应链管理系统 多供应商批发管理系统方案及源码输出

开发框架:PHPMySQL 后端框架:ThinkPHP 订货端:PC小程序 客户订货端:小程序 多仓库OR多供应商:多供应商 是否进销存:自带进销存 整个方案含B端订货PC、小程序端、C端小程序端下单,源码&…

UI和UX设计师实用高效的设计工具大全

真正专业和优秀的UX设计师不会介意使用哪个工具。因为,只要能力足够,即使条件不同,工具不同,也可以设计出让人眼前一亮的作品。也许,这种理解本身并没有什么大问题。然而,如今,设计师显然有如此…

刨根问底:Java中的“\p{P}”到底是什么意思

问题由来: 在代码中看到了Pattern.compile("\\p{P}"),用来识别符号,但是这个正则表达式却不匹配加号,所以\p{P}到底是什么意思呢 谷歌了一下,找到StackOverflow上有人问了一模一样的问题 可是这个问题被关…

ChatGLM3本地部署运行(入门体验级)

文章目录 前言零 硬件小白基知填坑eForce Game Ready驱动程序CUDA常用命令 环境准备NVIDIA驱动更新CUDA安装 部署补充内容体验 前言 学习自B站up主技术爬爬虾,感谢up主提供的整合包! 零 硬件 6GB以上显存的NVIDIA显卡(品质越高&#xff0c…

基于猫群算法优化概率神经网络PNN的分类预测 - 附代码

基于猫群算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于猫群算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于猫群优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络的光滑…

Redhat7查看时区、修改时区

问题: 安装好redhat7之后,发现时间和物理机上面的网络时间不一致,于是查看本着修改时间的目的,却发现原来是时区的问题。 解决步骤: 查看时区状态信息 timedatectl修改时区到亚洲/上海 timedatectl set-timezone A…