smart_prompt 0.4.4 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -10
- data/README.cn.md +307 -64
- data/README.md +311 -64
- data/Rakefile +10 -1
- data/config/anthropic_config.yml +151 -0
- data/config/image_generation_config.yml +22 -0
- data/config/multimodal_config.yml +85 -0
- data/config/sensenova_config.yml +63 -0
- data/config/zhipu_config.yml +73 -0
- data/examples/anthropic_basic_chat.rb +143 -0
- data/examples/anthropic_example.rb +232 -0
- data/examples/anthropic_multimodal.rb +212 -0
- data/examples/anthropic_streaming.rb +312 -0
- data/examples/anthropic_tool_calling.rb +393 -0
- data/examples/automatic_cleanup_example.rb +109 -0
- data/examples/history_management_examples.rb +522 -0
- data/examples/image_generation_example.rb +130 -0
- data/examples/monitoring_example.rb +121 -0
- data/examples/multimodal_example.rb +63 -0
- data/examples/relevance_based_strategy_example.rb +87 -0
- data/examples/sensenova_example.rb +129 -0
- data/examples/stt_example.rb +287 -0
- data/examples/tts_example.rb +244 -0
- data/examples/video_generation_example.rb +189 -0
- data/examples/zhipu_example.rb +151 -0
- data/lib/smart_prompt/anthropic_adapter.rb +363 -281
- data/lib/smart_prompt/compression_engine.rb +201 -0
- data/lib/smart_prompt/context_strategy.rb +22 -0
- data/lib/smart_prompt/conversation.rb +81 -191
- data/lib/smart_prompt/engine.rb +36 -19
- data/lib/smart_prompt/history_manager.rb +596 -0
- data/lib/smart_prompt/hybrid_strategy.rb +222 -0
- data/lib/smart_prompt/image_generation_adapter.rb +297 -0
- data/lib/smart_prompt/lru_cache.rb +133 -0
- data/lib/smart_prompt/message.rb +57 -0
- data/lib/smart_prompt/multimodal_adapter.rb +277 -0
- data/lib/smart_prompt/openai_adapter.rb +1 -25
- data/lib/smart_prompt/persistence_layer.rb +197 -0
- data/lib/smart_prompt/relevance_based_strategy.rb +221 -0
- data/lib/smart_prompt/sensenova_adapter.rb +410 -0
- data/lib/smart_prompt/session.rb +140 -0
- data/lib/smart_prompt/sliding_window_strategy.rb +100 -0
- data/lib/smart_prompt/stt_adapter.rb +381 -0
- data/lib/smart_prompt/summary_based_strategy.rb +152 -0
- data/lib/smart_prompt/token_counter.rb +74 -0
- data/lib/smart_prompt/tts_adapter.rb +403 -0
- data/lib/smart_prompt/version.rb +1 -1
- data/lib/smart_prompt/video_generation_adapter.rb +330 -0
- data/lib/smart_prompt/worker.rb +25 -3
- data/lib/smart_prompt/zhipu_adapter.rb +616 -0
- data/lib/smart_prompt.rb +22 -2
- data/workers/history_management_examples.rb +407 -0
- data/workers/image_generation_workers.rb +119 -0
- data/workers/multimodal_workers.rb +110 -0
- data/workers/sensenova_workers.rb +62 -0
- data/workers/stt_workers.rb +195 -0
- data/workers/tts_workers.rb +388 -0
- data/workers/video_generation_workers.rb +264 -0
- data/workers/zhipu_workers.rb +113 -0
- metadata +84 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6417bfd0f16178f4e5b2d26b9c14f3ce8a22e8d9ab77f3cacf1845fa6531d6d0
|
|
4
|
+
data.tar.gz: 9eae765158a312e1605aad80917d59180109bb0a8c2603a2e2b7b95dd7284b00
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4109ce9c8131961870d2c9b83d3d2ed534ebdf2ba42b34674516b61058034bab9af6c53079354d39a154759ca02bb39751eeb2c055465f2dfb7db8f2a3a12682
|
|
7
|
+
data.tar.gz: e12c080c4d95a7196e91497b02ef493a11b45e3da7ba6cdb5e342c00c40abb686fa1aac3e6c0db9e3905f5f18adab0395559188fe0fae5837c1128dad70f236b
|
data/CHANGELOG.md
CHANGED
|
@@ -5,17 +5,17 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
-
## [0.4.
|
|
9
|
-
### Fixed
|
|
10
|
-
- Re-release package with `lib/smart_prompt/anthropic_adapter.rb`, which is required by the gem entrypoint.
|
|
11
|
-
|
|
12
|
-
## [0.4.0] - 2026-04-22
|
|
8
|
+
## [0.4.0] - 2026-06-21
|
|
13
9
|
### Added
|
|
14
|
-
-
|
|
10
|
+
- **SenseNova (商汤日日新) support** — unified `SenseNovaAdapter` covering chat (商量), multimodal vision, Cupido embeddings, and 秒画 text-to-image, with SSE streaming and reasoning-field handling
|
|
11
|
+
- **智谱 AI (BigModel / GLM) support** — unified `ZhipuAIAdapter` covering all REST categories: chat (GLM-4), vision (GLM-4V), embeddings (embedding-3), text-to-image (CogView), text-to-video (CogVideoX async), TTS (GLM-TTS), ASR (GLM-ASR), and rerank
|
|
12
|
+
- Media adapters: multimodal, image generation, video generation, TTS, STT
|
|
13
|
+
- Intelligent conversation history management (sliding-window, relevance-based, summary-based, hybrid strategies) with session isolation, compression, persistence, and LRU caching
|
|
14
|
+
- Token counter, message/session models, and persistence layer
|
|
15
|
+
- Example configs, workers, and self-contained examples for every provider
|
|
15
16
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
- Bumped `ruby-openai` dependency from `8.1.0` to `8.3.0`
|
|
17
|
+
### Fixed
|
|
18
|
+
- Expose `engine` on `WorkerContext` so workers can reach a configured adapter directly (fixes the `engine.llms[...]` pattern used by media workers)
|
|
19
19
|
|
|
20
20
|
## [0.3.2] - 2025-05-18
|
|
21
21
|
### Added
|
|
@@ -46,4 +46,4 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
46
46
|
- Initial gem release
|
|
47
47
|
- Llama.cpp adapter
|
|
48
48
|
- Basic configuration parameters
|
|
49
|
-
- Environment bug fixes
|
|
49
|
+
- Environment bug fixes
|
data/README.cn.md
CHANGED
|
@@ -11,13 +11,24 @@ SmartPrompt 是一个强大的 Ruby gem,提供了优雅的领域特定语言
|
|
|
11
11
|
|
|
12
12
|
### 多 LLM 支持
|
|
13
13
|
- **OpenAI API 兼容**: 完全支持 OpenAI GPT 模型和兼容的 API
|
|
14
|
-
- **
|
|
14
|
+
- **Anthropic Claude**: 原生支持 Claude 模型及多模态能力
|
|
15
|
+
- **商汤 SenseNova(日日新)**: 单一适配器覆盖商量文本对话、图文多模态、Cupido 向量、秒画文生图四类 API,详见 `examples/sensenova_example.rb`
|
|
16
|
+
- **智谱 AI(BigModel / GLM)**: 单一适配器覆盖全部模型类别——文本对话(GLM-4)、图文多模态(GLM-4V)、向量(embedding-3)、文生图(CogView)、文生视频(CogVideoX)、语音合成(GLM-TTS)、语音识别(GLM-ASR),详见 `examples/zhipu_example.rb`
|
|
17
|
+
- **Llama.cpp 集成**: 直接集成本地 Llama.cpp 服务器
|
|
15
18
|
- **可扩展适配器**: 易于扩展的适配器系统,支持新的 LLM 提供商
|
|
16
19
|
- **统一接口**: 无论底层 LLM 提供商如何,都使用相同的 API
|
|
17
20
|
|
|
21
|
+
### 多模态 AI 能力
|
|
22
|
+
- **视觉模型**: 支持图像理解和分析
|
|
23
|
+
- **图像生成**: 使用扩散模型从文本提示生成图像
|
|
24
|
+
- **视频生成**: 从文本或图像提示生成视频
|
|
25
|
+
- **文本转语音**: 将文本转换为自然语音
|
|
26
|
+
- **语音转文本**: 支持多语言的音频转文本转录
|
|
27
|
+
|
|
18
28
|
### 灵活架构
|
|
19
29
|
- **基于 Worker 的任务**: 为特定 AI 任务定义可重用的 Worker
|
|
20
30
|
- **模板系统**: 基于 ERB 的提示词模板,支持参数注入
|
|
31
|
+
- **智能历史管理**: 会话隔离、自动压缩和多种上下文策略
|
|
21
32
|
- **对话管理**: 内置对话历史和上下文管理
|
|
22
33
|
- **流式支持**: 实时响应流,提供更好的用户体验
|
|
23
34
|
|
|
@@ -26,6 +37,8 @@ SmartPrompt 是一个强大的 Ruby gem,提供了优雅的领域特定语言
|
|
|
26
37
|
- **重试逻辑**: 强大的错误处理机制,支持可配置的重试
|
|
27
38
|
- **嵌入向量**: 文本嵌入生成,用于语义搜索和 RAG 应用
|
|
28
39
|
- **配置驱动**: 基于 YAML 的配置,便于部署管理
|
|
40
|
+
- **批量处理**: 高效处理多个文件和任务
|
|
41
|
+
- **语言检测**: 从文本和音频自动识别语言
|
|
29
42
|
|
|
30
43
|
### 生产就绪
|
|
31
44
|
- **全面日志记录**: 详细的日志记录,用于调试和监控
|
|
@@ -61,6 +74,7 @@ $ gem install smart_prompt
|
|
|
61
74
|
# 适配器定义
|
|
62
75
|
adapters:
|
|
63
76
|
openai: OpenAIAdapter
|
|
77
|
+
anthropic: AnthropicAdapter
|
|
64
78
|
# LLM 配置
|
|
65
79
|
llms:
|
|
66
80
|
SiliconFlow:
|
|
@@ -68,40 +82,25 @@ llms:
|
|
|
68
82
|
url: https://api.siliconflow.cn/v1/
|
|
69
83
|
api_key: ENV["APIKey"]
|
|
70
84
|
default_model: Qwen/Qwen2.5-7B-Instruct
|
|
71
|
-
|
|
85
|
+
claude:
|
|
86
|
+
adapter: anthropic
|
|
87
|
+
api_key: ENV["ANTHROPIC_API_KEY"]
|
|
88
|
+
model: claude-3-5-sonnet-20241022
|
|
89
|
+
temperature: 0.7
|
|
90
|
+
max_tokens: 4096
|
|
91
|
+
llamacpp:
|
|
72
92
|
adapter: openai
|
|
73
93
|
url: http://localhost:8080/
|
|
74
94
|
ollama:
|
|
75
95
|
adapter: openai
|
|
76
96
|
url: http://localhost:11434/
|
|
77
97
|
default_model: deepseek-r1
|
|
78
|
-
gemma4_local:
|
|
79
|
-
adapter: openai
|
|
80
|
-
url: http://localhost:8000/v1
|
|
81
|
-
api_key: dummy
|
|
82
|
-
default_model: gemma-4-12B-it
|
|
83
|
-
temperature: 1.0
|
|
84
|
-
top_p: 0.95
|
|
85
|
-
top_k: 64
|
|
86
98
|
deepseek:
|
|
87
99
|
adapter: openai
|
|
88
100
|
url: https://api.deepseek.com
|
|
89
101
|
api_key: ENV["DSKEY"]
|
|
90
102
|
default_model: deepseek-reasoner
|
|
91
103
|
|
|
92
|
-
# 模型别名配置
|
|
93
|
-
models:
|
|
94
|
-
local/qwen3.5:
|
|
95
|
-
use: local
|
|
96
|
-
model: qwen3.5
|
|
97
|
-
deepseekv3.2:
|
|
98
|
-
use: SiliconFlow
|
|
99
|
-
model: Pro/deepseek-ai/DeepSeek-V3.2
|
|
100
|
-
gemma4/12b:
|
|
101
|
-
use: gemma4_local
|
|
102
|
-
model: gemma-4-12B-it
|
|
103
|
-
max_tokens: 1024
|
|
104
|
-
|
|
105
104
|
# 默认设置
|
|
106
105
|
default_llm: SiliconFlow
|
|
107
106
|
template_path: "./templates"
|
|
@@ -129,8 +128,9 @@ logger_file: "./logs/smart_prompt.log"
|
|
|
129
128
|
**workers/chat_worker.rb**:
|
|
130
129
|
```ruby
|
|
131
130
|
SmartPrompt.define_worker :chat_assistant do
|
|
132
|
-
#
|
|
133
|
-
|
|
131
|
+
# 使用特定的 LLM
|
|
132
|
+
use "SiliconFlow"
|
|
133
|
+
model "deepseek-ai/DeepSeek-V3"
|
|
134
134
|
# 设置系统消息
|
|
135
135
|
sys_msg("你是一个有用的 AI 助手。", params)
|
|
136
136
|
# 使用模板和参数
|
|
@@ -182,26 +182,6 @@ engine.call_worker_by_stream(:streaming_chat, {
|
|
|
182
182
|
end
|
|
183
183
|
```
|
|
184
184
|
|
|
185
|
-
### Gemma 4 12B 多模态
|
|
186
|
-
|
|
187
|
-
Gemma 4 12B 可以通过 LiteRT-LM、LM Studio、Ollama、llama.cpp 等 OpenAI 兼容本地服务接入。SmartPrompt 会把图片放在文本前、音频放在文本后,以匹配 Gemma 4 的多模态最佳实践。
|
|
188
|
-
|
|
189
|
-
```ruby
|
|
190
|
-
SmartPrompt.define_worker :gemma_multimodal_assistant do
|
|
191
|
-
use_model "gemma4/12b"
|
|
192
|
-
thinking params.fetch(:thinking, true)
|
|
193
|
-
sys_msg("你是一个严谨的本地多模态助手。", params)
|
|
194
|
-
|
|
195
|
-
image(params[:image], token_budget: params[:token_budget] || 280) if params[:image]
|
|
196
|
-
video(params[:video], fps: 1, max_seconds: 60) if params[:video]
|
|
197
|
-
audio(params[:audio]) if params[:audio]
|
|
198
|
-
prompt(params[:message])
|
|
199
|
-
|
|
200
|
-
request_options(response_format: { type: "json_object" }) if params[:json]
|
|
201
|
-
send_msg
|
|
202
|
-
end
|
|
203
|
-
```
|
|
204
|
-
|
|
205
185
|
### 工具集成
|
|
206
186
|
|
|
207
187
|
```ruby
|
|
@@ -238,7 +218,10 @@ end
|
|
|
238
218
|
|
|
239
219
|
### 对话历史
|
|
240
220
|
|
|
221
|
+
SmartPrompt 提供智能对话历史管理,支持会话隔离、自动压缩和多种上下文策略。
|
|
222
|
+
|
|
241
223
|
```ruby
|
|
224
|
+
# 基本用法,自动管理历史
|
|
242
225
|
SmartPrompt.define_worker :conversational_chat do
|
|
243
226
|
use "deepseek"
|
|
244
227
|
model "deepseek-chat"
|
|
@@ -246,8 +229,38 @@ SmartPrompt.define_worker :conversational_chat do
|
|
|
246
229
|
prompt(params[:message], with_history: true)
|
|
247
230
|
send_msg
|
|
248
231
|
end
|
|
232
|
+
|
|
233
|
+
# 高级用法,显式会话管理
|
|
234
|
+
SmartPrompt.define_worker :session_chat do
|
|
235
|
+
use "deepseek"
|
|
236
|
+
model "deepseek-chat"
|
|
237
|
+
|
|
238
|
+
# 使用 session_id 进行隔离的对话
|
|
239
|
+
session_id = params[:session_id] || "default"
|
|
240
|
+
|
|
241
|
+
# 配置会话行为
|
|
242
|
+
session_config = {
|
|
243
|
+
max_messages: 100,
|
|
244
|
+
max_tokens: 4000,
|
|
245
|
+
context_strategy: :sliding_window # 或 :relevance_based, :summary_based, :hybrid
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
sys_msg("你是一个有用的助手。", params)
|
|
249
|
+
prompt(params[:message], with_history: true)
|
|
250
|
+
params.merge(session_id: session_id, session_config: session_config)
|
|
251
|
+
send_msg
|
|
252
|
+
end
|
|
249
253
|
```
|
|
250
254
|
|
|
255
|
+
**历史管理功能:**
|
|
256
|
+
- **会话隔离**: 每个对话都有独立的历史记录
|
|
257
|
+
- **上下文策略**: 可选择滑动窗口、基于相关性、基于摘要或混合策略
|
|
258
|
+
- **自动压缩**: 在保留上下文的同时减少 token 使用量
|
|
259
|
+
- **持久化**: 跨重启保存和恢复对话
|
|
260
|
+
- **性能优化**: LRU 缓存和异步 I/O 以获得最佳性能
|
|
261
|
+
|
|
262
|
+
详见 [历史管理指南](HISTORY_MANAGEMENT_GUIDE.md)。
|
|
263
|
+
|
|
251
264
|
### 嵌入向量生成
|
|
252
265
|
|
|
253
266
|
```ruby
|
|
@@ -263,6 +276,75 @@ embeddings = engine.call_worker(:text_embedder, {
|
|
|
263
276
|
text: "将此文本转换为嵌入向量",
|
|
264
277
|
dimensions: 1024
|
|
265
278
|
})
|
|
279
|
+
|
|
280
|
+
### 多模态 AI 示例
|
|
281
|
+
|
|
282
|
+
#### 图像生成
|
|
283
|
+
```ruby
|
|
284
|
+
# 从文本提示生成图像
|
|
285
|
+
result = engine.call_worker(:image_generator, {
|
|
286
|
+
prompt: "山间美丽的日落",
|
|
287
|
+
size: "1024x1024",
|
|
288
|
+
quality: "standard",
|
|
289
|
+
save_to_file: true,
|
|
290
|
+
output_dir: "./generated_images"
|
|
291
|
+
})
|
|
292
|
+
|
|
293
|
+
puts "图像已生成: #{result[:image_file][:file_path]}"
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
#### 视频生成
|
|
297
|
+
```ruby
|
|
298
|
+
# 从文本提示生成视频
|
|
299
|
+
result = engine.call_worker(:video_generator, {
|
|
300
|
+
prompt: "一只猫在玩毛线球",
|
|
301
|
+
duration: 5,
|
|
302
|
+
resolution: "720p",
|
|
303
|
+
save_to_file: true,
|
|
304
|
+
output_dir: "./generated_videos"
|
|
305
|
+
})
|
|
306
|
+
|
|
307
|
+
puts "视频生成已开始: #{result[:video_id]}"
|
|
308
|
+
puts "检查状态: engine.call_worker(:video_status, {video_id: '#{result[:video_id]}'})"
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
#### 文本转语音
|
|
312
|
+
```ruby
|
|
313
|
+
# 将文本转换为语音
|
|
314
|
+
result = engine.call_worker(:tts_synthesizer, {
|
|
315
|
+
text: "欢迎使用 SmartPrompt,您的 AI 助手",
|
|
316
|
+
voice: "alloy",
|
|
317
|
+
speed: 1.0,
|
|
318
|
+
save_to_file: true,
|
|
319
|
+
output_dir: "./generated_audio"
|
|
320
|
+
})
|
|
321
|
+
|
|
322
|
+
puts "音频文件已创建: #{result[:audio_file][:file_path]}"
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
#### 语音转文本
|
|
326
|
+
```ruby
|
|
327
|
+
# 将音频转录为文本
|
|
328
|
+
result = engine.call_worker(:stt_transcriber, {
|
|
329
|
+
audio_file: "./audio.wav",
|
|
330
|
+
language: "zh",
|
|
331
|
+
response_format: "json"
|
|
332
|
+
})
|
|
333
|
+
|
|
334
|
+
puts "转录文本: #{result[:transcription][:text]}"
|
|
335
|
+
puts "语言: #{result[:transcription][:language]}"
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
#### 视觉分析
|
|
339
|
+
```ruby
|
|
340
|
+
# 使用视觉模型分析图像
|
|
341
|
+
result = engine.call_worker(:vision_analyzer, {
|
|
342
|
+
image_file: "./image.jpg",
|
|
343
|
+
prompt: "描述你在这张图片中看到了什么"
|
|
344
|
+
})
|
|
345
|
+
|
|
346
|
+
puts "分析结果: #{result[:response]}"
|
|
347
|
+
```
|
|
266
348
|
```
|
|
267
349
|
|
|
268
350
|
## 🏗️ 架构概述
|
|
@@ -282,6 +364,13 @@ SmartPrompt 采用模块化架构:
|
|
|
282
364
|
│Worker │ │对话 │ │ 模板 │
|
|
283
365
|
│ │ │管理 │ │ 系统 │
|
|
284
366
|
└───────┘ └─────┘ └────────┘
|
|
367
|
+
│
|
|
368
|
+
┌────────┴────────┐
|
|
369
|
+
│ │
|
|
370
|
+
┌───▼────────┐ ┌─────▼──────┐
|
|
371
|
+
│ 历史管理 │ │ 持久化层 │
|
|
372
|
+
│ 器 │ │ │
|
|
373
|
+
└────────────┘ └────────────┘
|
|
285
374
|
```
|
|
286
375
|
|
|
287
376
|
### 核心组件
|
|
@@ -289,8 +378,10 @@ SmartPrompt 采用模块化架构:
|
|
|
289
378
|
- **引擎(Engine)**: 中央编排器,管理配置、适配器和 Worker
|
|
290
379
|
- **Worker**: 包含嵌入业务逻辑的可重用任务定义
|
|
291
380
|
- **对话(Conversation)**: 上下文和消息历史管理
|
|
292
|
-
-
|
|
381
|
+
- **历史管理器**: 智能对话历史,支持会话隔离和上下文策略
|
|
382
|
+
- **适配器(Adapters)**: LLM 提供商集成(OpenAI、Anthropic、Llama.cpp 等)
|
|
293
383
|
- **模板(Templates)**: 基于 ERB 的提示词模板系统
|
|
384
|
+
- **持久化层(Persistence Layer)**: 跨重启保存和恢复对话历史
|
|
294
385
|
|
|
295
386
|
## 🔧 配置参考
|
|
296
387
|
|
|
@@ -298,32 +389,177 @@ SmartPrompt 采用模块化架构:
|
|
|
298
389
|
|
|
299
390
|
```yaml
|
|
300
391
|
adapters:
|
|
301
|
-
openai: "OpenAIAdapter"
|
|
392
|
+
openai: "OpenAIAdapter" # 用于 OpenAI API
|
|
393
|
+
anthropic: "AnthropicAdapter" # 用于 Anthropic Claude API
|
|
394
|
+
sensenova: "SenseNovaAdapter" # 用于商汤 SenseNova(对话/视觉/向量/文生图)
|
|
395
|
+
zhipu: "ZhipuAIAdapter" # 用于智谱 BigModel/GLM(对话/视觉/向量/图/视频/语音)
|
|
396
|
+
multimodal: "MultimodalAdapter" # 用于视觉模型
|
|
397
|
+
image_generation: "ImageGenerationAdapter" # 用于图像生成
|
|
398
|
+
video_generation: "VideoGenerationAdapter" # 用于视频生成
|
|
399
|
+
tts: "TTSAdapter" # 用于文本转语音
|
|
400
|
+
stt: "STTAdapter" # 用于语音转文本
|
|
302
401
|
```
|
|
303
402
|
|
|
304
403
|
### LLM 配置
|
|
305
404
|
|
|
306
405
|
```yaml
|
|
307
406
|
llms:
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
model: "
|
|
407
|
+
# 文本模型
|
|
408
|
+
gpt:
|
|
409
|
+
adapter: "openai"
|
|
410
|
+
api_key: ENV["OPENAI_API_KEY"]
|
|
411
|
+
model: "gpt-4"
|
|
313
412
|
temperature: 0.7
|
|
314
|
-
# 其他提供商特定选项
|
|
315
|
-
```
|
|
316
413
|
|
|
317
|
-
|
|
414
|
+
# Anthropic Claude 模型
|
|
415
|
+
claude:
|
|
416
|
+
adapter: "anthropic"
|
|
417
|
+
api_key: ENV["ANTHROPIC_API_KEY"]
|
|
418
|
+
model: "claude-3-5-sonnet-20241022"
|
|
419
|
+
temperature: 0.7
|
|
420
|
+
max_tokens: 4096
|
|
318
421
|
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
422
|
+
claude_opus:
|
|
423
|
+
adapter: "anthropic"
|
|
424
|
+
api_key: ENV["ANTHROPIC_API_KEY"]
|
|
425
|
+
model: "claude-3-opus-20240229"
|
|
426
|
+
temperature: 0.7
|
|
427
|
+
max_tokens: 4096
|
|
325
428
|
|
|
326
|
-
|
|
429
|
+
claude_haiku:
|
|
430
|
+
adapter: "anthropic"
|
|
431
|
+
api_key: ENV["ANTHROPIC_API_KEY"]
|
|
432
|
+
model: "claude-3-5-haiku-20241022"
|
|
433
|
+
temperature: 0.7
|
|
434
|
+
max_tokens: 4096
|
|
435
|
+
|
|
436
|
+
# 自定义 Anthropic 端点(用于代理或自定义部署)
|
|
437
|
+
claude_custom:
|
|
438
|
+
adapter: "anthropic"
|
|
439
|
+
api_key: ENV["ANTHROPIC_API_KEY"]
|
|
440
|
+
url: "https://your-custom-endpoint.com"
|
|
441
|
+
model: "claude-3-5-sonnet-20241022"
|
|
442
|
+
temperature: 0.7
|
|
443
|
+
max_tokens: 4096
|
|
444
|
+
|
|
445
|
+
# 商汤 SenseNova —— 单一适配器覆盖四类模型,只需切换 model。
|
|
446
|
+
# 免费模型走 token.sensenova.cn/v1;付费模型(SenseChat-5、SenseNova-V6-*、Cupido)
|
|
447
|
+
# 走 api.sensenova.cn/compatible-mode/v2(key 无权限时返回 403)。
|
|
448
|
+
sensechat: # 商量 文本对话(免费档)
|
|
449
|
+
adapter: "sensenova"
|
|
450
|
+
url: "https://token.sensenova.cn/v1"
|
|
451
|
+
api_key: ENV["SENSENOVA_API_KEY"]
|
|
452
|
+
model: "sensenova-6.7-flash-lite"
|
|
453
|
+
temperature: 0.7
|
|
454
|
+
# 可选 SenseNova 采样参数(会透传到 /chat/completions):
|
|
455
|
+
# reasoning_effort: "medium"
|
|
456
|
+
# max_completion_tokens: 4096
|
|
457
|
+
# 付费:url https://api.sensenova.cn/compatible-mode/v2,model SenseChat-5
|
|
458
|
+
|
|
459
|
+
sensevision: # 商量 图文多模态(flash-lite 原生多模态)
|
|
460
|
+
adapter: "sensenova"
|
|
461
|
+
url: "https://token.sensenova.cn/v1"
|
|
462
|
+
api_key: ENV["SENSENOVA_API_KEY"]
|
|
463
|
+
model: "sensenova-6.7-flash-lite"
|
|
464
|
+
# 付费:url https://api.sensenova.cn/compatible-mode/v2,model SenseNova-V6-Pro
|
|
465
|
+
|
|
466
|
+
senseembedding: # Cupido 向量模型(付费;原生端点)
|
|
467
|
+
adapter: "sensenova"
|
|
468
|
+
url: "https://api.sensenova.cn/compatible-mode/v2"
|
|
469
|
+
embeddings_url: "https://api.sensenova.cn/v1/llm/embeddings"
|
|
470
|
+
api_key: ENV["SENSENOVA_API_KEY"]
|
|
471
|
+
model: "Cupido"
|
|
472
|
+
|
|
473
|
+
senseimage: # 秒画 文生图(sensenova-u1-fast,token.sensenova.cn base)
|
|
474
|
+
adapter: "sensenova"
|
|
475
|
+
url: "https://token.sensenova.cn/v1"
|
|
476
|
+
image_url: "https://token.sensenova.cn/v1/images/generations"
|
|
477
|
+
api_key: ENV["SENSENOVA_API_KEY"]
|
|
478
|
+
model: "sensenova-u1-fast"
|
|
479
|
+
# sensenova-u1-fast 只接受特定尺寸(默认 2048x2048),见 sensenova_adapter.rb 的 VALID_IMAGE_SIZES
|
|
480
|
+
|
|
481
|
+
# 智谱 AI(BigModel/GLM)—— 单一适配器覆盖全部类别,只需切换 model。
|
|
482
|
+
# base https://open.bigmodel.cn/api/paas/v4 ,Bearer 鉴权。默认用免费模型。
|
|
483
|
+
glm: # 文本对话(免费 glm-4-flash;付费 glm-4-plus/glm-5.2)
|
|
484
|
+
adapter: "zhipu"
|
|
485
|
+
url: "https://open.bigmodel.cn/api/paas/v4"
|
|
486
|
+
api_key: ENV["ZHIPUAI_API_KEY"]
|
|
487
|
+
model: "glm-4-flash"
|
|
488
|
+
temperature: 0.7
|
|
489
|
+
# CodeGeeX-4:设 `coding: true` 并 model: codegeex-4(走 coding base)
|
|
490
|
+
|
|
491
|
+
glm_vision: # 图文多模态(免费 glm-4v-flash;付费 glm-4v-plus)
|
|
492
|
+
adapter: "zhipu"
|
|
493
|
+
url: "https://open.bigmodel.cn/api/paas/v4"
|
|
494
|
+
api_key: ENV["ZHIPUAI_API_KEY"]
|
|
495
|
+
model: "glm-4v-flash"
|
|
496
|
+
|
|
497
|
+
embedding: # 向量模型(embedding-3;可自定义维度 256/512/1024/2048)
|
|
498
|
+
adapter: "zhipu"
|
|
499
|
+
url: "https://open.bigmodel.cn/api/paas/v4"
|
|
500
|
+
api_key: ENV["ZHIPUAI_API_KEY"]
|
|
501
|
+
model: "embedding-3"
|
|
502
|
+
dimensions: 1024
|
|
503
|
+
|
|
504
|
+
cogview: # 文生图(免费 cogview-3-flash;付费 cogview-4/glm-image)
|
|
505
|
+
adapter: "zhipu"
|
|
506
|
+
url: "https://open.bigmodel.cn/api/paas/v4"
|
|
507
|
+
api_key: ENV["ZHIPUAI_API_KEY"]
|
|
508
|
+
model: "cogview-3-flash"
|
|
509
|
+
|
|
510
|
+
cogvideo: # 文生视频(异步 提交->轮询->下载;免费 cogvideox-flash)
|
|
511
|
+
adapter: "zhipu"
|
|
512
|
+
url: "https://open.bigmodel.cn/api/paas/v4"
|
|
513
|
+
api_key: ENV["ZHIPUAI_API_KEY"]
|
|
514
|
+
model: "cogvideox-flash"
|
|
515
|
+
|
|
516
|
+
glm_tts: # 语音合成(GLM-TTS)
|
|
517
|
+
adapter: "zhipu"
|
|
518
|
+
url: "https://open.bigmodel.cn/api/paas/v4"
|
|
519
|
+
api_key: ENV["ZHIPUAI_API_KEY"]
|
|
520
|
+
model: "glm-tts"
|
|
521
|
+
|
|
522
|
+
glm_asr: # 语音识别(GLM-ASR-2512)
|
|
523
|
+
adapter: "zhipu"
|
|
524
|
+
url: "https://open.bigmodel.cn/api/paas/v4"
|
|
525
|
+
api_key: ENV["ZHIPUAI_API_KEY"]
|
|
526
|
+
model: "glm-asr-2512"
|
|
527
|
+
|
|
528
|
+
# 视觉模型
|
|
529
|
+
vision:
|
|
530
|
+
adapter: "multimodal"
|
|
531
|
+
url: "https://api.siliconflow.cn/v1/"
|
|
532
|
+
api_key: ENV["SILICONFLOW_API_KEY"]
|
|
533
|
+
model: "Qwen/Qwen2.5-VL-7B-Instruct"
|
|
534
|
+
|
|
535
|
+
# 图像生成
|
|
536
|
+
image_gen:
|
|
537
|
+
adapter: "image_generation"
|
|
538
|
+
url: "https://api.siliconflow.cn/v1/"
|
|
539
|
+
api_key: ENV["SILICONFLOW_API_KEY"]
|
|
540
|
+
model: "stabilityai/stable-diffusion-xl-base-1.0"
|
|
541
|
+
|
|
542
|
+
# 视频生成
|
|
543
|
+
video_gen:
|
|
544
|
+
adapter: "video_generation"
|
|
545
|
+
url: "https://api.siliconflow.cn/v1/"
|
|
546
|
+
api_key: ENV["SILICONFLOW_API_KEY"]
|
|
547
|
+
model: "Wan-AI/Wan2.2-T2V-A14B"
|
|
548
|
+
|
|
549
|
+
# 文本转语音
|
|
550
|
+
tts_service:
|
|
551
|
+
adapter: "tts"
|
|
552
|
+
url: "https://api.siliconflow.cn/v1/"
|
|
553
|
+
api_key: ENV["SILICONFLOW_API_KEY"]
|
|
554
|
+
model: "FunAudioLLM/CosyVoice2-0.5B"
|
|
555
|
+
|
|
556
|
+
# 语音转文本
|
|
557
|
+
stt_service:
|
|
558
|
+
adapter: "stt"
|
|
559
|
+
url: "https://api.siliconflow.cn/v1/"
|
|
560
|
+
api_key: ENV["SILICONFLOW_API_KEY"]
|
|
561
|
+
model: "FunAudioLLM/CosyVoice2-0.5B"
|
|
562
|
+
```
|
|
327
563
|
|
|
328
564
|
### 路径配置
|
|
329
565
|
|
|
@@ -398,20 +634,27 @@ end
|
|
|
398
634
|
## 🚀 实际应用场景
|
|
399
635
|
|
|
400
636
|
- **聊天机器人和对话式 AI**: 构建具有上下文感知能力的复杂聊天机器人
|
|
401
|
-
- **内容生成**: 基于模板驱动的提示词进行自动化内容创建
|
|
637
|
+
- **内容生成**: 基于模板驱动的提示词进行自动化内容创建
|
|
402
638
|
- **代码分析**: AI 驱动的代码审查和文档生成
|
|
403
639
|
- **客户支持**: 智能工单路由和响应建议
|
|
404
640
|
- **数据处理**: LLM 驱动的数据提取和转换
|
|
405
641
|
- **教育工具**: AI 导师和学习辅助系统
|
|
642
|
+
- **多媒体内容创作**: 生成图像、视频和音频内容
|
|
643
|
+
- **语音界面**: 使用 TTS 和 STT 构建语音应用
|
|
644
|
+
- **视觉分析**: 图像理解和目标检测应用
|
|
645
|
+
- **无障碍工具**: 为视障人士提供音频描述、文本转语音
|
|
406
646
|
|
|
407
647
|
## 🛣️ 发展路线图
|
|
408
648
|
|
|
649
|
+
- [x] **多模态 AI 支持** - 视觉、图像生成、视频生成、TTS、STT
|
|
409
650
|
- [ ] 新增 LLM 提供商适配器(Anthropic Claude、Google PaLM)
|
|
410
651
|
- [ ] 可视化提示词构建器和管理界面
|
|
411
652
|
- [ ] 增强缓存和性能优化
|
|
412
653
|
- [ ] 与向量数据库集成,支持 RAG 应用
|
|
413
654
|
- [ ] 内置提示词评估和测试框架
|
|
414
655
|
- [ ] 分布式 worker 执行支持
|
|
656
|
+
- [ ] 实时音视频流支持
|
|
657
|
+
- [ ] 高级多模态提示链
|
|
415
658
|
|
|
416
659
|
## 🤝 贡献
|
|
417
660
|
|
|
@@ -442,4 +685,4 @@ end
|
|
|
442
685
|
|
|
443
686
|
---
|
|
444
687
|
|
|
445
|
-
**SmartPrompt** - 让 Ruby 应用中的 LLM 集成变得简单、强大且优雅。
|
|
688
|
+
**SmartPrompt** - 让 Ruby 应用中的 LLM 集成变得简单、强大且优雅。
|