当前位置:   article > 正文

项目实训——AI接口

ai接口

AI工具挑选

  1. 魔搭社区模型

    在本地搭建使用时,本地模型受本地硬件环境影响较大,本人设备运行一个较长回答响应时间往往在二十秒往上,不利于用户使用。且项目后端为SpringBoot,魔搭社区的模型在Java环境下难以配置运行。小组项目没有更改模型的硬性需要,通过配置智能体或者Prompt提示均可实现。若想继续推进这个方案,可考虑采用Flask+本地模型运行在一个较高配置的机器上,作为一个AI服务的单独接口。

  2. 第三方AI网站

    市面上有许多第三方网站提供AI服务,这些网站的一大优势是精简了调用AI的流程,可以自由设置智能体提前设定问答的角色,有的网站甚至提供了SDK可以直接调用AI。
    在实际测试中,我们小组发现,大多数AI服务方提供的免费方案使用的都是较为落后的模型,如GLM3甚至GLM2,经过测试,这些落后模型无法满足要求。
    测试的部分网站对于上下文的理解不到位,无法完成要求,稳定性不佳。

  3. 通义千问API

    最终定下AI工具通义千问的API,刚开始不想选择成熟AI应用的API,是因为这些成熟的AI工具API都需要Token收费。
    但是小组成员反复寻找不同企业的AI服务,终于发现通义千问的qwen-turbo模型限时免费、且在结束活动后也赠送一定的免费Token,粗略计算后发现可以满足需求。

通义千问API实现

Prompt编写

Prompt,指的是给定给AI系统的一段文本信息或指令,其目的是引导或激发AI模型产生特定的输出或执行相应的操作。它相当于与AI进行交互时提出的问题或任务说明,帮助模型理解用户的需求和期望的回应内容或行为。Prompt技术通过为AI提供上下文、场景信息和用户意图的线索,使得模型能更准确地生成符合情境的响应,提高交互的自然性和有效性。
根据我们项目的要求编写Prompt:

你是一个数据分析师和前端开发专家,接下来我会按照以下固定格式给你提供内容:
分析需求:
{数据分析的需求或者目标}
原始数据:
{csv格式的原始数据,用,作为分隔符}
请根据这两部分内容,按照以下指定格式生成内容(此外不要输出任何多余的开头、结尾、注释)
【【【【【
{前端 Echarts V5 的 option 配置对象js代码,只是option的值,合理地将数据进行可视化,不要生成任何多余的内容,比如注释}
】】】】】
{明确的数据分析结论、越详细越好,不要生成多余的注释}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

代码实现

    public static String callWithMessage(String message) throws NoApiKeyException, ApiException, InputRequiredException {
        Generation gen = new Generation();
        Constants.apiKey = "通义千问申请apiKey";

        MessageManager msgManager = new MessageManager(2);
        Message systemMsg0 = Message.builder().role(Role.SYSTEM.getValue()).content("你是一个数据分析师和前端开发专家,接下来我会按照以下固定格式给你提供内容:\n分析需求:\n{数据分析的需求或者目标}\n原始数据:\n{csv格式的原始数据,用,作为分隔符}\n请根据这两部分内容,按照以下指定格式生成内容(此外不要输出任何多余的开头、结尾、注释)\n【【【【【{前端 Echarts V5 的 option 配置对象js代码,只是option的值,合理地将数据进行可视化,不要生成任何多余的内容,比如注释}\n】】】】】\n{明确的数据分析结论、越详细越好,不要生成多余的注释}").build();
        Message userMsg1 = Message.builder().role(Role.USER.getValue()).content(message).build();
        msgManager.add(systemMsg0);
        msgManager.add(userMsg1);

        QwenParam params = QwenParam.builder().model("qwen-turbo")
                .messages(msgManager.get())
                .seed(1234)
                .topP(0.8)
                .resultFormat("message")
                .enableSearch(false)
                .maxTokens(1500)
                .temperature((float) 0.85)
                .repetitionPenalty((float) 1.0)
                .build();

        GenerationResult result = gen.call(params);
        // 只取出了有效数据
        return result.getOutput().getChoices().get(0).getMessage().getContent();
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

GenerationResult result = gen.call(params); 取出的数据非常多,大多为一些状态的内容,项目只需要使用有效的内容,在此阶段处理为String信息。

Main方法测试

public static void main(String[] args) {
    String jsonString = null;
    try {
        String message = "分析需求:\\n分析网站用户的增长情况\\n原始数据:\\n日期,用户数\\n1号,10\\n2号,20\\n3号,30";
        jsonString = callWithMessage(message);
    } catch (ApiException | NoApiKeyException | InputRequiredException e) {
        System.out.println(e.getMessage());
    }
    System.out.println(jsonString);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

进行测试,
按照Prompt要求的格式传入数据,调用AI方法,向通义千问传递发送请求,得到数据

输出:

【【【【【
```javascript
option = {
    title: {
        text: '网站用户增长情况',
        subtext: '日期 vs 用户数',
        x: 'center'
    },
    xAxis: {
        type: 'category',
        data: ['1号', '2号', '3号'],
        axisLabel: {
            interval: 0
        }
    },
    yAxis: {
        type: 'value',
        name: '用户数'
    },
    series: [{
        name: '用户增长',
        type: 'line',
        data: [10, 20, 30],
        smooth: true
    }]
};
```
】】】】】
数据分析结论:根据数据,网站用户在1号至3号期间呈现出线性增长趋势。1号有10名用户,2号增加到20名,3号进一步增长至30名用户。这是一个稳定的上升态势,对于网站运营者来说,需要关注这个增长速度是否可持续,以及是否有提升用户活跃度的策略。

进程已结束,退出代码为 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

引入Echarts在线进行测试:

Echarts在线网站
将代码部分手动粘贴到Echarts在线调试网站:
Echarts在线生成成功截图
没有发生错误,数据、坐标均完好。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/922460
推荐阅读
相关标签
  

闽ICP备14008679号