尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
整套从零搭建极简 AI 对话智能体项目
项目整体架构前端网页浏览器 --【HTTP/WebSocket】-- FastAPI 后端Python --【HTTPJSON】-- DeepSeek 开放 API 打包工具Docker 数据格式全程 JSON 能力普通问答 WebSocket 流式输出模拟 AI 逐字打字效果智能体必备选用DeepSeek注册简单新用户送免费额度适合学习开发第一步申请 DeepSeek API 密钥免费测试额度打开官网https://platform.deepseek.com/注册账号完成实名认证必须左侧菜单栏 →API Keys创建新密钥复制sk-xxxxxxxx⚠️妥善保存只放在后端代码绝对不能丢到前端网页环境清单你需要安装本地电脑Python3.10Git可选Docker Desktop第二步创建项目文件夹plaintextai_agent_demo/ ├── main.py # FastAPI后端核心 ├── .env # 存放你的API密钥不要上传git ├── Dockerfile # Docker打包配置 └── static/ └── index.html # 前端网页页面1. .env 文件envDEEPSEEK_API_KEYsk_你刚才复制的密钥 DEEPSEEK_URLhttps://api.deepseek.com/v1/chat/completions2. main.py 后端代码python运行import os import json import requests from dotenv import load_dotenv from fastapi import FastAPI, WebSocket, WebSocketDisconnect from fastapi.responses import HTMLResponse from fastapi.staticfiles import StaticFiles load_dotenv() app FastAPI(title简易AI智能体) app.mount(/static, StaticFiles(directorystatic), namestatic) API_KEY os.getenv(DEEPSEEK_API_KEY) API_URL os.getenv(DEEPSEEK_URL) # 返回聊天网页 app.get(/, response_classHTMLResponse) async def get_html(): with open(static/index.html, r, encodingutf-8) as f: return f.read() # HTTP普通接口一次性返回全部回答 app.post(/chat) async def chat(message: dict): user_msg message.get(content) payload { model: deepseek-chat, messages: [{role: user, content: user_msg}], stream: False } headers {Authorization: fBearer {API_KEY}, Content-Type: application/json} resp requests.post(API_URL, jsonpayload, headersheaders) return resp.json() # WebSocket接口流式逐字输出智能体流式对话核心 app.websocket(/ws) async def ws_chat(websocket: WebSocket): await websocket.accept() try: while True: data await websocket.receive_text() user_msg json.loads(data)[content] payload { model: deepseek-chat, messages: [{role: user, content: user_msg}], stream: True } headers {Authorization: fBearer {API_KEY}, Content-Type: application/json} response requests.post(API_URL, jsonpayload, headersheaders, streamTrue) for line in response.iter_lines(): if line and line.startswith(bdata: ): text line.decode(utf-8)[6:] if text [DONE]: break chunk json.loads(text) content chunk[choices][0][delta].get(content, ) await websocket.send_text(json.dumps({content: content})) except WebSocketDisconnect: print(客户端断开连接) if __name__ __main__: import uvicorn uvicorn.run(main:app, host0.0.0.0, port8000)3. static/index.html 前端页面html预览!DOCTYPE html html head meta charsetUTF-8 title简易AI智能体/title /head body div idmsgBox stylewidth:600px;height:400px;border:1px solid #ccc;overflow:auto;padding:10px;/div input idinputText stylewidth:520px;margin-top:10px; placeholder输入消息 button onclicksendMessage()发送/button script const ws new WebSocket(ws://${location.host}/ws); const msgBox document.getElementById(msgBox); const input document.getElementById(inputText); let aiBlock; ws.onmessage function (ev) { const data JSON.parse(ev.data); aiBlock.innerText data.content; } function sendMessage() { const text input.value.trim(); if (!text) return; msgBox.innerHTML div用户${text}/div; aiBlock document.createElement(div); aiBlock.innerHTML AI; msgBox.appendChild(aiBlock); ws.send(JSON.stringify({content:text})); input.value ; } /script /body /html4. Dockerfile打包镜像使用 Docker 部署dockerfileFROM python:3.11-slim WORKDIR /app COPY . . RUN pip install fastapi uvicorn python-dotenv requests EXPOSE 8000 CMD [uvicorn, main:app, --host, 0.0.0.0, --port, 8000]第三步本地直接运行测试不使用 Docker新建虚拟环境可选安装依赖bashpip install fastapi uvicorn python-dotenv requests在项目根目录执行bashpython main.py浏览器访问 http://127.0.0.1:8000 ✅ 此时网页通过 WebSocket 连接后端后端用 HTTPJSON 调用 DeepSeek 大模型 API第四步使用 Docker 打包运行构建镜像bashdocker build -t ai-agent-demo .启动容器bashdocker run -p 8000:8000 --env-file .env ai-agent-demo整套项目对应你学习的知识点JSON前后端通信、调用大模型 API 全部使用 json 传输数据HTTP/chat 接口、后端请求 DeepSeek 接口都是 HTTP 协议WebSocket/ws 实现实时流式对话长连接双向通信FastAPI搭建后端服务Docker项目容器化打包方便部署LLM 调用流程后端转发请求调用大模型 API重要学习拓展方向后续智能体升级增加记忆功能保存历史对话上下文增加 Function Calling工具调用真正实现 AI 智能体增加 RAG 知识库优化前端界面常见避坑提醒API 密钥只放在.env不要提交到 Git前端不能直接调用 DeepSeek 接口防止密钥泄露免费额度用完后需要充值仅适合学习使用streamTrue 流式输出依靠 SSE配合 WebSocket 实现打字效果使用智谱 GLM-4-Flashmain里面的payload { model: deepseek-chat, # 这里把 deepseek-chat 修改成 glm-4-flash messages: [{role: user, content: user_msg}], stream: True }完整替换下面这份无缩进错误的 main.py全部覆盖保存python运行import os import json import requests from dotenv import load_dotenv from fastapi import FastAPI, WebSocket, WebSocketDisconnect from fastapi.responses import HTMLResponse from fastapi.staticfiles import StaticFiles load_dotenv() app FastAPI(title简易AI智能体) app.mount(/static, StaticFiles(directorystatic), namestatic) API_KEY os.getenv(ZHIPU_API_KEY) API_URL os.getenv(ZHIPU_URL) app.get(/, response_classHTMLResponse) async def get_html(): with open(static/index.html, r, encodingutf-8) as f: return f.read() app.post(/chat) async def chat(message: dict): user_msg message.get(content) payload { model: glm-4-flash, messages: [{role: user, content: user_msg}], stream: False } headers {Authorization: fBearer {API_KEY}, Content-Type: application/json} resp requests.post(API_URL, jsonpayload, headersheaders) return resp.json() app.websocket(/ws) async def ws_chat(websocket: WebSocket): await websocket.accept() try: while True: data await websocket.receive_text() user_msg json.loads(data)[content] payload { model: glm-4-flash, messages: [{role: user, content: user_msg}], stream: True } headers {Authorization: fBearer {API_KEY}, Content-Type: application/json} response requests.post(API_URL, jsonpayload, headersheaders, streamTrue) for line in response.iter_lines(): if line: line_str line.decode(utf-8) if line_str.startswith(data: ): text line_str[6:] if text [DONE]: break chunk json.loads(text) content chunk[choices][0][delta].get(content, ) await websocket.send_text(json.dumps({content: content})) except WebSocketDisconnect: print(客户端断开连接) if __name__ __main__: import uvicorn uvicorn.run(main:app, host0.0.0.0, port8000)警告信息plaintextWARNING: No supported WebSocket library detected. Please use pip install uvicorn[standard], or install websockets or wsproto manually.uvicorn 缺少 WebSocket 依赖库无法处理 ws 连接直接导致 /ws 接口失效、返回 404和 Python 社区版无关单纯缺少依赖包。解决方案在虚拟环境内执行当前终端已经激活.venv直接运行安装命令bashpip install uvicorn[standard]
RELATED

相关推荐

分布式电源配电网两阶段优化调度模型解析

分布式电源配电网两阶段优化调度模型解析

1. 项目背景与核心价值在新型电力系统建设背景下,配电网中分布式电源(DG)渗透率持续攀升。光伏、风电等间歇性电源的大规模接入,使得传统配电网调度方式面临严峻挑战。这个Matlab项目正是针对含高比例分布式电源的配电网&#xff…

📅 2026/9/22 12:08:44
Steam成就管理器:解锁你游戏体验的终极控制权

Steam成就管理器:解锁你游戏体验的终极控制权

Steam成就管理器:解锁你游戏体验的终极控制权 【免费下载链接】SteamAchievementManager A manager for game achievements in Steam. 项目地址: https://gitcode.com/gh_mirrors/st/SteamAchievementManager 你是否曾经因为游戏bug导致成就无法解锁而沮丧&a…

📅 2026/9/22 7:00:32
3句话,让AI帮我搞定一个App:谷歌“王炸”工具,正在让设计师和程序员一起失业?

3句话,让AI帮我搞定一个App:谷歌“王炸”工具,正在让设计师和程序员一起失业?

一行代码不用写,甚至不需要打开Figma,你的下一个UI设计师,可能真的会是AI。小伙伴们,今天分享一款谷歌“王炸”工具,打开网站点击立即试用!一句话生成设计稿“帮我设计一整套‘周末去哪儿’App,…

📅 2026/9/24 0:19:37
MORE NEWS

更多资讯

📰

从CANoe到TSMaster:车载总线测试工具链迁移实战指南

搞车载总线测试的工程师,电脑里大概率都装着一套CANoe。我最早接触CANoe是刚入行那会儿,跟着前辈在项目里做网络测试,从报文发送、DBC解析到UDS诊断,基本全是靠Vector这套工具撑起来的。说实话,CANoe确实是这个行业的标…

📰

从刷榜到用榜:GitHub Trending 的增量逻辑、项目筛选与高效落地

1. 日榜的"热度"到底是怎么算出来的先别急着收藏仓库。每天打开 GitHub 的 Trending 页面,你看到的是过去 24 小时内 Star 增量最高的仓库,周榜和月榜则分别看一周、一个月内的增量。官方没有公开完整排序算法,但用久了会发现&…

📰

【Java开发MCP】SSE模式开发并集成MCP:TaoToken统一Key接入与SpringAI WebFlux配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

OpenCompass 高效评测:Partitioner 任务切分与 Runner 执行后端实战指南

模型评测人工智能大模型AI 评测 【免费下载链接】opencompass OpenCompass is an LLM evaluation platform, supporting a wide range of models from OpenAI, Anthropic, Gemini, Qwen, GLM, DeepSeek, etc, across 100 datasets covering knowledge, reasoning, coding, scie…

📰

快速搭建网站的工具怎么选?3个方案省下5万冤枉钱

快速搭建网站的工具怎么选?3个方案省下5万冤枉钱 网站做好了没人访问,这是很多老板最头疼的事。你花大价钱做的官网,设计精美、功能齐全,但打开一看,流量为零,咨询为零。这时候你才意识到,问题不在“做没做”,而在“怎么快速做出来并推向市场”。面…

📰

中文文本分类落地:BERT+CNN+RNN+GCN的生产级链路重构

简介:本资源是一套面向高校计算机与人工智能方向学生的高分课程设计实现方案,聚焦中文文本分类任务,融合CNN、RNN、GCN与BERT四大主流模型,提供端到端可运行的Python工程代码,适用于自然语言处理课程设计、期末大作业及…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬