写点什么

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

评论

发布
暂无评论

重塑数据活力 | 焱融科技与DaoCloud 道客完成云原生兼容性认证

焱融科技

#云原生 #高性能 #分布式文件存储 #文件存储 #分布式存储

巴别时代基于 Apache Paimon 的 Streaming Lakehouse 的探索与实践

Apache Flink

大数据 flink 实时计算

大咖观点| AIGC与因果推断的双向赋能

九章云极DataCanvas

简洁好用的思维导图软件:simplemind 中文版

真大的脸盆

Mac 思维导图 Mac 软件 思维导图软件

使用TPC-H 进行GreatSQL并行查询测试

GreatSQL

MySQL 并行查询 greatsql greatsql社区

中国信通院召开政企信息技术应用创新(信创)促进中心启动会

信通院IOMM数字化转型团队

信创 信创产业 信创生态

推动变革,打造全新的全面预算管理解决方案

智达方通

智能多维数据库 多维数据库 业财融合 全面预算管理

八股MQ003——聊聊Consumer

Codyida

后端

得物直播低延迟探索 | 得物技术

得物技术

直播技术 直播推流 直播优化

从入门到放弃再到成功—我的 Jira 插件探索之路

跟YY哥学Jira

Scrum cli Jira插件 Forge 团队速度

自动化测试 | 如何在API开发中践行“设计优先”方法?SwaggerHub助您一臂之力

龙智—DevSecOps解决方案

API SmartBear

五月到了,再来看看ChatGPT给我们带来了什么吧!

加入高科技仿生人

AI AIGC ChatGPT

iOS MachineLearning 系列(10)—— 自然语言分析之文本拆解

珲少

标签系列:标签的价值、生产与评价

小鲸数据

标签 CDP 用户画像 标签体系 精准营销

演讲回顾 | 释放Atlassian工具的力量

龙智—DevSecOps解决方案

Atlassian Jira Atlassian 云版

AIGC遇上低代码的碰撞与融合

力软低代码开发平台

华秋干货铺 | PCB板为什么要做树脂塞孔?

华秋电子

膜拜,国内算法大佬亲撰:数据结构与算法全解笔记

程序知音

Java 算法 数据结构与算法 后端技术

一文带你了解EPM系统的发展史

智达方通

EPM 业财融合 智达方通 企业绩效管理 海波龙

使用篇丨链路追踪(Tracing)很简单:链路拓扑

阿里巴巴云原生

阿里云 云原生 链路追踪 Tracing

Python文件和操作系统基础

timerring

Python

【Python实战】Python采集图片数据

BROKEN

三周年连更

版本控制 | 如何使用虚幻引擎的多用户编辑(MUE)功能

龙智—DevSecOps解决方案

版本控制 虚幻引擎 虚拟制作 虚幻多用户编辑

涨薪60%,从小厂逆袭,坐上美团技术专家(面经+心得)

程序知音

Java 后端 java面试 java架构 Java进阶

分布式编译系统的搭建

GreatSQL

MySQL greatsql社区 分布式编译

MySQL 8.0中InnoDB buffer pool size进度更透明

GreatSQL

MySQL InnoDB greatsql社区

153个!PCB板上的字母符号都代表啥?一图带你搞懂!

华秋PCB

物理 电路 元器件 PCB PCB设计

京东物流常态化压测实践 | 京东云技术团队

京东科技开发者

测试 压测 常态化压测 企业号 5 月 PK 榜

AIGC产业研究报告 2023——图像生成篇

易观分析

产业 智能

Netty服务端开发及性能优化 | 京东云技术团队

京东科技开发者

Netty 高性能 netty内存管理 企业号 5 月 PK 榜

Python函数基础回顾

timerring

Python

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