前言
本篇博客想带读者进行一个智能体入门扫盲,了解基础知识,为什么用camel呢,因为小洛发现它们文档对这种智能体的基本组件介绍得很全面深入。
基础概念
agent
一个典型的agent智能体包含三个核心部分:
- 感知模块:处理输入信息
- 决策模块:制定行动计划
- 执行模块:实施具体行动
这三个模块形成一个完整的循环,使智能体能够持续有效地工作。
智能体的设计应该采用迭代开发的方式。首先实现基本功能,然后通过不断的测试和反馈来完善系统。在此过程中,要注重收集和分析性能数据,根据实际运行情况调整设计参数和策略。这种渐进式的开发方法可以帮助我们建立一个更加稳健和高效的智能体系统。
通过遵循这些设计原则和方法,我们可以构建出既能完成特定任务,又具有良好可扩展性和维护性的智能体系统。这样的系统不仅能够满足当前的需求,还能够适应未来可能出现的新要求和挑战。
Data Generation
数据生成模块,这些模块通过高级推理和指令调优技术实现高质量的训练数据创建。
这些模块包括:
- 思维链 (CoT):生成明确的推理路径
- Self-Instruct:创建多样化的指令跟踪数据
- Source2Synth:将源代码转换为自然语言
- 自我提升 CoT:通过自我批判迭代细化推理链
思维链 (CoT)
Chain of Thought (CoT) 数据生成模块实现了一个复杂的系统,用于通过聊天代理交互生成高质量的推理路径。它结合了几种高级算法来生成和验证推理链。
主要特点:
- 用于解决方案探索的 Monte Carlo Tree Search (MCTS)
- 用于精确错误定位的二进制搜索错误检测
- 用于质量保证的双智能体验证系统
- 用于跟踪推理路径的解决方案树管理
Self-Instruct
模块实现了一个pipeline,用于生成和管理机器生成的任务指令。它将人工编写的种子指令与机器生成的种子指令相结合,以创建多样化、高质量的任务指令,同时通过可配置的过滤机制确保质量。
主要特点:
- 使用可配置的比率将人工编写的指令和机器生成的指令相结合
- 支持分类和非分类任务类型
- 内置指令过滤和验证
- 任务的自动实例生成
- 基于 JSON 的数据输入/输出
Source2Synth
Source2Synth 是一个复杂的数据生成系统,旨在从源文本数据创建Multi-hop问答对。它实施了一个pipeline,用于处理原始文本、提取信息对,并生成具有可配置复杂性阈值的复杂多跳推理问题。
Multi-hop 在大模型领域指的是多步推理或多跳推理,它强调模型解决问题时,需通过多个步骤、中间推理或中间结果,逐步推导得出最终答案,而非仅通过单次计算或简单检索完成任务。
核心组件:用户数据处理器
主要特点:
- 单个文本和批处理功能
- 可配置的 AI 模型或基于规则的处理
- 与 MultiHopGeneratorAgent 集成以生成 QA
- 随机种子控制,确保可重复性
自我提升 CoT
自我改进的 CoT 数据生成管道实施一种迭代方法来生成和改进解决问题任务的推理跟踪。这种实现基于自学推理的方法,其中 AI 代理通过自我评估和反馈来学习改进其推理过程。
pipeline包括四个主要阶段:
- 初始推理跟踪生成
- 自我评估
- 基于反馈的改进
- 迭代优化
Models
Model 是 Agent 的大脑,负责处理所有输入和输出数据。通过有效调用不同的模型,智能体可以根据任务需求执行文本分析、图像识别和复杂推理等操作。
Messages
简单来说,Agent的Message就是指系统中“智能体”或“代理者”之间互相传递的指令或数据包。就好比你给朋友发一条微信消息请他帮忙带杯咖啡,在智能系统中,“Agent”则是那些负责完成任务的角色,而“Message”则是他们沟通和协作的工具。当一个Agent收到Message后,会根据内容做出决策、执行任务或回复信息。
Memory
Memory模块提供了一个灵活而强大的系统,用于存储、检索和管理Agent的信息。它使座席能够在对话中维护上下文,并从过去的交互中检索相关信息,从而提高 AI 响应的连贯性和相关性。
Tool
模块提供了一个灵活而强大的系统,用于存储、检索和管理 AI 代理的信息。它使座席能够在对话中维护上下文,并从过去的交互中检索相关信息,从而提高 AI 响应的连贯性和相关性。类似于 OpenAI Functions。
Toolkits: 工具包是旨在良好协同工作的工具集合。
Prompt
提示模块指导 AI 模型生成准确、上下文相关和个性化的输出。它包括各种提示模板和词典,专为角色描述、代码生成、评估、文本嵌入、错位任务、对象识别等不同任务而设计。您还可以创建自己的提示来定制自己的 Agent。
关于这个部分可以去看我之前的关于提示词的文档。
runtime
runtime模块允许在受控环境中执行函数和工具,从而实现代码的安全和隔离执行。现代 AI 系统,尤其是那些涉及自主代理的系统,通常需要的不仅仅是一个简单的 Python 解释器。他们可能需要:
-
使用安全检查执行代码以防止恶意作。
-
在隔离环境中运行任务以管理依赖项或增强安全性(例如,使用 Docker)。
-
通过在远程服务器上执行函数来分配计算负载或访问专用资源。
-
对各种组件利用复杂的配置管理。
runtime 模块通过提供运行时类和支持实用程序的集合来满足这些需求。每个运行时都为代码或函数执行提供了不同的策略,以满足多智能体系统中的各种用例。
Task
任务是可以委派给代理并由该智能体解决的特定分配。任务代表比提示更高级别的概念,应由其他模块(如 Planner 和 Workforce)进行管理。任务有两个关键特征:
-
任务可以是协作的,需要多个智能体一起工作。
-
任务可以分解和发展。
Loaders
在大模型应用体系里,loaders(加载器)起着数据接入与格式转换的关键作用。简单来说,它就像是数据世界的 “翻译官”,能将各式各样来源与格式的数据,转变为大模型能够理解和处理的标准形式。
从功能上细分,大模型 loaders 具备两大核心能力。
一方面,它承担数据获取的重任,支持从多元数据源读取信息,像常见的本地文件系统中的文本文件、PDF 文档、CSV 表格,还有网页内容、数据库数据、云端存储数据等,均在其可读取范围内。举例来说,当企业想要利用内部存储在 CSV 文件里的销售数据,借助大模型进行销售趋势分析时,loaders 就能从中提取数据。
另一方面,数据格式转换是 loaders 的又一关键职能。由于大模型处理数据有特定格式要求,loaders 会把获取到的不同格式数据,统一转化为模型能接受的格式。比如将 HTML 网页内容转化为纯文本格式,剔除其中冗余的标签代码,只保留文本信息,方便模型后续处理。
Storages
Storage 模块是一个全面的框架,旨在处理各种类型的数据存储机制。它由抽象基类和具体实现组成,同时满足键值存储和向量存储系统的需求。
society
在大模型领域,society(社会模块)是一个聚焦于模拟和研究智能体之间交互协作行为的核心组件,它为大模型赋予了类似人类社会交互、合作完成任务的能力。
Embeddings
为不同类型的数据(文本、图像、视频)创建嵌入涉及将这些输入转换为机器可以理解和有效处理的数字形式。每种类型的嵌入都侧重于捕获其各自数据类型的基本特征。
Retrievers
Retrievers 模块本质上是一个搜索引擎。它旨在帮助您通过搜索大量文本来查找特定信息。想象一下,你有一个巨大的图书馆,你想找到提到某些主题或关键词的地方,这个模块就像一个图书管理员,可以帮助你做到这一点。
Workforce
Workforce 是一个系统,其中多个代理人员协同工作以解决任务。通过使用 Workforce,用户可以快速设置具有自定义配置的多代理任务解决系统。
camel
什么是camel
CAMEL (Communicative Agents for “Mind” Exploration of Large Language Models) 是一个开源的多智能体框架,专注于构建基于大语言模型的智能体交互系统。该框架通过角色扮演和结构化对话机制,实现智能体之间的有效协作。
安装camel
官方介绍了几种方法,但是小编还是喜欢用pip嘿嘿嘿
一条指令就行
pip install 'camel-ai[all]'
API 设置
我们的代理可以使用 OpenAI API 或您的本地模型进行部署。
使用 OpenAI API
访问 OpenAI API 需要 API 密钥。这里提供了针对不同作系统的说明。
类 Unix 系统 (Linux / MacOS)
echo 'export OPENAI_API_KEY="your_api_key"' >> ~/.zshrc# # If you are using other proxy services like Azure [TODO]
# echo 'export OPENAI_API_BASE_URL="your_base_url"' >> ~/.zshrc # (Optional)# Let the change take place
source ~/.zshrc
Replace ~/.zshrc with ~/.bashrc if you are using bash.
如果你正在使用 bash,请将 ~/.zshrc 替换为 ~/.bashrc。
Windows
如果您使用的是命令提示符:
set OPENAI_API_KEY="your_api_key"# If you are using other proxy services
# set OPENAI_API_BASE_URL="your_base_url" # (Optional)
如果使用的是 PowerShell:
$env:OPENAI_API_KEY="your_api_key"$env:OPENAI_API_BASE_URL="your_base_url" # (Optional)
Windows 上的这些命令将仅在该特定命令提示符或 PowerShell 会话的持续时间内设置环境变量。您可以使用 setx 或更改系统属性对话框,以便在所有新会话中进行更改。
一般方法
在项目目录中创建一个名为 .env 的文件,并使用以下设置。
OPENAI_API_KEY=<your-openai-api-key>
然后,在 python 脚本中加载环境变量:
from dotenv import load_dotenv
import osload_dotenv()OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
使用其他 API
如果你正在使用其他非 OpenAI 提供的 API,可以通过使用ModelFactory的create方法创建不同的model,然后修改以下三个参数就可以做到调用不同的模型:model_platform、model_type、model_config_dict。
使用本地模型
如果您使用的是本地模型,可以使用 Ollama、vllm、SGlang等,这个系列后续会新开一个博客进行介绍。
结语
好的,本篇博客主要是对大模型一些基本概念进行介绍,后续会动手开始实践几个项目代码,在干中学~小伙伴们可以期待一下下。