OK
接下来我们就以项目实战的方式啊
带大家基于Codex
全流程的去开发一个RUG智能客服系统
那首先给大家演示一下这个系统
它的一个功能
那就是一个比较简单的一个对话页面啊
那么首先的话
比如说大家公司内部有一些
行业的一些知识库
比如说是做这个电商的啊
或者是传统的像银行呀
政务啊
各种各样的这个行业是吧
那比如说我们有一些知识库啊
假设大家的这个
是做这个银行客服的
那这个里面比如说我们有一些
常见的问题
比如说哎这个查询一些这个余额呀
什么修改账号密码呀
就是这种常见的一些问题等等的啊
好那就是这么一个知识库
那现在的话
就是我们内部啊
要把这些知识库的话
做一个整合
然后到我们的这个客服系统里面去
因为以前的这个AI的话
其实他去回答问题的时候啊
如果说他没有参考
公司内部的一些知识库的话
他回答的问题的话
就不是特别专业
所以现在的话
我们要做一个这个基于Rug啊
Rug的话
全称叫做检索增强生成
也就是说
我们这个以前AI生成内容的话
都是根据这个AI自己训练的啊
像大模型
他训练一些
预训练的一些数据
然后去生成的
所以说他给你的一个结果的话
他肯定是一些比较通用的一些结果
不是属于我们这个公司
某个行业特定的一个回答
他可能就有那种普世性
但是的话不是特别专业
所以我们既然内部有一些知识库文档的话
我们现在想投位给AI
但是呢
我们又不想去做这个预训练跟微调
因为那个成本比较高是吧
所以说业界的话就有一种解决方案叫Rug
你可以理解就是给这个AI挂了一个知识库
就相当于你在学习的时候
你可以去图书馆里面去查一些这个书籍
然后去写一些文章
这样的话你就会做一个参考
那么AI有了这个参考之后的话
他帮你去生成这个答案的时候
他就会参考里面的一些核心观点
然后去做一些总结回答
比如说我们现在问他一个问题啊
如果说我们没有做一个这个
RAG系统的一个整合的话
那么他你去问这个问题的话
他可能就给你一个啊
他可能你问的都不是这个
这个银行这个行业的是吧
他不是金融行业的
他可能是其他行业的答案就给你了
但是如果说
你给他做了一个知识库的一个整合的话
那大家就会看到啊
他会调用我们的这个银行的这个知识库
进行一个查询啊
大家看啊
这个是他的一个知识的一个检索结果啊
但这个里面这里展示有点问题
我们重新来问一下
就是有了这个结果之后的话
他其实就会跟你去什么呢
做一个向量的数据库的一个
这个相似度的一个检索
那么检索完之后啊
你看这个就是我们知识库检索的一个结果
是吧
那这个结果的话
其实就是在这个里面啊
我们这个知识库文档
这个文档的话是存放到了这个向量数据库里面
那么这个向量数据库的话
它是根据这段话
然后做一个向量的相似度匹配
匹配完了之后的话
再去做一个这个内容的一个生成
所以说这个里面的话
其实就是啊
我们首先要对这个文档做一个向量化
做完向量化之后的话
把它存在到向量数据库里面去
然后当用户提问题的时候
我们要用这个agent
那本次我们的这个agent实现的话
是基于一个框架
叫做这个long graph
然后并且还有一些long chain的一些酷
这个是我们的一个基础的一个框架
那整个相当于我们就基于long graph
去实现一个agent的应用
让他去做一个知识库的一个检索
然后检索完之后的话
相当于做一个这个向量相似度的匹配
评约完之后
再把这些个内容
拼装成提示词
丢给这个大模型
然后总结性的做一个回答
所以大家问这些专业问题的时候
你会发现
他的这些回答的话
是非常准确的
因为他做了这个
相似度的一个匹配
比如说你问的这个
网上银行是吧
你看这个里面
他就基本上是参考这个回答的
所以这个答案会比较精准
这就是我们要做的一个
AI的一个智能客服的这么一个系统
所以这个系统的一个关键点的话
其实就是基于这个RUG的一个系统
目前来说啊
只要是涉及到智能客服系统
你要追求这个答案的准确性的话
基本上都是基于RUG的这个方案去做的
那如果说你有这个模型微调
渲电的这个条件的话
用微调去做的也有
但是像大部分场景啊
为了节省成本的话
其实都是基于Rug的这个模式去做的
所以说我们现在要明确一个需求
我们要做一个这个银行的智能客服系统
然后当用户在提问里面
比如说我们如何去查学那个余额是吧
那么这个系统的话
就要做如下几件事情
首先的话
他从这个行业知识库里面
就这个行业知识库里面
去做一个检索
这个知识库的话
咱们自己可以新增
就是我们在这个里面
我们可以选用OpenAI的这个
Embading模型是吧
做一个向量化存储啊
就是做一个这个向量化的一个转化
把它转换成embedding
它的一些这个向量坐标
然后向量数据库的话
我们这里用的是Clamour啊
这是我们啊
有一个新增知识库啊
因为我们要做一个出手化嘛
所以我们要创建一个知识库
所以这个首先这个系统就得从行业知识库里面去检索最相关的一些内容
然后的话让大模型基于检索到的内容去生成有依据的这个回答啊
就是我不能说让AI就直接去回答了
是吧
你要把检索的内容
组装成提示词丢给这个AI
然后再去做内容的一个生成
并且界面上的话
我们要做一个流逝回答
流逝回答什么意思啊
就比如说你问他一个问题的话
这里是一个字一个字迸穿
就是这种打字机的这种效果
但是这里面的话
我们这里是一次性输出出来的
所以我们其实可以改进一下
把它做一个流逝的回答啊
这里有一个参数
把它做成一个流逝调用就可以了
所以说啊
整个一个过程的话
其实很简单啊
就是做一个知识库的一个检索匹配
然后把拿到的一个结果
去丢给这个大模型
然后的话
再去做一个流逝的一个回答啊
虽然这个步骤很简单
但是我们实现的这个逻辑的话
还是稍微有点复杂的啊
那首先的话
我会给大家讲一下
这个最终的一个架构啊
然后我们等一下就会带大家去基于Codex
从零到一去搭建这么一个项目啊
因为现在啊
我们有了这个Codex之后啊
这个我们去开发项目的效率会很高
所以说我们让他把这个架构啊
或者说我们自己把架构做出来之后
然后你让他去回答的话啊
去去执行的话
其实这个开发起来效率就会很高
那这个是我之前做的一个这个事例啊
就我之前已经把这个项目写出来了
那么这里面的话
我们就给大家看一下
我们这个架构的一个设计
首先的话
我们整个前端页面啊
这个前端页面是基于一个叫
Streamlit的一个库去实现的
那么这个库的话
就是一个python前端开发的一个库啊
非常方便做一些python的
这种前端页面的一个展示啊
是吧
比如说做一个聊天的这种界面
它的空间非常丰富啊
所以我们整个的话
是基于了这个框架
去做了一个前端应用啊
好
然后包括侧边栏啊
还有这个logo是吧
你看这个侧边栏
我们可以隐藏跟展示
就是一个多页面的这么一个导航
对话加设置
然后我们的这个智能客服对话啊
就是Rog这一块的一个核心技术的话
是基于Long Graph去实现的
Long Graph
大家应该都有听说过
大家可能听说过Long Chain
Long Chain的话
是目前做AI制整体应用开发的一个框架
是吧
就是我们可以做一些AI应用
是吧
不光光是制整体
它可以做很多AI应用
但是它主要还是做制整体
那么Long Graph的话
它就专门是做一些复杂的制整体
它是一种工作流的这种方式
叫这个流程
是吧
就是这种图形制的
就是面向这个图形式的啊
流程式的这种
多智能体的这种代理啊
这种场景啊
就是比较企业级的这种复杂的
agent的这种开发啊
这种多智能体开发
目前一般是基于Langgraph去做的
是一个非常成熟的一个框架
所以我们要基于Langgraph
去实现整个Rug的一个核心流程
然后包括一些这个行业的一些知识库啊
比如说我们要做一些这个
上传切分
下量化
是吧
那对应到我们这个工作里面
我们现在要上传这个下量数据库
是吧
就是文档上传上传这个知识库
新增一个知识库
然后去给他做一些处理
然后的话就是
还要做切分
比如说你这个文件很大
你有一兆
那我们不能直接说
称到下量数据库里去了
因为你把这个一兆的文件
直接给他转化成下量的话
首先这个上下文可能会抄
是吧
那有些啊
那个模型
它不只是这么大的一个上下文
那这里就会涉及到一个切分的问题
啊
就是一个切分策略
比如说我这么大的一个文档啊
应该怎么来切分
是按这个段落来切
换行来切
还是怎么样来切
这个都是有这个对应的一个策略的
包括做一些向量化
是吧
这个整个是我们有一套成熟的一个方案啊
然后这个
然后就是检索是吧
检索我们这里可以给它封做一个工具啊
这个工具的话主要就是做用来做Rug的一个检索的
那这里面我们相当于是共用了限量数据库啊
就是我们定义了一个限量数据库啊
然后我们不管是存储也好还是检索也好
都要用到这个限量数据库
所以这里面是一个公共的一个模块
然后包括我们还要去做一些这个模型的一个揭露是吧
那这里面的模型我默认用的是OpenAI的这个GPT4O的这么一个模型啊
当然大家你也可以选择其他模型
用Deep Seek或者是本地部署模型
或者千万都是OK的
关键是看大家就是你目前有哪些模型
你可以自由的去选择
只是说你如果用的是千万的一个模型的话
那可能有一些这个参数
可能就要做一些调整
我这里用的是OpenAI的这个模型
然后包括我们还可以去用一些这个
embedding是吧
他会用一些工具类
所以我们这里面要写一个这个工具的这么一个啊
这个脚本是吧
这个脚本啊
主要是就是用来去做一些模型的一些介入的
比如说掉接口啊等等啊
那向量数据库我们用的是Clamour啊
这个是底层的一个向量数据库存储啊
然后embedding啊
就是比如说将我们的文本转化成这个向量坐标啊
我们用的是embedding
然后做了这个chart
就整个是用OpenAI的这个embedding
这个模型去实验的
所以这里给他梳理一下
我们目前核心的一个技术战有哪些啊
首先是Streamlit
Streamlit的话
是一个前端的一个快速开发的一个库啊
那这个库的话
大家你也可以自己去搜一下
比如说你去可以去看到啊
Streamlit
这个它是一个你看
一个快速的这么一个做前端页面的啊
就做各种应用的
它的这个语法的话非常简单啊
大家目前基本上你可以用AI去做各种各样的一些前端是吧
然后你看他可以做出比较好的一些效果出来
所以大家你如果整个这个RUG系统是基于Python去开发的话
那你其实可以什么呢
前端你可以
因为我们专业的前端可能还是用这个Node.js那一套嘛
是吧我们ReactVU
但是你如果想快速去构建一个
标准的外部交付页面的话
说白了就是这个给自己测试演示的话
你用Streamlit
肯定是没什么问题的
所以这个主要目标
它就是要做快速构建
所以目前市面上一些python的这种项目的话
前单的话
做演示用的话
基本上都是基于这个Streamlit
你像有一些大模型的一些训练
部署是吧
那个操作的界面的话
很多都是基于stream里的去用
因为他非常方便做快速去做一些外部页面
然后long turn他要做的一个事情
long turn的话大家也可以去了解一下
如果说你没接触过的话
你可以去搜一下
那么这个long turn的话
主要就是我们可以看到
他这个里面的话
他是目前来说
做一些AI智能体应用开发
他是比较推荐的一个框架
那这个他的一个迭代速度的话也非常快啊
我们可以看到他的功能其实也非常强大
可以做各种这个支柔体的一个应用
然后long graph的话啊
就是上面这个long chain跟long graph的一个分工
就是long chain主要是管模型揭露
文档切分与加载
然后检索工具封装
那么这个long graph的话
他就去管这个agent状态机
然后模型工具循环啊
就是他主要是管这个agent的一个构建的
包括他的一个状态啊
数据流转啊
然后工具的一个调用啊
循环啊等等的
所以这个目标
他主要就是围绕着这个agent
去做一个展开的
然后long chain就是
主要是做一些rug的这个应用的一些集成
啊
那个clama的话就是一款这个向上数据库啊
这个是一款快开源的向上数据库
这个数据库
他既支持本地部署
也支持服务器的那个部署啊
主要就是用来存储这个向上数据库
做一些数据的一些存储
然后我们还可以去整合一些多平台的一些
这个什么的
比如说大家想用这个本地部署是吧
那你就用欧拉玛
所以这里面我们其实提供了一些个路口啊
我们可以通过欧拉玛
然后或者是其他的一些啊
XEference
可以做一些模型的一个加载
也就是我们可以用这个在线的一个模型啊
就是公网的一个模型
也可以用私有化的欧拉玛模型
这个都是OK的啊
给大家的一个需要
那么我们为什么用Codex开发啊
首先Codex的话
本身你可以把它看作是一个整体啊
因为它不仅可以生成代码
还能读项目改文件
跑命理修bug
所以说
我们这里面的话
基于Codex开发
逻辑就不太一样了
那就是以提示词啊
像我们前面给大家讲的是
这个面向规范的
这么一个驱动的方式开发啊
所以说我们其实
现在去开发项目的话
大家只要把提示词梳理出来就可以了
不需要你去写代码了
然后他就可以快速去开发一个模块
所以这个就是正常的一个AI编程的一个正确的姿势
所以我们等下的一个开发的话
基本上自己是不用手写一行代码的
都是交给Codex去做代码生成
然后由他去做一个这个功能一个开发
所以大家首先第一步要做的就是
我们要把Codex的一个环境准备好
那么大家听到之前的这个章节的话
我相信这个codex环境
大家都已经装好了
所以这一步我就简单介绍一下
就是咱们得把codex
我这里安装方式的话
主要是讲的这个
主要是讲了这个他的命令行方式啊
所以大家不管是命令行
还是我们之前讲的这个啊
Codex app或者是这个啊
Withcode的那个插件啊
都都是可以的啊
看大家习惯用哪一种
然后完了之后的话
你可以去配置一下这个API密钥啊
因为我采用的是这种API key的这种方式去连接的
所以看大家的一个实际情况
我们前面有给大家讲连接方式
就是你要么是登录啊
用官方那个ChatGBT的这个网站跳转做授权
还有一种的话是你可以这个配一个API密钥啊
这个都是OK的
看大家的一个实际需求吧
就是你的一个实际情况是什么
然后我这里面就是去配一下这个环境变量
它基本上就可以用了啊
但是你这里配完之后
你需要把终端这个重启一下才能生效啊
这个是呃
这个是在Mac或者Linux上面的一个配置
这个是Windows上面
我们用的是SateX这么一个命令啊
好
完了之后的话
就是我们现在就可以进入到我们的一个项目应用开发了啊
就是接下来我们要建一个项目录是吧
那比如说我现在这个里面
给他看一下
我们进入到这个Codex
是吧
进入到这个Codex里面去
然后的话
这里面我们建一个目的
叫做这个Rack
System
Rack系统
然后在这个里面的话
我们要用终端管理员的方式打开
然后切换到地盘
切换到Codex
下面有一个目录叫做RockSystem
然后我们进入Codex
进入Codex之后
我首先调一下这个权限
把这个权限改成这个不需要授权的
因为我不想反复的去确认
这里因为怎么正常编码开发了
所以就不需要确认了
直接让他干活就行了
我们把这个权限放开
就是不需要再用户再确认了
好
然后这个地方的话就是
你看我刚刚讲的这个授权模式
我就是用的这一种
就把权限全部全自动了
这个是我们因为
我们前面给大家讲了这几种权限
就是涉及到一些敏感操作
一些敏感命令执行的时候
我建议大家就是需要用户去确认
就如果是你个初学者
你要保证安全的
你就用这种模式
如果说你已经熟悉了
是吧
那你要快速提效
你就用auto的这个模式
但以前叫auto edit
现在叫auto review
差不多的一个意思
就是他会根据实际一个情况
自动帮你去授权访问
但是在某一些
比如说要执行一些RM跟RF的
一些命令的时候
这些敏感操作的时候
他还是需要授权
所以
但是他大部分命令都会放开
所以这个就看大家的一个实际情况
如果说你属于这个阶段
你就用这种模式
我目前用的是这种模式
就是我需要他全自动去帮我去跑了
所以我不需要关注那么多授权的东西
那么首先就是我们要做一个需求的一个拆解跟架构设计
是吧
就大家你用Codex做项目
你不是一上来就直接让Codex帮我写一个智能客服系统
那这样生成的这个效果肯定是不行的
因为你需求都没描述清楚呢
你首先啊
我们虽然是用Codex去提效
但是的话
大家不要觉得就是
AI就能模拟搞定一切了是吧
就是你的整个软件开发的这个过程
你还是得有的
比如说做技术方案
做架构设计
这个跑不了的
因为这是个系统
这个系统的话
会涉及到非常多的模块
需求的话会有大需求
然后每个任务要做拆分的
那AI的话
他比较适合的是执行某一个任务
所以说你如果没有帮他
没有帮他把任务拆出来的话
那他帮你干活的时候
可能就会出现各种各样的问题
所以大家尽量要细化
这是一个非常大的一个原则
所以我们第一步的话
就大家要把认知给他对齐一下
要按照一个正常的软件开发的一个流程
去做一个交互
比如说第一步
我们你现在要做一个Rug的这个系统的话
你首先得输出技术方案吧
那那技术方案
以前我们做价格设计
大家要画这个什么流程图啊
架构图啊
各种各样的一些图是吧
那现在其实有了这些个东西之后的话
有了AI有了Codex之后的话
那这些工作的话
其实都可以交给AI去做了
但是的话
你的一个前提就是你这个提示词
你得写清楚是吧
比如说我们这里
我要开发一个Rug智能客服系统
技术在限定为Web页面
然后Agent的编盘是什么什么
向量数据库是什么
知识的模型是什么是吧
然后功能需求
一个知识库页面
然后可以新建知识库
上传markdown文档自动切分
就是咱们得把需求描述的非常清楚
并且这个知识库多选
是吧可选
然后对话的时候可以启用哪些知识库
然后我们写了功能需求之后
我们还就是要一定要提出来啊
就是请先不要写代码
先输出这个推荐项目的一个目录结构
每个模块的一个工程职责
然后建议的开发顺序
从底层到上层
这个就是要我们要做一个架构设计
把一些相关的文档给它输出出来
而不是说直接就开发了
所以第一步的话
大家首先要复制一下
就是把这个提示词
我们要一步的去生成
那这个里面我用这个
我们打开
我们在这个里面给它来看
会比较清新一些
因为这个看起来不是很方便
然后我们打开这个目录
然后这个目录我们选择这个RackSystem
然后在这个里面发起一个对话
在这个大家会看得更清晰一些啊
在这个里面他有时候看的不是很方便
然后大家看啊
在这个里面你看
他就开始帮我们去规划了啊
因为我之前规范里面写到DDD分层来组织
所以他也把这个规范加入进来了
你看这个是他就是规划的一个目入结构
是吧什么RAG系统啊是吧
然后配置啊数据啊
然后包括一些模块啊是吧
然后一些应用程序啊是吧
你看是不是帮我们规划的非常清楚
什么agent state node是吧
你看按照模块职责划分
负责stream里的钱的交互
然后这个放核心的一些什么模块是吧
然后还有一些这个规划相关的
你看他包括建议的这个开发步骤都帮我们调好了
比如说先定义领域模型
然后再去实现基础的一些配置与模型的一个适配
再包括去做一些什么markdown加载与切分是吧
然后还有一些实现crama向量库的一些适配
包括这个知识库这个啊
路库的一些用力
然后去实现一些
这个检索的用力啊
包括Longraph的这个Agent等等的是吧
他会帮你把这个步骤
全部给树立清楚
所以说这个里面的话
大家首先你要看一下
他基本的逻辑
是不是按照你的一个要求去做的啊
这个有没有达到你的一个要求
包括他的一些这个
模块是吧
然后开发顺序
这些东西有没有问题
然后这个就是确认没问题之后
你可以开始让他干嘛呢
接下来我们就开始去生成一些这个文档了
是吧
但我们其实
他现在是按DDG做的
我们其实
还不需要那么多
这个DDG的一些规范
所以这里面我先是先调一下
因为按他按DDG规划的话
那个模块会插得很细啊
但其实我们可以不需要用到那么细啊
所以这个里面看一下
我们可以这里面可以调整一下
全局的这个DDD的一些规范啊
我们找到那个用户目录
然后找到点Codex
嗯
然后Codex里面有我之前看一下啊
Liless
之前应该是我去写过一个这个Agence.md啊
或者说咱们找不到的时候
你机器可以Goend的
帮我读取下系统全局的agents.md
当前用户
因为我之前那个agents.md里面写了一些这个
dd的一些规范
所以我现在要把这个规范给去掉
不然到时候生人代码的时候
可能会有一些这个问题啊
但是他这个模块就这样去分
也没什么问题
只是说他这里拆的太细了
你看什么DOMEN啊
其实我们这么一个项目的话
暂时还不需要用到DDD啊
DDD一般是用在一些复杂的
一些大型系统上面
比如说一些ERP系统
模块非常多的场景下
用DDD没问题
但实际上我们不需要那么麻烦啊
你看我之前这个文档里面
我写了一个什么 dv 驱动的方式开发
这是之前的我规范
那我现在要把它去掉
codex下面有一个
agents
你看这是我之前加的
我现在把它去掉
然后这里面我们重新发起一个对话
把之前的提示词复制一下
重新发起一个对话
我们再来让它生成一下
我们这里看一下
这个里面
你看现在就不是DDD了
后面同时也按照DDD风格推进
这里面还是DDD没有生效
没有保存
我直接跟他说
我再发几个对话
可能是不是要重启一下
那现在模块就少了一些了
应该那个DDD的那个已经失效了
模块少了一些了
然后的话就是我们看一下整个的一个逻辑啊
你像这个APP
它只负责stream里的界面的交互
domain的话就负责一些这个核心的一个业务概念啊
然后application是什么
然后外部技术实现是什么
然后包括他的一些细节
是吧
就怎么来实现
好
这一步之后的话
接下来干嘛呢
接下来就是我们要去逐步实现
整个的一个逻辑
比如说
这里面有两块
就一块你可以按照他的一个目录结构去生成
还有一块的话
就是你有自己的一个规划
你想按你的方式去做一个目录生成
那你就可以把这个复制一下
请
参考我的目录结构规范进行调整
生成对应的目录结构
就是你自己有一套规范是吧
你把这些东西你都定好了
那你就让让他去按你的方式去做就可以了
如果说你没有特定的一个要求
你想用他的这个方案的话
其实也是可以
就我们前面的话
只是让他去帮我们分析一下
让他去完全去做一个
所以说
比如说我们可以把这个TS加起来
是吧
你可以把这两个东西组合起来
你要开发这么一个
然后你的一个目入结构应该是下面这种
是吧
或者说你就直接用它的方案都是可以
或者大家
你觉得它的结构太复杂了
不太合适
然后
你可以去具体去调整一下
是吧
那我们可以再发起一个对话
你可以让他参考你的目录结构去实现啊
这个都是OK的
这个里面大家可以不断的去调整啊
做一些微调处理
你看这是他给你的一个建议啊
然后去梳理出来的
哎他还善滴滴滴啊
那个就没生效
我的滴滴滴这个都去掉了
但这个应该是要重启一下
来重启一下
我这个重启啊
然后重新打开一下
他可能没有加载啊
当前那个对话可能
要要重启一下这个APP
可能才可以
再试一下
看现在应该