1. 从零构建Python版OnCall系统的完整历程
作为一名长期从事AI系统开发的工程师,我最近完成了一个极具挑战性的项目——用Python语言从零开始构建一个完整的OnCall智能助手系统。这个系统不仅具备基础的聊天功能,还整合了RAG知识库检索、多工具调用以及动态规划执行等高级特性。下面我将详细分享整个开发过程中的关键步骤和技术实现。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 项目架构与技术选型
2.1 基础框架选择
在项目启动之初,我选择了FastAPI作为后端框架。FastAPI的异步特性、自动生成的API文档以及出色的性能表现,使其成为构建AI服务的理想选择。同时,FastAPI对WebSocket和SSE(Server-Sent Events)的原生支持,也为后续实现流式响应打下了良好基础。
python复制# main.py - FastAPI应用入口
from fastapi import FastAPI
from app.api.routes import chat, chat_stream
app = FastAPI(title="Python OnCall System")
app.include_router(chat.router)
app.include_router(chat_stream.router)
2.2 核心模块划分
系统采用分层架构设计,主要分为以下几层:
- API路由层:处理HTTP请求和响应
- 服务层:核心业务逻辑实现
- 适配器层:对接外部服务(如LLM、向量数据库等)
- 基础设施层:提供会话存储、工具注册等基础能力
这种分层设计使得系统各组件职责清晰,便于后续扩展和维护。
3. 基础功能实现
3.1 最小可行系统搭建
第一步是构建一个最小可运行的系统骨架。我创建了以下基础目录结构:
code复制app/
├── api/
│ ├── routes/
│ │ ├── chat.py
│ │ └── chat_stream.py
├── schemas/
│ └── chat.py
├── services/
│ └── chat_service.py
└── infra/
└── memory/
└── session_store.py
这个阶段实现了两个核心接口:
/api/chat:普通聊天接口/api/chat_stream:流式聊天接口
虽然此时还是返回mock数据,但已经验证了基础通信链路是通的。
3.2 会话管理与状态维护
为了支持多轮对话,我实现了一个简单的SessionStore,用于保存会话历史:
python复制# session_store.py
from typing import Dict, List
from app.schemas.chat import Message
class MemorySessionStore:
def __init__(self):
self.sessions: Dict[str, List[Message]] = {}
def get_messages(self, session_id: str) -> List[Message]:
return self.sessions.get(session_id, [])
def add_message(self, session_id: str, message: Message):
if session_id not in self.sessions:
self.sessions[session_id] = []
self.sessions[session_id].append(message)
这个内存存储虽然简单,但已经能够满足初期开发需求。后续可以轻松替换为Redis等持久化存储方案。
4. 大模型能力集成
4.1 模型适配层设计
为了灵活支持不同的大模型服务,我设计了一个模型适配层:
python复制# openai_compatible.py
import os
from typing import AsyncGenerator
import openai
class OpenAIClient:
def __init__(self):
self.client = openai.AsyncOpenAI(
base_url=os.getenv("LLM_BASE_URL"),
api_key=os.getenv("LLM_API_KEY")
)
async def chat_completion(self, messages: List[Dict], model: str, stream: bool = False) -> AsyncGenerator:
