# OpenAI集成说明

## ✅ 已完成

已成功集成OpenAI API，LLM节点现在可以真实调用OpenAI模型。

## 功能特性

### 1. LLM服务 (`backend/app/services/llm_service.py`)

- 支持OpenAI API调用
- 支持自定义模型、温度、最大token数等参数
- 异步调用，提高性能
- 错误处理和异常捕获

### 2. 工作流引擎集成

- LLM节点现在会真实调用OpenAI API
- 支持prompt模板和变量替换
- 自动处理输入数据格式化

## 配置方法

### 1. 设置OpenAI API Key

在 `backend/.env` 文件中添加：

```env
OPENAI_API_KEY=your-openai-api-key-here
OPENAI_BASE_URL=https://api.openai.com/v1
```

或者使用环境变量：

```bash
export OPENAI_API_KEY=your-openai-api-key-here
export OPENAI_BASE_URL=https://api.openai.com/v1
```

### 2. 重启后端服务

```bash
docker-compose -f docker-compose.dev.yml restart backend
```

## 使用方法

### 1. 在工作流中添加LLM节点

1. 打开工作流设计器
2. 从节点工具箱拖拽"LLM"节点到画布
3. 配置节点参数（见下方）

### 2. 配置LLM节点

LLM节点支持以下配置（在节点配置面板中设置）：

```json
{
  "prompt": "请处理以下输入：\n{input}",
  "provider": "openai",
  "model": "gpt-3.5-turbo",
  "temperature": 0.7,
  "max_tokens": 1000
}
```

**参数说明**：
- `prompt`: 提示词模板，支持变量替换（如 `{input}`, `{key}` 等）
- `provider`: LLM提供商，目前支持 `openai`
- `model`: 模型名称，如 `gpt-3.5-turbo`, `gpt-4`, `gpt-4-turbo-preview` 等
- `temperature`: 温度参数（0-2），控制输出的随机性，默认0.7
- `max_tokens`: 最大生成token数，可选

### 3. Prompt模板示例

#### 基础模板
```
请处理以下输入数据：{input}
```

#### 带变量替换
```
用户输入：{user_input}
请根据以上输入生成回复。
```

#### 复杂模板
```
输入数据：
{input}

请分析以上数据并给出：
1. 主要观点
2. 关键信息
3. 建议
```

### 4. 执行工作流

1. 保存工作流
2. 点击"运行"按钮
3. 输入初始数据（JSON格式）
4. 查看执行结果

## 输入数据处理

LLM节点会自动处理输入数据：

1. **如果输入是字典**：
   - 支持在prompt中使用 `{key}` 替换变量
   - 如果prompt中没有变量，会将整个输入作为JSON附加到prompt

2. **如果输入是字符串或其他类型**：
   - 直接替换 `{input}` 占位符
   - 如果没有占位符，附加到prompt末尾

## 错误处理

如果OpenAI API调用失败，节点会返回错误信息：

```json
{
  "output": null,
  "status": "failed",
  "error": "LLM调用失败: 具体错误信息"
}
```

常见错误：
- **API Key未配置**：`OpenAI API Key未配置，请在环境变量中设置OPENAI_API_KEY`
- **API调用失败**：检查网络连接、API Key有效性、余额等
- **模型不存在**：检查模型名称是否正确

## 支持的模型

目前支持所有OpenAI Chat模型：
- `gpt-3.5-turbo`
- `gpt-4`
- `gpt-4-turbo-preview`
- `gpt-4-32k`
- 其他OpenAI兼容的模型（如果使用自定义base_url）

## 示例工作流

### 示例1：简单文本处理

```
开始 → LLM节点 → 结束
```

LLM节点配置：
```json
{
  "prompt": "请将以下文本翻译成英文：{input}",
  "model": "gpt-3.5-turbo"
}
```

输入：
```json
{
  "input": "你好，世界"
}
```

### 示例2：数据分析

```
开始 → LLM节点 → 条件节点 → 输出
```

LLM节点配置：
```json
{
  "prompt": "分析以下数据：\n{input}\n\n请判断数据是否正常（返回true或false）",
  "model": "gpt-4",
  "temperature": 0.3
}
```

## 注意事项

1. **API费用**：每次调用都会产生费用，请注意控制调用频率
2. **API限制**：注意OpenAI的速率限制和配额
3. **网络连接**：确保服务器可以访问OpenAI API
4. **错误处理**：建议在工作流中添加错误处理节点

## 后续计划

- [ ] 支持更多LLM提供商（Anthropic Claude、本地模型等）
- [ ] 支持流式输出（Streaming）
- [ ] 支持函数调用（Function Calling）
- [ ] 支持多轮对话上下文
- [ ] 添加模型选择UI组件

---

**状态**: ✅ 已完成
**时间**: 2024年
