本页编写在2024年创新实训开题报告之前,因此在具体的“何种选题适合选择”、“何种选题能得高分”等问题上很难给出回答,笔者能做的只是从学生在线的工作经历中提取一些内容供大家参考,例如团队的管理、选题难度的估计等等,希望能够帮到大家。
本文计划针对以下问题讨论:
个人建议对于创新实训而言,1-4(闭区间)都应该在开题答辩前基本完成,否则会面临无法顺利结项的风险。
不过画饼嘛,吃不下也是人之常情。
面对创新实训,由于绝大多数同学只体验过给定题目的“课程设计”任务,需要自己开题就已经是一个相当大的挑战。本节会尝试帮助大家学会设计一款产品,希望能够帮助到各位。
具体一点来讲,我们从创新实训的命题(严格来讲,这是一种半命题,并不能算是从零开始)开始考虑。首先我们可以看到有两个方向:
学生在线的实际工作中更多的是开放命题,不过从“开放命题”到“半命题”,多数时候只是差一点“灵光一现”,例如:我希望做一个旅游助手、我希望使用最新的GPT做些什么。因此,我们就不在这里进一步讨论了。
假设你是一位纯小白,通过阅读课程提供的介绍,我想应该会有这样的感觉:
非要二者选其一的话,我想前者是要更平易近人一些的,至少我也闹不明白后者想干啥。接下来,我们假设已经选择了大模型这个选题,现在面临的问题就是如何将这个“技术”应用,形成一个“产品”。
产品区别于一个课程设计最大的特点,应该是需要自己思考它所要具备的功能。我们不妨参考“5W1H”,先考虑这几个问题:
举个例子,我有一个读金融的朋友,她曾经做过一段时间苦逼金融民工,每天阅读各种报表和研报并提供一些分析。现在,作为一个黑心资本家,我希望使用人工智能代替他的工作,那么“1”的答案就是底层金融工作者(举个例子,应该更精准),“2”毫无疑问是所谓商业咨询/分析之类的,“3”就是通过阅读一些材料进行分析和总结,“4”可以经过搜索发掘到BI相关的产品。
假设你能在搜索和调查后回答出这几个问题,那么这个产品的定位应该可以总结为“一款使用通用人工智能提供商业咨询,减少低级重复劳动的软件产品。”
在这个阶段,我们选择的“大模型”仅仅只是个小引子,你大可不必太纠结于“大模型”是什么或使用哪种“大模型”,这应该放在技术选型中细细考虑。
需求分析其实是一项很困难的工作。首先,在经过训练前,多数人很难通过单纯的思考得出一个产品的功能列表;其次,一旦需求出现变更或补充,项目的具体实现就会被拖延甚至重新进行技术选型。
同时,对于创新实训而言,笔者认为有必要提炼一些足够精彩、具体的功能便于介绍,例如“AI换装”就要优于“基于xxx的人工智能重绘”。
有机会的话,希望产品总监/站长能补充完善一下这部分,笔者并不一定很擅长需求分析。
需求分析阶段,笔者建议大家多采用头脑风暴的模式将需求尽可能增加,并按照下面的方式进行整理:
项目实训Only。
通过不断执行这样的流程,你的需求应该会成为一个图结构:
例如,对作业帮/猿辅导而言,我们可以发现学生、老师、家长就是三种角色,他们有一些需求的交叉(基本鉴权、各类收藏),也有各自的需求和相互依赖的需求(例如上课会在三个角色之间联动)。
通过这样的图,你应该能够清晰的看出功能分类、功能之间的依赖以及不同用户之间的依赖。对于经验较少的团队,有一张这样的图能为你们设计用户权限系统、数据库结构、核心业务提供十分重要的参考,大大减少返工的次数。
评价产品也是一件很困难的事情,我们还是回归项目实训来谈。以我个人的体验来看,各位不妨考虑一下这几个角度:
在小规模的开发任务(需要投入生产)中,我们通常会需要这几类角色:
对于项目实训而言,我们可以只需要PM和若干开发人员,并在验收时尝试完成一些部署任务。但是要注意,这并不意味着项目就不需要产品经理等人员负责的部分,而是由其他人员兼任。
再具体啰嗦两句,理想状态下的PM应该既懂产品设计,又对前后端、运维、测试、AI等部分都有所涉猎,同时还能完成各项文书编写工作和项目管理,各位可以根据自身情况酌情选择。
开发人员方面,实际上可能会出现更多需求,不止前后端开发:
通常来讲,一个团队内能凑够后端开发、前端开发和算法就很好了。
视情况处理,择日细说。
由于时间紧迫,暂时无法为各位提供更形象的图示提供说明,笔者只能先靠一张嘴叭叭几句。
我们还是从纯小白开始,考虑开发一款使用AI绘图、支持Web和移动客户端的产品。这款产品在技术层面上,可以拆分为这些方面:
具体的介绍就先不展开了,笔者先为各位提供一些可选的技术。
服务端开发的首个问题是——选择语言,基本原则是选择团队内最熟悉的语言。个人提供的参考如下:
为什么Go排在最后?因为:绝大多数人都不会。不建议贸然选择一个不熟悉的技术。
注意,选择语言并没多大意义,最重要的是语言所绑定的生态,先为各位介绍服务端还会涉及哪些内容:
首先说关系型数据库。关系型数据库(RDB)通常负责最核心的存储,目前的选择基本只有两种:
简单来看,这俩选哪个都行,没什么坑。
如果你希望来点花活儿,还有很多NoSQL供你选择,按照使用频率降序如下:
好了,选完数据库你应该知道如何保存自己的数据。接下来先选择一个Web框架:
现在我们要解决的是如何在Web框架中操作数据库,负责这个操作的框架称为ORM(Object-Relation-Mapping)框架,同样按照语言分类:
理论上,现在你可以使用类似MySQL+MyBatis+Spring Boot的组合进行开发,其他的部分可以暂时不做考虑。无论如何,这个组合一定能保证项目完成。
前端目前只需要考虑两个框架:
不管在二者中选择哪个,都需要去找以下几种包:
介绍一些所谓的“大模型”,首先是LLM(Large Language Model)相关的:
AIGC相关的工作:
其他还算大的模型:
神经网络部署也一直是个老大难的问题,先从最简单的方案开始说吧。
首先,多数情况下paper提供的code是一种“加载模型和数据-训练-推理-测试”的脚本,要提供服务,我们需要做两件事:
至于怎么做。。择日细说吧,我们还有更重要的事情:要在端侧运行神经网络该怎么办?
首先,为各位介绍一些直接依靠框架运行神经网络以外的方法:
如果只是想在服务器上运行神经网络,最简单的就是改改训练脚本;复杂一些,可以使用ONNX技术配合Tensor RT(一种Nvidia的优化技术)运行;如果要在手机上运行,需要使用ncnn等框架进行处理才可以,这个过程吭很多;要在笔记本上运行,ONNX或ncnn等都可以,要考虑实际情况。