本文最后更新于:2024年5月7日 下午
市面上有多款文本大模型辅助编程工具,本文记录智谱华章公司的工具 CodeGeeX。
背景
目前,市面上有几款基于文本大模型的AI辅助编程工具,它们各自具有不同的特点和功能。以下是一些比较知名的AI编程助手:
- CodeGeeX:这是一个全能的智能编程助手,能够实现代码的生成与补全、自动添加注释、代码翻译以及智能问答等功能。它支持多种主流编程语言,并适配多种主流IDE。
- Github Copilot:由Github和OpenAI合作推出,它能够为开发人员提供实时的代码提示和生成功能,支持多种编程语言,如Python、JavaScript、TypeScript、Ruby等,并可以与主流的集成开发环境(IDE)和文本编辑器配合使用。
- Tabnine:这款工具的特点是速度快,但在建议中可能会添加一些用户没有预料到的代码。
- Codeium:它支持多种IDE和语言,并提供内置聊天功能。Codeium在功能和价格方面排名较高,但并不代表在延迟或质量方面也最好。
- Amazon CodeWhisperer:也是一款主流的AI智能编程代码助手。
- 代码小浣熊Raccoon:由商汤科技发布,它能理解开发者的意图和上下文信息,提供代码片段建议、智能补全、逻辑推理以及问题解答等操作。它具有代码生成、代码补全、代码翻译、代码重构、代码纠错、代码问答和测试用例生成等功能。
简介
CodeGeeX是一款基于大模型的全能的智能编程助手。它可以实现代码的生成与补全、自动添加注释、代码翻译以及智能问答等功能,能够帮助开发者显著提高工作效率。CodeGeeX支持主流的编程语言,并适配多种主流IDE。
主要特点
- 代码生成与补全:CodeGeeX 能够根据开发者的输入自动生成或补全代码,减少编程时的重复性工作。
- 自动添加注释:在代码生成或补全的过程中,CodeGeeX 还能自动添加相应的注释,帮助提高代码的可读性。
- 代码翻译:支持将代码从一种编程语言翻译成另一种,这对于需要在多种语言间切换的开发者尤其有用。
- 智能问答:开发者可以通过提问的方式获取关于编程问题的解答,这对于解决编程中的疑问或困惑非常有帮助。
- 支持多种编程语言:CodeGeeX支持Python、Java、C++、JavaScript、Go等数十种常见编程语言。。
- 适配多种主流IDE:CodeGeeX支持Visual Studio Code及IntelliJ IDEA、PyCharm、GoLand等JetBrains IDE。
- CodeGeeX插件对个人用户完全免费。
大模型
当前(2024.3)CodeGeex 使用 CodeGeex2-6B模型,该模型已经开源
示例
生成补全
1 2 3 4 5 6 7
| import requests
response = requests.get('https://www.codegeex.cn/') print(response.status_code) print(response.headers) print(response.text)
|
注释生成
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| def tcplink(conn, addr): print("Accept new connection from %s:%s" % addr) conn.send(b"Server: Welcome!\n") while True: conn.send(b"Server: What's your name?")
data = conn.recv(1024) if data == b"exit": conn.send(b"Server: Good bye!\n") break conn.send(b"Server: Hello %s!\n" % data)
conn.close() print("Connection from %s:%s is closed" % addr)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| def tcplink(conn, addr): print("Accept new connection from %s:%s" % addr) conn.send(b"Server: Welcome!") while True: conn.send(b"Server: What's your name?")
data = conn.recv(1024) if data == b"exit": conn.send(b"Server: Good bye!\n ") break conn.send(b"Server: Hello %s!\n" % data)
conn.close() print("Connection from %s:%s is closed" % addr)
|
代码翻译
1 2 3 4 5 6 7 8 9
| def bubble_sort(L): changed = True while changed: changed = False for i in range(len(L)-1): if L[i] > L[i+1]: L[i], L[i+1] = L[i+1], L[i] changed = True return L
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public class BubbleSort{ public int[] bubbleSort(int[] nums) { int len = nums.length; boolean swapped = true; for (int i = 0; swapped && i < len; i++) { swapped = false; for (int j = 0; j < len - i - 1; j++) { if (nums[j] > nums[j + 1]) { int temp = nums[j]; nums[j] = nums[j + 1]; nums[j + 1] = temp; swapped = true; } } } return nums; } }
|
智能问答
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
import _thread import time def print_time( threadName, delay): count = 0 while count < 5:
time.sleep(delay) count += 1 print ("%s: %s" % ( threadName, time.ctime(time.time()) )) try: _thread.start_new_thread( print_time, ("Thread-1", 2, ) ) _thread.start_new_thread( print_time, ("Thread-2", 4, ) ) except: print ("Error: 无法启动线程")
while 1: pass
|
解释一下这个函数
1 2 3 4 5 6 7
| def print_time( threadName, delay): count = 0 while count < 5:
time.sleep(delay) count += 1 print ("%s: %s" % ( threadName, time.ctime(time.time()) ))
|
这个函数的作用是打印线程名称和时间,每次打印的时间间隔为 delay 毫秒。 函数中定义了两个变量 count 和 threadName,分别用于计数和标识不同的线程。count 初始值为 0,while 循环五次,每次循环增加 1,表示需要等待 delay 毫秒后再进行打印。 在每次循环中,调用 time.sleep() 函数来暂停程序的执行,时间为 delay 毫秒。这样可以保证每个线程在打印时间后都能等待一定的时间再进行下一次打印。 接着,增加 count 计数器,并将当前时间用 ctime() 函数转换为字符串,然后使用%s格式化字符串将时间和线程名称打印出来。 最后,函数返回 threadName 参数,可以用于标识不同的线程。
安装使用
VS code
- 在应用商店搜索:codegeex,搜索并安装插件
- 在VS code 导航栏会多一个按钮,核心内容都在里面,登录即可使用
参考资料
文章链接:
https://www.zywvvd.com/notes/tools/codegeex/codegeex/