掌握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 克隆仓库并安装依赖

接下来,你需要下载课程的代码并安装相关依赖:

  1. 打开终端,输入以下命令克隆仓库:

    git clone git@github.com:i-am-alice/3rd-devs.git
    cd 3rd-devs
    
  2. 安装依赖包:

    bun install
    

这一步会下载所有必要的库文件,确保代码能够正常运行。

1.3 配置.env文件

课程中的许多示例需要使用API密钥,你需要在.env文件中进行配置:

  1. 复制.env.example文件并重命名为.env

    cp .env.example .env
    
  2. 打开.env文件,填入所需的API密钥。例如,OpenAI的密钥是必需的,可以从OpenAI官网获取。

1.4 使用Docker(可选)

如果你更喜欢使用Docker来保证环境一致性,可以按照以下步骤操作:

  1. 在终端中运行以下命令,下载并执行设置脚本:

    curl -fsSL https://env.ag3nts.org -o setup.sh
    bash setup.sh
    
  2. 这个脚本会:

    • 将仓库克隆到当前目录下的3rd-devs文件夹。
    • 创建Dockerfile并构建Docker镜像。
    • 安装所有依赖。
  3. 构建完成后,启动Docker容器:

    docker run --rm -it -p 3000:3000 --name aidevs -v ${PWD}/3rd-devs:/app aidevs3
    
  4. 在容器内配置.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_KEYLINEAR_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_KEYLANGFUSE_SECRET_KEYLANGFUSE_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_KEYELEVEN_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_URLQDRANT_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_IDALGOLIA_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_URINEO4J_USERNEO4J_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开发的更多可能性吧!