通义灵码是基于通义大模型的 AI 研发辅助工具,提供代码智能生成、研发智能问答、多文件代码修改、自主执行等能力,为开发者带来智能化研发体验,引领 AI 原生研发新范式。
核心能力
代码智能生成
经过海量优秀开源代码数据训练,可根据当前代码文件及跨文件的上下文,为你生成行级/函数级代码、单元测试、代码优化建议等。沉浸式编码心流,秒级生成速度,让你更专注在技术设计,高效完成编码工作。
研发智能问答
基于海量研发文档、产品文档、通用研发知识、阿里云的云服务文档和 SDK/OpenAPI 文档等进行问答训练,为你答疑解惑,助你轻松解决研发问题。
AI 程序员
具备多文件代码修改和工具使用的能力,可以与开发者协同完成编码任务,如需求实现、问题解决、单元测试用例生成、批量代码修改等。
安装方法
Visual Studio Code安装通义灵码,扩展窗口搜索tongyi lingma,找到后安装即可。(PC可以上网(⊙o⊙)哦),我这里已经安装过了,所以提示更新。
登录账号,我这里是关联的阿里云账号登录的,个人账户,可以免费试用。
更新后可以使用DeepSeek了,体验下与qwen2.5的不同之处
先问个问题,生成nginx_traffic.py
import re from collections import defaultdict def parse_nginx_log(log_file_path): """ 解析Nginx访问日志,统计出口流量。 :param log_file_path: Nginx日志文件路径 :return: 流量统计结果 """ traffic_stats = defaultdict(int) log_pattern = re.compile(r'(?P<remote_addr>\S+) \S+ \S+ \[(?P<time_local>[^\]]+)\] ' r'"(?P<request>[^"]*)" (?P<status>\d{3}) (?P<body_bytes_sent>\d+|-) ' r'"(?P<http_referer>[^"]*)" "(?P<http_user_agent>[^"]*)"') with open(log_file_path, 'r', encoding='utf-8') as f: for line in f: match = log_pattern.match(line) if match: data = match.groupdict() # 如果body_bytes_sent是'-',表示没有发送响应体 bytes_sent = int(data['body_bytes_sent']) if data['body_bytes_sent'] != '-' else 0 traffic_stats[data['remote_addr']] += bytes_sent return dict(traffic_stats) if __name__ == "__main__": log_file_path = "/path/to/your/nginx/access.log" # 替换为你的Nginx日志文件路径 traffic = parse_nginx_log(log_file_path) print("Nginx出口流量统计 (单位: 字节):") for ip, total_bytes in traffic.items(): print(f"IP: {ip}, 总流量: {total_bytes} 字节")
3分钟写一个音乐闹钟小程序,
下列操作步骤按照通义灵码AI编码实战的视频教程知道,一步步操作。
import tkinter as tk from time import strftime def update_time(): # 获取当前时间并格式化 current_time = strftime('%H:%M:%S %p') # 格式示例:14:30:45 PM # 更新标签文本 time_label.config(text=current_time) # 每隔1秒递归调用自身实现持续更新 time_label.after(1000, update_time) # 创建主窗口 root = tk.Tk() root.title("数字时钟") root.geometry("400x150") # 设置窗口大小 # 创建时间显示标签 time_label = tk.Label( root, font=('Helvetica', 48, 'bold'), # 设置字体样式 background='black', # 背景颜色 foreground='white' # 文字颜色 ) time_label.pack(anchor='center', expand=True) # 居中对齐 # 首次调用更新时间函数 update_time() # 启动主循环 root.mainloop()
增加定时功能,可以在界面上设定多少秒后响应,当到达定时时间后,闹钟会弹出。
之前也体验过qwen2.5版本的通义灵码能力,现在的DeepSeekR1更加智能,具备生成扩展代码的能力:
插入扩展代码,闹钟为执行成功。尝试AI修复:
触发逻辑缺失
在当前的update_time()中,原有的闹钟触发检查逻辑被覆盖,缺少了关键的时间判断条件。
修复完成后,各功能正常执行。
import tkinter as tk import winsound from tkinter import messagebox from time import strftime, time def update_time(): current_time = strftime('%H:%M:%S %p') time_label.config(text=current_time) # 触发检查(新增核心逻辑) if alarm_time and isinstance(alarm_time, tuple): if time() >= alarm_time[0]: # 时间到达判断 trigger_alarm() # 剩余时间显示(原有优化逻辑) if alarm_time and isinstance(alarm_time, tuple): try: remaining = int(alarm_time[0] - time()) if remaining >= 0: status_label.config(text=f"剩余时间:{remaining}秒") except (TypeError, IndexError): pass time_label.after(1000, update_time) def set_alarm(): global alarm_time try: seconds = int(entry.get()) if seconds <= 0: raise ValueError # 记录触发时间(当前时间戳 + 秒数) alarm_time = (time() + seconds, seconds) status_label.config(text=f"闹钟已设置:{seconds}秒后触发") except ValueError: messagebox.showerror("错误", "请输入有效正整数") def trigger_alarm(): messagebox.showinfo("闹钟", "时间到!") alarm_window = tk.Toplevel(root) alarm_window.title("闹钟提醒") alarm_label = tk.Label(alarm_window, text="⏰ 时间到!", font=('Arial', 24), fg='red') alarm_label.pack(padx=50, pady=20) # 重置闹钟状态 global alarm_time alarm_time = None status_label.config(text="等待设置闹钟...") winsound.MessageBeep(winsound.MB_ICONHAND) # 创建主窗口 root = tk.Tk() root.title("数字时钟+闹钟") root.geometry("400x250") # 增加高度容纳新控件 # 时间显示部分保持不变 time_label = tk.Label(root, font=('Helvetica', 48, 'bold'), bg='black', fg='white') time_label.pack(anchor='center', expand=True) # 新增控件区域 control_frame = tk.Frame(root) control_frame.pack(pady=10) # 输入框和按钮 tk.Label(control_frame, text="设置倒计时(秒):").pack(side=tk.LEFT) entry = tk.Entry(control_frame, width=10) entry.pack(side=tk.LEFT, padx=5) tk.Button(control_frame, text="开始定时", command=set_alarm).pack(side=tk.LEFT) tk.Button(control_frame, text="取消", command=lambda: globals().update(alarm_time=None)).pack(side=tk.LEFT) # 状态显示 status_label = tk.Label(root, text="等待设置闹钟...", font=('Arial', 12)) status_label.pack(pady=5) # 修改状态提示初始化文本 status_label.config(text="当前无激活闹钟") # 初始化变量 alarm_time = None # 存储(触发时间戳,设置秒数) update_time() root.mainloop()
选中全部代码,进行优化,对话框中输入生成时钟类。
import tkinter as tk import winsound from tkinter import messagebox from time import strftime, time class ClockApp: def __init__(self): self.root = tk.Tk() self.root.title("数字时钟+闹钟") self.root.geometry("400x250") # 初始化闹钟状态 self.alarm_time = None # 创建界面组件 self._create_widgets() self.update_time() self.root.mainloop() def _create_widgets(self): """创建并布局所有界面元素""" # 时间显示 self.time_label = tk.Label( self.root, font=('Helvetica', 48, 'bold'), bg='black', fg='white' ) self.time_label.pack(anchor='center', expand=True) # 控制面板 control_frame = tk.Frame(self.root) control_frame.pack(pady=10) # 倒计时输入 tk.Label(control_frame, text="设置倒计时(秒):").pack(side=tk.LEFT) self.entry = tk.Entry(control_frame, width=10) self.entry.pack(side=tk.LEFT, padx=5) # 操作按钮 tk.Button( control_frame, text="开始定时", command=self.set_alarm ).pack(side=tk.LEFT) tk.Button( control_frame, text="取消", command=lambda: setattr(self, 'alarm_time', None) ).pack(side=tk.LEFT) # 状态显示 self.status_label = tk.Label( self.root, text="当前无激活闹钟", font=('Arial', 12) ) self.status_label.pack(pady=5) def update_time(self): """更新时间显示和检查闹钟状态""" current_time = strftime('%H:%M:%S %p') self.time_label.config(text=current_time) # 检查闹钟触发 self._check_alarm_trigger() # 更新剩余时间显示 self._update_remaining_time() # 每秒更新一次 self.time_label.after(1000, self.update_time) def _check_alarm_trigger(self): """检查是否到达闹钟时间""" if self.alarm_time and isinstance(self.alarm_time, tuple): if time() >= self.alarm_time[0]: self.trigger_alarm() def _update_remaining_time(self): """更新剩余时间显示""" if self.alarm_time and isinstance(self.alarm_time, tuple): try: remaining = int(self.alarm_time[0] - time()) if remaining >= 0: self.status_label.config(text=f"剩余时间:{remaining}秒") except (TypeError, IndexError): pass def set_alarm(self): """设置闹钟""" try: seconds = int(self.entry.get()) if seconds <= 0: raise ValueError self.alarm_time = (time() + seconds, seconds) self.status_label.config(text=f"闹钟已设置:{seconds}秒后触发") except ValueError: messagebox.showerror("错误", "请输入有效正整数") def trigger_alarm(self): """触发闹钟提醒""" messagebox.showinfo("闹钟", "时间到!") self._show_alarm_window() self._reset_alarm_state() winsound.MessageBeep(winsound.MB_ICONHAND) def _show_alarm_window(self): """显示提醒窗口""" alarm_window = tk.Toplevel(self.root) alarm_window.title("闹钟提醒") tk.Label( alarm_window, text="⏰ 时间到!", font=('Arial', 24), fg='red' ).pack(padx=50, pady=20) def _reset_alarm_state(self): """重置闹钟状态""" self.alarm_time = None self.status_label.config(text="当前无激活闹钟") # 启动应用程序 if __name__ == "__main__": ClockApp()
对set_alarm生成单元测试
import unittest from unittest.mock import MagicMock, patch import time_app_optimize @patch('time_app_optimize.messagebox') class TestClockAppSetAlarm(unittest.TestCase): def setUp(self): self.app = time_app_optimize.ClockApp() self.app.entry = MagicMock() self.app.status_label = MagicMock() self.mock_time = 1620000000.0 self.time_patch = patch('time_app_optimize.time', return_value=self.mock_time) self.time_patch.start() # 初始化确保属性存在 self.app.alarm_time = None def tearDown(self): self.time_patch.stop() def test_valid_positive_integer(self, mock_msgbox): """测试有效正整数输入""" self.app.entry.get.return_value = "30" self.app.set_alarm() expected_time = (self.mock_time + 30, 30) self.assertEqual(self.app.alarm_time, expected_time) # 验证时间模块调用 time_app_optimize.time.assert_called_once() self.app.status_label.config.assert_called_once_with( text="闹钟已设置:30秒后触发") mock_msgbox.showerror.assert_not_called() def test_invalid_string_input(self, mock_msgbox): """测试非数字输入""" self.app.entry.get.return_value = "abc" self.app.set_alarm() mock_msgbox.showerror.assert_called_once_with("错误", "请输入有效正整数") self.assertIsNone(self.app.alarm_time) # 更精确的值断言 def test_negative_integer(self, mock_msgbox): """测试负整数输入""" self.app.entry.get.return_value = "-5" self.app.set_alarm() mock_msgbox.showerror.assert_called_once_with("错误", "请输入有效正整数") self.assertIsNone(self.app.alarm_time) def test_zero_input(self, mock_msgbox): """测试零输入""" self.app.entry.get.return_value = "0" self.app.set_alarm() mock_msgbox.showerror.assert_called_once_with("错误", "请输入有效正整数") self.assertIsNone(self.app.alarm_time) if __name__ == '__main__': unittest.main()
总结
之前也使用过qwen2.5的通义灵码,这次升级到DeepSeek,最直观的感受就是有深度思考和上下文的能力。可以通过深度思考对过程中进行学习,对提高我们的技术水平有很大帮助,我们可以知道为什么?中间都处理了哪些环节,这样我们也跟着思考学习,而不是单纯等待结果。
上下文是可以聚焦整个AI参与工作的过程,使我们的每次AI干预能更加精准。
不论是qwen2.5还是DeepSeek,这种即开即用的代码生成能力确实可以大幅提高我们的生产效率。尤其是对我这代码能力比较弱的种运维人员来说,简直就是质的变化。有一些运维场景,往往需要开发一些小工具,过去苦于代码能力只能想,现在只要把我想要做什么表达出来就ok了。
代码即服务(Code as a Server)。
不会没关系,以后AI全部搞定,代码看不懂(代码解释-代码注释),代码用不起来(单元测试-代码优化)。