AI通用大模型编程需要的能力

news2024/11/23 16:33:56

        这几天研究通过通义千问AI大模型编程,有三点感受,分享给大家。如果将来有新的感受,会继续分享。

1、清晰的提示词指令,让输出的成功率更高

2、了解点代码知识,虽不会写,但能看的懂

3、定位代码问题的能力

        通过提示词的方法使用通义千问AI大模型编程的方法,已经在前一篇文章中分享过了,这篇文章将介绍定位问题的能力和方法。

        在使用AI进行代码编程时,AI大模型有时候不能完全理解你的意思,即便输入了几次提示词,依然得不到期望的结果,这时候,解决问题的方法就是打印日志,定位到出现问题的那一行代码,然后告诉AI,这一行代码写错了。

 3.1 案例

        以我使用AI通义千问做网站开发为例,分享一个问题定位的过程。我通过提示词要求AI大模型做一个饼图的统计模块,AI给出的views.py代码如下:

def record_count_by_tag(request):
    is_admin = request.user.is_superuser
    user = request.user

    # 初始化表单
    if request.method == 'GET':
        form = DateRangeForm(request.GET)
    else:
        form = DateRangeForm()

    if form.is_valid():
        start_date = form.cleaned_data.get('start_date')
        end_date = form.cleaned_data.get('end_date')
        stat_type = form.cleaned_data.get('stat_type')
    else:
        start_date = None
        end_date = None
        stat_type = None

    # 根据用户权限和日期筛选记录
    if is_admin and stat_type == 'by_tag':
        all_records = Record.objects.all()
        if start_date and end_date:
            all_records = all_records.filter(date__range=(start_date, end_date))
    elif is_admin and stat_type == 'by_creator':
        all_records = Record.objects.all()
        if start_date and end_date:
            all_records = all_records.filter(date__range=(start_date, end_date))
    else:
        all_records = Record.objects.filter(user=user)
        if start_date and end_date:
            all_records = all_records.filter(date__range=(start_date, end_date))

    # 统计标签
    if is_admin and stat_type == 'by_tag':
        all_tag_counts = all_records.values('tag').annotate(count=Count('tag')).order_by('-count')
    elif is_admin and stat_type == 'by_creator':
        all_tag_counts = all_records.values('user__username').annotate(count=Count('id')).order_by('-count')
    else:
        all_tag_counts = all_records.values('tag').annotate(count=Count('tag')).order_by('-count')

    # 生成饼图的函数
    def generate_pie_chart(data, title, labels=None):
        # 设置中文字体
        plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体或其他支持中文的字体
        plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

        if not data:
            return None  # 如果没有数据,返回 None

        counts = [item['count'] for item in data]
        if not labels:
            labels = [item['tag'] if 'tag' in item else item['user__username'] for item in data]

        # 自定义 autopct 函数,显示标签名、百分比和数量
        def autopct_generator(labels, counts):
            total = sum(counts)

            def autopct(pct):
                val = int(round(pct * total / 100.0))
                index = min(int(pct / 100. * len(counts)), len(counts) - 1)  # 确保索引不超出范围
                return f'{labels[index]}\n{pct:.1f}%\n({val})'

            return autopct

        fig, ax = plt.subplots()
        wedges, texts, autotexts = ax.pie(counts, labels=None, autopct=autopct_generator(labels, counts), startangle=90)
        ax.axis('equal')
        ax.set_title(title)

        # 设置文本样式
        for text in texts + autotexts:
            text.set_fontsize(10)  # 调整字体大小
            text.set_color('white')  # 设置文本颜色为白色

        buf = io.BytesIO()
        plt.savefig(buf, format='png')
        buf.seek(0)
        string = base64.b64encode(buf.read())
        uri = 'data:image/png;base64,' + quote(string)
        return uri

    # 生成所有记录的饼图
    all_tags_pie_chart = generate_pie_chart(all_tag_counts, '所有标签' if is_admin else f'{user.username} 的标签')

    return render(request, 'records/tag_count.html', {
        'is_admin': is_admin,
        'all_tags_pie_chart': all_tags_pie_chart,
        'form': form,  # 传递表单到模板
        'tag_counts': all_tag_counts,  # 传递标签统计信息到模板
        'tag_choices': Record.TAG_CHOICES,  # 传递标签选项到模板
    })

        AI给出的forms.py代码如下:

class DateRangeForm(forms.Form):
    start_date = forms.DateField(widget=forms.DateInput(attrs={'type': 'date'}))
    end_date = forms.DateField(widget=forms.DateInput(attrs={'type': 'date'}))
    # tag = forms.ChoiceField(choices=[('', '所有')] + Record.TAG_CHOICES, required=False)
    stat_type = forms.ChoiceField(
        choices=[('by_tag', '按标签统计'), ('by_creator', '按创建者统计')],
        required=False,
        widget=forms.Select(attrs={'class': 'form-control mr-2'})
    )

        tag_count.html代码如下:

{% extends "base_generic.html" %}

{% load custom_filters %}  <!-- 加载自定义过滤器 -->

{% block title %}标签统计{% endblock %}

{% block content %}
  <div class="content-header">
    <h2>标签统计</h2>
  </div>

  <!-- 时间范围和标签选择表单 -->
  <div class="bordered-section mb-3">
    <form method="GET" action="" class="form-inline">
      <div class="form-group d-flex align-items-center">
        <label for="id_start_date" class="mr-2">开始日期:</label>
        <input type="date" name="start_date" id="id_start_date" value="{{ form.start_date.value|default:'' }}" class="form-control mr-2">
      </div>
      <div class="form-group d-flex align-items-center">
        <label for="id_end_date" class="mr-2">结束日期:</label>
        <input type="date" name="end_date" id="id_end_date" value="{{ form.end_date.value|default:'' }}" class="form-control mr-2">
      </div>
      {% if is_admin %}
        <div class="form-group d-flex align-items-center">
          <label for="id_stat_type" class="mr-2">统计方式:</label>
          <select name="stat_type" id="id_stat_type" class="form-control mr-2">
            <option value="by_tag" {% if form.stat_type.value == "by_tag" %}selected{% endif %}>按标签统计</option>
            <option value="by_creator" {% if form.stat_type.value == "by_creator" %}selected{% endif %}>按创建者统计</option>
          </select>
        </div>
      {% endif %}
      <button type="submit" class="btn btn-secondary">统计</button>
    </form>
  </div>

  {% if all_tags_pie_chart %}
    <div class="bordered-section">
      <img src="{{ all_tags_pie_chart }}" alt="饼图" class="img-fluid" />
    </div>
  {% else %}
    <div class="bordered-section">
      <p>没有统计数据。</p>
    </div>
  {% endif %}

{% endblock %}

<style>
  .bordered-section {
    border: 1px solid #ddd;
    padding: 15px;
    margin-bottom: 15px;
    border-radius: 5px;
  }

  .form-inline .form-group {
    margin-right: 10px;
  }

  .form-inline .form-control, .form-inline select, .form-inline .btn {
    height: calc(1.5em + 0.75rem + 2px);  /* 确保输入框、下拉框和按钮的高度一致 */
  }

  .d-flex.align-items-center label {
    line-height: 1.5;  /* 确保标签文本垂直居中 */
  }
</style>

        网站输出的结果如下,问题是饼图的扇区姓名和百分比错位,橙色20%是suxxx,而蓝色80%是waxxx。

        我通过提示词告诉AI不是我想要的,标签错位,需要定位代码问题,但是AI几次都没能解决。

        为了解决这个问题,我在取值的地方都打了print输出,其中在views.py中autopct(pct):函数打了输出日志

def autopct(pct):
    val = int(round(pct * total / 100.0))
    index = min(int(pct / 100. * len(counts)), len(counts) - 1)  # 确保索引不超出范围
    print('用户列表:{}'.format(labels), '\n', '百分比:{}'.format(pct), '\n', '用户索引:{}'.format(index))    
    return f'{labels[index]}\n{pct:.1f}%\n({val})'

        在访问饼图统计功能时,后台显示日志如下,从日志中可以看到用户列表索引index错位了,所以饼图展示错位了,数据本身没有问题。

        为了解决这个问题,重新给AI输入提示词:

        views.py文件中,index = min(int(pct / 100. * len(counts)), len(counts) - 1) 这一行有问题,导致列表索引错位

        AI重新输出views.py:

def record_count_by_tag(request):
    is_admin = request.user.is_superuser
    user = request.user

    # 初始化表单
    if request.method == 'GET':
        form = DateRangeForm(request.GET)
    else:
        form = DateRangeForm()

    if form.is_valid():
        start_date = form.cleaned_data.get('start_date')
        end_date = form.cleaned_data.get('end_date')
        stat_type = form.cleaned_data.get('stat_type')
    else:
        start_date = None
        end_date = None
        stat_type = None

    # 根据用户权限和日期筛选记录
    if is_admin and stat_type == 'by_tag':
        all_records = Record.objects.all()
        if start_date and end_date:
            all_records = all_records.filter(date__range=(start_date, end_date))
    elif is_admin and stat_type == 'by_creator':
        all_records = Record.objects.all()
        if start_date and end_date:
            all_records = all_records.filter(date__range=(start_date, end_date))
    else:
        all_records = Record.objects.filter(user=user)
        if start_date and end_date:
            all_records = all_records.filter(date__range=(start_date, end_date))

    # 统计标签
    if is_admin and stat_type == 'by_tag':
        all_tag_counts = all_records.values('tag').annotate(count=Count('tag')).order_by('-count')
    elif is_admin and stat_type == 'by_creator':
        all_tag_counts = all_records.values('user__username').annotate(count=Count('id')).order_by('-count')
    else:
        all_tag_counts = all_records.values('tag').annotate(count=Count('tag')).order_by('-count')

    # 生成饼图的函数
    def generate_pie_chart(data, title, labels=None):
        # 设置中文字体
        plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体或其他支持中文的字体
        plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

        if not data:
            return None  # 如果没有数据,返回 None

        counts = [item['count'] for item in data]
        if not labels:
            labels = [item['tag'] if 'tag' in item else item['user__username'] for item in data]

        # 自定义 autopct 函数,显示标签名、百分比和数量
        index = 0  # 初始化计数器

        def autopct(pct):
            nonlocal index  # 使用外部变量
            total = sum(counts)
            val = int(round(pct * total / 100.0))
            label = labels[index]
            index += 1  # 更新计数器
            return f'{label}\n{pct:.1f}%\n({val})'

        fig, ax = plt.subplots()
        wedges, texts, autotexts = ax.pie(counts, labels=None, autopct=autopct, startangle=90)
        ax.axis('equal')
        ax.set_title(title)

        # 设置文本样式
        for text in texts + autotexts:
            text.set_fontsize(10)  # 调整字体大小
            text.set_color('white')  # 设置文本颜色为白色

        buf = io.BytesIO()
        plt.savefig(buf, format='png')
        buf.seek(0)
        string = base64.b64encode(buf.read())
        uri = 'data:image/png;base64,' + quote(string)
        return uri

    # 生成所有记录的饼图
    all_tags_pie_chart = generate_pie_chart(all_tag_counts, '所有标签' if is_admin else f'{user.username} 的标签')

    return render(request, 'records/tag_count.html', {
        'is_admin': is_admin,
        'all_tags_pie_chart': all_tags_pie_chart,
        'form': form,  # 传递表单到模板
        'tag_counts': all_tag_counts,  # 传递标签统计信息到模板
        'tag_choices': Record.TAG_CHOICES,  # 传递标签选项到模板
    })

        重新运行程序,这次对了

       

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2186182.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库软题5-SQL语言

一、DDL数据定义语言 题 1-创建视图 建立视图属于DDL的知识 建立视图要用到CREATE AS CREATE View Computer-BOOK ASSELECT 图书编号、图书名称、作者、出版社、出版日期FROM 图书WHERE 图书类型计算机 WITH CHEEK OPTION&#xff1b;二、DQL数据查询语言 题1-交 查询平均…

SAP 和 Carahsoft 的调查范围扩大到与近 100 家机构

美国司法部正在扩大对德国软件公司SAP和经销商Carahsoft的价格操纵调查&#xff0c;涉及近100个政府机构。这项调查最初集中在两家公司是否在2014年以来向美国国防部和其他政府部门收取过高费用&#xff0c;涉及金额超过20亿美元。最新的法院文件显示&#xff0c;调查范围已扩展…

HTTPS协议详解:从原理到流程,全面解析安全传输的奥秘

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storm…

精准农业中遥感技术应用(六)- 作物长势分析和展示

橙蜂智能公司致力于提供先进的人工智能和物联网解决方案&#xff0c;帮助企业优化运营并实现技术潜能。公司主要服务包括AI数字人、AI翻译、领域知识库、大模型服务等。其核心价值观为创新、客户至上、质量、合作和可持续发展。 橙蜂智农的智慧农业产品涵盖了多方面的功能&…

Linux之实战命令23:lsattr应用实例(五十七)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

解锁中英互译新工具,4款翻译助手带你畅游语言世界。

在现在的全球化的大背景下&#xff0c;中英互译工具显得十分的重要&#xff0c;我们无论是跨文化学习、工作还是生活旅行&#xff0c;都离不开有效的中英互译。今天我们就来说说几款高效的中英互译工具&#xff0c;希望它们能够在生活中给大家带来帮助。 1、中英在线翻译大师 …

Vortex GPGPU的github流程跑通与功能模块波形探索(二)

文章目录 前言一、环境配置和debugging.md文档1.1 调试 Vortex GPU1.1.1测试 RTL 或模拟器 GPU 驱动的更改1.1.2 SimX 调试1.1.3 RTL 调试1.1.4 FPGA 调试1.1.5 分析 Vortex 跟踪日志 二、跑出波形文件和日志文件总结 前言 昨天另辟蹊径地去探索了子模块的波形仿真&#xff0c…

读数据湖仓05数据需要的层次

1. 业务价值 1.1. 技术和商业在这个世界上是相互交织的 1.1.1. 基础数据在商业和技术应用中是不可或缺的 1.2. 技术的存在是为了推动商业的目标和进步&#xff0c;并由企业出资支持 1.2.1. 当技术推动商业发展时&#xff0c;商业会蓬勃发展&#xff0c;技术也会随之繁荣 1.…

Megabit兆比特10月比特币激增做好准备-最新加密货币新闻

Kaiko Research最近的分析表明&#xff0c;交易员正在积极为潜在的强劲表现做好准备特币(BTC)比今年十月。目前&#xff0c;BTC的交易价格为60800美元&#xff0c;在测试了60000美元的支撑位后&#xff0c;最近上涨了800美元。Megabit兆比特自成立以来,Megabit凭借用户友好的界…

初识Linux以及Linux的基本命令

千呼万唤始出来&#xff0c;Linux系列的文章从今天起开始不定期更新&#xff0c;闲话少叙&#xff0c;我们直接进入正题 目录 初识Linux 前置知识点 什么是路径&#xff1f; 什么是目录&#xff1f; 什么是文件&#xff1f; Linux的基本命令 Linux中的复制粘贴 创建文件…

数据仓库的建设——从数据到知识的桥梁

数据仓库的建设——从数据到知识的桥梁 前言数据仓库的建设 前言 企业每天都在产生海量的数据&#xff0c;这些数据就像无数散落的珍珠&#xff0c;看似杂乱无章&#xff0c;但每一颗都蕴含着潜在的价值。而数据仓库&#xff0c;就是那根将珍珠串起来的线&#xff0c;它能够把…

【AIGC】2020-NIPS-去噪扩散概率模型

2020-NIPS-Denoising Diffusion Probabilistic Models 去噪扩散概率模型摘要1. 引言2. 背景3. 扩散模型和去噪自动编码器3.1 正向过程和 L T L_{T} LT​3.2 逆过程与 L 1 : T − 1 L_{1:T-1} L1:T−1​3.3 数据缩放、逆过程解码器和 L 0 L_{0} L0​3.4 简化的训练目标 4. 实…

FreeRTOS篇7:队列

一.什么是队列 队列又称消息队列&#xff0c;是一种常用于任务间通信的数据结构&#xff0c;队列可以在任务与任务间、中断和任 务间传递信息。 为什么不使用全局变量&#xff1f; 如果使用全局变量&#xff0c;兔子&#xff08;任务1&#xff09;修改了变量 a &#xff0c;…

基于Arduino的宠物食物分配器

创作本文的初衷是本人的一个养宠物的梦想&#xff08;因为家里人对宠物过敏&#xff0c;因此养宠物的action一直没有落实&#xff09;&#xff0c;但是梦想总是要有的哈哈哈哈哈。上周正好是和一个很好的朋友见面&#xff0c;聊到了养宠物的事情&#xff0c;她大概是讲到了喂宠…

Redis: Sentinel工作原理和故障迁移流程

Sentinel 哨兵几个核心概念 1 ) 定时任务 Sentinel 它是如何工作的&#xff0c;是如何感知到其他的 Sentinel 节点以及 Master/Slave节点的就是通过它的一系列定时任务来做到的&#xff0c;它内部有三个定时任务 第一个就是每一秒每个 Sentinel 对其他 Sentinel 和 Redis 节点…

浏览器 F12 application 应用程序面板

在大多数现代浏览器中&#xff0c;按下 F12 键会打开开发者工具&#xff08;Developer Tools&#xff09;&#xff0c;这是一个为开发者设计的强大工具集&#xff0c;用于调试网页和应用。在开发者工具中&#xff0c;“Application”&#xff08;应用程序&#xff09;面板提供了…

Hystrix学习

系列文章目录 JavaSE基础知识、数据类型学习万年历项目代码逻辑训练习题代码逻辑训练习题方法、数组学习图书管理系统项目面向对象编程&#xff1a;封装、继承、多态学习封装继承多态习题常用类、包装类、异常处理机制学习集合学习IO流、多线程学习仓库管理系统JavaSE项目员工…

Stable Diffusion绘画 | 来训练属于自己的模型:LoRA模型验收

我们每次训练出来的模型&#xff0c;一般都会生成 20-30 个&#xff0c;至于哪个模型符合要求&#xff0c;较为理想呢&#xff1f; 接下来需要对每个 LoRA模型 进行逐一对比测试。 为了测试模型的泛化性&#xff0c;可选择使用一些较为特殊的提示词&#xff0c;看看各个模型对…

运动耳机哪个牌子的好?5大质量不凡的运动耳机测评力荐!

在快节奏的生活中&#xff0c;无论是晨跑、健身还是户外探险&#xff0c;音乐都成了许多人不可或缺的陪伴。运动耳机&#xff0c;作为一种专为运动场景设计的音频设备&#xff0c;旨在提供高质量音频体验的同时&#xff0c;保证佩戴的舒适度和运动的安全性。 &#xff08;上图为…

hystrix微服务部署

目录 一.启动nacos和redis 1.查看是否有nacos和redis 二.开始项目 1.hystrix1工程&#xff08;修改一下工程的注册名字&#xff09; 2.运行登录nacos网站查看运行效果&#xff08;默认密码nacos,nacos&#xff09; 3.开启第二个项目 hystrix2工程 4.关闭第二个项目 hyst…