Files
BiliNote/backend/app/utils/siliconflow_helper.py
yangyuguang ab8cdc416a feat: 添加硅基流动(SiliconFlow)支持和错误处理优化
## 主要更新

### 新增功能
- 新增 SiliconFlow_provider.py 专用提供商
- 添加硅基流动 API 集成文档
- 实现 Cherry Studio 风格的连接测试

### 错误处理优化
- 修复前端 Form.tsx 错误显示问题
- 改进 universal_gpt.py 异常处理逻辑
- 统一 URL 格式处理,避免路径重复

### 兼容性改进
- 优化 OpenAI 兼容提供商 URL 处理
- 增强模型列表获取的容错性
- 添加详细的调试日志

### 安全性提升
- 更新 .gitignore 保护敏感信息
- 移除示例配置文件

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-13 09:53:39 +08:00

169 lines
5.6 KiB
Python

"""
硅基流动快速配置工具
基于市面上成熟的接入方案
"""
from app.gpt.provider.SiliconFlow_provider import SiliconFlowProvider
class SiliconFlowSetupHelper:
"""硅基流动配置助手"""
@classmethod
def get_quick_setup_guide(cls) -> dict:
"""获取快速配置指南"""
return {
"title": "硅基流动(SiliconFlow)快速配置指南",
"steps": [
{
"step": 1,
"title": "获取API密钥",
"description": "访问 https://cloud.siliconflow.cn/account/ak 获取API密钥",
"note": "需要先注册账号并登录"
},
{
"step": 2,
"title": "选择API端点",
"description": "根据地理位置选择合适的端点",
"options": {
"国内用户": "https://api.siliconflow.cn/v1",
"海外用户": "https://api-st.siliconflow.cn/v1"
}
},
{
"step": 3,
"title": "填写配置信息",
"fields": {
"名称": "硅基流动",
"API Key": "从步骤1获取的密钥",
"API地址": "从步骤2选择的端点",
"类型": "custom"
}
},
{
"step": 4,
"title": "测试连接",
"description": "点击测试连通性按钮验证配置"
}
],
"recommended_models": SiliconFlowProvider.SUPPORTED_MODELS[:5],
"troubleshooting": {
"连接失败": [
"检查API密钥是否正确",
"确认API地址格式正确",
"尝试切换到另一个端点",
"检查网络连接"
],
"模型列表为空": [
"确认API密钥有效",
"检查账户余额",
"联系硅基流动客服"
]
}
}
@classmethod
def validate_config(cls, api_key: str, base_url: str) -> dict:
"""验证配置"""
try:
result = SiliconFlowProvider.test_connection(api_key, base_url)
return {
"success": True,
"message": "硅基流动配置验证成功",
"recommended_next_steps": [
"添加推荐的模型到列表",
"开始使用AI功能"
]
}
except Exception as e:
return {
"success": False,
"message": f"配置验证失败: {str(e)}",
"suggestions": cls._get_error_suggestions(str(e))
}
@classmethod
def _get_error_suggestions(cls, error_msg: str) -> list:
"""根据错误信息提供建议"""
suggestions = []
if "API Key" in error_msg:
suggestions.extend([
"检查API密钥是否从 https://cloud.siliconflow.cn/account/ak 正确复制",
"确认API密钥没有过期",
"检查账户状态是否正常"
])
if "404" in error_msg or "地址" in error_msg:
suggestions.extend([
"确认使用正确的API地址: https://api.siliconflow.cn/v1",
"海外用户尝试: https://api-st.siliconflow.cn/v1",
"检查URL末尾是否包含 /v1"
])
if "timeout" in error_msg or "连接" in error_msg:
suggestions.extend([
"检查网络连接",
"尝试切换网络环境",
"联系网络管理员检查防火墙设置"
])
if not suggestions:
suggestions.append("请参考官方文档或联系技术支持")
return suggestions
@classmethod
def get_example_usage(cls) -> dict:
"""获取使用示例"""
return {
"python_code": '''
# 硅基流动使用示例
from openai import OpenAI
client = OpenAI(
api_key="你的API密钥",
base_url="https://api.siliconflow.cn/v1"
)
response = client.chat.completions.create(
model="Qwen/Qwen2.5-7B-Instruct",
messages=[
{"role": "user", "content": "你好,介绍一下自己"}
]
)
print(response.choices[0].message.content)
''',
"curl_example": '''
curl -X POST "https://api.siliconflow.cn/v1/chat/completions" \\
-H "Authorization: Bearer 你的API密钥" \\
-H "Content-Type: application/json" \\
-d '{
"model": "Qwen/Qwen2.5-7B-Instruct",
"messages": [
{"role": "user", "content": "你好"}
]
}'
'''
}
if __name__ == "__main__":
# 打印配置指南
guide = SiliconFlowSetupHelper.get_quick_setup_guide()
print("=" * 50)
print(guide["title"])
print("=" * 50)
for step in guide["steps"]:
print(f"\n步骤 {step['step']}: {step['title']}")
print(f"描述: {step['description']}")
if "options" in step:
for option, value in step["options"].items():
print(f" {option}: {value}")
if "fields" in step:
for field, value in step["fields"].items():
print(f" {field}: {value}")
print(f"\n推荐模型:")
for i, model in enumerate(guide["recommended_models"], 1):
print(f" {i}. {model}")