|
|
||
|---|---|---|
| app | ||
| git_mcp_server | ||
| static | ||
| .env | ||
| .env.example | ||
| .gitignore | ||
| README.md | ||
| requirements.txt | ||
| run.py | ||
| run_debug.py | ||
| run_dev.py | ||
README.md
AI FastAPI Demo
一个基于 FastAPI 的 AI 调用示例工程,支持对话和工具调用。
功能特性
- AI 对话接口: 输入一段话,返回 AI 的回复
- 工具调用: AI 可以调用工具(如获取当前时间)来回答问题
- 获取当前时间: 提供直接获取当前时间的接口
项目结构
ai_fastapi_project/
├── app/
│ ├── __init__.py
│ ├── main.py # FastAPI 主应用
│ ├── config.py # 配置管理
│ ├── api/
│ │ ├── __init__.py
│ │ └── chat.py # API 路由
│ ├── services/
│ │ ├── __init__.py
│ │ └── ai_service.py # AI 服务封装
│ └── tools/
│ ├── __init__.py
│ └── time_tool.py # 时间工具
├── requirements.txt # 依赖列表
├── .env.example # 环境变量示例
├── run.py # 启动脚本
└── README.md # 说明文档
快速开始
1. 安装依赖
cd ai_fastapi_project
pip install -r requirements.txt
2. 配置环境变量
复制 .env.example 为 .env 并填写您的 OpenAI API Key:
cp .env.example .env
编辑 .env 文件:
OPENAI_API_KEY=your_actual_api_key_here
3. 启动服务
根据您的使用场景选择合适的启动方式:
方式 1: 普通运行(推荐)
python run.py
方式 2: PyCharm 调试模式
python run_debug.py
或在 PyCharm 中右键 run_debug.py → Debug 'run_debug'
方式 3: 开发模式(带热重载)
python run_dev.py
代码修改后自动重载,适合开发调试
方式 4: 命令行启动
python -m uvicorn app.main:app --host 0.0.0.0 --port 8000
服务将在 http://0.0.0.0:8000 启动。
4. 访问 API 文档
启动服务后,访问以下地址查看 API 文档:
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
API 接口说明
1. AI 对话接口
POST /api/v1/chat
请求示例:
{
"message": "你好,请介绍一下自己",
"system_prompt": "你是一个友好的AI助手",
"history": []
}
响应示例:
{
"success": true,
"message": "对话成功",
"response": "你好!我是一个AI助手..."
}
2. 带工具调用的 AI 对话接口
POST /api/v1/chat-with-tools
AI 可以调用工具(如获取当前时间)来回答问题。
请求示例:
{
"message": "现在几点了?"
}
响应示例:
{
"success": true,
"message": "对话成功",
"response": "现在是2026年4月27日 15:30:45,星期一。"
}
3. 获取当前时间接口
GET /api/v1/time
直接获取当前时间信息。
响应示例:
{
"success": true,
"data": {
"current_time": "2026-04-27 15:30:45",
"date": "2026-04-27",
"time": "15:30:45",
"year": 2026,
"month": 4,
"day": 27,
"hour": 15,
"minute": 30,
"second": 45,
"weekday": "Monday",
"weekday_cn": "星期一"
}
}
使用示例
Python 调用示例
import httpx
import asyncio
async def chat_with_ai():
async with httpx.AsyncClient() as client:
# 普通对话
response = await client.post(
"http://localhost:8000/api/v1/chat",
json={"message": "你好"}
)
print(response.json())
# 带工具调用的对话
response = await client.post(
"http://localhost:8000/api/v1/chat-with-tools",
json={"message": "现在几点了?"}
)
print(response.json())
# 获取时间
response = await client.get("http://localhost:8000/api/v1/time")
print(response.json())
asyncio.run(chat_with_ai())
cURL 调用示例
# 普通对话
curl -X POST "http://localhost:8000/api/v1/chat" \
-H "Content-Type: application/json" \
-d '{"message": "你好"}'
# 带工具调用的对话
curl -X POST "http://localhost:8000/api/v1/chat-with-tools" \
-H "Content-Type: application/json" \
-d '{"message": "现在几点了?"}'
# 获取时间
curl -X GET "http://localhost:8000/api/v1/time"
扩展工具
要添加新的工具,请在 app/tools/time_tool.py 中:
- 定义工具函数
- 定义工具的 OpenAI function calling schema
- 在
AVAILABLE_TOOLS字典中注册工具
示例:
def my_new_tool(param1: str) -> Dict[str, Any]:
"""新工具函数"""
return {"success": True, "data": "result"}
def my_new_tool_schema() -> Dict[str, Any]:
"""工具 schema"""
return {
"type": "function",
"function": {
"name": "my_new_tool",
"description": "工具描述",
"parameters": {
"type": "object",
"properties": {
"param1": {"type": "string", "description": "参数描述"}
},
"required": ["param1"]
}
}
}
# 注册工具
AVAILABLE_TOOLS["my_new_tool"] = {
"function": my_new_tool,
"schema": my_new_tool_schema
}
技术栈
- FastAPI: 现代、快速的 Web 框架
- OpenAI: AI 模型调用
- Pydantic: 数据验证和设置管理
- Uvicorn: ASGI 服务器
许可证
MIT License