AI Hub 入门指南(第一部分):ObjectScript 中的智能体
对于上周没有参加 READY 大会的朋友们来说,你们可能错过了这一激动人心的消息:AI Hub 的抢先体验计划现已正式启动。这一消息是在@Benjamin De Boe和@Jeff Fried 带来的一场精彩演示中公布的,我建议大家在录像发布后务必观看这段演示! 我有幸提前体验了 AI Hub,想借此机会向社区大家介绍一下。
在深入探讨细节之前,先提供文档链接和EAP 门户链接,您可通过这些链接下载 AI Hub,目前提供独立安装包或容器镜像两种形式。
请注意,这只是预览版,在正式发布前可能会有重大变更,该版本不适用于生产环境,您可能会遇到一些问题——如果遇到问题,请在 GitHub 页面上提交问题!
代理
对我来说,最令人兴奋的功能莫过于全新的 ObjectScript 代理 SDK。现在,您可以使用直观的 SDK,直接在 ObjectScript 中创建代理和工具。
创建代理非常简单:您可以通过 XData INSTRUCTIONS 组件为其指定系统提示,然后只需设置提供程序、模型和工具即可:
Class Sample.Agent Extends %AI.Agent
{
/// LLM Model
Parameter MODEL = "gpt-5-nano";
/// Toolsets that the agent can use
Parameter TOOLSETS = "Sample.ToolSet";
/// System Prompt
XData INSTRUCTIONS [ MimeType = text/markdown ]
{
# Sample Assistant
You are a helpful assistant with access to a set of tools to interact with a database of people.
}
Method %OnInit() As %Status
{
// Set provider with API key from environment variable
Set key = $System.Util.GetEnviron("OPENAI_API_KEY") // or whatever
Set ..Provider = ##class(%AI.Provider).Create("openai", {"api_key": (key)})
Return $$$OK
}
}工具
工具的创建则更为简单——只需继承 %AI.Tools 类即可,之后所有方法、类方法和查询都会自动成为代理可用的工具。因此,我们可以像下面这样操作:
Class Sample.Tools Extends %AI.Tool [dependsOn=Sample.Person]
{
/// Tool to add a person to the database
Method AddPerson(name As %String, age As %Integer) As %Status{
Set person = ##class(Sample.Person).%New()
Set person.Name = name
Set person.Age = age
Set sc = person.%Save()
Quit sc
}
/// Tool query database for people younger than a specified age
Query GetPeopleYoungerThan(age As %Integer) As %SQLQuery(ROWSPEC = "Name:%String,Age:%Integer") [ SqlProc ]
{
SELECT Name, Age From Sample.Person Where Age < :age
}
}工具还可以组织成工具集,顾名思义,这些工具集可用于组合来自不同类的多种工具、通过正则表达式匹配过滤工具、添加策略,以及使用 IRIS 外部定义的 MCP 服务器。
在下面的示例中,我们将上面定义的工具 Sample.Tools 与一项策略(该策略会将工具调用记录到终端 %AI.Policy.ConsoleAudit)以及一个自定义的 Python MCP 服务器结合使用。
Class Sample.ToolSet Extends %AI.ToolSet [DependsOn=Sample.Tools]
{
XData Definition
{
<ToolSet>
<Description>Sample Toolset</Description>
<Policies>
<!--Policy to Log tool calls to Console-->
<Audit Class="%AI.Policy.ConsoleAudit"/>
</Policies>
<!--ObjectScript Tools-->
<Include Class="Sample.Tools"></Include>
<!--Python MCP Server created with FastMCP-->
<MCP Name="PythonServer">
<Stdio Executable="/usr/irissys/bin/irispython"
Args="/home/irisowner/dev/src/Python/multiplication_mcp.py" />
</MCP>
</ToolSet>
}
}其他 ObjectScript 功能
还有许多其他很酷的功能可用于创建超级强大的代理,包括对代理技能的支持(%AI.Agent.Skill)、将任务委派给子代理(%AI.Agent.SubAgent)以及使用 RAG 创建知识库的工具(%AI.RAG)。您还可以创建自定义审计或身份验证策略,用于记录工具调用或决定是否允许这些调用。
一个非常酷的功能是,工具和工具集可以 stateful,这意味着它们在工具调用之间会保留状态。因此,一个工具可以被多次调用,同时保留前一次工具调用的操作结果。 例如,可以先打开一个文件一次,下次调用该工具时,其内容会被“记住”。要使用此功能,请使用方法(而非类方法)来定义工具,并将属性保存为属性。文档中有一个很好的示例。
我使用 AI Hub 已经超过一个月了,但面对如此庞大的功能量——尤其是那些我仍需探索的高级功能——仍然感到应接不暇。
模板
如果你想开始尝试使用 AI Hub,我已在 Open Exchange 上发布了一个开发模板,其中包含下载和构建 AI Hub 容器的说明,并预装了几个示例类(你可能从这篇文章中见过它们)。 其中甚至包含一些智能代理技能,以防你想让所选的 AI 智能代理在你之前就了解文档中的内容!
它甚至会创建一个 MCP 服务器,并附有连接该服务器的说明。
下期预告
在下一篇文章中,我将演示如何将代理工具打包到 MCP 服务器中,以便从任何 MCP 客户端直接连接到您的数据!