Coze开源已有段时间,相信不少朋友都已上手体验。坦白说,这次开源的版本与商业版相比,确实存在一些差距,比如模型在线配置功能缺失,整体感觉略显仓促。从源码层面看,不少修改不够彻底,部分功能只是简单屏蔽而非移除,阅读代码时容易被残留逻辑绕晕。不过,核心的Agent构建能力、知识库处理等关键模块都已开放,加上宽松的Apache-2.0协议,对于有志于二次开发的朋友来说,Coze依然是一个相当理想的起点。笔者所在公司正基于开源版Coze(0.22版本)构建完整的AI智能体平台,这里也分享一些在深度二次开发中积累的经验与心得。

整体架构

Coze后端主体由Go语言开发,技术栈带有鲜明的字节跳动印记,也融入了其内部开源的框架与库。坦率地讲,相较于Dify、RAGFlow等以Python为主的项目,我个人更看好Go/Java这类“工程化”语言在智能体平台这类高复杂度系统中的表现——它们在扩展性、维护性和性能上优势明显。然而,当前AI领域似乎形成了“Python即政治正确”的态势,选择其他语言反而需要勇气承担技术决策的风险。

Coze的GitHub主页上对整个工程的目录结构和开发规范都有详尽说明,强烈建议先仔细进行阅读。架构层面上,Coze严格遵循领域驱动设计(DDD)原则。若对DDD不熟悉的同学,可能会觉得其模块划分略显复杂,一个简单的逻辑往往会封装多层,但这也是类似设计模式的通病,强调清晰的层次划分和职责分离来对抗业务逻辑的复杂性,这样才能在持续迭代和重构中保持系统架构不会腐化,变成屎山代码。但这也牺牲了日常开发的便利性,往往一个增删改查也需要写一大堆样板代码。不过好在coze搭建了一套强大的自动代码生成流程,可以一定程度上简化这种样板代码的编写工作,这个后面再细说。

服务初始化

服务初始化的核心逻辑位于 backend/application/application.goinit 函数中,其设计非常清晰,通过层级化初始化有效管理了复杂的依赖关系,避免了交叉引用和循环依赖问题。整个初始化过程分为四个紧密衔接的层次:

    1. 基础依赖层 (AppDependencies): 首先构建应用运行所需的外部环境,包括数据库连接、缓存客户端、文件系统接口、消息队列驱动等中间件组件的初始化。
    1. 基础服务层 (basicServices): 接着启动全局性的基础服务,如用户管理体系、OpenAPI权限校验机制等,它们是系统运行的基础支撑。
    1. 核心业务层 (primaryServices): 随后初始化核心业务领域的服务,如知识库管理、工作流引擎、插件系统等,这是平台功能的核心承载者。
    1. 组合业务层 (complexServices): 最后启动需要跨多个业务域协同工作的服务,如对话服务、Agent编排服务、检索服务等。这类服务往往需要组合调用多个primaryServices来完成端到端的业务流程。
      服务初始化的核心代码如下:
infra, err := appinfra.Init(ctx)    if err != nil {        return err    }    eventbus := initEventBus(infra)    basicServices, err := initBasicServices(ctx, infra, eventbus)    if err != nil {        return fmt.Errorf("Init - initBasicServices failed, err: %v", err)    }    primaryServices, err := initPrimaryServices(ctx, basicServices)    if err != nil {        return fmt.Errorf("Init - initPrimaryServices failed, err: %v", err)    }    complexServices, err := initComplexServices(ctx, primaryServices)    if err != nil {        return fmt.Errorf("Init - initVitalServices failed, err: %v", err)    }

调用链路

整个服务的调用链路相对比较长,都是严格遵循了DDD的相关规范,模块边界非常清晰,我们在二次开发时也应该遵守相关的服务契约。


一直在更新,更多的大模型学习和面试资料已经上传带到CSDN的官方了,有需要的朋友可以扫描下方二维码免费领取【保证100%免费】👇👇

在这里插入图片描述

配置管理

Coze采用环境变量的方式读取配置,默认配置文件位于源码根目录的 docker 文件夹下。在构建Docker镜像时,该文件(.env.example)会被复制到应用目录,方便启动时加载并设置环境变量:

COPY docker/.env.example /app/.env

配置文件的主要内容是各个中间件的连接方式以及AI大模型的相关配置。大模型的配置部分当前版本的coze主要是使用静态配置的方式进行加载的,无法动态修改,这个明显是仓促间阉割而来的,原始的数据库schema中还能看到与模型配置相关的表,但是开源版本并未使用。关于大模型的配置部分相对比较复杂,这里放到下期进行详细讲解,这里先略过。

中间件

Coze高度依赖中间件提供存储、缓存等基础能力,其一大亮点在于提供了丰富的可选配置和适配器,允许用户根据自身环境灵活选择最合适的组件组合:

  • 业务数据库: MySQL 8,作为核心业务数据的持久化存储。
  • 缓存服务: Redis,在系统中扮演多重关键角色:作为分布式ID生成器的状态存储、通用缓存池、工作流状态(中断事件、取消信号)和检查点数据的保存地,以及节点执行输出的临时存储。
  • 对象存储: 用于存放知识库文档、前端静态资源(如图标)等文件。支持MinIO(默认,适合纯本地部署)、TOS(字节跳动对象存储)、AWS S3(三选一)。
  • 全文检索: ElasticSearch,专门用于知识库中基于精确匹配的文本检索任务。
  • 向量数据库: Milvus(默认)或VikingDB(火山引擎云原生向量数据库)二选一,负责知识库中基于向量语义相似度的检索。
  • 消息队列: NSQ(默认)、Kafka、RabbitMQ三选一。核心作用是将耗时操作(如知识库索引更新)异步化,提升系统响应速度,同时通过事件驱动机制解耦模块间依赖。

权限控制

API调用权限

coze对于后端API的鉴权主要分成三种类型:SESSION鉴权,OPENAPI鉴权和静态资源鉴权,在backend\api\middleware\request_inspector.go中进行相应的拦截鉴权:

func RequestInspectorMW() app.HandlerFunc {    returnfunc(c context.Context, ctx *app.RequestContext) {        // 默认是session鉴权        authType := RequestAuthTypeWebAPI // default is web api, session auth        // openapi鉴权        if isNeedOpenapiAuth(ctx) {            authType = RequestAuthTypeOpenAPI        } elseif isStaticFile(ctx) {            //静态资源鉴权            authType = RequestAuthTypeStaticFile        }        ctx.Set(RequestAuthTypeStr, authType)        ctx.Next(c)    }}
  • SESSION鉴权:这是coze绝大部分API的鉴权模式,基于JWT Token判断当前用户的登录信息是否合法有效,session key保存到当前请求的cookie中。
  • OPENAPI鉴权:对于少数的OPENAPI,需要授权给第三方系统进行调用的,采用api令牌授权的模式,用户可以在页面上创建相关令牌,并设置过期时间,这样三方系统就可以通过Bearer 认证的方式传入授权后的API令牌来访问对应的OPENAPI了,采用此种方式鉴权时,接口调用的相关数据权限等同于签发此令牌的用户。可以使用此方式的OPENAPI包括以下接口:
var needAuthPath = map[string]bool{    "/v3/chat":                      true,    "/v1/conversations":             true,    "/v1/conversation/create":       true,    "/v1/conversation/message/list": true,    "/v1/files/upload":              true,    "/v1/workflow/run":              true,    "/v1/workflow/stream_run":       true,    "/v1/workflow/stream_resume":    true,    "/v1/workflow/get_run_history":  true,    "/v1/bot/get_online_info":       true,}
  • 静态资源鉴权: 静态资源校验目前有没有什么特别的验证规则,应该是预留的处理逻辑,基本等同于允许匿名访问,被认定为静态资源的URL如下:
var staticFilePath = map[string]bool{    "/static":      true,    "/":            true,    "/sign":        true,    "/favicon.png": true,}
  • 匿名访问:在backend\api\middleware\session.go中,可以设置当前系统中允许匿名访问的相关接口:
var noNeedSessionCheckPath = map[string]bool{    "/api/passport/web/email/login/":       true,    "/api/passport/web/email/register/v2/": true,}

数据权限

coze中主要的业务数据表中,基本都会添加一个space_id字段,存储当前数据所属的用户空间,比如knowledge,workflow_meta等。在查询时,前端会传入当前登录用户的space_id,后端接口会动态的添加相应的查询条件,比如在查询工作流时:

if q.SpaceID != nil {    conditions = append(conditions, r.query.WorkflowMeta.SpaceID.Eq(*q.SpaceID))}

这些就实现了业务数据基于用户空间进行数据隔离的效果。但是这个数据隔离目前来看缺陷很多:

    1. 在当前的开源版本中,并没有开发新增用户空间的接口,每个用户在注册时默认创建一个“Personal Space”,该空间也没法添加其他人,所以基于空间进行权限分组还无法实现,需要自行添加相关的空间维护功能。
    1. 数据查询时的space_id都是前端通过接口传入的,后端没有与当前用户用户绑定的space做交叉验证(个别接口有校验),理论上存在恶意传入其它未授权space_id造成数据泄露的风险。
    1. 数据权限的隔离依赖硬编码SQL条件实现,在重构或者修改时,容易遗漏导致缺失必要的数据校验,这里其实成熟一些的做法是采用统一的查询拦截机制,基于配置进行SQL拦截,并自动添加相关的条件。

代码生成

前面提到过coze的架构设计是严格遵循的DDD的设计思想,这样的好处是分层清晰,代码职责分明,但是对于简单的CRUD功能难免会造成一些过度封装的问题,需要编写一大堆的样板代码。为此coze也借助了框架层面的能力,通过代码的自动生成来最大程度避免手动编写样板代码的问题。

API代码生成

coze的API层使用的是字节开源的Hertz框架,相对比较小众,网上资料比较少,但是功能还是相当强大的,配置方式和gin等框架比较也比较类似,没有太多的学习成本。二次开发最需要了解的是Hertz框架的接口自动生成能力,这个在官网上没怎么解释,新接触的同学不太容易搞清楚其中的原理。

coze的整个API接口都是基于thrift文件生成的,接口定义文件都存放到源码根目录的idl目录中,使用thrift这种语言无关的DSL来定义接口最大的好处就是前后端可以基于该配置各自通过相关的代码生成工具,自动生成各自的接口和调用代码,避免开发人员之间手动约定接口的格式,数据类型等规范,简化前后端的联调工作。每个.thrift文件其实就是一个API说明文档,只是这个文档能够直接被翻译成前后端代码。

对于后端的接口实现,就是基于Hertz框架的代码生成能力来生成的。具体来说,在backend/.hz这个文件中保存了Hertz框架对于代码生成目录的一些基本约定:

// Code generated by hz. DO NOT EDIT.hz version: v0.9.7handlerDir: api/handlermodelDir: api/modelrouterDir: api/router

如果需要新增或者修改相应的接口,首先需要本地安装Hertz的代码生成工具hz

go install github.com/cloudwego/hertz/cmd/hz@latest

然后新增或者编辑对应的thrift文件,这里可以参考 hz的官方文档(https://www.cloudwego.io/zh/docs/hertz/tutorials/toolkit/usage-thrift/) 的相关说明。需要注意的是在coze中如果新增了thrift文件,需要在idl根目录的api.thrift中引用相关的配置文件,在代码生成时才能识别。

最后,在源码根目录执行命令,根据最新的配置文件重新生成所有的接口处理器,模型和路由配置:

hz update -idl ./dl/api.thrift  -enable_extends

数据库访问代码生成

coze的数据库访问框架使用的是gorm,核心的DAO代码也是基于gorm的Generator来生成的,具体的生成入口在backend/types/ddl/gen_orm_query.go中,需要首先配置相关的数据库连接参数,然后直接执行该文件的main函数,即可生成相关的表的Model和DAO代码。

如果新增了数据表,需要修改path2Table2Columns2Model的映射关系,为新表配置相应的业务域和字段类型映射,比如

"domain/app/internal/dal/query": {        "app_draft": {},        "app_release_record": {            "connector_ids": []int64{},            "extra_info":    &appEntity.PublishRecordExtraInfo{},        },        "app_connector_release_ref": {            "publish_config": appEntity.PublishConfig{},        },    }

这次主要从整体上介绍了coze技术上的一些特点以及后端二次开发的部分注意事项。后续我们还会深入讲一下coze的一些核心模块的逻辑和流程(比如模型配置,知识库检索等),以及如何进行二次开发完善的相关思路,敬请期待。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

一直在更新,更多的大模型学习和面试资料已经上传带到CSDN的官方了,有需要的朋友可以扫描下方二维码免费领取【保证100%免费】👇👇

在这里插入图片描述

01.大模型风口已至:月薪30K+的AI岗正在批量诞生

在这里插入图片描述

2025年大模型应用呈现爆发式增长,根据工信部最新数据:

国内大模型相关岗位缺口达47万

初级工程师平均薪资28K(数据来源:BOSS直聘报告)

70%企业存在"能用模型不会调优"的痛点

真实案例:某二本机械专业学员,通过4个月系统学习,成功拿到某AI医疗公司大模型优化岗offer,薪资直接翻3倍!

02.大模型 AI 学习和面试资料

1️⃣ 提示词工程:把ChatGPT从玩具变成生产工具
2️⃣ RAG系统:让大模型精准输出行业知识
3️⃣ 智能体开发:用AutoGPT打造24小时数字员工

📦熬了三个大夜整理的《AI进化工具包》送你:
✔️ 大厂内部LLM落地手册(含58个真实案例)
✔️ 提示词设计模板库(覆盖12大应用场景)
✔️ 私藏学习路径图(0基础到项目实战仅需90天)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

Logo

更多推荐