消息
跨 AI 提供方和 LLM 的统一上下文单元。
统一消息层
Neuron 架构的主要优势之一,是用于与多个 AI 提供商交互的统一消息层。开发者不必再费力应对 OpenAI、Anthropic、Gemini、Ollama 以及无数其他提供商各不相同的响应格式,而是使用一个简洁统一的抽象层,它会在幕后处理所有复杂性。你的代码将不再依赖于你所使用的特定 LLM 引擎。
当你在应用中集成 Neuron Agents 时,你不会被绑定到任何特定提供商的生态系统或定价模式。你可以在不同提供商之间无缝切换,以管理成本、环境,或利用新的模型发布带来的优势,立即借助这些改进,而无需进行大规模重构。
消息层不仅限于简单的文本内容,还为多模态输入/输出提供统一接口 (文件、图片、视频、音频),适用于所有受支持的提供商,即使底层实现差异巨大。这个架构决策意味着你的 AI 智能体保持可移植并且面向未来——当新的提供商出现或现有提供商更新其 API 时,你的应用代码无需更改,而 Neuron 的消息层会吸收所有适配复杂性。
什么是消息
消息是上下文的基本单元。它们表示模型的输入和输出,在与 LLM 交互时,携带表示对话状态所需的内容和元数据。
消息是包含以下内容的对象:
角色 - 标识消息类型(例如:用户、助手)
内容块 - 表示消息的实际内容(如文本、图片、音频、文件等)
元数据 - 可选字段,例如额外的 LLM 响应信息。
下面是一个示例,演示如何向智能体发送用户消息,并将助手消息作为响应返回。
use NeuronAI\Chat\Messages\UserMssage;
$response = MyAgent::make()
->chat(new UserMessage("嗨,你是谁?"))
->getMessage();
echo $response->getContent();内容块
你可以把消息的内容块看作发送给模型的数据负载,或者模型为回答你的提示而生成的数据。消息可以包含一个对象列表,这些对象扩展自 ContentBlock 接口。Neuron 为文本、图片、文件、音频和视频提供了专用内容类型。
消息可以包含任意数量的块,甚至可以包含每种类型的多个块。Neuron 会自动将块类型映射为适合各个提供商的格式。
你可以使用以下方法获取并处理消息中的块列表: getContentBlocks() 方法:
或者直接使用 getContent() 来获取拼接后的所有文本内容:
文本
此块表示消息中的文本部分。你可以在构造函数参数中使用一个简单字符串来初始化消息,或者显式添加一个 TextContent 块:
正如你所见,最终消息将由多个块组成。
推理
此块将包含模型在最终文本响应之前进行的推理步骤。Neuron 会自动从模型响应中捕获它:
图片
对于支持多模态的模型,你可以附加图片以及其他类型的内容,例如文件、音频和视频。
文件
文件 ID
通常你可以通过 URL 或 base64 编码格式将文件(图片或文档)附加到消息中。许多提供商允许你先在其平台上上传文件,然后在消息中使用一个简单的 ID 来引用这些文件。这可以显著节省 token 消耗,并提升模型响应时间。
在从提供商平台收到文件 ID 后,你可以使用以下方式向消息添加文件块: SourceType::ID.
根据你的提供商规范,你也可以对 Image、Video 等使用相同方式。
音频
视频
最后更新于