一、架构工程化
1.项目环境
解决之前的虚拟环境pip情况,现在直接用uv 的工程化方式
后续用法:
uv init --package my_project
uv add fastapi uvicorn pytest ruff
uv run uvicorn my_project.main:app --reload
uv sync
uv build
uv publish
uv export --format requirements-txt --no-hashes -o requirements.txt
uv export --format requirements-txt --no-hashes --group dev -o requirements-dev.txt
清朗多了

2.docker 工程化部署
增加一键docker-compose.yml, 前后端配置Dockfile文件,增加.env.compose,并映射端口不与本地冲突(如果想要本地多运行项目的话)
services:
mysql:
image: mysql:8.0
container_name: ai-list-mysql
restart: unless-stopped
environment:
TZ: ${TZ:-Asia/Shanghai}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-123456}
MYSQL_DATABASE: ${MYSQL_DATABASE:-ai_list}
command:
- --default-authentication-plugin=mysql_native_password
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
ports:
- "${MYSQL_PORT:-3307}:3306"
volumes:
- mysql_data:/var/lib/mysql
- ./backend/sql/create_tables.sql:/docker-entrypoint-initdb.d/01-create_tables.sql:ro
- ./backend/sql/insert_data.sql:/docker-entrypoint-initdb.d/02-insert_data.sql:ro
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -uroot -p$${MYSQL_ROOT_PASSWORD} --silent"]
interval: 10s
timeout: 5s
retries: 15
redis:
image: redis:7-alpine
container_name: ai-list-redis
restart: unless-stopped
ports:
- "${REDIS_PORT:-6380}:6379"
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 10
embedding:
image: ${EMBEDDING_IMAGE:-ghcr.io/huggingface/text-embeddings-inference:cuda-1.8.1}
container_name: ai-list-embedding
restart: unless-stopped
command:
- --model-id
- ${EMBEDDING_MODEL_ID:-BAAI/bge-m3}
ports:
- "${EMBEDDING_PORT:-8081}:80"
volumes:
- ./data/tei:/data
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [ gpu ]
backend:
build:
context: ./backend
dockerfile: Dockerfile
container_name: ai-list-backend
restart: unless-stopped
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
embedding:
condition: service_started
env_file:
- ./backend/.env.compose
environment:
TZ: ${TZ:-Asia/Shanghai}
command:
- sh
- -c
- uv run uvicorn app.main:app --host 0.0.0.0 --port 1235
ports:
- "${BACKEND_PORT:-1235}:1235"
volumes:
- ./backend/logs:/app/logs
frontend:
build:
context: ./frontend
dockerfile: Dockerfile
args:
VITE_API_BASE_URL: http://localhost:${BACKEND_PORT:-1235}
VITE_ACCESS_KEY: test_key
VITE_ACCESS_SECRET: test_secret
VITE_AI_SCENE: default
container_name: ai-list-frontend
restart: unless-stopped
depends_on:
- backend
ports:
- "${FRONTEND_PORT:-5173}:80"
volumes:
mysql_data:
3.数据库xx
之前在实习中,部门主管有次分享代码编写规范,有个项目是全参数传递没有一个包含实际文本值的,流程大概是把所有大模型里用到的提示词和密钥信息以及其他的复用参数全映射成model字段建表加索引保存在数据库中而且没有冗余字段,只要对数据库的分库分表优化加载,那代码架构真的可以,当时他说他的两个徒弟都是架构师了,那时我就觉是吹牛,现在含泪唏嘘啊啊啊~
二、项目评估方案
1.项目一
- AB测试
数据集太大,个人项目暂不可取,有空在安排
- LangSmith观测平台
1)翻译模型评估:

2.项目二
- AB测试好
数据集太大,个人项目暂不可取,有空在安排
- LangSmith观测平台
- THE END -
最后修改:2026年4月16日
共有 0 条评论