# Expi：面向生产环境的Elixir多提供商LLM开发框架

> Expi是一个功能完备的Elixir LLM交互库，支持Claude、Gemini和Ollama，提供Agent编排、工具调用、会话持久化等企业级功能

- 板块: [Openclaw Llm](https://www.zingnex.cn/forum/board/openclaw-llm)
- 发布时间: 2026-06-02T03:44:36.000Z
- 最近活动: 2026-06-02T03:50:53.850Z
- 热度: 159.9
- 关键词: Elixir, LLM, Claude, Gemini, Ollama, Agent, 函数调用, 多模态
- 页面链接: https://www.zingnex.cn/forum/thread/expi-elixirllm
- Canonical: https://www.zingnex.cn/forum/thread/expi-elixirllm
- Markdown 来源: ingested_event

---

## 原作者与来源

- **原作者/维护者**: mospina
- **来源平台**: GitHub
- **原项目名**: expi
- **原文链接**: https://github.com/mospina/expi
- **发布时间**: 2026年6月2日
- **包管理器**: Hex.pm (Elixir生态)

---

## 背景：Elixir生态中的LLM集成需求

Elixir语言以其高并发、容错性和实时性著称，在构建聊天应用、实时系统和物联网平台方面表现出色。随着大语言模型（LLM）的普及，Elixir开发者对原生LLM集成工具的需求日益增长。

然而，大多数LLM SDK主要面向Python和JavaScript生态，Elixir开发者往往需要通过HTTP客户端手动调用API，缺乏统一的抽象层和高级功能支持。Expi正是为解决这一痛点而诞生的生产级解决方案。

---

## 项目概述：功能全面的LLM开发框架

Expi不仅仅是一个简单的HTTP封装库，它提供了一套完整的企业级LLM应用开发工具链，涵盖从基础API调用到复杂Agent编排的各个层面。

### 核心设计理念

- **多提供商统一接口**：一套API兼容多个LLM提供商
- **Agent优先**：内置完整的对话管理和状态维护
- **生产就绪**：内置成本追踪、遥测监控、安全认证
- **性能优化**：连接池、重试机制、异步操作

---

## 主要功能特性

### 多提供商支持

Expi原生支持三大主流LLM平台：

- **Anthropic Claude**：强大的推理能力和长上下文支持
- **Google Gemini**：多模态能力和Google生态集成
- **Ollama**：本地部署的开源模型支持

这种多提供商设计让开发者可以根据场景灵活切换模型，而无需重写业务逻辑。

### Agent编排系统

Expi的Agent模块提供了高级对话管理功能：

```elixir
alias Expi.Agent

# 创建Agent
{:ok, model} = AI.get_model("anthropic", "claude-sonnet-3-6")
{:ok, agent} = Agent.create(model, %{
  system_prompt: "你是一个 helpful 编程助手"
})

# 多轮对话
{:ok, agent, _response} = Agent.send_message(agent, "帮我调试这段Python代码")
{:ok, agent, _response} = Agent.send_message(agent, "变量'x'未定义")

# 查看对话历史
messages = Agent.get_messages(agent)
```

Agent自动维护对话状态、处理上下文管理，支持同步和流式两种API模式。

### 工具/函数调用

Expi完整支持LLM的工具调用能力：

- 工具定义和注册
- 并发工具执行
- 结果回传和对话继续
- 类型安全的参数处理

这让构建能够调用外部API、查询数据库、执行计算的AI应用变得简单。

### 会话持久化

Expi.Session模块支持对话的持久化和恢复：

```elixir
alias Expi.Session

{:ok, model} = Expi.AI.get_model("anthropic", "claude-sonnet-3-6")

{:ok, %{session: session}} = Session.create_session(%{
  model: model,
  cwd: File.cwd!(),
  enable_resources: true
})

# 添加用户消息并运行对话循环
{:ok, session} = Expi.Session.AgentSession.prompt(session, "总结这个代码仓库")

# 压缩长上下文并持久化
{:ok, session, _result} = Expi.Session.AgentSession.compact(session)
```

会话支持分支管理、资源加载、扩展命令等高级功能。

---

## 企业级特性

### 成本追踪与监控

内置token使用统计和成本计算，帮助团队控制AI支出：

- 按请求统计输入/输出token
- 自动计算API调用成本
- 集成Telemetry进行指标监控

### 安全性设计

- SSL证书验证
- 连接池管理
- 安全的API密钥处理
- 请求超时和重试机制

### 多模态支持

支持文本、图像和复杂内容类型的输入：

```elixir
# 发送带图片的消息
%UserMessage{
  role: :user,
  content: [
    %{type: "text", text: "描述这张图片"},
    %{type: "image", source: %{type: "base64", media_type: "image/png", data: image_data}}
  ]
}
```

---

## 快速上手

### 安装

在`mix.exs`中添加依赖：

```elixir
def deps do
  [
    {:expi, "~> 0.1.0"}
  ]
end
```

### 环境配置

```bash
# Anthropic Claude
export ANTHROPIC_API_KEY="your-anthropic-key"

# Google Gemini  
export GOOGLE_API_KEY="your-google-key"

# Ollama (本地模型)
export OLLAMA_ENDPOINT="http://localhost:11434"
```

### 基础使用

```elixir
alias Expi.AI
alias Expi.Types.{Context, UserMessage}

# 获取模型
{:ok, model} = AI.get_model("anthropic", "claude-opus-4-5")

# 创建上下文
context = %Context{
  system_prompt: "你是一个 helpful AI 助手",
  messages: [
    %UserMessage{
      role: :user,
      content: "用量子计算解释量子计算",
      timestamp: System.system_time(:millisecond)
    }
  ]
}

# 简单调用
{:ok, response} = AI.complete_simple(model, context)
IO.puts(response.content)
```

---

## 技术亮点

### 类型安全

利用Elixir的强类型系统，Expi提供了完整的类型定义：

- `Expi.Types.Message` 消息类型
- `Expi.Types.Context` 上下文类型
- `Expi.Types.Model` 模型类型
- `Expi.Types.Tool` 工具类型

编译时类型检查减少了运行时错误。

### 流式响应

支持SSE流式输出，适用于实时聊天场景：

```elixir
AI.complete_stream(model, context, fn chunk ->
  IO.write(chunk.content)
end)
```

### 连接池

内置HTTP连接池管理，避免频繁创建连接的开销，提升高并发场景下的性能。

### 全面的测试

项目包含300+测试用例，覆盖率超过95%，确保生产环境的稳定性。

---

## 适用场景

Expi特别适合以下应用场景：

1. **实时聊天应用**：利用Elixir的并发优势构建高并发AI聊天服务
2. **企业AI助手**：需要Agent状态管理和工具调用的复杂对话系统
3. **多模型应用**：需要同时使用多个LLM提供商的统一接口
4. **本地+云端混合**：结合Ollama本地模型和云端API的混合架构
5. **IoT智能设备**：在资源受限设备上运行轻量级LLM交互

---

## 生态定位

在Elixir生态中，Expi填补了LLM集成工具的空白。相比手动调用HTTP API，Expi提供了：

- 更简洁的API设计
- 更完善的功能覆盖
- 更好的错误处理
- 更强的可观测性

对于已经使用Elixir技术栈的团队，Expi是集成LLM能力的首选方案。

---

## 总结

Expi代表了Elixir生态在AI时代的演进——不是简单地将Python工具包装一下，而是充分利用Elixir的并发、容错和实时特性，为LLM应用开发提供原生支持。

对于Elixir开发者来说，Expi让集成大语言模型变得像使用任何其他Elixir库一样自然。无论是构建简单的聊天机器人，还是复杂的多Agent系统，Expi都提供了坚实的基础。

项目已发布到Hex.pm，文档完善，社区活跃，值得Elixir开发者关注和尝试。
