使用说明
快速 API
一个处理多个AI任务的单路由FastAPI应用程序,包括可选的JWT身份验证,集成了用于工具调用的最小MCP服务器/客户端,并附带了基本的交易回溯测试实用程序。在macOS上本地测试。
特性
- 一条路线:
POST /ai-task随着task体内:qa,latest,image,platform_content - 代理人问答: 调用OpenAI聊天模型(
DEFAULT_MODEL) - 最新答案: 将Q&A/图像/平台输出存储到SQLite,并获取最新的
- 图像生成: 使用OpenAI图像返回base64编码的PNG(
IMAGE_MODEL) - 平台内容: 脸书、领英、推特/X、Instagram、TikTok、Reddit、Medium风格
- JWT身份验证(可选但已实现): 无限令牌(无exp);使用
/login获得 - MCP集成: 最小本地MCP服务器
upper(text)演示工具+客户端 - 反测试套件: 输出CSV、图表和指标的简单SMA交叉脚本
(macOS+VS代码)
1) 克隆
cd softvence-ai-task
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
# At .env set OPENAI_API_KEY=...
2) 运行API
./run.sh
# or:
uvicorn app.main:app --reload --port 8000
打开http://127.0.0.1:8000/docs
3) 认证
- 击打
POST /login使用任何用户名/密码(演示)。复制access_token. - 对于
POST /ai-task添加标题:Authorization: Bearer <token>.
4) 请求示例
问答
curl -X POST http://127.0.0.1:8000/ai-task -H "Authorization: Bearer TOKEN" -H "Content-Type: application/json" -d '{"task":"qa","prompt":"What is MCP in one sentence?"}'
最新
curl -X POST http://127.0.0.1:8000/ai-task -H "Authorization: Bearer TOKEN" -H "Content-Type: application/json" -d '{"task":"latest"}'
图像
curl -X POST http://127.0.0.1:8000/ai-task -H "Authorization: Bearer TOKEN" -H "Content-Type: application/json" -d '{"task":"image","prompt":"A minimalist robot mascot, vector style"}'
响应包括 image_b64 --在浏览器中渲染或保存到文件。
平台内容
curl -X POST http://127.0.0.1:8000/ai-task -H "Authorization: Bearer TOKEN" -H "Content-Type: application/json" -d '{"task":"platform_content","platform":"linkedin","prompt":"Announce our new AI trading API beta"}'
MCP集成
这个仓库包括一个使用官方Python SDK的小型MCP服务器和客户端。
- 服务器:
app/mcp_server.py公开单个工具upper(text:str). - 客户:
app/mcp_client.py通过stdio连接并呼叫upper. - FastAPI 的 问答 路径将 尝试 调用MCP工具并预先添加提示。
文件夹结构
app/
auth.py # JWT helpers
db.py # SQLite models + init
main.py # FastAPI entry — single /ai-task route
mcp_client.py # Minimal MCP client
mcp_server.py # Minimal MCP server with 'upper' tool
schemas.py # Pydantic models
backtest/
sma_backtest.py # SMA strategy CSV, chart, metrics
tests/
test_api.py
Dockerfile
render.yaml
requirements.txt
run.sh
.env.example
短文:方法、风险控制和假设
方法
- 单路API设计: 一个端点
POST /ai-task用打字task现场(qa,latest,image,platform_content).这使客户端合约保持简单和可扩展。 - 框架和结构: FastAPI带有Pydantic v2模型用于I/O验证,SQLAlchemy(异步)用于持久化,以及一个小而可读的模块布局(
app/). - 认证: 可选JWT通过
/login。代币包括sub和iat(默认情况下没有到期时间来匹配规格);中间件强制执行Authorization: Bearer <token>. - 问答和内容生成: OpenAI聊天模型
qa和platform_content平台输出使用风格图(LinkedIn、Facebook、X/Twitter、Instagram、TikTok、Reddit、Medium)来定制音调/长度。 - 图像生成: OpenAI图像;回报 Base64 (默认为可移植)。通过将图像持久化,可以轻松地切换到URL输出
/static. - 状态和“最新”: 全部成功
qa,image,以及platform_content结果保存到SQLite;latest返回最近的一行。 - MCP集成(可扩展性): 带演示的最小MCP服务器
upper(text)工具和客户端;qapath首先尝试工具调用,以显示如何组合外部工具。 - 运营: Uvicorn用于本地开发,Dockerfile用于容器运行,
render.yaml免费的Render部署。包括测试和回溯测试实用程序。
回测法(SMA交叉)
- 数据和转换: 每日OHLCV(通过
yfinance当地)。计算SMA50和SMA200;放弃最初的热身行。 - 信号: 很久的时候
SMA50 > SMA200,否则平坦。应用 下一次酒吧执行 (signal.shift(1))避免向前看。 - 回报与权益: 每日退货=
pct_change;战略回报=ret * shifted_signal;累计权益=(1 + strategy). - 韵律学: 复合年增长率(252个交易日)、年化波动率和夏普(无无风险利率,简单均值/标准公式)。CSV+PNG权益曲线+JSON指标用于可重复性。
风险控制
- 前瞻性预防: 信号滞后一条(
shift(1)). - 预热处理: 删除行,直到定义了两个SMA,以避免有偏见的早期信号。
- 确定性人工制品: 保存CSV、图表和指标,以便进行审计和重新计算。
- 关注点分离: 战略逻辑是纯粹的;除了工件写入之外,没有交易引擎的副作用(易于单元测试)。
- 优雅的失败路径: 数据缺口由以下人员处理
dropna运行时错误显而易见。
假设和限制
- 无摩擦市场: 无佣金、费用或滑点;近距离填充。(可以通过减去成本来添加
position变化。) - 可用性和流动性: 假设您可以在没有影响或部分填充的情况下交易所需的大小。
- 数据质量: 雅虎数据足以用于演示目的;生产应该使用经过审查的供应商和公司行为检查。
- 无风险利率: Sharpe为了简单起见使用0%射频;可以调整。
- JWT到期日: 根据规范偏好,代币是不确定的;生产应增加
exp、轮换和撤销列表(如果需要)。 - 模型输出: LLM内容可能因运行而异;系统提示和温度的选择是为了一致性,而不是确定性。
再现性说明
- API
uvicorn app.main:app --reload --port 8000;使用/docs用于交互式测试。 - 反向测试 :
python backtest/sma_backtest.py AAPL(在下面写入CSV/PNG/JSONbacktest/results/). - 环境: Pin版本
requirements.txt;.env持有OPENAI_API_KEY,JWT_SECRET.
潜在改进
- 添加 交易成本 和 仓位 (全面定位)。
- 执行 JWT到期 并刷新流程。
- 从以下位置提供图像
/static并返回 网址 默认情况下。 - CI管道(棉绒、类型检查、测试)+容器扫描。
- 扩展MCP工具,用于数据检索、合规性检查或自定义检索增强生成。
链接
https://softvence-ai-task-gbsh.onrender.com/docs
