AI写代码靠谱么?aiXcoder部署尝试与对比

435 阅读2分钟

代码仓库地址:

github.com/aixcoder-pl…

安装与测试:

  1. 准备环境
conda create -n aixcoder-7b python=3.10
conda activate aixcoder-7b
pip3 install -r requirements.txt
pip3 install torch==1.13.0+cu117 torchvision==0.14.0+cu117 torchaudio==0.13.0 --extra-index-url https://download.pytorch.org/whl/cu117
  1. 依赖项
# flash-attention
git clone https://github.com/Dao-AILab/flash-attention.git
cd flash-attention
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.7/lib64
MAX_JOBS=8 python3 setup.py install
  1. 下载模型文件

参考文章进行配置

hdf.sh aiXcoder/aixcoder-7b-base --tool aria2c -x 10
  1. 运行demo
export CUDA_VISIBLE_DEVICES=4,6,7
torchrun --nproc_per_node 1 sess_megatron.py --model_dir ./aixcoder-7b-base/

修改sess_megatron.py 中的代码,即可让模型生成不同的代码。

  1. 实战

本次我们让模型来为我们生成一个函数,这个函数可以返回一个数组中最大的前三项。

aiXcoder-7B给出的答案是


def max_three(nums):
    # 如果数组长度小于等于3,直接返回数组
    if len(nums) <= 3:
        return nums
    # 初始化最大值列表
    max_nums = []
    # 遍历数组
    for num in nums:
        # 如果最大值列表长度小于3,或者当前数字大于最大值列表中的任何一个数字
        if len(max_nums) < 3 or num > max(max_nums):
            # 在最大值列表中找到第一个小于当前数字的数字的位置
            i = 0
            while i < len(max_nums) and num >= max_nums[i]:
                i += 1
            # 在最大值列表中插入当前数字
            max_nums.insert(i, num)
            # 如果最大值列表长度大于3,删除最大值列表的最后一个数字
            if len(max_nums) > 3:
                max_nums.pop()
    # 返回最大值列表
    return max_nums

Stable Code给出的答案是

import heapq

def find_max_three(arr):
    if len(arr) < 3:
        return sorted(arr, reverse=True)

    heap = arr[:3]
    heapq.heapify(heap)

    for num in arr[3:]:
        if num > heap[0]:
            heapq.heappop(heap)
            heapq.heappush(heap, num)

    return heap[::-1]

# Example usage:
arr = [1, 5, 8, 3, 9, 2, 6, 7, 4]
print(find_max_three(arr))  # Output: [9, 8, 7]

实际动手运行一下就会发现,两者都不太对,但是aiXcoder更加离谱一些。。。

  1. 关于插件

aiXcoder也提供了VSCode和JetBrains的插件,个人不建议使用,它无法使用自己部署的后端服务,只能能录到官方服务器来使用,鉴于目前个人部署的表现情况,如果使用插件,大概率你的代码会成为他的训练数据。只是一点猜测。