Show HN:基于 Erlang 的 AI Agents 实现 (Agents.erl)

arthurcolle/agents.erl

基于 Erlang 的 OpenAI API Agent 框架,包含内置的监管树、动态 API 客户端生成和工具执行功能。

特性

架构

系统组织为分层监管树:

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).

环境变量

构建

# 克隆仓库
git clone https://github.com/yourusername/erlang-agent.git
cd erlang-agent
# 编译
erlc *.erl
# 运行
erl -pa .

许可协议

MIT

关于

在 Erlang 中实现的 OpenAI Agent。