update
This commit is contained in:
parent
e8ff4b80f8
commit
e2f5aef205
@ -56,10 +56,7 @@ class CryptoAgent:
|
|||||||
test_mode=self.okx_config['test_mode']
|
test_mode=self.okx_config['test_mode']
|
||||||
)
|
)
|
||||||
|
|
||||||
self.deepseek_api = DeepSeekAPI(
|
self.deepseek_api = DeepSeekAPI()
|
||||||
api_key=self.deepseek_config['api_key'],
|
|
||||||
model=self.deepseek_config['model']
|
|
||||||
)
|
|
||||||
|
|
||||||
# 初始化数据处理器
|
# 初始化数据处理器
|
||||||
self.data_processor = DataProcessor(storage_path=self.data_config['storage_path'])
|
self.data_processor = DataProcessor(storage_path=self.data_config['storage_path'])
|
||||||
|
|||||||
@ -52,10 +52,7 @@ class GoldAgent:
|
|||||||
api_key=self.alltick_config['api_key']
|
api_key=self.alltick_config['api_key']
|
||||||
)
|
)
|
||||||
|
|
||||||
self.deepseek_api = DeepSeekAPI(
|
self.deepseek_api = DeepSeekAPI()
|
||||||
api_key=self.deepseek_config['api_key'],
|
|
||||||
model=self.deepseek_config['model']
|
|
||||||
)
|
|
||||||
|
|
||||||
# 初始化数据处理器
|
# 初始化数据处理器
|
||||||
self.data_processor = DataProcessor(storage_path=os.path.join(self.data_config['storage_path'], 'gold'))
|
self.data_processor = DataProcessor(storage_path=os.path.join(self.data_config['storage_path'], 'gold'))
|
||||||
|
|||||||
Binary file not shown.
@ -6,6 +6,8 @@ import time
|
|||||||
import logging
|
import logging
|
||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
|
from cryptoai.utils.config_loader import ConfigLoader
|
||||||
|
|
||||||
# 配置日志
|
# 配置日志
|
||||||
logging.basicConfig(
|
logging.basicConfig(
|
||||||
level=logging.INFO,
|
level=logging.INFO,
|
||||||
@ -19,7 +21,7 @@ logging.basicConfig(
|
|||||||
class DeepSeekAPI:
|
class DeepSeekAPI:
|
||||||
"""DeepSeek API交互类,用于进行大语言模型调用"""
|
"""DeepSeek API交互类,用于进行大语言模型调用"""
|
||||||
|
|
||||||
def __init__(self, api_key: str, model: str = "deepseek-moe-16b-chat"):
|
def __init__(self):
|
||||||
"""
|
"""
|
||||||
初始化DeepSeek API
|
初始化DeepSeek API
|
||||||
|
|
||||||
@ -27,12 +29,16 @@ class DeepSeekAPI:
|
|||||||
api_key: DeepSeek API密钥
|
api_key: DeepSeek API密钥
|
||||||
model: 使用的模型名称
|
model: 使用的模型名称
|
||||||
"""
|
"""
|
||||||
self.api_key = api_key
|
|
||||||
self.model = model
|
config_loader = ConfigLoader()
|
||||||
|
self.deepseek_config = config_loader.get_deepseek_config()
|
||||||
|
|
||||||
|
self.api_key = self.deepseek_config['api_key']
|
||||||
|
self.model = self.deepseek_config['model']
|
||||||
self.base_url = "https://api.deepseek.com/v1"
|
self.base_url = "https://api.deepseek.com/v1"
|
||||||
self.headers = {
|
self.headers = {
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
"Authorization": f"Bearer {api_key}"
|
"Authorization": f"Bearer {self.api_key}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Token 使用统计
|
# Token 使用统计
|
||||||
@ -46,6 +52,58 @@ class DeepSeekAPI:
|
|||||||
# 创建日志记录器
|
# 创建日志记录器
|
||||||
self.logger = logging.getLogger("DeepSeekAPI")
|
self.logger = logging.getLogger("DeepSeekAPI")
|
||||||
|
|
||||||
|
def streaming_call(self, user_prompt: str):
|
||||||
|
"""
|
||||||
|
流式调用DeepSeek API
|
||||||
|
"""
|
||||||
|
|
||||||
|
system_prompt = "你是一个专业的区块链分析高手"
|
||||||
|
|
||||||
|
try:
|
||||||
|
endpoint = f"{self.base_url}/chat/completions"
|
||||||
|
payload = {
|
||||||
|
"model": self.model,
|
||||||
|
"messages": [{"role": "system", "content": system_prompt}, {"role": "user", "content": user_prompt}],
|
||||||
|
"stream": True
|
||||||
|
}
|
||||||
|
|
||||||
|
response = requests.post(endpoint, headers=self.headers, json=payload, stream=True)
|
||||||
|
response.raise_for_status()
|
||||||
|
|
||||||
|
for line in response.iter_lines():
|
||||||
|
if line:
|
||||||
|
# 解码二进制数据为字符串
|
||||||
|
line = line.decode('utf-8')
|
||||||
|
|
||||||
|
# 跳过空行和心跳检查行
|
||||||
|
if not line or line == "data: [DONE]":
|
||||||
|
continue
|
||||||
|
|
||||||
|
# 移除 "data: " 前缀
|
||||||
|
if line.startswith("data: "):
|
||||||
|
line = line[6:]
|
||||||
|
|
||||||
|
try:
|
||||||
|
# 解析JSON数据
|
||||||
|
data = json.loads(line)
|
||||||
|
|
||||||
|
# 提取content内容
|
||||||
|
if (data.get("choices") and
|
||||||
|
len(data["choices"]) > 0 and
|
||||||
|
data["choices"][0].get("delta") and
|
||||||
|
data["choices"][0]["delta"].get("content")):
|
||||||
|
|
||||||
|
content = data["choices"][0]["delta"]["content"]
|
||||||
|
yield content
|
||||||
|
except json.JSONDecodeError as e:
|
||||||
|
self.logger.error(f"解析JSON时出错: {e}, 原始数据: {line}")
|
||||||
|
continue
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
self.logger.error(f"流式调用DeepSeek API时出错: {e}")
|
||||||
|
raise e
|
||||||
|
|
||||||
|
|
||||||
def call_model(self, prompt: str, system_prompt: str = None, task_type: str = "未知任务", symbol: str = "未知", temperature: float = 0.2, max_tokens: int = 2000) -> Tuple[Dict[str, Any], Dict[str, Any]]:
|
def call_model(self, prompt: str, system_prompt: str = None, task_type: str = "未知任务", symbol: str = "未知", temperature: float = 0.2, max_tokens: int = 2000) -> Tuple[Dict[str, Any], Dict[str, Any]]:
|
||||||
"""
|
"""
|
||||||
调用DeepSeek大语言模型
|
调用DeepSeek大语言模型
|
||||||
|
|||||||
@ -14,6 +14,21 @@ import logging
|
|||||||
|
|
||||||
from cryptoai.api.deepseek_api import DeepSeekAPI
|
from cryptoai.api.deepseek_api import DeepSeekAPI
|
||||||
from cryptoai.utils.config_loader import ConfigLoader
|
from cryptoai.utils.config_loader import ConfigLoader
|
||||||
|
from fastapi.responses import StreamingResponse
|
||||||
# 创建路由
|
# 创建路由
|
||||||
router = APIRouter(prefix="/api", tags=["加密AI接口"])
|
router = APIRouter()
|
||||||
|
|
||||||
|
class ChatRequest(BaseModel):
|
||||||
|
user_prompt: str
|
||||||
|
|
||||||
|
|
||||||
|
@router.post("/chat")
|
||||||
|
async def chat(request: ChatRequest):
|
||||||
|
"""
|
||||||
|
聊天接口
|
||||||
|
"""
|
||||||
|
|
||||||
|
deepseek_api = DeepSeekAPI()
|
||||||
|
response = deepseek_api.streaming_call(request.user_prompt)
|
||||||
|
|
||||||
|
return StreamingResponse(response, media_type="text/plain")
|
||||||
@ -15,7 +15,7 @@ from fastapi.responses import JSONResponse
|
|||||||
import time
|
import time
|
||||||
from typing import Dict, Any
|
from typing import Dict, Any
|
||||||
|
|
||||||
from cryptoai.routes.routes import router as api_router
|
from cryptoai.routes.agent import router as agent_router
|
||||||
|
|
||||||
# 配置日志
|
# 配置日志
|
||||||
logging.basicConfig(
|
logging.basicConfig(
|
||||||
@ -45,7 +45,7 @@ app.add_middleware(
|
|||||||
)
|
)
|
||||||
|
|
||||||
# 添加API路由
|
# 添加API路由
|
||||||
app.include_router(api_router)
|
app.include_router(agent_router, prefix="/agent")
|
||||||
|
|
||||||
# 请求计时中间件
|
# 请求计时中间件
|
||||||
@app.middleware("http")
|
@app.middleware("http")
|
||||||
@ -103,7 +103,7 @@ def start():
|
|||||||
"cryptoai.routes.fastapi_app:app",
|
"cryptoai.routes.fastapi_app:app",
|
||||||
host=host,
|
host=host,
|
||||||
port=port,
|
port=port,
|
||||||
reload=False # 生产环境设为False
|
reload=True # 生产环境设为False
|
||||||
)
|
)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
@ -24,17 +24,7 @@ def get_deepseek_api() -> DeepSeekAPI:
|
|||||||
"""
|
"""
|
||||||
获取已配置的DeepSeekAPI实例
|
获取已配置的DeepSeekAPI实例
|
||||||
"""
|
"""
|
||||||
config_loader = ConfigLoader()
|
return DeepSeekAPI()
|
||||||
deepseek_config = config_loader.get_deepseek_config()
|
|
||||||
|
|
||||||
if not deepseek_config or 'api_key' not in deepseek_config:
|
|
||||||
print("错误: 未找到DeepSeek API配置或API密钥")
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
return DeepSeekAPI(
|
|
||||||
api_key=deepseek_config['api_key'],
|
|
||||||
model=deepseek_config.get('model', 'deepseek-moe-16b-chat')
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def show_token_usage_stats():
|
def show_token_usage_stats():
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user