用豆包debug代码是怎样一种体验

背景

早就听说AI可以写代码,一直不以为然。前阵用豆包生成一些简单代码段,可以参考,但是直接执行还是有各种问题。这次又遇到一个小问题,想再次试试AI写代码,并且调试代码的能力。

先上结论: AI很牛,已经具备一些让人不感相信的逻辑分析能力。

需求

需求来源于折腾,没有需求就瞎折腾。帮妈妈下载了一些广场舞的视频,拷进SD卡插入Mp4视频播放器就能自动播放。但是文件顺序是乱的,不方便查找,二是某些视频需要放在前面。因此,需要给视频文件名前一个序号,这样也方便记住一些常用视频的编号,使用播放器的按键可以直接定位视频。

AI编程及debug

准备一些文件

image-20250116160716240

python 代码有问题

还是使用豆包。因为以前用过一个批量改名的windows小工具,但是忘记名字,本想问问豆包是否知道这事,结果 。。。

首先向豆包提出需求: 文件 名批量改名 小工具。

豆包,直接给出源码方案,一个python版本,一个bat版本。恰好机器上也有python环境,运行了下没有任何输出,也没有改变文件名。使用python ide检查了一下源码,发现有语法错误,也可能是文件格式问题,就没有再深究,转向bat源码方案。

image-20250116155148996

bat版本一(file_1, file2, …)

提问词: windows 文件名 批量加上顺序编号 小工具

豆包给出BAT源码如下:

@echo off
setlocal enabledelayedexpansion
set "directory=C:/Users/YourUsername/YourDirectory"
set "prefix=file_"
set "index=1"
for /f "delims=" %%F in ('dir /b /a-d /o:n "%directory%\*.*"') do (
    set "file=%%F"
    ren "%directory%\!file!" "%prefix%!index!%%~xF"
    set /a index+=1
)

放到待改名文件夹内,直接运行,结果正确: 文件被改为file_1, file2, …, 没有保留原始名字。继续改进

bat版本二(1.jpg, 2.jpg)

提问词: windows, 给当前目录 下 文件, 批量改名, 增加顺序编号 bat

没有前缀,只保留了文件扩展名

@echo off
setlocal enabledelayedexpansion
set "counter=1"
for %%F in (*) do (
    if not "%%F"=="%~nx0" (
        ren "%%F" "!counter!_%%F"
        set /a counter+=1
    )
)

bat版本三(将编号 改为位数字)

基于上一个版本: 将编号 改为位数字

豆包回复如下, 本来是想说 将编号 改2位数字, 少了2这个题词,但是豆包默认改为了3位数字。

@echo off
setlocal enabledelayedexpansion
set "counter=001"
for %%F in (*) do (
    if not "%%F"=="%~nx0" (
        ren "%%F" "!counter!_%%F"
        set /a counter+=1
        if!counter! LSS 10 set "counter=00!counter!"
        if!counter! GEQ 10 if!counter! LSS 100 set "counter=0!counter!"
    )
)

但是这个代码执行有问题, 只能成功修改一个文件。

请豆包调试: 以上代码 只能修改第一个文件 , 解释 debug一下

豆包回复如下, 似乎是判断到if条件出了问题,豆包还引入了一个new_counter的变量,但是不得要领,还是只能修改一个文件 ,程序就退出了。

人工debug后,发现是豆包给的代码if!new_counter! , if 后面少了空格,导致程序逻辑判断错误,而且有的序号用了2次。但是不告诉豆包,让他继续定位问题。

@echo off
setlocal enabledelayedexpansion
set "counter=001"
for %%F in (*) do (
    if not "%%F"=="%~nx0" (
        ren "%%F" "!counter!_%%F"
        set /a new_counter=counter+1
        if!new_counter! LSS 10 set "counter=00!new_counter!"
        if!new_counter! GEQ 10 if!new_counter! LSS 100 set "counter=0!new_counter!"
        set "counter=!new_counter!"
    )
)

请豆包调试: 这段代码 ,替换文件名时, 前缀有连续的情况,请debug一下

这次豆包给了另外一种方案

@echo off
setlocal enabledelayedexpansion
set "counter=001"
set "index=0"
set "filelist="
for %%F in (*) do (
    if not "%%F"=="%~nx0" (
        set "filelist=!filelist! "%%F""
    )
)
for %%A in (%filelist%) do (
    set /a index+=1
    ren "%%~A" "!counter!_%%~A"
    set /a counter+=1
    set "counter=1000!counter!"
    set "counter=!counter:~-3!"
)

依然 没有解决问题,仍有文件被多次重命名或跳过

继续请豆包调试: 当前文件夹下有多种不同类型的文件, 编写处理脚本 ,为其加上2位数字的前缀,按顺序添加。

进一步明确需求,回复如下:

@echo off
setlocal enabledelayedexpansion
set "counter=01"
for /f "delims=" %%F in ('dir /b /a-d') do (
    if not "%%F"=="%~nx0" (
        set "filename=%%~nF"
        set "extension=%%~xF"
        ren "%%F" "!counter!_!filename!!extension!"
        set /a counter+=1
        if!counter! LSS 10 (
            set "counter=0!counter!"
        )
    )
)

这里应该还是 if!counter!, if后面没有空格导致出错, 但是即使手工修改这个bug, 代码还是会对不同后缀的文件分别编号。这不符号本文需求。

继续: 以上代码,有bug, 有两个文件序号前缀重复了,请修订

@echo off
setlocal enabledelayedexpansion
set "counter=01"
for /f "delims=" %%F in ('dir /b /a-d') do (
    if not "%%F"=="%~nx0" (
        set "filename=%%~nF"
        set "extension=%%~xF"
        ren "%%F" "!counter!_!filename!!extension!"
        set /a counter+=1
        if !counter! LSS 10 (
            set "counter=0!counter!"
        )
    )
)

以上代码,专门考虑了扩展名, 再加上人工加上if后面的空格 后,代码执行正常,即使有多种扩展名的文件,也能统一编号 排序 。测试效果如下:

image-20250116162142512

最终应用:

image-20250116162439881

其他豆包给出的方案

%
避免文件列表混乱的方法是将文件移动到一个临时目录中,重命名后再移回原目录。
REM 仍然存在问题,因为当前文件 中有多种扩展名的文件存在
REM : 将文件名和扩展名分开处理,重命名时将新的编号添加到文件名部分,保持扩展名不变
%

@echo off
setlocal enabledelayedexpansion
set "counter=001"
mkdir temp 2>nul
for %%F in (*) do (
    if not "%%F"=="%~nx0" (
        move "%%F" temp
    )
)
for /F "delims=" %%F in ('dir /b /a-d temp') do (
    set "filename=%%~nF"
    set "extension=%%~xF"
    ren "temp\%%F" "!counter!_!filename!!extension!"
    set /a counter+=1
    set "counter=1000!counter!"
    set "counter=!counter:~-3!"
    move "temp\!counter!_!filename!!extension!".
)
rmdir temp
### 豆包流式语音识别代码实现 豆包(DouBao)是由字节跳动推出的一款多功能人工智能助手,其功能涵盖了自然语言处理、语音识别等多个领域。虽然具体提到的豆包流式语音识别官方文档未被直接提及于所提供的参考资料中[^1][^2],但可以基于常见的开源工具和框架来推测其实现方式。 以下是使用 Python 和常见语音识别库(如 Vosk 或其他类似的离线 ASR 工具)构建的一个通用流式语音识别代码示例: #### 流式语音识别代码示例 ```python import vosk import sounddevice as sd from queue import Queue from threading import Thread # 初始化模型路径 model_path = "vosk-model-small-en-us-0.15" # 替换为实际模型路径 # 配置参数 sample_rate = 16000 # 模型所需的采样率 block_size = 8000 # 每次读取音频帧大小 # 创建队列用于存储音频数据 q = Queue() def callback(indata, frames, time, status): """回调函数:实时捕获麦克风输入""" if status: print(status, flush=True) q.put(bytes(indata)) def recognize(): model = vosk.Model(model_path) # 加载模型 with sd.RawInputStream(samplerate=sample_rate, blocksize=block_size, dtype='int16', channels=1, callback=callback): rec = vosk.KaldiRecognizer(model, sample_rate) while True: data = q.get() if rec.AcceptWaveform(data): # 如果接收到完整的句子 result = rec.Result() # 获取最终结果 print(f"Recognized: {result}") else: partial_result = rec.PartialResult() # 获取部分结果 print(f"Partial: {partial_result}") if __name__ == "__main__": recognizer_thread = Thread(target=recognize, daemon=True) recognizer_thread.start() recognizer_thread.join() ``` 上述代码展示了如何通过 `Vosk` 库实现流式语音识别的功能。此代码片段能够实现实时录音并将其转换为文本输出。需要注意的是,这里使用的模型是英文小型模型 (`vosk-model-small-en-us-0.15`),如果目标语言不同,则需替换为对应的语言模型文件。 对于豆包的具体实现细节,由于缺乏公开的技术资料说明其内部架构或 API 接口设计,因此建议参考类似技术栈中的成熟解决方案作为替代方案之一。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月光技术杂谈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值