2026-06-13 15:42:14 +08:00
|
|
|
|
package llm
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
|
"context"
|
|
|
|
|
|
|
|
|
|
|
|
"github.com/hhs/camtalk/internal/models"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
// Service 多模态大模型服务契约。
|
|
|
|
|
|
type Service interface {
|
|
|
|
|
|
// ChatStream 流式推理,返回增量文本的 channel。
|
|
|
|
|
|
// 调用方必须消费 channel 直到 Done=true,否则需 cancel ctx 以释放连接。
|
|
|
|
|
|
ChatStream(ctx context.Context, req Request) (<-chan Chunk, error)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Request 推理请求。
|
|
|
|
|
|
type Request struct {
|
2026-06-14 20:32:30 +08:00
|
|
|
|
Image []byte // JPEG 图片(已从 Base64 解码)
|
|
|
|
|
|
Text string // 用户语音识别后的文本
|
|
|
|
|
|
History []models.Message // 最近 N 轮对话历史
|
|
|
|
|
|
Language string // 语言,如 "zh-CN"
|
|
|
|
|
|
SystemPrompt string // 情景自定义 system prompt(非空时覆盖默认 prompt)
|
2026-06-13 15:42:14 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Chunk 流式推理的一个增量片段。
|
|
|
|
|
|
type Chunk struct {
|
|
|
|
|
|
Delta string // 增量文本
|
|
|
|
|
|
Done bool // 是否结束
|
|
|
|
|
|
TokensUsed *TokenUsage // 仅 Done=true 时有值
|
|
|
|
|
|
Model string // 实际使用的模型名
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// TokenUsage 用量统计。
|
|
|
|
|
|
type TokenUsage struct {
|
|
|
|
|
|
Prompt int
|
|
|
|
|
|
Completion int
|
|
|
|
|
|
Total int
|
|
|
|
|
|
}
|