在第一周的入门指南中,我们已经学会了如何使用 SightAI 的基础 API 调用,实现了一个简单的对话交互。不少开发者会面临新的需求:想降低推理成本时,如何找到性价比更高的模型?追求交互速度时,怎样获取更快的响应?需要特定能力(如 Claude 的长文本处理)时,又该如何精准对接?这些问题的答案,就藏在 SightAI 的智能路由机制与多模型灵活调用能力中。本文将带大家跳出基础调用框架,深入实战智能路由配置、流式传输与函数调用,让 SightAI 更好地适配复杂业务场景。
回顾基础调用流程,我们只需配置网关地址与 API Key,就能通过 OpenAI 兼容格式调用模型。但在实际开发中,单一模型调用难以满足多样化需求 ------ 比如做客服机器人时,简单问答用廉价模型即可,复杂咨询才需要高性能模型;做实时交互工具时,等待完整响应会严重影响用户体验。而 SightAI 的核心优势,正是通过 "多模型整合 + 智能调度",帮开发者在成本、速度、功能间找到最优解。
模型选择:从 "指定调用" 到 "智能匹配"
SightAI 支持两种模型选择方式,既满足精准控制需求,也能实现自动化最优调度,开发者可根据业务场景灵活切换。
精准指定:按需锁定目标模型
若业务对模型能力有明确要求(如用 Claude 处理长文本、用 DeepSeek-Coder 生成代码),可在请求体中通过 model
字段直接指定模型代号。常见的模型代号包括:
-
通用低成本:
gpt-4.1-mini
(平衡性价比与稳定性)、gemini-2.0-flash-lite
(轻量任务首选); -
长文本 / 复杂任务:
claude-3-sonnet
(支持超长上下文)、gpt-4o
(多模态能力强); -
代码专项:
deepseek-coder
(代码生成与改写性价比高)。
需要注意的是,模型列表会随上游合作动态更新,建议通过 SightAI 控制台的 "模型目录" 查看最新支持的模型及对应的能力描述(如上下文长度、支持功能),避免因代号变更导致调用失败。例如,若需调用 Claude 系列模型,可在目录中确认当前支持的具体版本(如 claude-3-haiku
或 claude-3-sonnet
)及对应的 Token 计费标准。
智能路由:自动匹配最优通道
当不指定模型,或指定通用代号(如 gpt-4
)时,SightAI 会启动智能路由机制,从多维度筛选最佳上游通道。其核心逻辑是综合 "价格、延迟、可用性" 三个关键指标:
-
价格优先:自动选择当前场景下 Token 单价最低的可用通道,比如简单问答优先匹配
gpt-4.1-mini
而非gpt-4o
; -
延迟优化:通过实时监测各上游通道的响应速度,将紧急请求(如实时聊天)路由到延迟最低的节点;
-
故障兜底:若某一通道出现限流、超时,系统会自动重试并回退到备用通道,无需开发者额外处理。
这种机制尤其适合流量波动大、对稳定性要求高的场景。例如 Web3 项目的活动高峰期,大量并发请求可能导致单一上游限流,而 SightAI 的自动回退能力可将请求成功率提升至 99% 以上,避免因接口故障影响用户体验。
流式传输(SSE):让交互更实时
在聊天机器人、实时内容生成等场景中,等待完整响应会让用户产生明显的等待感。SightAI 支持的流式传输(Server-Sent Events,SSE)功能,可将模型响应按 "数据块" 实时返回,大幅提升交互流畅度。
为什么必须用流式?
以客服机器人为例,若用户提问 "如何接入 SightAI 流式接口",完整响应可能包含 500 字内容,全量返回需要 3-5 秒;而通过流式传输,模型生成第一句话(约 50 字)后就会立即返回,用户可在 1 秒内看到初步回复,后续内容持续追加,体验接近 "实时对话"。此外,流式传输还能降低客户端内存占用,避免因处理大体积完整响应导致的性能问题。
Python 实战:用 requests 实现流式响应
使用 Python 的 requests
库,只需在请求体中添加 stream: true
参数,并通过迭代器处理返回的数据流即可。示例代码如下:
python
运行
Python
import os
import requests
import json
# 配置环境变量(建议将密钥存于环境变量,避免硬编码)
SIGHT_API_BASE = os.getenv("SIGHT_API_BASE", "https://<your-gateway>/v1")
SIGHT_API_KEY = os.getenv("SIGHT_API_KEY", "sk-************************")# 构建请求参数
payload = {"model": "gpt-4.1-mini","stream": True, # 开启流式传输"messages": [{"role": "user", "content": "解释什么是 SSE 流式传输?用简单的话说明"}]}# 发起请求并处理流数据with requests.post(f"{SIGHT_API_BASE}/chat/completions",
headers={"Authorization": f"Bearer {SIGHT_API_KEY}","Content-Type": "application/json"},
json=payload,
stream=True, # 关键参数:开启流式接收
timeout=300) as resp:for line in resp.iter_lines():if not line:continue# 解析 SSE 格式数据(前缀为 "data: ")if line.startswith(b"data: "):
payload = line[6:].strip()# 流结束标识if payload == b"[DONE]":break# 解析 JSON 数据并提取内容try:
chunk = json.loads(payload)
content = chunk.get("choices", [{}])[0].get("delta", {}).get("content", "")if content:print(content, end="", flush=True) # 实时打印响应内容except json.JSONDecodeError:print("解析流数据失败")
代码中,stream=True
是开启流式的核心配置,iter_lines()
用于逐行读取服务器返回的数据流,而 flush=True
确保内容实时输出,不被缓存。
JavaScript 实战:前端用 Fetch API 处理流
在前端场景中,可通过 Fetch API 监听 readable
事件,实现流式响应的实时渲染。示例代码如下(适用于浏览器环境):
javascript
运行
JavaScript
async function streamChat() {const apiBase = "https://<your-gateway>/v1";const apiKey = "sk-************************"; // 注意:生产环境需通过后端转发,避免暴露密钥const response = await fetch(`${apiBase}/chat/completions`, {method: "POST",headers: {"Authorization": `Bearer ${apiKey}`,"Content-Type": "application/json"},body: JSON.stringify({"model": "gpt-4.1-mini","stream": true,"messages": [{"role": "user", "content": "推荐 3 个适合新手的 Python 库"}]})});if (!response.ok) {throw new Error(`请求失败: ${response.status}`);}// 获取可读流并创建解码器const reader = response.body.getReader();const decoder = new TextDecoder("utf-8");let buffer = "";const chatContainer = document.getElementById("chat-content"); // 页面中用于展示响应的元素while (true) {const { done, value } = await reader.read();if (done) break;// 解码二进制数据并拼接缓冲区
buffer += decoder.decode(value, { stream: true });const lines = buffer.split("\n");
buffer = lines.pop() || ""; // 保留未完整解析的行// 处理每一行 SSE 数据for (const line of lines) {if (!line.startsWith("data: ")) continue;const payload = line.slice(6).trim();if (payload === "[DONE]") continue;try {const chunk = JSON.parse(payload);const content = chunk.choices?.[0]?.delta?.content;if (content) {
chatContainer.textContent += content; // 实时追加内容到页面}} catch (e) {console.error("解析流数据错误:", e);}}}}// 调用函数启动流式聊天streamChat();
需特别注意:前端直接暴露 API Key 存在安全风险,生产环境中建议通过后端服务转发请求,将密钥存储在服务器端。
函数调用:让模型具备 "工具使用能力"
SightAI 完全兼容 OpenAI 风格的函数调用格式,可让模型根据需求自动调用外部工具(如查询天气、调用数据库接口),实现 "思考 + 执行" 的闭环。
以 "查询北京实时天气" 为例,函数调用流程分为三步:定义工具、模型决策调用、执行工具并返回结果。
第一步:定义工具函数与请求格式
首先需在请求体中通过 tools
字段定义工具的名称、描述与参数结构,告知模型 "可调用什么工具":
json
JSON
{"model": "gpt-4.1-mini","messages": [{"role": "user", "content": "北京现在的天气怎么样?"}],"tools": [{"type": "function","function": {"name": "get_real_time_weather", // 工具名称"description": "获取指定城市的实时天气数据,包括温度、湿度、风力", // 工具功能描述"parameters": {"type": "object","properties": {"city": {"type": "string","description": "城市名称,如北京、上海" // 参数说明}},"required": ["city"] // 必传参数}}}]}
第二步:模型返回调用指令
发送请求后,模型会分析用户需求,判断需要调用 get_real_time_weather
工具,并返回包含调用参数的响应:
json
JSON
{"id": "chatcmpl-xxxx","object": "chat.completion","created": 1725000000,"model": "gpt-4.1-mini","choices": [{"index": 0,"message": {"role": "assistant","content": null,"tool_calls": [{"id": "toolcall-xxxx","type": "function","function": {"name": "get_real_time_weather","arguments": "{\"city\":\"北京\"}" // 模型自动提取的参数}}]},"finish_reason": "tool_calls"}]}
第三步:执行工具并回传结果
开发者需解析模型返回的 tool_calls
信息,调用实际的天气查询接口(如第三方天气 API),再将结果封装成 "工具响应" 格式回传给模型:
json
JSON
{"model": "gpt-4.1-mini","messages": [{"role": "user", "content": "北京现在的天气怎么样?"},// 第一步中模型返回的调用指令{"role": "assistant", "content": null, "tool_calls": [{"id": "toolcall-xxxx", "type": "function", "function": {"name": "get_real_time_weather", "arguments": "{\"city\":\"北京\"}"}}]},// 新增:工具执行结果{"role": "tool", "tool_call_id": "toolcall-xxxx", "content": "{\"city\":\"北京\",\"temperature\":26,\"humidity\":50,\"wind\":\"3级西北风\"}"}]}
模型接收结果后,会将其整理成自然语言回答,最终返回给用户:"北京当前气温 26℃,湿度 50%,伴有 3 级西北风,天气晴朗适宜户外活动。"
通过这种方式,开发者可将模型与支付接口、物流查询、数据库操作等工具结合,大幅拓展应用的功能边界。
成本控制:让每一分钱都用在刀刃上
在使用多模型与智能路由时,合理控制成本是关键。以下两个小技巧可帮助开发者优化支出:
- 控制台设置用量告警
进入 SightAI 控制台的 "计费管理" 页面,可配置 "月度用量上限" 与 "余额告警":
-
用量上限:设置每月最大 Token 消耗(如 100 万 Token),达到上限后自动停止调用,避免超支;
-
余额告警:当账户余额低于设定阈值(如 100 美元)时,系统会通过邮件或短信提醒充值,防止因余额不足导致服务中断。
- 按场景选择性价比模型
根据任务复杂度选择合适的模型,是降低成本的核心。例如:
-
海量简单问答(如用户常见问题):优先用
gpt-4.1-mini
(输入 0.1/1M Token,输出 0.4/1M Token),成本仅为gpt-4o
的 1/20; -
中长文本生成(如产品文案):可用
deepseek-v3
(输入 0.07/1M Token,输出 1.68/1M Token),兼顾质量与成本; -
复杂推理(如数据分析):再启用
gpt-4o
或claude-3-sonnet
,确保结果准确性。
小结与预告
本文通过实战案例,讲解了 SightAI 智能路由、流式传输与函数调用的核心用法 ------ 智能路由帮我们在成本、速度、稳定性间找到平衡,流式传输让交互更实时,函数调用则拓展了模型的工具使用能力。掌握这些功能后,开发者可轻松应对客服机器人、实时内容生成、工具集成等复杂场景。
下一篇,我们将进一步深入企业级应用场景,探讨如何通过 SightAI 实现多团队 API Key 管理、定制化路由策略(如按地区筛选上游通道),以及如何利用 "Share Your Key" 功能实现闲置额度变现。敬请期待!
Sight AI正在征集种子用户,快来申请成为首批获得SightAI免费API积分的5000名用户之一🎉
申请地址👉https://ujp8i84zazfl.jp.larksuite.com/share/base/form/shrjpx2HMJ70gZ4KnC0QOBF3uTe
我们将逐步向候补名单用户推出访问权限,并通过电子邮件或系统通知让您保持更新。
欢迎加入Sight AI技术社区参与讨论