我用 Python 搭了一套 AI 聊天机器人:从对话到执行任务,支持多轮记忆和工具调用

发布时间:2026/6/20 20:52:23

我用 Python 搭了一套 AI 聊天机器人:从对话到执行任务,支持多轮记忆和工具调用 我用 Python 搭了一套 AI 聊天机器人:从对话到执行任务,支持多轮记忆和工具调用适合想搭建自己的 AI 聊天机器人(不只是调 API)的开发者。本文用 Python + FastAPI + OpenAI 搭了一套完整的聊天机器人,支持多轮对话、记忆、工具调用和 Web 界面。背景:调 API 和搭产品是两回事很多人用 OpenAI API 调一下就觉得自己"做了个 AI 产品"。但真正的聊天机器人需要:多轮对话(记住上下文)记忆系统(记住用户偏好)工具调用(能搜索、能计算、能操作文件)Web 界面(用户能直接用)错误处理(API 超时、token 超限等)下面从零搭建。架构设计用户 → Web 界面 → FastAPI 后端 → OpenAI API ↓ 记忆系统(Redis/SQLite) 工具注册表(搜索/计算/文件)模块 1:后端 APIfromfastapiimportFastAPI,WebSocketfromfastapi.staticfilesimportStaticFilesfromopenaiimportOpenAIimportjsonimportsqlite3fromdatetimeimportdatetime app=FastAPI()client=OpenAI()# 数据库初始化db=sqlite3.connect("chat.db",check_same_thread=False)db.execute(""" CREATE TABLE IF NOT EXISTS conversations ( id INTEGER PRIMARY KEY AUTOINCREMENT, session_id TEXT, role TEXT, content TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ) """)db.commit()模块 2:对话管理classConversationManager:"""对话管理器:管理多轮对话上下文"""def__init__(self,max_history=20):self.max_history=max_historydefadd_message(self,session_id,role,content):"""添加消息到历史"""db.execute("INSERT INTO conversations (session_id, role, content) VALUES (?, ?, ?)",(session_id,role,content))db.commit()defget_history(self,session_id):"""获取对话历史"""cursor=db.execute("SELECT role, content FROM conversations WHERE session_id = ? ORDER BY id DESC LIMIT ?",(session_id,self.max_history))rows=cursor.fetchall()return[{"role":r[0],"content":r[1]}forrinreversed(rows)]defclear(self,session_id):"""清空对话历史"""db.execute("DELETE FROM conversations WHERE session_id = ?",(session_id,))db.commit()conv_manager=ConversationManager()模块 3:工具调用importmathimportrequests# 工具定义TOOLS=[{"type":"function","function":{"name":"calculate","description":"执行数学计算","parameters":{"type":"object","properties":{"expression":{"type":"string","description":"数学表达式,如 2+3*4"}},"required":["expression"]}}},{"type":"function","function":

相关新闻