本书接下来的部分将深入探索构建 AI 智能体的精彩框架世界,如 CrewAI、LangGraph、AutoGen 和 Haystack。这些框架是强大的开发工具,使开发者能够创建功能丰富且具备自主能力的智能体,执行广泛多样的任务。然而,在详细介绍这些框架之前,首先需要打下坚实的基础,了解开发资源和方法论,这将为后续学习提供指导。具备这些背景知识,才能更好地理解和掌握后续更高级的概念与技术。
我们将从各种用于 AI 智能体开发的工具、库和平台开始介绍。无论是 API 还是云服务,这些资源在简化开发流程中发挥着关键作用,让你能够专注于智能体的逻辑和行为设计,而不必被底层技术细节困扰。同时,我们还会讨论不同的开发方法,比如模型微调和外部知识集成,这些方法对于打造强健、高效的 AI 智能体至关重要。
为了配合你的学习体验,本书配备了一个 GitHub 代码仓库,地址是 github.com/ttaulli/age…。仓库中包含了代码示例、项目样本及其他补充资源,帮助你将书中概念付诸实践。随着章节的推进,你可以边读边跟着代码操作,亲手尝试构建属于你自己的AI智能体项目。
Jupyter Notebook、VS Code 与 Google Colab
开发环境的选择对你实验、原型设计和部署 AI 模型与智能体的效率有着显著影响。Jupyter Notebook、VS Code 和 Google Colab 是三款流行且多功能的开发工具,下面简要介绍它们的特点。
Jupyter Notebook
Jupyter Notebook 是一款功能强大的基于网页的应用,允许用户在单一界面内创建包含可执行代码、可视化图表、数学公式及文字说明的文档。其交互式环境深受数据科学家和 AI 开发者欢迎,能够无缝结合代码执行与丰富媒体内容,非常适合探索性数据分析和模型迭代开发,因此成为 AI 项目开发与文档编写的首选工具。
Jupyter Notebook 支持交互式代码运行,结果直接嵌入文档中显示;支持图片、视频、数学表达式等多种媒体内容;与主流数据科学库高度集成;并提供导出为 HTML、PDF 等格式的功能,便于共享与协作。
Visual Studio Code(VS Code)
Visual Studio Code(简称 VS Code)是微软开发的一款功能强大且免费的代码编辑器,以其灵活性和丰富的扩展生态著称,广泛应用于生成式 AI 应用的开发。它支持多种编程语言,并可通过大量插件实现高度定制。
VS Code 拥有完整的集成开发环境(IDE)功能,包括调试工具、Git 集成及内置终端。其庞大的扩展市场允许开发者根据需求调整编辑器功能,支持与 Jupyter Notebook 无缝集成,并可进行云端远程开发,使其成为 AI 开发的强力工具。支持多语言,配备丰富扩展,内置终端与调试功能,还能直接管理云端或容器化项目。
Google Colab
Google Colab 是一个基于云端的 Jupyter Notebook 环境,以其易用性和强大的计算资源优势脱颖而出。Colab 提供免费访问高性能 GPU 和 TPU 的能力,特别适合训练和测试深度学习模型,无需任何本地环境配置。
Colab 完全在浏览器中运行,深度整合 Google Drive,方便文件存储与共享。其内置的协作功能支持多人实时共同编辑同一 Notebook,是协作型 AI 项目的理想选择。除此之外,Google Colab 免安装,直接通过浏览器访问;预装主流 AI 库如 TensorFlow 和 PyTorch,大幅缩短开发者的环境搭建时间。
如何使用 Jupyter Notebook
鉴于 Jupyter Notebook 在这些工具中的核心地位,理解其功能非常重要。下面我们通过一个演示来介绍。启动 Jupyter Notebook 后,你会被引导至浏览器中的 Notebook 控制面板。在右上角,点击“New”(新建)按钮。在下拉菜单中选择“Python 3”(或根据你使用的编程语言选择其他内核)。
一个新的 Notebook 会在新标签页中打开。初始状态下,Notebook 没有标题,如图 5-1 所示。
图 5-1 新建 Jupyter Notebook 的初始界面
要重命名你的 Notebook,点击 Notebook 顶部的“Untitled”(无标题)文字。
在弹出的对话框中输入新的名称。
点击“Rename”(重命名)按钮保存新名称。
Jupyter Notebook 由若干单元格(cells)组成,每个单元格可以包含代码或文本。我们先从代码单元格说起:
默认的单元格类型是代码单元格,你可以在其中编写 Python 代码或其他支持语言的代码。
执行单元格中的代码,可以按 Shift+Enter,或点击工具栏上的“Run”(运行)按钮。
例如,你可以将以下代码分别输入到三个单元格中:
# 计算前10个自然数的和
sum_of_numbers = sum(range(1, 11))
sum_of_numbers
执行最后一个单元格后,输出结果将是 55。你可以在图 5-2 中看到这个结果。
图 5-2 显示了在 Jupyter Notebook 单元格中输入的代码内容
你也可以使用 Markdown 单元格来添加说明文字、文档或其他描述性内容,与代码并列展示。
要创建 Markdown 单元格,点击工具栏中通常显示为“Code”的下拉菜单,选择“Markdown”。然后你可以输入文本内容,并使用标题、列表、链接等格式进行排版。编写完成后,运行该单元格即可呈现格式化后的文本。
以下是一个示例 Markdown 内容:
# 结果总结
上面的代码计算了前10个自然数的和。
### 关键点:
- 该和是使用 Python 内置的 `sum` 函数计算的。
- `range(1, 11)` 生成了从 1 到 10 的数字。
- 最终结果,如代码输出所示,是 55。
运行该 Markdown 单元格后,你将获得如图 5-3 所示的输出效果。
图 5-3 显示了 Jupyter Notebook 中的 Markdown 格式效果
当然,定期保存你的工作非常重要。你可以点击工具栏上的软盘图标,或者按 Ctrl+S(Mac 上为 Cmd+S)来保存你的 Notebook。Notebook 会以 .ipynb 格式保存,之后可以从 Jupyter 控制面板中打开。
你还可以将 Notebook 导出为不同格式,方便分享或展示。在 Notebook 的“文件”菜单中选择“Download as”(另存为),然后选择所需的格式(例如 HTML、PDF、Markdown)。
Google Colab
使用 Google Colab 需要拥有一个 Google 账户。该平台的网址是 colab.research.google.com。
免费版“Colab Free”提供标准计算资源,让用户能够免费在云端运行 Jupyter Notebook。不过,免费版存在一些限制,例如计算资源优先级较低、GPU/TPU 可用时间较短,以及长时间不活动后会断开会话。
对于需要更强大计算能力的用户,Google Colab 提供了“Colab Pro”和“Colab Pro+”两种订阅计划。
- Colab Pro 每月收费 9.99 美元,提供更快的 GPU 和 TPU 访问、更长的会话时长以及更大的内存,非常适合需要稳定且快速处理的机器学习模型训练等任务。
- Colab Pro+ 每月收费 49.99 美元,资源更丰富,包括最高优先级访问 NVIDIA V100 和 A100 等高级 GPU、延长的会话时间,以及更强大的计算任务执行能力,减少中断。这些付费方案主要满足高级用户和专业人士对高性能、稳定资源的需求。
但本书将以免费版为例进行介绍。图 5-4 展示了启动 Colab 时你会看到的界面。
图 5-4 显示了启动 Colab 时的初始界面
你会看到最近使用的文件列表,并且有一个搜索框方便查找文件。界面中还有以下几个标签页:
- Examples(示例) :提供入门资源和各种功能的帮助;
- Google Drive:可以从你的 Google 云端硬盘导入 Notebook;
- GitHub:可以从 GitHub 导入 Notebook;
- Upload(上传) :可以从你的电脑加载文件。
开始使用的话,点击“New Notebook”(新建 Notebook)按钮。图 5-5 展示了打开后你将看到的界面,这不仅是一个 Jupyter Notebook,同时还集成了 Colab 特有的功能。
图 5-5 这是 Colab 中的一个 Notebook
在顶部,你可以点击“Untitled0.ipynb”并输入你想要的文件名。
然后,你可以在单元格中输入代码或文本。文本单元格支持 Markdown 格式。Colab 使用的是 marked.js,这与 Jupyter Notebook 或 GitHub 使用的 Markdown 类似,但并不完全相同。
Streamlit、Gradio 与 Jupyter Widgets
在构建 AI 智能体时,Streamlit、Gradio 和 Jupyter Widgets 这类工具发挥着重要作用,它们让开发过程更加互动、易用且友好。这些工具旨在帮助开发者快速构建直观的界面,从而快速进行原型设计、测试和演示 AI 模型,便于研究、协作或部署时分享成果。
- Streamlit
Streamlit 是一个强大的工具,可以用极少的代码行数将 Python 脚本快速转化为自定义的交互式网页应用。它特别适用于生成式 AI 领域,能直观展示文本生成或图像创作等模型结果,帮助理解和优化模型输出。Streamlit 简单灵活,使开发者能专注于 AI 模型本身,而无需深究复杂的网页开发,方便快速迭代和与包括非技术人员在内的各方分享成果。 - Gradio
Gradio 也是一款简化机器学习模型用户界面搭建的工具。通过几行代码,开发者即可为生成式 AI 模型创建基于网页的演示。Gradio 的优势在于支持实时交互,用户能够输入数据、调整参数,并立即看到模型输出。这种即时反馈对于测试和优化生成模型至关重要,有助于发现改进空间。此外,Gradio 还方便将演示分享给更多人,促进广泛的协作与反馈。 - Jupyter Widgets
Jupyter Widgets 扩展了 Jupyter Notebook 的功能,允许开发者向笔记本中添加滑块、按钮、文本框等交互控件。这种交互性在生成式 AI 开发中非常有价值,使开发者能实时调整参数并观察模型行为的变化。例如,在文本生成模型的调试中,Jupyter Widgets 可让用户动态调整“temperature”(温度)设置或修改输入提示,从而更深入地理解不同输入如何影响输出。这种实践方式不仅提升了实验效果,也有助于教学,方便向他人讲解复杂概念。
Hugging Face
Hugging Face(网址:huggingface.co)是人工智能领域,尤其是在自然语言处理(NLP)和生成式 AI 方面的知名平台与开源社区。自2016年成立以来,Hugging Face 已成为开发者和研究人员的重要资源,提供了丰富的工具、模型、数据集和库,旨在简化 AI 应用的创建与部署。
其中最具代表性的是 Transformers 库,该库包含多种预训练模型,支持文本生成、翻译、摘要等多项任务。这些模型包括广为人知的 GPT、BERT 和 T5,开发者可以轻松将其集成到项目中,免去大量训练和计算资源的消耗。
此外,Hugging Face 还拥有一个庞大的模型中心(Model Hub),用户可以访问和共享数千个预训练模型,极大便利了快速实验和部署 AI 解决方案。这个协作环境鼓励开发者根据自身需求对现有模型进行微调,或将改进贡献回社区,从而加速生成式 AI 应用的整体开发进程。
图 5-6 Meta-Llama-3.1-8B-Instruct 模型的推理 API
此外,Hugging Face 还提供了如图 5-6 所示的推理 API(Inference API),大大简化了模型在生产环境中的部署流程,无需复杂的基础设施支持。同时,它提供的数据集库(datasets library)也便于用户轻松获取多种训练和评估所需的数据集。通过提供这些资源,Hugging Face 让开发者能够更多地专注于创新解决方案和具体应用问题,而不必从零开始。
对于从事生成式 AI 应用开发的人员来说,Hugging Face 是一个至关重要的资源,它不仅加速了开发进程,促进了协作,还方便用户获取最前沿的模型和工具。
编程语言
开发 AI 智能体时,可以选择多种编程语言。R 语言因其在统计分析和数据可视化方面的优势,常用于 AI 项目的探索性数据分析阶段。Java 和 C++ 以性能和可扩展性著称,非常适合在对速度和效率有较高要求的生产环境中部署 AI 系统。Julia 以高性能和易用性逐渐受到青睐,特别适合数值计算和科学计算任务。
尽管有多种语言可选,Python 通常仍是开发生成式 AI 应用的首选。其主要原因之一是 Python 对机器学习和深度学习库的广泛支持,如 TensorFlow、PyTorch、Keras 以及 Hugging Face 的 Transformers。这些库提供了预构建模块,大大简化了复杂的 AI 任务,使开发者能够快速搭建原型、进行实验和优化模型。Python 语法简洁易懂,既适合初学者也受经验丰富的开发者欢迎,加快了学习进程,缩短了开发周期。
此外,Python 拥有强大的社区支持和丰富的第三方生态,适用于数据预处理、模型训练到部署的整个 AI 开发流程。它还能很好地与其他语言和系统集成,实现与 API、数据库和 Web 框架的无缝交互,这对于生成式 AI 模型的实际应用部署至关重要。
Python 的广泛应用也带来了丰富的学习资源,包括教程、文档和技术论坛,帮助开发者更高效地解决问题。这种社区驱动的支持对前沿 AI 项目的协作与知识共享尤为宝贵。
本书中,我们将采用 Python 进行示范和开发。
使用大型语言模型(LLMs)
作为开发者,利用大型语言模型(LLM)有多种选择,主要包括以下几种方式:
使用 LLM 提供商的 API
许多公司如 OpenAI、Anthropic 和 Cohere 提供 API,允许你直接访问他们的 LLM。你可以将这些 API 集成到应用程序中,实现文本生成、问答等功能,或者借助像 LangChain 这样的框架。
使用 API 的优点很多:
- 使用便捷,无需深入理解模型架构或部署细节;
- 高度可扩展,提供商负责流量管理,确保应用能支持大量请求且无宕机;
- 内置安全功能,包括数据加密和合规性,节省了保护应用的时间和精力。
但也有一些缺点需要注意:
- 对模型和环境控制有限,只能使用 API 提供的配置和功能,难以满足特殊定制需求;
- 成本可能较高,随着使用量增加,费用迅速上涨;
- 数据隐私问题,数据会传输到第三方服务器,对敏感或专有信息存在风险;
- 延迟问题,请求需往返服务器,可能影响对延迟敏感应用的响应速度。
使用像 Ollama 这样的本地运行工具
一些工具支持在本地运行 LLM,甚至在个人设备(如笔记本电脑)上运行。Ollama 是其中一种,兼容 Windows、Mac 和 Linux 系统。你可以使用 Ollama 加载大型模型(例如拥有 130 亿参数的模型),前提是你的机器至少有 16GB 内存。它支持多种开源模型,如 Mistral、Llama 2 和 Gemma,并提供用于推理的 REST API,方便构建基于 LLM 的应用。同时,Ollama 还支持多种终端和界面集成,简化用户端应用开发。
但本地运行 LLM 也存在挑战:
- 资源消耗大,会显著影响机器性能,特别是在硬件性能较低或多任务运行时;
- 维护复杂,需要手动管理和更新模型版本,无法像云端服务那样自动更新,维护不及时可能导致使用过时模型。
使用 Azure、Google Cloud 或 AWS 等云服务
主要云服务商均提供包含 LLM 的 AI 服务,例如 Azure 的 OpenAI 服务、Google Cloud 的 Vertex AI、AWS 的 Amazon Bedrock 等。
使用云服务的优势包括:
- 良好的可扩展性和集成性,支持企业级负载,轻松满足高流量应用需求;
- 丰富的配套服务,如数据存储、安全、分析和 DevOps 工具,可无缝整合到 LLM 工作流程中,助力构建复杂的端到端解决方案;
- 强大的安全与合规保障,帮助管理数据隐私并满足行业标准,尤其适合受监管行业。
但云服务也有不足:
- 费用问题,按使用量付费模式可能导致高额成本,尤其是大规模使用或搭配其他云服务时;
- 学习曲线陡峭,需要熟悉云服务商生态,掌握相关技能需要时间和精力;
- 供应商锁定风险,应用与特定云平台深度绑定,迁移至其他平台时可能困难重重;
- 数据安全隐患,尽管安全措施完善,但在第三方服务器存储和处理数据始终存在一定风险,对敏感数据处理机构尤为关注。
综上所述,选择哪种方式取决于具体需求、资源和安全考虑,开发者应权衡利弊,选择最适合自己项目的方案。
安装与使用 Ollama
Ollama 支持 Windows、Linux 和 Mac 系统。你可以通过网址 ollama.com/download 下载,安装过程非常简单。
安装完成后,打开终端输入 ollama,如果能看到关于如何使用服务的相关信息,说明程序已成功安装。
你可以在 ollama.com/library 查看 Ollama 提供的本地模型。有些模型可以下载到普通 PC 上使用,但有些则需要大量内存和配备 GPU 的系统支持。
使用模型的命令如下:
ollama pull [模型名称]
运行模型的命令是:
ollama run [模型名称]
然后,你可以通过以下代码与模型进行交互:
from langchain_community.llms import Ollama
llm = Ollama(model="[模型名称]")
response = llm.invoke("What is 2 + 2 ?")
print(response)
不过,如果你使用的是普通 CPU 机器,运行速度可能较慢,生成响应可能需要几分钟。
因此,你可以考虑在 Google Colab 中使用 Ollama,借助更强大的 GPU 和 TPU 资源。实现方式有多种,比如使用 ngrok 等服务,将 Colab 中运行的本地 Ollama 服务器暴露到互联网,从而让本地机器通过公开 URL 与之交互,既利用云端资源,又能像本地运行一样使用 LLM。
在 Google Colab 中使用 Ollama
利用 Google Colab 运行 Ollama 是一种高效方式,你可以使用其 GPU 和 TPU 来运行本地模型。对于概念验证,这种方式还可以免费使用。
步骤如下:
首先,InfuseAI/colab-xterm 是一个可以在 Google Colab 中运行终端的工具。你可以按以下方式安装并启动:
pip install colab-xterm
%load_ext colabxterm
%xterm
在由 colab-xterm 启动的 shell 中输入以下命令启动本地 Ollama 系统:
curl -fsSL https://ollama.com/install.sh | sh
ollama serve & ollama pull llama3 & ollama pull nomic-embed-text
其中,curl 命令负责下载 Ollama,就这么简单。随后,你就可以使用本地模型支持 AI 智能体的开发。
为什么使用本地模型?
与使用 OpenAI 等 API 相比,使用本地模型有多重优势:
- 隐私更有保障:所有数据都存储在本地机器上;
- 成本更低:简单配置后无需支付额外使用费;
- 响应更快:不依赖网络连接,适合离线或实时应用。
定制大型语言模型(LLMs)
大型语言模型(LLMs)的真正潜力往往体现在其能够针对特定用例和领域进行定制化。定制使得 LLM 不再局限于通用应用,而能更精准、高效地处理专业任务。
目前有两种关键技术促进了定制过程:微调(Fine-Tuning)和检索增强生成(Retrieval-Augmented Generation,简称 RAG)。这两种方法各有特点,帮助组织根据自身需求和资源选择最合适的方案。
微调(Fine-Tuning)
微调是指在已有的大规模通用 LLM 基础上,利用较小的特定任务数据集对模型进行再训练。其流程一般包括:
- 收集并预处理与任务或领域相关的数据;
- 利用该数据集对 LLM 进行训练,调整模型参数,使其更好地理解和生成符合特定上下文的文本;
- 评估并优化微调后的模型,确保其达到预期的性能标准。
微调的优势显而易见:它使你能够利用通用 LLM 中蕴含的庞大知识,同时定制出针对特定任务表现优异的模型。比如客户服务问答、法律文档生成或技术内容写作等。微调通常能带来更准确、更相关的输出,并减少了从头训练模型的时间和计算成本。
不过,微调也存在挑战:
- 需要高质量的、领域专属数据,这类数据不一定容易获得或构建;
- 计算资源消耗较大,尤其是针对超大模型;
- 可能出现过拟合风险,即模型过度专注于训练数据,导致对新数据的泛化能力下降;
- 微调后模型的部署与维护更复杂,需要持续调整以适应数据和用例的变化。
微调方法主要分为两类:预训练微调和高级微调。
- 预训练微调基于已在大规模多样化数据集上训练好的模型,借助 Hugging Face Transformers 等工具高效完成。PyTorch 也是常用的机器学习库,支持模型训练和微调。许多 LLM 提供商如 OpenAI 也支持通过 API 进行微调,无需深厚技术背景。
- 高级微调技术要求更专业的知识,例如 LoRA(低秩适配),通过简化模型参数更新过程降低计算需求和内存消耗;QLoRA 是其低精度版本,提高大模型微调效率。另一种方法是基于人类反馈的强化学习(RLHF),通过人类评价训练模型,使输出更符合人类偏好,ChatGPT 就采用了该技术。相比之下,直接偏好优化(DPO)作为 RLHF 的简化替代方案,易于实施且在情感控制、摘要和对话生成等任务上表现出色。
检索增强生成(RAG)
RAG 是一种高级技术,通过在生成过程中融合外部知识源,增强 LLM 的能力。与仅依赖预训练模型内置信息不同,RAG 会根据查询从外部数据库(通常是向量数据库)或知识库检索相关数据。其工作流程主要包括:
- 检索模型负责搜索大量数据,找到最相关的文档或信息;
- 生成模型接收检索结果,利用外部知识生成更准确、更有上下文关联的回答。
RAG 的优点显著,尤其适用于需要最新信息或专业知识的场景。通过引入实时或领域特定数据,RAG 产出更准确、更相关的结果,适合客户支持、科研和技术写作等应用。此外,RAG 有效缓解了 LLM “幻觉”问题,即模型生成看似合理但错误的信息,因为生成过程基于真实数据。RAG 还使模型无需频繁重新训练,只需更新外部知识库即可保持实用性。
不过,RAG 也存在一些缺点:
- 系统更复杂,需要集成并维护检索机制与生成模型,基础设施建设更具挑战性,尤其是大规模部署时;
- 可能引入延迟,因为检索相关文档需时间,影响实时响应速度;
- 效果高度依赖外部数据的质量与相关性,若检索到不相关或过时信息,会降低生成结果质量;
- 实现过程中需精细调优检索与生成部分的配合,过程资源密集且要求专业技能。
总结
随着本章对 AI 智能体开发的结束,可以清晰地看到,AI 开发领域充满了无限可能,提供了多种工具、框架和方法,助力构建复杂且高效的智能体。从理解基础资源——如 API、云服务和本地部署选项,到探索高级定制技术,如微调和检索增强生成(RAG),这一切为打造强大且专门化的 AI 应用奠定了坚实基础。