燃爆上海 5·23-24,AICon 大模型实战风暴,50+ 干货一网打尽,即将开幕~ 了解详情
写点什么

AI 编程云课堂 | 1 小时快速理解开源项目

  • 2025-02-10
    北京
  • 本文字数:2584 字

    阅读完需:约 8 分钟

大小:1.20M时长:06:59
AI 编程云课堂 | 1 小时快速理解开源项目

在技术快速迭代发展的今天,持续学习和快速适应复杂项目是程序员保持职场竞争力的关键。面对快速庞大复杂的代码库,如何解读架构、快速掌握核心逻辑,已成为前沿开发者的必修课。


豆包 MarsCode AI 编程云课堂「专业开发者系列」首期课程——快速理解开源项目,由【字节猫箱团队】负责人孟健老师亲授,通过实践案例与工具应用,全面讲解如何借助 AI 学习开源项目,帮助开发者朋友们大大节省学习时间,提升开发效率!


不知道大家有没有按时上课呢?让我们一起来回顾一下往期精彩吧~

课前准备

下载并安装豆包 MarsCode 


打开官网链接下载并安装好豆包MarsCode插件,或直接进入插件市场搜索 MarsCode AI 安装。

获取开源项目 


本课程将使用 vercel ai sdk 来进行讲解:https://github.com/vercel/ai, 请提前下载项目:


git clone https://github.com/vercel/ai.git


使用“code”命令来启动 Visual Studio Code 并将其打开。


cd ai 

code .

课程学习

Step1 梳理项目结构 


我们首先让豆包MarsCode 帮我们梳理一下项目结构:


 Workspace 梳理项目结构



它为我们细致地梳理了一下目录结构。很显然,这个仓库是一个 monorepo 的架构,所有的核心文件都在 packages/ 这个目录下。 

Step2 识别关键组件和模块 


接下来,我们让它对这个项目的关键模块进行一下分析看看: 


 Workspace 识别关键组件和模块


这里豆包MarsCode已经帮助我们解析出了核心模块以及核心文件,从上到下分别是优先级。我们可以知道最需要关心的模块是 packages/ai/core ,以及下述说明:


🟣AISDK 核心模块(packages/ai/core)


这是 AISDK 的核心部分,包含了与 AI 模型交互的关键逻辑。


主要功能包括:

  • prompt/:处理和转换用户输入的提示信息。

  • types/:定义了核心的数据类型和接口。

  • utils/:提供了一些通用的工具函数。


🟣模型提供者模块(多个包)


这些模块分别对应不同的 AI Provider(如 anthropic、Cohere、Google、Mistral、OpenAI、Replicate)。


每个模块负责与特定的 AI Provider API 进行交互,并将结果转换为统一的格式供 AISDK 使用。


🟣UI 工具模块(packages/ui-utils)


提供了一些与 UI 相关的工具函数和组件。


主要功能包括:

schema.ts:定义了用于验证和转换 JSON Schema 的工具函数。


🟣React 和 Solid 组件库(packages/react, packages/solid)


这些模块提供了用于 React 和 Solid 框架的 UI 组件和 Hooks。


主要功能包括:


  • use-object.ts:提供了用于处理对象流式数据的 Hooks。

  • use-object.ui.test.tsx:包含了 UI 测试用例。

Step3 核心模块的使用方式


接下来,我们可以探索一下核心模块的使用方式,从而更深入地了解其功能本身:


Workspace 

packages/ai/core 的核心使用方式


豆包 MarsCode 给出了许多使用方式的示例,我们先重点关注第一个:

import { generateText } from 'ai';import { openai } from '@ai-sdk/openai'; async function main() {  const result = await generateText({    model: openai('gpt-4'),    prompt: 'What cities are in the United States?',  });   console.log(result.text);} main().catch(console.error);
复制代码


上述代码展示了如何使用 ai 库中的 generateText 函数生成文本。它首先导入了 generateText 函数和 openai 模型,然后在 main 函数中定义了一个异步操作,使用 generateText 函数生成文本,并将结果打印到控制台。在这个过程中,它使用了 openai('gpt-4') 来指定使用 gpt-4 模型,并通过 prompt 参数提供了生成文本的提示信息。

Step4 核心函数分析 


接着,我们继续让 AI 剖析 generateText 的核心实现:


 Workspace 

定位并分析一下 generateText 的核心实现



可以看到,核心的实现是一个循环,AI 帮我们总结了,主要做了以下事情:


  1. 准备提示信息

将提示信息转换为模型所需的格式。

2. 调用模型生成文本

通过 model.doGenerate 方法调用模型生成文本。

3. 解析工具调用

如果模型生成了工具调用,解析这些调用。

4. 执行工具

执行解析出的工具调用,并获取结果。

5. 更新文本和消息

根据模型的输出更新生成的文本和消息。

6. 记录步骤结果

将当前步骤的结果记录下来,并调用 onStepFinish 回调函数。

Step5 进一步追问


对于核心实现有疑问的情况,我们可以进一步追问,比如:


这个 while 循环的作用是什么

stepType 有哪些取值?分别有什么逻辑?

Step6 画个流程图


有时函数的实现过于复杂,我们可以让 AI 绘制一个流程图,以便更清晰地表达:


这个循环体所做的事情,帮我画个流程图



如果觉得 mermaid 形式还不够清晰,可以进一步要求豆包 MarsCode 用字符形式画流程图。

Step7 深入探索某个功能


主体流程分析完毕,如果我们现在对其中的某个实现颇感兴趣,可以让 AI 帮我们串联一下,比如:


 Workspace 

详细解释一下 generateText 的 tools 是怎么运行的


AI 会从使用的角度到源码的角度帮你做分析串联。比如从 tools 功能角度:


1.工具定义

在 generateText 函数中,tools 是一个对象,包含了所有可用的工具。每个工具都有一个名称和一个 execute 方法,用于执行工具的功能。

2.生成文本并调用工具

在 generateText 函数中,首先调用语言模型生成文本,并检查生成的文本中是否包含工具调用。

3.解析工具调用

生成的文本中可能包含工具调用。generateText 函数会解析这些调用,并将其转换为 ToolCall 对象。

4.执行工具

解析出工具调用后,generateText 函数会执行这些工具,并获取结果。

5.工具执行逻辑

executeTools 函数会遍历所有的工具调用,并调用相应的工具执行方法。

6.工具结果处理

执行完工具后,generateText 函数会将工具结果与生成的文本一起返回。

Step8 分析核心模块依赖关系


我们还可以让 AI 快速分析一下模块依赖关系:


 Workspace 

分析 packages/ai/core 的核心依赖关系

如果还是觉得不够清晰,可以再让它画一个依赖图:


通过以上分析,相信可以帮助我们清楚迅速地了解项目各模块依赖关系


相信通过今天的课程,大家都已经学会从项目基础分析、核心组件识别、模块深入分析、功能探索、依赖关系分析等五个步骤学习开源项目的实现原理,汲取项目精华知识。也期待大家在实际工作学习中进行实践,更高效地学习开源项目,快速提升 coding 能力!


【豆包 MarsCode AI 编程云课堂】是豆包 MarsCode 唯一官方指定线上教学课程,围绕豆包MarsCode 的基础功能、应用场景、实践操作等方面展开,每周 1 小时线上直播,邀请各位资深的开发者手把手教大家用 AI 玩转编程,提高你的编程效率。

2025-02-10 15:077127

评论

发布
暂无评论

LibcarePlus 用户态热补丁技术那些事

openEuler

安全 openEuler 漏洞 #开源

STM32+ESP8266+MQTT协议连接阿里云物联网平台

DS小龙哥

7月月更

多线程&高并发(全网最新:面试题+导图+笔记)面试手稳心不慌

冉然学Java

Java 编程 多线程并发 高并发系统 资料分享

节流和防抖的说明和实现

南极一块修炼千年的大冰块

7月月更

查策,查策,python字体反爬再一次实践

梦想橡皮擦

Python 爬虫 7月月更

类的基础

GalaxyCreater

图的存储结构与方法(二)

乔乔

7月月更

springMvc参数获取

沃德

Java 7月月更

IntelliJ IDEA使用

GalaxyCreater

Java IDEA

基于 Web SDK 实现视频通话场景 | 声网 SDK 教程

声网

视频 SDK 教程

一时跳槽一时爽,一直跳槽一直爽?

KEY.L

7月月更

python小知识-代码规范最佳实践

AIWeker

7月月更 pyhon小知识

Java开发环境配置 / Vscode搭建

攻城狮杰森

Java jdk 7月月更

【Go实现】实践GoF的23种设计模式:观察者模式

元闰子

Go 设计模式 观察者模式 Go 语言

开源分布式链路追踪对比

穿过生命散发芬芳

链路追踪 7月月更

深入浅出边缘云 | 1. 概述

俞凡

架构 边缘计算 网络 深入浅出边缘云

Docker安装Elasticsearch、ik分词器、可视化工具

宁在春

Docker Elastic Stack 7月月更

接口测试

Xd

接口测试工具

最新的swoole-cli已可以支持Windows,手把手带你在windows体验swoole

迷彩

swoole 服务器开发 7月月更 swoole-cli

@Entity 里面的 JPA 注解

Damon

7月月更

参与开源社区还有证书拿?

玩转Devop和研发效能DevStream/DevLake

GitHub 开源 开发者 证书

OSI模型第一层:物理层,基石般的存在!

wljslmz

物理层 网络技术 OSI模型 7月月更

做一个有职业操守的软件匠人

Bruce Talk

技术 敏捷 TDD Agile

Vue Router 守卫

程序员海军

Vue 7月月更

Protocol buffers 的问题和滥用

HoneyMoose

MySQL数据库索引

技术小生

索引 7月月更

JAVA编程规范之建表规约

源字节1号

后端开发

作为一名后台开发人员,你必须知道的两种过滤器

C++后台开发

后台开发 后端开发 Linux服务器开发 C/C++后台开发 C/C++开发

mysql进阶(十九)SQL语句如何精准查找某一时间段的数据

No Silver Bullet

MySQL 7月月更 精确查找

阿里onedate分层思想

奔向架构师

数据中台 7月月更

界面设计四大原则

空城机

设计模式 7月月更

AI 编程云课堂 | 1 小时快速理解开源项目_生成式 AI_Trae_InfoQ精选文章