深澜智远实习经验
前言
对于这段实习,我来这的目的是:
快速增长开发经验,拥有一段实习经历,学到更多的东西;来真正做做企业项目,看看这种项目与学校做的有何不同,调整以后的学习方向。
我希望我能今早结束这段实习,因为我真的很想回学校见小美了(虽然我博客给她了,但她估计不会看到这个),而且北京生活成本太高了,我这没租房的,每多待一天都是亏的。
开发经验
调教AI
由于我是小厂,需要尽快交付,所以我不能边开发边学了,我只能一直用ai跑,这会让我的代码成黑盒,我以后工作是大概率也是这样的,所以用AI来写项目应该是最重要的能力。这包括我学会如何用cli,如何写提示词,如何设计架构,如何让AI贯穿我项目整个生命周期。其实学会怎么用AI,概括为一句话就是如何控制它的上下文。这需要懂得系统的长期文档管理了。
不必为一直用AI而感到羞耻,因为AI做的工作我没必要去学了,面试考察的也只是架构设计,场景应对的能力,与编码没啥关系。
扩充知识面
由于我没时间一个个技术的钻研,我会遇到很多技术,我只需要知道这个技术能干什么就行了,这样慢慢扩充知识面,了解的多,也就更能让AI做出更富含技术的活儿
拆需求
这真的很重要,一定要把大需求拆成几个核心需求,不用特别详细,我把这个面试系统拆成三个部分,题目维护与面试创建、实时面试、报告生成。然后写一份大致的需求文档,然后再具体开发某个环节时,让AI写当下的开发规划。这里拆需求指的是从用户的角度,去实现一个怎么样的使用流程,不然后面写好了又回去改真的很麻烦。
从角度思考问题
这是个很高效的思考模式,也就是面向目标(这是我长期以来很坚持的一个思维)的思维。比如我开发这个系统,我的第一面向者是酒,然后酒的面向者是用户,然后用户其实就是我的最终面向者,此时我就从用户的角度思考,我应该去做一个怎么样的系统,从而减少频繁的需求变更。
优先实现MVP
这一点在从零开始搭建系统时至关重要,先把鉴权、限流、登录啥的都丢掉(甚至简单实现都不要),只需要先实现功能,就像我在题库管理这里卡了很久吗,实时面试这一核心需求迟迟没开始。然后说需求时也只需要说能简单实现的,并让AI追问,了解清楚需求。所有复杂业务都可以基于简单的实现进行改进。
也就是拿到大需求后,先把杂七杂八的细节需求剔除,根据核心需求搭建项目骨架,模块之间亦有依赖关系,我把面试系统拆成三个模块,分别是题库、面试以及评估。面试依赖题库,评估依赖面试,所以我的开发顺序是题库、面试到评估。那么题库要开发到什么程度,实际上只要开发到面试能用的程度即可,这样可以快速实现闭环。
不要重复造轮子
这才是真正的智慧,而不是偷懒。在实习拿到需求的那一天,我就应该去看旧版为什么被抛弃了,可不可以基于旧版优化,要必坑哪些点。然后去github等社区找相似的项目,看看别人怎么做的,在找找有没有框架可以一路用于搭建实时语音对话服务的(这不就有吗,我干到第十二天才知道我在自己编排实时语音服务链路而不是用一个强大的TEN框架,太浪费时间了)。我应该时刻注意自己正在做的事情有没有可能别人早就做好了我拿来用就行了。
学习方向
不应该再关注技术底层到底是怎么实现的,而应该关注技术的特性,以及技术可以拿来干什么,这有助于帮助我们形成架构设计思维,在AI时代,每个人都可以当架构师,每个人都应该当架构师,方案不用自己想,完全可以由AI想,AI知识面比我们广,但是AI给的方案未必正确,所以我们就要具备一定的判断力,这个判断力如何培养?那就是通过大量的项目实践,多了解优质项目,从中学习。
在对需求进行实现设计时
模块化、组件化。比如我要让LLM有上下文能力,那么我加入一个组件,也就是评估器,每次问答完都评估一下整体情况,存入redis,然后LLM在生成时把整体情况这一上下文传入,然后评估器这一组件应该是纳入evaluation模块的。
开发阶段性成果
引入TEN框架,Agora提供的RTC服务,实现真正意义的语音传输,而不是前后端都是语音转文字,然后文字传输,大大减少了延迟。(可写为最难之处)
把LLM作为状态机决策后是否要调用的一个组件,而不是让LLM来进行决策,每次用规则引擎来决定下一步动作(这里可深究)(也是减少延迟的关键)
这里我现在进行了重构,由大模型决策并生成内容,状态机只负责推进,不用担心幻觉,在每次这种简单问题且上下文短的情况下基本不会有幻觉。
多维度比对多家服务商(待完善):
比如决策前的评估模型:目前是写死的规则,我还可以用Embedding/NLI/Rubric/Slot/分类模型/LLM/轻量生成模型;以及TTS、ASR的模型比对。
为解决问重复问题,每次发送时加入已问过问题列表;
为解决不注意剩余次数;限制从动作白名单中选,没次数了就移出白名单;
为解决用户乱说,加入correct动作,纠正用户回复;
多层重连机制(考虑引入redis)

