Show HN: Agents.erl (AI Agents in Erlang)
该项目基于 Erlang 构建,提供了一个 OpenAI API Agent 框架,名为 `Agents.erl`。它具备分布式架构,通过动态 API 客户端生成、全面的 API 覆盖、容错机制、速率限制和流式支持等特性,实现了 AI Agent 的功能。核心架构采用分层监管树,方便管理和维护。用户可以通过简单的命令启动 Agent,运行带工具的 Agent,并自定义工具。此外,还支持直接访问 OpenAI API。项目使用 MIT 许可证,并提供了构建和运行的步骤。
Show HN:基于 Erlang 的 AI Agents 实现 (Agents.erl)
arthurcolle/agents.erl
基于 Erlang 的 OpenAI API Agent 框架,包含内置的监管树、动态 API 客户端生成和工具执行功能。
特性
- 分布式架构:每个 API 端点都在其自己的受监督进程中运行。
- 动态 API 客户端生成:从 OpenAI API 规范自动生成客户端模块。
- 全面的 API 覆盖:支持所有 OpenAI API 端点。
- 容错能力:内置监管树和错误处理。
- 速率限制:智能速率限制,防止 API 配额问题。
- 流式支持:处理流式响应。
- 工具执行:在你的 Agent 中注册和执行自定义工具。
- 配置管理:通过环境变量回退的集中式配置。
架构
系统组织为分层监管树:
agent (顶层监管者)
├── openai_sup (OpenAI API 监管者)
│ ├── openai_generator_sup
│ │ └── openai_generator (生成 API 客户端模块)
│ ├── openai_clients_sup (监管 API 客户端进程)
│ │ ├── openai_chat
│ │ ├── openai_completions
│ │ ├── openai_embeddings
│ │ └── ... (每个 API 组一个进程)
│ ├── openai_rate_limiter (处理速率限制)
│ └── openai_config (管理配置)
├── agent_tools (工具注册表)
└── agent_registry (跟踪活动 Agent 进程)
用法
启动 Agent
% 启动应用
application:ensure_all_started(agent).
% 或者使用便捷函数
agent:start().
运行带工具的 Agent
% 运行带工具的 Agent
Prompt = <<"现在几点了?">>,
ToolNames = [shell, file_read],
Response = agent:run_agent(Prompt, ToolNames).
% 使用自定义选项运行
Options = #{
model => <<"gpt-4">>,
system_message => <<"你是一个可以访问系统工具的有用助手。">>,
timeout => 120000 % 2 分钟
},
Response = agent:run_agent(Prompt, ToolNames, Options).
定义自定义工具
% 定义自定义工具
ToolName = my_custom_tool,
ToolSchema = #{
<<"name">> => <<"my_custom_tool">>,
<<"description">> => <<"一个做一些有用的事情的自定义工具">>,
<<"parameters">> => #{
<<"type">> => <<"object">>,
<<"properties">> => #{
<<"input">> => #{
<<"type">> => <<"string">>,
<<"description">> => <<"工具的输入">>
}
},
<<"required">> => [<<"input">>]
}
},
agent:define_tool(ToolName, ToolSchema).
% 注册一个函数来执行工具
ExecutorFn = fun(_Name, Arguments) ->
Input = maps:get(<<"input">>, Arguments, <<"">>),
% 使用 Input 做一些事情
Result = process_input(Input),
Result
end,
agent:execute_tool(ToolName, ExecutorFn, #{}).
直接 API 访问
你也可以直接访问 OpenAI API:
% 确保 chat API 客户端可用
agent:ensure_api_client(chat).
% 创建一个聊天完成
Model = <<"gpt-4.1">>,
Messages = [
#{role => <<"system">>, content => <<"你是一个有用的助手。">>},
#{role => <<"user">>, content => <<"法国的首都是哪里?">>}
],
Options = #{},
{ok, Response} = openai_chat:create_chat_completion(Model, Messages, Options).
环境变量
OPENAI_API_KEY
:你的 OpenAI API 密钥OPENAI_ORGANIZATION
:你的 OpenAI 组织 ID(可选)
构建
# 克隆仓库
git clone https://github.com/yourusername/erlang-agent.git
cd erlang-agent
# 编译
erlc *.erl
# 运行
erl -pa .
许可协议
MIT
关于
在 Erlang 中实现的 OpenAI Agent。