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 可能才可以 再试一下 看现在应该