第 4 章

模型接入全指南:OpenAI / Claude / 本地模型配置与成本对比

第4章:模型接入全指南——OpenAI / Claude / 本地模型配置与成本对比

选错模型可能让你的应用成本是最优方案的 10 倍,但选对模型需要理解每种模型的能力边界、API 特性和定价机制。

本章导读

2024 年的 AI 模型市场百花齐放:GPT-4o、Claude 3.5 Sonnet、Gemini 1.5 Pro、Qwen2.5、DeepSeek-V3……每个月都有新模型发布,性能更强、价格更低。Dify 的一大核心优势就是模型无关性:你今天在 GPT-4 上调好的工作流,明天可以切换到 Claude 或本地模型,只需改一个配置。

但这个"切换"不是无损的。不同模型在上下文长度、工具调用能力、多语言水平、价格结构上有显著差异,错误的模型选择会导致功能缺失或成本飞涨。

本章会带你系统了解 Dify 中模型接入的全貌,帮你在不同场景下做出最优选择。

读完本章,你将能够:


Level 1:基础认知(1-3 年经验)

Dify 支持哪些模型

Dify 将模型分为四类,每类有不同的用途:

模型类型 用途 代表模型
LLM(大语言模型) 对话、推理、生成文本 GPT-4o, Claude 3.5, Qwen2.5
Embedding(向量化) 知识库文档向量化、语义检索 text-embedding-3-small, bge-m3
Rerank(重排序) 知识库检索结果重排序 bge-reranker-v2-m3, cohere-rerank
语音(Speech to Text) 语音输入转文字 Whisper-1

关键认知:在 Dify 里,LLM 不是唯一需要配置的模型。如果你启用了知识库,还需要配置 Embedding 模型;如果想要更好的检索效果,还需要配置 Rerank 模型。

主流模型的能力对比(2024年)

以下是主要模型的横向对比,帮你快速定位:

模型 上下文长度 中文能力 工具调用 视觉能力 每 1M tokens 价格(输入/输出)
GPT-4o 128K ★★★★☆ ★★★★★ ★★★★★ $5 / $15
GPT-4o-mini 128K ★★★★☆ ★★★★☆ ★★★★☆ $0.15 / $0.6
Claude 3.5 Sonnet 200K ★★★★☆ ★★★★★ ★★★★★ $3 / $15
Claude 3 Haiku 200K ★★★☆☆ ★★★★☆ ★★★☆☆ $0.25 / $1.25
Gemini 1.5 Pro 1M ★★★★☆ ★★★★☆ ★★★★★ $3.5 / $10.5
Qwen2.5-72B 128K ★★★★★ ★★★★☆ ★★★☆☆ $0.56 / $2.24
DeepSeek-V3 64K ★★★★★ ★★★★☆ $0.27 / $1.1
Llama 3.1 70B (本地) 128K ★★★☆☆ ★★★☆☆ 仅服务器成本

注:价格和能力会随版本更新变化,以官方最新数据为准

在 Dify 中配置 OpenAI 模型

前提条件:你有一个 OpenAI API Key(platform.openai.com

配置步骤

  1. 进入 Dify 工作台 → 右上角头像 → 「设置」
  2. 点击「模型供应商」→ 找到 OpenAI → 点击「配置」
  3. 填入你的 API Key:
API Key: sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Organization ID: org-xxxxxxxx  (可选,企业账号填写)
API Base: https://api.openai.com/v1  (默认,如果用 Azure OpenAI 需要修改)
  1. 点击「保存」,系统自动验证

使用 Azure OpenAI(企业常用,数据不出美国微软机房):

Provider: Azure OpenAI
Azure Endpoint: https://your-resource.openai.azure.com/
API Key: your-azure-key
API Version: 2024-02-01

注意:Azure OpenAI 需要在模型配置中指定「部署名称」(Deployment Name),而不是模型名称。

在 Dify 中配置 Anthropic Claude

Claude 是在长上下文处理和代码生成上经常优于 GPT-4 的选择。

获取 API Key:访问 console.anthropic.com 注册

Dify 配置

  1. 模型供应商 → Anthropic → 配置
  2. 填入 API Key(格式:sk-ant-xxxxxxxx
  3. 可用模型:
    • claude-3-5-sonnet-20241022:综合最强,适合复杂任务
    • claude-3-5-haiku-20241022:速度快、成本低,适合高频调用
    • claude-3-opus-20240229:最强版本,但已被 3.5 Sonnet 超越

Claude 与 GPT-4o 的关键差异

优势(Claude 3.5 Sonnet 相对 GPT-4o):
✓ 上下文窗口更大(200K vs 128K)
✓ 代码生成质量更高(多个 benchmark 上领先)
✓ 输入价格更低($3 vs $5 per 1M tokens)
✓ 长文档分析更准确(因为长上下文能力更强)

劣势:
✗ 工具调用有时不如 GPT-4o 稳定
✗ 某些特定中文任务上略逊(取决于任务类型)
✗ 图像生成不支持(只有理解能力)

在 Dify 中配置本地模型(Ollama)

本地部署意味着数据完全不离开你的服务器,适合对数据合规有严格要求的场景。

第一步:安装 Ollamaollama.ai

# macOS / Linux
curl -fsSL https://ollama.ai/install.sh | sh

# 下载模型(以 Llama 3.1 为例)
ollama pull llama3.1:8b      # 8B 参数,适合 8GB 内存机器
ollama pull llama3.1:70b     # 70B 参数,需要 40GB 以上内存

# 验证运行
ollama serve
curl http://localhost:11434/api/tags  # 查看已下载的模型

第二步:在 Dify 中配置 Ollama

  1. 模型供应商 → Ollama → 配置
  2. 填写配置:
Base URL: http://localhost:11434  (如果 Ollama 和 Dify 同机)
或
Base URL: http://your-ollama-server:11434  (不同机器)
  1. 在模型列表中,会自动显示 Ollama 中已有的模型

本地模型的性能期望(8B vs 70B):

Llama 3.1 8B(消费级 GPU,如 RTX 4090):
  - 推理速度:~50 tokens/秒
  - 代码生成能力:中等(相当于 GPT-3.5 水平)
  - 中文支持:一般
  - 内存需求:8GB VRAM

Llama 3.1 70B(专业 GPU,如 A100 40GB × 2):
  - 推理速度:~15 tokens/秒
  - 代码生成能力:接近 GPT-4 水平
  - 中文支持:较好
  - 内存需求:40GB VRAM

Level 2:机制深解(3-5 年经验)

理解模型的定价机制

模型定价基于 Token 计算,而不是字数或字符数。理解 Token 是控制成本的关键。

什么是 Token?

Token 是模型处理文本的基本单位。对于英文,大约 1 Token = 0.75 个单词(4 个字符)。对于中文,大约 1 Token = 1.5-2 个汉字。

示例:
"Hello, world!" ≈ 4 tokens
"你好,世界!"  ≈ 5 tokens(中文效率更低,同样信息消耗更多 token)

GPT-4o 的实际成本计算

场景:一个月有 10,000 次知识库问答对话

每次对话的 Token 构成:
- 系统提示词:300 tokens
- 知识库检索结果(5个片段,每段100tokens):500 tokens
- 用户问题:50 tokens
- 历史对话(5轮):500 tokens
- AI 回答:200 tokens

输入 tokens:300 + 500 + 50 + 500 = 1,350 tokens
输出 tokens:200 tokens

GPT-4o 费用:
  输入:1,350 × 10,000 / 1,000,000 × $5 = $67.5
  输出:200 × 10,000 / 1,000,000 × $15 = $30
  月度总费用:$97.5

使用 gpt-3.5-turbo-0125 替代(输入 $0.5/1M,输出 $1.5/1M):
  输入:1,350 × 10,000 / 1,000,000 × $0.5 = $6.75
  输出:200 × 10,000 / 1,000,000 × $1.5 = $3
  月度总费用:$9.75

成本差异:10 倍!

多模型策略:不同任务用不同模型

生产环境的最佳实践是多模型策略:根据任务复杂度选择合适的模型,而不是所有任务都用最贵的模型。

三层模型架构

Layer 1:轻量模型(高频、简单任务)
  - 模型:gpt-4o-mini 或 Claude 3 Haiku
  - 适用:意图分类、简单问答、内容过滤
  - 成本:~$0.001 / 次

Layer 2:主力模型(中等复杂度任务)
  - 模型:gpt-4o 或 Claude 3.5 Sonnet
  - 适用:知识问答、代码生成、文档分析
  - 成本:~$0.01 / 次

Layer 3:专家模型(复杂推理任务)
  - 模型:o1 或 Claude 3.5 Sonnet(复杂 prompt)
  - 适用:复杂分析、多步推理、需要高准确度的决策
  - 成本:~$0.1 / 次

在 Dify 工作流中实现分层路由

工作流节点设计:

[开始节点] → 接收用户问题
     ↓
[LLM 节点:意图分类](使用 gpt-4o-mini)
  提示词:将以下问题分类为 simple/medium/complex
  输出:{"complexity": "simple/medium/complex"}
     ↓
[条件分支]
  ├── complexity == "simple" → [LLM 节点](gpt-4o-mini)→ [结束]
  ├── complexity == "medium" → [LLM 节点](gpt-4o)→ [结束]
  └── complexity == "complex" → [LLM 节点](claude-3-5-sonnet)→ [结束]

配置模型的备用策略(Fallback)

在 Dify 中为主模型配置备用模型,实现自动降级:

Dify 的模型配置支持 Fallback(通过 API 调用时):

# Dify API 调用时可以指定备用模型
payload = {
    "inputs": {},
    "query": user_question,
    "response_mode": "streaming",
    "model_config": {
        "provider": "openai",
        "name": "gpt-4o",
        "fallback": {
            "provider": "anthropic",
            "name": "claude-3-5-sonnet-20241022"
        }
    }
}

实际的多提供商备份策略

# 构建一个带故障转移的调用包装器
class ResilientDifyClient:
    def __init__(self):
        self.endpoints = [
            {"url": "https://api.dify.ai/v1", "key": PRIMARY_KEY},
            {"url": "https://your-self-hosted-dify.com/v1", "key": BACKUP_KEY},
        ]
    
    def chat(self, message: str, conversation_id: str = None):
        last_error = None
        
        for endpoint in self.endpoints:
            try:
                response = self._call(endpoint, message, conversation_id)
                return response
            except Exception as e:
                last_error = e
                print(f"Endpoint {endpoint['url']} failed: {e}, trying next...")
                continue
        
        raise last_error

Rate Limit 处理:生产必须知道的限速机制

每个模型提供商都有调用频率限制(Rate Limit),理解这些限制对于生产稳定性至关重要。

OpenAI Rate Limit(2024年,因账户等级不同而异)

Tier 1($5 消费以上):
  - GPT-4o: 500 RPM(请求/分钟),30,000 TPM(tokens/分钟)
  - gpt-4o-mini: 500 RPM,200,000 TPM

Tier 3($100 消费以上):
  - GPT-4o: 5,000 RPM,300,000 TPM
  - gpt-4o-mini: 5,000 RPM,4,000,000 TPM

Tier 5($10,000 消费以上):
  - 联系 OpenAI 商务谈定制限额

Dify 的限速处理机制

Dify 的模型网关内置了指数退避重试:

# api/core/model_runtime/utils/encoder.py 中的重试逻辑(简化)
@retry(
    reraise=True,
    stop=stop_after_attempt(3),
    wait=wait_exponential(multiplier=1, min=4, max=10),
    retry=retry_if_exception_type(RateLimitError)
)
def invoke_with_retry(provider, messages, params):
    return provider.invoke(messages, params)

这意味着:

生产环境的请求队列设计

如果你的应用有高并发需求,需要在 Dify 前面加一层队列:

# 使用 Redis 实现令牌桶限流
import redis
import time

class TokenBucketRateLimiter:
    def __init__(self, redis_client, key: str, rate: float, capacity: int):
        """
        rate: 每秒补充的令牌数(如 8.0 表示 500 RPM ÷ 60 秒)
        capacity: 令牌桶容量(防止突发流量)
        """
        self.redis = redis_client
        self.key = key
        self.rate = rate
        self.capacity = capacity
    
    def acquire(self, tokens: int = 1) -> bool:
        """尝试获取 tokens 个令牌,返回是否成功"""
        now = time.time()
        pipe = self.redis.pipeline()
        
        # 使用 Lua 脚本保证原子性
        lua_script = """
        local key = KEYS[1]
        local rate = tonumber(ARGV[1])
        local capacity = tonumber(ARGV[2])
        local now = tonumber(ARGV[3])
        local requested = tonumber(ARGV[4])
        
        local tokens = redis.call('hget', key, 'tokens')
        local last_time = redis.call('hget', key, 'last_time')
        
        if tokens == false then
            tokens = capacity
            last_time = now
        else
            tokens = tonumber(tokens)
            last_time = tonumber(last_time)
            local elapsed = now - last_time
            tokens = math.min(capacity, tokens + elapsed * rate)
        end
        
        if tokens >= requested then
            tokens = tokens - requested
            redis.call('hmset', key, 'tokens', tokens, 'last_time', now)
            return 1
        else
            return 0
        end
        """
        
        result = self.redis.eval(lua_script, 1, self.key, 
                                 self.rate, self.capacity, now, tokens)
        return bool(result)

Embedding 模型的选型

知识库的检索质量很大程度上取决于 Embedding 模型的质量。

主流 Embedding 模型对比

模型 维度 中文支持 多语言 价格(1M tokens) 备注
text-embedding-3-small 1536 较好 $0.02 OpenAI 平衡选择
text-embedding-3-large 3072 $0.13 OpenAI 最高质量
text-embedding-ada-002 1536 较好 $0.10 旧版,不推荐
bge-m3 (本地) 1024 优秀 仅算力成本 开源最佳选择
bge-large-zh (本地) 1024 最好 仅算力成本 纯中文场景首选

实际测试数据(同一批中文问答数据集):

Recall@5 指标(Top 5 检索结果中包含正确答案的比例):

bge-m3:                  92.3%
text-embedding-3-large:  89.7%
text-embedding-3-small:  85.1%
text-embedding-ada-002:  78.4%

结论:
- 纯中文场景:bge-m3 > text-embedding-3-large > text-embedding-3-small
- 多语言场景:text-embedding-3-large ≈ bge-m3
- 成本优先:text-embedding-3-small(性价比最高的商业模型)

Level 3:源码与原理(5 年以上)

Dify 模型网关的完整实现

Dify 的模型网关(api/core/model_runtime/)是一个插件化架构,每个模型提供商是一个独立的插件包。

目录结构

api/core/model_runtime/
├── model_providers/           # 各提供商实现
│   ├── openai/
│   │   ├── _assets/          # 提供商图标等资源
│   │   ├── openai.py         # 提供商主类
│   │   ├── openai.yaml       # 提供商配置(可用模型列表、凭据定义)
│   │   ├── llm/
│   │   │   ├── openai_llm.py # LLM 适配器实现
│   │   │   └── gpt-4o.yaml   # 特定模型的参数定义
│   │   └── text_embedding/
│   │       └── openai_text_embedding.py
│   ├── anthropic/
│   │   ├── anthropic.yaml
│   │   └── llm/
│   │       └── anthropic_llm.py
│   └── ollama/
│       └── llm/
│           └── ollama_llm.py
├── entities/                  # 数据实体定义
│   ├── message_entities.py   # 消息格式(PromptMessage 等)
│   └── model_entities.py     # 模型元数据
└── errors/                   # 错误类型定义
    ├── invoke_error.py
    └── credentials_validate_error.py

提供商 YAML 配置示例openai.yaml 简化版):

provider: openai
label:
  en_US: OpenAI
  zh_Hans: OpenAI
icon_small:
  en_US: icon_s_en.svg
icon_large:
  en_US: icon_l_en.svg
supported_model_types:
  - llm
  - text-embedding
  - speech2text
  - tts
configurate_methods:
  - predefined-model
  - customizable-model
provider_credential_schema:
  credential_form_schemas:
    - variable: openai_api_key
      label:
        en_US: API Key
      type: secret-input
      required: true
      placeholder:
        en_US: Enter your OpenAI API key
    - variable: openai_organization
      label:
        en_US: Organization
      type: text-input
      required: false

LLM 适配器的核心实现openai_llm.py 关键部分):

class OpenAILargeLanguageModel(LargeLanguageModel):
    
    def _invoke(
        self,
        model: str,
        credentials: dict,
        prompt_messages: list[PromptMessage],
        model_parameters: dict,
        tools: list[PromptMessageTool] | None = None,
        stop: list[str] | None = None,
        stream: bool = True,
        user: str | None = None,
    ) -> LLMResult | Generator:
        
        # 初始化 OpenAI 客户端
        client = OpenAI(
            api_key=credentials["openai_api_key"],
            organization=credentials.get("openai_organization"),
            base_url=credentials.get("openai_api_base", "https://api.openai.com/v1")
        )
        
        # 将 Dify 内部消息格式转换为 OpenAI 格式
        openai_messages = self._convert_messages(prompt_messages)
        
        # 将 Dify 工具定义转换为 OpenAI function 格式
        openai_tools = self._convert_tools(tools) if tools else None
        
        # 构建请求参数
        params = {
            "model": model,
            "messages": openai_messages,
            "stream": stream,
            "temperature": model_parameters.get("temperature", 0.7),
            "max_tokens": model_parameters.get("max_tokens", 4096),
        }
        
        if openai_tools:
            params["tools"] = openai_tools
            params["tool_choice"] = "auto"
        
        if stop:
            params["stop"] = stop
        
        # 调用 API
        if stream:
            return self._handle_stream_response(client.chat.completions.create(**params))
        else:
            response = client.chat.completions.create(**params)
            return self._handle_chat_response(response)
    
    def _handle_stream_response(self, stream) -> Generator:
        """处理流式响应,将 OpenAI 格式转换为 Dify 内部格式"""
        for chunk in stream:
            if not chunk.choices:
                continue
            
            delta = chunk.choices[0].delta
            
            if delta.content:
                yield LLMResultChunk(
                    model=chunk.model,
                    prompt_messages=[],
                    delta=LLMResultChunkDelta(
                        index=0,
                        message=AssistantPromptMessage(content=delta.content),
                        finish_reason=chunk.choices[0].finish_reason
                    )
                )
            
            # 处理工具调用
            if delta.tool_calls:
                for tool_call in delta.tool_calls:
                    yield LLMResultChunk(
                        model=chunk.model,
                        prompt_messages=[],
                        delta=LLMResultChunkDelta(
                            index=tool_call.index,
                            message=AssistantPromptMessage(
                                tool_calls=[ToolCall(
                                    id=tool_call.id,
                                    type="function",
                                    function=ToolCallFunction(
                                        name=tool_call.function.name,
                                        arguments=tool_call.function.arguments
                                    )
                                )]
                            )
                        )
                    )

添加自定义模型提供商

如果你需要接入 Dify 尚未支持的模型提供商(如某个私有模型 API),可以实现一个自定义提供商:

最小可行的自定义提供商(兼容 OpenAI API 格式的模型):

# 使用 Dify 的 OpenAI-compatible 配置
# 在 Dify 界面:模型供应商 → OpenAI API compatible → 添加

# 配置参数:
# - Model Name: your-custom-model
# - API Endpoint URL: https://your-model-api.com/v1
# - API Key: your-api-key
# - Model Type: LLM

# 如果你的 API 不完全兼容 OpenAI 格式,需要实现完整的提供商:
# 1. 创建目录:api/core/model_runtime/model_providers/your_provider/
# 2. 实现 your_provider.yaml(提供商配置)
# 3. 实现 llm/your_provider_llm.py(继承 LargeLanguageModel)
# 4. 在 your_provider_llm.py 中实现 _invoke 方法

Token 计数的精确实现

Dify 在每次调用后记录 Token 使用量,用于统计和计费:

# Token 计数的实现(简化)
class TokenCounter:
    def __init__(self, model: str):
        self.model = model
        # 对于 OpenAI 模型,使用 tiktoken 库计算 token
        import tiktoken
        try:
            self.encoder = tiktoken.encoding_for_model(model)
        except KeyError:
            self.encoder = tiktoken.get_encoding("cl100k_base")  # 默认编码
    
    def count_message_tokens(self, messages: list[dict]) -> int:
        """计算消息列表的 token 数"""
        num_tokens = 0
        for message in messages:
            num_tokens += 4  # 每条消息的固定开销
            for key, value in message.items():
                if isinstance(value, str):
                    num_tokens += len(self.encoder.encode(value))
        num_tokens += 2  # 对话结束标记
        return num_tokens

关键细节:对于不同提供商,Token 计数方式不同:


Level 4:生产陷阱与决策(专家视角)

陷阱 1:上下文长度的隐性限制

很多人以为 GPT-4o 有 128K 上下文就可以放心传很长的文档,但实际上有两个隐性限制:

限制 1:价格与上下文长度成正比

128K tokens 的输入价格:
128,000 × $5 / 1,000,000 = $0.64 / 次

如果每天处理 1000 个这样的请求:$640/天 = $19,200/月

限制 2:模型在超长上下文下的注意力衰减

研究表明(Lost in the Middle, Liu et al. 2023),当关键信息位于长上下文的中间部分时,LLM 的检索准确率显著下降。这就是为什么 RAG(将文档切成小块检索)比直接放整个文档效果更好的核心原因之一。

实际建议

陷阱 2:中文 Token 效率问题

中文的 Token 效率低于英文,这在高并发场景下会显著影响成本。

同等含义的文本,中文 Token 数 ≈ 英文 Token 数 × 1.3-1.8

原因:
- GPT 的 tokenizer(BPE)是基于英文训练的
- 中文字符无法被分割为子词,每个字通常占 1 个 token
- 而英文常用单词如 "the" "is" 只占 1 个 token,但包含更多信息

实际影响:
- 同样的产品文档,中文版比英文版消耗约 1.5 倍的 token
- 对于纯中文应用,使用中文优化的 Embedding 模型(如 bge-m3)更高效

解决方案:对于数据量大的场景,考虑使用本地 Embedding 模型(bge-m3)+ 商业 LLM 的组合,既保证检索质量,又避免 Embedding 费用。

陷阱 3:API Key 安全管理

在生产环境中,API Key 的管理是安全的关键。常见错误:

错误做法

# 危险!API Key 硬编码在代码中
API_KEY = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

# 危险!API Key 存在 .env 文件但被提交到 Git
# .gitignore 忘记添加 .env

正确做法

# 1. 使用环境变量
import os
API_KEY = os.environ.get("DIFY_API_KEY")
if not API_KEY:
    raise ValueError("DIFY_API_KEY environment variable not set")

# 2. 在 Dify 自托管版本中,通过 .env 文件注入(不提交到 Git)
# .gitignore 必须包含 .env

# 3. 生产环境使用 Secret 管理服务
# AWS Secrets Manager, HashiCorp Vault, Kubernetes Secrets 等

# 4. 定期轮换 API Key
# 建议每 90 天轮换一次,发现泄露立即撤销

监控 API Key 使用异常

# OpenAI 的使用监控 API
curl -H "Authorization: Bearer $OPENAI_KEY" \
  "https://api.openai.com/dashboard/billing/usage?start_date=2024-01-01&end_date=2024-01-31"

# 配置告警:当单日消费超过阈值时发邮件通知

模型选型决策树

面对新项目,用这个决策树快速确定模型配置:

问题 1:数据能否离开本地?
├── 不能(合规要求)→ 本地模型(Ollama + Llama/Qwen)
└── 可以 → 问题 2

问题 2:主要任务是什么?
├── 中文知识问答 → Qwen2.5-72B(中文最强)或 GPT-4o
├── 代码生成 → Claude 3.5 Sonnet(代码任务领先)
├── 长文档分析 → Claude 3.5 Sonnet(200K 上下文)
├── 图像理解 → GPT-4o 或 Gemini 1.5 Pro
└── 通用任务 → GPT-4o 或 Claude 3.5 Sonnet

问题 3:日调用量多少?
├── < 1000 次 → 随便选,成本差异不显著
├── 1000-10000 次 → 考虑 gpt-4o-mini 或 Claude 3 Haiku
└── > 10000 次 → 必须做成本优化,考虑分层路由

问题 4:预算是多少?
├── < $100/月 → gpt-4o-mini 或本地模型
├── $100-500/月 → GPT-4o 或 Claude 3.5 Sonnet,控制好用量
└── 不限 → 按质量选,不同任务用最适合的模型

本章小结

模型接入不只是"填一个 API Key"这么简单。生产级的模型管理需要考虑能力匹配、成本控制、限速处理、安全管理等多个维度。

核心要点

  1. 模型分层:不同复杂度的任务用不同的模型,10 倍的成本差异意味着 10 倍的利润空间
  2. 中文场景优先考虑 bge-m3:作为 Embedding 模型,bge-m3 在中文检索上比 OpenAI 的 Embedding 效果更好
  3. 本地模型的价值:数据合规不是唯一理由,大规模部署时本地模型的总成本可能远低于云模型
  4. Rate Limit 是生产的必修课:提前了解各提供商的限制,在应用层做好队列和退避处理
  5. API Key 安全:生产环境必须使用 Secret 管理服务,绝不硬编码

下一章将深入 RAG 的核心原理:向量检索、全文检索、混合检索的机制对比,以及如何在 Dify 中配置出最优的检索效果。

本章评分
4.5  / 5  (70 评分)

💬 留言讨论