写点什么

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:076811

评论

发布
暂无评论

如何从内部保障企业数据安全?用IT运维审计系统可以吗?

行云管家

网络安全 数据安全 堡垒机 IT运维 运维审计

区块链“通证”将颠覆“资本”

CECBC

北鲲云超算平台如何帮助高性能计算行业提供解决方案

北鲲云

阿里资深架构师终于把微服务架构与实践第2版PDF分享出来了

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

技术分析| 实时音视频通讯中的流媒体是怎样传输的

anyRTC开发者

音视频 WebRTC 流媒体 流媒体传输

kubelet 1.14 升级 kubelet 1.20 容器重启问题

Geek_f24c45

Docker Kubernetes kubelet

区块链产业大爆发!未来究竟是谁的机会?

CECBC

模块一作业

陈家豪

架构实战营

Goroutine & Channel

Vibyird

并发编程 channel CSP Go 语言 goroutine

小公司实施系统为什么也容易失败?

明道云

Spring 配置加载

樊江。

Spring Framework

高可用 | Xenon 实现 MySQL 高可用架构 部署篇

RadonDB

MySQL 数据库 Xenon RadonDB

关于飞书的告警通知,这里有个更好的办法

睿象云

运维 告警 运维平台 智能告警

图数据库在百度汉语中的应用

百度Geek说

数据库 后端

最全互联网后端免费技术分享视频资源学习社区

hanaper

TCP协议认知篇

邱学喆

TCP协议 拥塞避免算法 慢启动算法 坚持定时器 TCP状图切换

量化交易炒币机器人系统搭建

量化系统19942438797

机器人 量化交易

区块链应用:从技术工具到创新思维

CECBC

宝安机关食堂支持数字人民币刷脸支付

CECBC

fil挖矿步骤教程是什么?fil挖矿规则是什么?

fil挖矿步骤教程是什么 fil挖矿规则是什么

计算机网络常用知识总结

Java 架构 后端 网络 计算机

WorkPlus高端制造业移动数字化平台解决方案—华晨宝马

BeeWorks

即时通讯 移动办公平台 移动数字化底座 移动数字化基座 企业即时通讯平台

吐血整理!金九银十必问的1000道Java面试题及答案

Java 编程 程序员 架构 面试

能不能征服初恋,就看这个架构了!!!

人工智能~~~

springboot+vue+activiti,在线编辑器,快速开发平台

金陵老街

Java Vue 工作流 springboot Activiti

技术实践|网易云信 IM SDK 服务高可用技术方案

网易云信

后端

打开vscode好像打开了原神?vscode原神背景推荐,比博燃

CodeNongXiaoW

vscode vscode背景 原神

阿里巴巴首发:Java核心框架指导手册1小时点击量破千万!

Java 编程 面试 程序人生 Alibaba

交易所智能炒币机器人开发||量化交易炒币机器人系统搭建

Geek_23f0c3

量化交易机器人系统开发 炒币机器人

如何基于分布式KV研发一款消息中间件

Java 编程 面试 后端 中间件

ipfs挖矿合法吗?ipfs挖矿靠谱吗?

区块链 IPFS ipfs挖矿 ipfs矿机 filecoin挖矿

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