在这里插入图片描述

一、前言

本次评测聚焦于 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 使用过程中的有力伙伴,让你在开发中更加游刃有余。

Logo

欢迎加入我们的广州开发者社区,与优秀的开发者共同成长!

更多推荐