一个最小可运行的 FastAPI 项目,包含健康检查与示例路由。
1) 创建虚拟环境并激活
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\\Scripts\\activate
python -m pip install -U pip
2) 安装依赖
pip install -r requirements.txt
3) 启动开发服务(热重载)
uvicorn app.main:app --reload --port 8000
4) 打开接口文档
5) 内网IP
192.168.244.164
.
├── app
│ ├── __init__.py
│ ├── core
│ │ ├── __init__.py
│ │ └── config.py # 环境配置(LLM_PROVIDER 等)
│ ├── api
│ │ ├── __init__.py
│ │ ├── deps.py # 依赖注入(LLMService)
│ │ └── routes.py # 路由(/api/ping, /api/llm/chat)
│ ├── providers
│ │ ├── __init__.py
│ │ ├── base.py # Provider 协议定义
│ │ └── mock_provider.py# 本地回显 Provider
│ ├── schemas
│ │ ├── __init__.py
│ │ └── llm.py # LLM 请求/响应模型
│ ├── services
│ │ ├── __init__.py
│ │ └── llm_service.py # LLM 业务服务
│ └── main.py # FastAPI 应用入口(/health)
├── requirements.txt # 依赖
├── .gitignore
└── README.md
环境变量:
LLM_PROVIDER
:默认 mock
LLM_MODEL
:默认 mock-echo-001
LLM_TEMPERATURE
:默认 1.0
OPENAI_API_KEY
:如接入 OpenAI 时使用(目前示例未调用外部服务)示例接口:POST /api/llm/chat
请求体示例:
{
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "你好,今天上海天气如何?"}
],
"model": "mock-echo-001",
"temperature": 0.7
}
响应示例(mock 提供器):
{
"content": "[mock] You said: 你好,今天上海天气如何?",
"model": "mock-echo-001",
"usage": {"prompt_tokens": 8, "completion_tokens": 7, "total_tokens": 15}
}
后续要接入真实大模型时,只需新增对应 Provider(如 openai_provider.py
),在 app/api/deps.py
中根据 LLM_PROVIDER
切换实例即可。
pydantic-settings
并添加 Settings
类读取环境变量logging
或 structlog
pytest
,并添加 tests/
目录ruff
/black
/mypy
,及 pre-commit
Dockerfile
与 docker-compose.yml