掌握AI开发:AI_devs 3课程实战指南
在人工智能(AI)日益融入我们生活的今天,学习如何开发AI应用成为许多技术爱好者和专业人士的目标。AI_devs 3课程提供了一个全面的学习平台,通过具体的代码示例,帮助你掌握从环境配置到复杂AI功能实现的技能。本文将基于课程内容,详细讲解如何利用JavaScript/TypeScript、Node.js、Bun等技术,结合多种AI服务,构建实用、智能的应用。无论你是刚入门的技术人员,还是希望提升技能的开发者,这篇文章都将为你提供清晰的指引。
引言
AI_devs 3课程是一个专注于AI开发的资源库,包含多个实用示例,覆盖了对话管理、搜索功能、图像识别、音频处理等多个领域。课程中的代码使用JavaScript和TypeScript编写,主要依赖Node.js和Bun运行时,同时集成了OpenAI、Firecrawl、Linear、Langfuse、Qdrant、Algolia、Neo4j等服务。本文将带你逐步了解这些示例的安装方法、使用步骤和实现原理,帮助你在实践中快速上手。
1. 环境准备
在开始学习AI_devs 3课程的示例之前,你需要准备好开发环境。以下是具体的安装和配置步骤。
1.1 安装Node.js和Bun
要运行课程中的代码,首先需要安装以下工具:
-
Node.js:访问Node.js官网,下载并安装最新版本。这是运行JavaScript代码的核心环境。 -
Bun:Bun是一个高效的JavaScript运行时,访问Bun官网,按照说明安装。它在课程中用于执行代码。
确保安装完成后,在终端输入以下命令检查版本:
node -v
bun -v
如果返回版本号,说明安装成功。
1.2 克隆仓库并安装依赖
接下来,你需要下载课程的代码并安装相关依赖:
-
打开终端,输入以下命令克隆仓库:
git clone git@github.com:i-am-alice/3rd-devs.git cd 3rd-devs
-
安装依赖包:
bun install
这一步会下载所有必要的库文件,确保代码能够正常运行。
1.3 配置.env文件
课程中的许多示例需要使用API密钥,你需要在.env
文件中进行配置:
-
复制
.env.example
文件并重命名为.env
:cp .env.example .env
-
打开
.env
文件,填入所需的API密钥。例如,OpenAI的密钥是必需的,可以从OpenAI官网获取。
1.4 使用Docker(可选)
如果你更喜欢使用Docker来保证环境一致性,可以按照以下步骤操作:
-
在终端中运行以下命令,下载并执行设置脚本:
curl -fsSL https://env.ag3nts.org -o setup.sh bash setup.sh
-
这个脚本会:
-
将仓库克隆到当前目录下的 3rd-devs
文件夹。 -
创建Dockerfile并构建Docker镜像。 -
安装所有依赖。
-
-
构建完成后,启动Docker容器:
docker run --rm -it -p 3000:3000 --name aidevs -v ${PWD}/3rd-devs:/app aidevs3
-
在容器内配置
.env
文件,填入API密钥。
使用Docker的好处是环境隔离,避免了本地配置的潜在问题。
2. 课程示例详解
AI_devs 3课程包含多个示例,分为不同阶段(S01、S02、S03),每个示例都展示了AI开发中的一个具体功能。以下是对这些示例的详细讲解。
2.1 S01E01:对话与搜索基础
2.1.1 Thread
Thread示例展示了如何管理AI应用的对话线程,并通过总结机制保留上下文:
-
启动服务器:
bun run thread
-
测试对话:
curl -X POST http://localhost:3000/api/chat -H "Content-Type: application/json" -d '{"message": { "role": "user", "content": "Hi"}}'
运行后,服务器会处理请求,并将对话的总结传递给模型。要重置对话,需要停止并重启服务器(Ctrl+C后再次运行命令)。
2.1.2 Use Search
Use Search示例使用promptfoo工具测试AI是否需要调用搜索功能:
-
运行脚本: bun use_search
注意:如果bun install promptfoo
失败,可以使用npm install promptfoo
安装。运行后,你会看到一系列测试结果,帮助你理解搜索触发的条件。
2.1.3 Pick Domains
Pick Domains示例生成搜索时的域名选择:
-
运行脚本: bun pick_domains
结果是一个域名列表,展示了如何根据需求筛选合适的搜索范围。
2.1.4 Rate
Rate示例评估模型的响应质量:
-
运行脚本: bun rate
运行后,你会看到评估结果,帮助你优化模型的表现。
2.1.5 Websearch
Websearch示例使用Firecrawl进行网络搜索:
-
配置:在
.env
中添加FIRECRAWL_API_KEY
,可从Firecrawl官网获取。 -
启动服务器:
bun websearch
-
发送搜索请求:
curl -X POST http://localhost:3000/api/chat -H "Content-Type: application/json" -d '{"messages": [{"role": "user", "content": "Search wiki for '\''John Wick'\''"}]}'
你可以在websearch/app.ts
中调整允许搜索的域名列表。
2.2 S01E02:项目管理与记忆
2.2.1 Linear
Linear示例展示如何与项目管理工具Linear集成:
-
配置:在
.env
中填入LINEAR_API_KEY
和LINEAR_WEBHOOK_SECRET
,从Linear设置获取。 -
启动服务器:
bun linear
-
获取项目列表:
curl http://localhost:3000/api/linear/projects
需要使用ngrok将本地服务暴露到公网,并在Linear中配置Webhook地址。修改linear/prompts.ts
中的项目信息以匹配你的设置。
2.2.2 Files
Files示例管理对话历史:
-
启动服务器:
bun files
-
发送请求:
curl -X POST http://localhost:3000/api/chat -H "Content-Type: application/json" -d '{"messages": [{"role": "user", "content": "Hey there, what'\''s up?"}], "conversation_id": "d7582176-bc52-4ef3-980a-047b868f9f49"}'
对话数据会保存在files/context
文件夹中,可用Obsidian查看。
2.3 S01E03:日志与令牌管理
2.3.1 Langfuse
Langfuse示例记录API调用:
-
配置:在
.env
中填入LANGFUSE_PUBLIC_KEY
、LANGFUSE_SECRET_KEY
和LANGFUSE_HOST
,从Langfuse官网获取。 -
创建提示:在Langfuse中添加名为
Answer
的提示,例如“全部大写回答”。 -
启动服务器:
bun langfuse
-
发送请求:
curl -X POST http://localhost:3000/api/chat -H "Content-Type: application/json" -d '{"messages": [{"role": "user", "content": "Hey there, what'\''s up?"}]}'
结果会显示在Langfuse面板中。
2.3.2 Tiktokenizer
Tiktokenizer示例计算令牌数量:
-
启动服务器:
bun tiktokenizer
-
发送请求:
curl -X POST http://localhost:3000/api/chat -H "Content-Type: application/json" -d '{"messages": [{"role": "user", "content": "Hey there, what'\''s up?"}], "model": "gpt-4o"}'
2.3.3 Max Tokens
Max Tokens示例处理令牌限制:
-
启动服务器:
bun max_tokens
-
发送请求:
curl -X POST http://localhost:3000/api/chat -H "Content-Type: application/json" -d '{"messages": [{"role": "user", "content": "Write ten sentences about apples and put them in order."}]}'
2.3.4 Constitution
Constitution示例限制对话内容:
-
启动服务器:
bun constitution
-
发送请求:
curl -X POST http://localhost:3000/api/chat -H "Content-Type: application/json" -d '{"messages": [{"role": "user", "content": "Hello!"}]}'
规则在constitution/prompts.ts
中定义。
2.4 S01E04:长期记忆
2.4.1 Memory
Memory示例实现长期记忆:
-
启动服务器:
bun memory
-
发送请求:
curl -X POST http://localhost:3000/api/chat -H "Content-Type: application/json" -d '{"messages": [{"role": "user", "content": "Hello!"}]}'
记忆文件保存在memories
文件夹中。
2.5 S01E05:API与数据库
2.5.1 External
External示例管理API密钥和请求限制:
-
配置:在
.env
中填入PERSONAL_API_KEY
。 -
启动服务器:
bun external
-
发送请求:
curl -X POST http://localhost:3000/api/chat -H "Content-Type: application/json" -d '{"messages": [{"role": "user", "content": "Hello!"}]}'
多次请求后会返回429错误。
2.5.2 Prompts
Prompts示例使用Langfuse管理提示:
-
配置:同Langfuse示例。
-
启动服务器:
bun prompts
-
发送请求:
curl -X POST http://localhost:3000/api/chat -H "Content-Type: application/json" -d '{"messages": [{"role": "user", "content": "Hello!"}]}'
2.5.3 Database
Database示例组织对话数据:
-
启动服务器:
bun database
-
发送请求:
curl -X POST http://localhost:3000/api/chat -H "Content-Type: application/json" -d '{"messages": [{"role": "user", "content": "Hello!"}]}'
2.5.4 Qdrant
Qdrant示例使用向量数据库:
-
配置:同Langfuse示例。
-
启动服务器:
bun qdrant
-
发送请求:
curl -X POST http://localhost:3000/api/chat -H "Content-Type: application/json" -d '{"messages": [{"role": "user", "content": "Hello!"}]}'
2.6 S02E01:音频处理
2.6.1 Audio
Audio示例处理音频数据:
-
启动前端:
bun audio:dev
-
启动后端:
bun audio
-
访问:打开浏览器,输入
http://localhost:5173
。
注意:需要良好的麦克风和安静的环境。
2.7 S02E02:图像识别
2.7.1 Vision
Vision示例处理图像:
-
运行脚本: bun vision
处理vision/lessons.png
文件。
2.7.2 Recognize
Recognize示例识别图像:
-
运行脚本: bun recognize
处理recognize/avatars
中的文件。
2.7.3 Recognize-Pixtral
Recognize-Pixtral示例使用Mistral.ai:
-
配置:在 .env
中填入MISTRAL_API_KEY
,从Mistral.ai获取。 -
运行脚本: bun recognize_pixtral
处理recognize_pixtral/avatars
中的文件。
2.8 S02E04:多媒体生成
2.8.1 Captions
Captions示例生成字幕:
-
运行脚本: bun captions
处理captions/article.md
。
2.8.2 Summary
Summary示例生成摘要:
-
运行脚本: bun summary
处理summary/article.md
。
2.8.3 Video
Video示例处理视频:
-
配置:在 .env
中填入GOOGLE_AI_STUDIO_API_KEY
,从Google AI Studio获取。 -
运行脚本: bun video
处理video/test.mp3
。
2.8.4 Narration
Narration示例生成旁白:
-
配置:在 .env
中填入GOOGLE_AI_STUDIO_API_KEY
和ELEVEN_LABS_API_KEY
,后者从ElevenLabs获取。 -
运行脚本: bun narration
处理narration/app.ts
中的内容。
2.9 S02E05:文本与思维导图
2.9.1 Read
Read示例生成音频:
-
运行脚本: bun read
处理read/article.md
,生成read/summary.wav
。
2.9.2 Mindmap
Mindmap示例生成思维导图:
-
启动前端:
bun map:dev
-
启动后端:
bun audio-map
-
访问:打开
http://localhost:5173
。
2.9.3 Notes
Notes示例生成笔记:
-
运行脚本: bun notes
处理notes/app.ts
中的内容。
2.10 S03E01:文本处理
2.10.1 Text Splitter
Text Splitter示例分割文本:
-
运行脚本: bun text-splitter
处理text-splitter
文件夹中的文件。
2.10.2 Unstructured
Unstructured示例处理非结构化数据:
-
运行脚本: bun unstructured
处理unstructured/source.md
。
2.11 S03E02:嵌入与搜索
2.11.1 Embedding
Embedding示例处理嵌入数据:
-
配置:在 .env
中填入QDRANT_URL
和QDRANT_API_KEY
,从Qdrant Cloud获取。 -
运行脚本: bun embedding
处理embedding/app.ts
。
2.11.2 Rerank
Rerank示例优化搜索结果:
-
运行脚本: bun rerank
处理rerank/app.ts
。
2.11.3 Naive RAG
Naive RAG示例实现检索增强生成:
-
运行脚本: bun naive-rag
处理naive-rag/app.ts
。
2.11.4 Better RAG
Better RAG示例改进RAG:
-
运行脚本: bun better-rag
处理better-rag/app.ts
。
2.11.5 Semantic
Semantic示例实现语义搜索:
-
运行脚本: bun semantic
处理semantic/app.ts
。
2.12 S03E03:高级搜索
2.12.1 Algolia
Algolia示例使用Algolia搜索:
-
配置:在 .env
中填入ALGOLIA_APP_ID
和ALGOLIA_API_KEY
,从Algolia官网获取。 -
运行脚本: bun algolia
首次运行后,在Algolia面板中添加author
作为Facet。
2.12.2 Sync
Sync示例同步数据:
-
配置:同Algolia。 -
运行脚本: bun sync
确保在Algolia中设置text
为可搜索属性。
2.12.3 Hybrid
Hybrid示例结合搜索技术:
-
配置:需要Qdrant和Algolia的密钥。 -
运行脚本: bun hybrid
处理hybrid/app.ts
。
2.13 S03E05:图数据库
2.13.1 Neo4j-101
Neo4j-101示例介绍Neo4j:
-
配置:在 .env
中填入NEO4J_URI
、NEO4J_USER
和NEO4J_PASSWORD
。 -
运行脚本: bun neo4j-101
处理neo4j-101/app.ts
。
2.13.2 Neo4j
Neo4j示例应用Neo4j:
-
运行脚本: bun neo4j
处理neo4j/app.ts
。
3. 总结
AI_devs 3课程通过丰富的示例,展示了AI开发的多个方面,从基础的对话管理到高级的向量搜索和图数据库应用。本文详细介绍了每个示例的安装和使用方法,希望能帮助你在实践中掌握这些技术。动手尝试这些代码,探索AI开发的更多可能性吧!