fix(api): 改进DeepSeek API密钥的动态加载和验证
统一各模块中DeepSeek API密钥的加载方式,确保使用最新的环境变量 添加密钥有效性检查,并在无效时提供降级方案
This commit is contained in:
parent
2c0c045b2f
commit
52c426b241
@ -59,13 +59,38 @@ class DeepSeekIntegrator:
|
|||||||
|
|
||||||
def _call_api(self, prompt, max_tokens=1000, temperature=0.7):
|
def _call_api(self, prompt, max_tokens=1000, temperature=0.7):
|
||||||
"""调用DeepSeek API"""
|
"""调用DeepSeek API"""
|
||||||
|
# 重新加载环境变量,确保使用最新的API密钥
|
||||||
|
load_dotenv()
|
||||||
|
current_api_key = os.getenv("DEEPSEEK_API_KEY")
|
||||||
|
|
||||||
|
# 如果实例化时没有提供API密钥,使用当前环境变量中的值
|
||||||
|
api_key_to_use = self.api_key or current_api_key
|
||||||
|
|
||||||
# 确保API密钥已配置
|
# 确保API密钥已配置
|
||||||
if not self.api_key:
|
if not api_key_to_use or api_key_to_use == "your-key-here":
|
||||||
raise ValueError("DeepSeek API密钥未配置")
|
# 返回模拟结果作为降级方案
|
||||||
|
print("DeepSeek API密钥未配置或无效,返回模拟响应")
|
||||||
|
|
||||||
|
if "历史案例" in prompt or "相似事件" in prompt:
|
||||||
|
return {
|
||||||
|
"choices": [{"message": {"content": json.dumps(self.similar_cases, ensure_ascii=False)}}]
|
||||||
|
}
|
||||||
|
elif "公关声明" in prompt or "道歉信" in prompt:
|
||||||
|
return {
|
||||||
|
"choices": [{"message": {"content": self._generate_pr_statement(prompt)}}]
|
||||||
|
}
|
||||||
|
elif "传播路径" in prompt or "影响预测" in prompt:
|
||||||
|
return {
|
||||||
|
"choices": [{"message": {"content": self._predict_propagation(prompt)}}]
|
||||||
|
}
|
||||||
|
else:
|
||||||
|
return {
|
||||||
|
"choices": [{"message": {"content": "API密钥未配置,返回模拟响应。"}}]
|
||||||
|
}
|
||||||
|
|
||||||
# 实际API调用代码
|
# 实际API调用代码
|
||||||
headers = {
|
headers = {
|
||||||
"Authorization": f"Bearer {self.api_key}",
|
"Authorization": f"Bearer {api_key_to_use}",
|
||||||
"Content-Type": "application/json"
|
"Content-Type": "application/json"
|
||||||
}
|
}
|
||||||
payload = {
|
payload = {
|
||||||
|
|||||||
@ -61,10 +61,15 @@ def call_deepseek_api(prompt: str, max_tokens: int = 500, temperature: float = 0
|
|||||||
"""调用DeepSeek大模型API"""
|
"""调用DeepSeek大模型API"""
|
||||||
import time
|
import time
|
||||||
import requests
|
import requests
|
||||||
|
import json
|
||||||
|
|
||||||
|
# 重新加载环境变量,确保使用最新的API密钥
|
||||||
|
load_dotenv()
|
||||||
|
current_api_key = os.getenv("DEEPSEEK_API_KEY")
|
||||||
|
|
||||||
# 检查API Key是否配置
|
# 检查API Key是否配置
|
||||||
if not DEEPSEEK_API_KEY:
|
if not current_api_key or current_api_key == "your-key-here":
|
||||||
print("DeepSeek API密钥未配置,返回模拟响应")
|
print("DeepSeek API密钥未配置或无效,返回模拟响应")
|
||||||
# 返回模拟响应
|
# 返回模拟响应
|
||||||
if "问题分类" in prompt:
|
if "问题分类" in prompt:
|
||||||
return json.dumps({"primary_category": "其他", "secondary_category": "其他"}, ensure_ascii=False)
|
return json.dumps({"primary_category": "其他", "secondary_category": "其他"}, ensure_ascii=False)
|
||||||
@ -85,7 +90,7 @@ def call_deepseek_api(prompt: str, max_tokens: int = 500, temperature: float = 0
|
|||||||
try:
|
try:
|
||||||
headers = {
|
headers = {
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
"Authorization": f"Bearer {DEEPSEEK_API_KEY}"
|
"Authorization": f"Bearer {current_api_key}"
|
||||||
}
|
}
|
||||||
|
|
||||||
payload = {
|
payload = {
|
||||||
|
|||||||
@ -610,16 +610,27 @@ class SmartCustomerService:
|
|||||||
def _call_deepseek_api(self, user_id: str, churn_prediction: Dict[str, Any], query: str = "") -> str:
|
def _call_deepseek_api(self, user_id: str, churn_prediction: Dict[str, Any], query: str = "") -> str:
|
||||||
"""调用DeepSeek API生成挽留措施"""
|
"""调用DeepSeek API生成挽留措施"""
|
||||||
try:
|
try:
|
||||||
|
# 重新加载环境变量,确保使用最新的API密钥
|
||||||
|
load_dotenv()
|
||||||
|
current_api_key = os.getenv("DEEPSEEK_API_KEY", "")
|
||||||
|
|
||||||
# 检查API密钥是否有效
|
# 检查API密钥是否有效
|
||||||
if not DEEPSEEK_API_KEY or DEEPSEEK_API_KEY == "your-key-here":
|
if not current_api_key or current_api_key == "your-key-here":
|
||||||
st.warning("DeepSeek API密钥未配置或无效,将使用备用方案")
|
st.warning("DeepSeek API密钥未配置或无效,将使用备用方案")
|
||||||
return self._generate_mock_retention_plan(user_id, churn_prediction, query)
|
return self._generate_mock_retention_plan(user_id, churn_prediction, query)
|
||||||
|
|
||||||
|
# 在函数内部创建client对象,确保使用最新的API密钥
|
||||||
|
from openai import OpenAI
|
||||||
|
current_client = OpenAI(
|
||||||
|
api_key=current_api_key,
|
||||||
|
base_url=DEEPSEEK_API_BASE
|
||||||
|
)
|
||||||
|
|
||||||
# 构建智能提示词(包含用户查询内容)
|
# 构建智能提示词(包含用户查询内容)
|
||||||
prompt = self._build_retention_prompt(user_id, churn_prediction, query)
|
prompt = self._build_retention_prompt(user_id, churn_prediction, query)
|
||||||
|
|
||||||
# 调用DeepSeek API(使用新的openai接口)
|
# 调用DeepSeek API(使用新的openai接口)
|
||||||
response = client.chat.completions.create(
|
response = current_client.chat.completions.create(
|
||||||
model="deepseek-chat",
|
model="deepseek-chat",
|
||||||
messages=[
|
messages=[
|
||||||
{"role": "system", "content": "你是一个专业的客户关系管理专家,擅长制定客户挽留策略。请基于客户的具体问题和流失风险分析,提供切实可行的个性化挽留措施。"},
|
{"role": "system", "content": "你是一个专业的客户关系管理专家,擅长制定客户挽留策略。请基于客户的具体问题和流失风险分析,提供切实可行的个性化挽留措施。"},
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user