使用FastAPI微服务在AWS EKS中构建上下文增强型AI问答系统
系统概述
本文介绍如何使用FastAPI在AWS Elastic Kubernetes Service (EKS)上构建一个由多个微服务组成的AI问答系统。该系统能够接收用户输入的提示(prompt),通过调用其他微服务从AWS ElastiCache on Redis和Amazon DynamoDB获取相关上下文,然后利用AWS Bedrock的Meta Llama 4模型和Azure OpenAI GPT-4 API生成最终答案返回给用户。
这个架构展示了如何利用FastAPI的轻量级特性构建微服务系统,结合AWS和Azure的AI能力,同时利用云原生技术实现可扩展性和安全性。系统设计考虑了高可用性和容错能力,通过多模型集成提高回答质量,并通过云服务集成实现快速上下文检索。
架构设计
整个系统架构如下:
用户 → [网关服务 - FastAPI] → [AI核心服务 - FastAPI]├──> Redis (AWS ElastiCache) ← 快速上下文├──> DynamoDB ← 结构化数据或备用数据├──> AWS Bedrock (Llama 4)└──> Azure OpenAI (GPT-4)
微服务详解
1. 网关服务 (prompt-gateway-service)
职责:
- 接收用户通过REST API提交的提示(prompt)
- 将提示转发给AI核心服务
- 返回最终响应给用户
示例代码:
# prompt_gateway_service/main.py
from fastapi import FastAPI, HTTPException
import httpxapp = FastAPI()
AI_CORE_SERVICE_URL = "http://ai-core-service:8000/process"@app.post("/prompt")
async def receive_prompt(prompt: str):async with httpx.AsyncClient() as client:response = await client.post(AI_CORE_SERVICE_URL, json={"prompt": prompt})if response.status_code != 200:raise HTTPException(status_code=500, detail="AI服务失败")return response.json()
2. AI核心服务 (ai-core-service)
职责:
- 使用提示从Redis和DynamoDB获取相关上下文
- 将上下文与原始提示结合
- 同时调用Llama 4(Bedrock)和GPT-4(Azure)生成响应
- 聚合两个模型的结果并返回最终答案
示例代码:
# ai_core_service/main.py
from fastapi import FastAPI, Request
import boto3
import redis
import httpx
import os
import jsonapp = FastAPI()
redis_client = redis.Redis(host=os.getenv("REDIS_HOST"), port=6379, decode_responses=True)
dynamodb = boto3.resource("dynamodb", region_name="us-west-2")
table = dynamodb.Table("YourTableName")@app.post("/process")
async def process_prompt(request: Request):data = await request.json()prompt = data["prompt"]# 从Redis获取上下文context = redis_client.get(prompt)if not context:# 回退到DynamoDBresponse = table.get_item(Key={"prompt": prompt})context = response.get("Item", {}).get("context", "")combined_prompt = f"Context: {context}\n\nPrompt: {prompt}"# 调用Llama 4 (Bedrock)bedrock = boto3.client("bedrock-runtime", region_name="us-west-2")llama_response = bedrock.invoke_model(body=json.dumps({"prompt": combined_prompt, "max_tokens": 300}),modelId="meta.llama4-70b-chat-v1")llama_output = json.loads(llama_response['body'].read())['output']# 调用Azure OpenAI GPT-4azure_url = "https://<your-azure-openai-endpoint>/openai/deployments/<deployment>/chat/completions?api-version=2023-05-15"headers = {"api-key": os.getenv("AZURE_API_KEY")}payload = {"messages": [{"role": "user", "content": combined_prompt}],"model": "gpt-4"}async with httpx.AsyncClient() as client:azure_response = await client.post(azure_url, headers=headers, json=payload)gpt_output = azure_response.json()['choices'][0]['message']['content']return {"llama": llama_output, "gpt4": gpt_output}
AWS EKS部署
部署步骤
- 为两个服务构建Docker容器
- 推送到Amazon ECR
- 编写Kubernetes清单文件:
- 部署配置
- 服务配置
- 设置Redis (通过ElastiCache)和DynamoDB
- 使用Kubernetes Secrets存储凭证/API密钥
- 通过AWS ALB/Ingress Controller暴露网关API
安全措施
- 使用IAM角色服务账户(IRSA)允许访问DynamoDB和Bedrock
- 将API密钥(Azure OpenAI)存储在Kubernetes Secrets中
- 使用mTLS或网络策略保护服务间通信
相关文章:
使用FastAPI微服务在AWS EKS中构建上下文增强型AI问答系统
系统概述 本文介绍如何使用FastAPI在AWS Elastic Kubernetes Service (EKS)上构建一个由多个微服务组成的AI问答系统。该系统能够接收用户输入的提示(prompt),通过调用其他微服务从AWS ElastiCache on Redis和Amazon DynamoDB获取相关上下文,然后利用AW…...

PMIC电源管理模块的PCB设计
目录 PMU模块简介 PMU的PCB设计 PMU模块简介 PMIC(电源管理集成电路)是现代电子设备的核心模块,负责高效协调多路电源的转换、分配与监控。它通过集成DC-DC降压/升压、LDO线性稳压、电池充电管理、功耗状态切换等功能,替代传统分…...
正大视角下的结构交易节奏:如何借助数据捕捉关键转折
正大视角下的结构交易节奏:如何借助数据捕捉关键转折 在日常的交易结构研究中,节奏与分型常常被误解为“预测工具”,实则更应作为状态识别的参考。正大团队在模型演化过程中提出了“节奏-结构对齐”的分析方式,通过数据驱动来判断…...

华为云Flexus+DeepSeek征文|DeepSeek-V3商用服务开通教程
目录 DeepSeek-V3/R1商用服务开通使用感受 DeepSeek-V3/R1商用服务开通 1、首先需要访问ModelArts Studio_MaaS_大模型即服务_华为云 2、在网站右上角登陆自己的华为云账号,如果没有华为云账号的话,则需要自己先注册一个。 3、接着点击ModelArts Stu…...
STM32F103RC中ADC1和ADC2通道复用
以下是STM32F103RC中ADC1和ADC2通道复用的示意图及文字说明,帮助直观理解这种共享关系: ADC1/ADC2引脚复用示意图 GPIO引脚 ADC1通道 ADC2通道 ┌─────────┐ ┌─────────┐ ┌─────────┐ │ PA0 ├─…...

Qt—鼠标移动事件的趣味小程序:会移动的按钮
1.项目目标 本次根据Qt的鼠标移动事件实现一个趣味小程序:当鼠标移动到按钮时,按钮就会随机出现在置,以至于根本点击不到按钮。 2.项目步骤 首先现在ui界面设计控件(也可以用代码的方式创建,就不多说了) 第一个按钮不需…...

鞋样设计软件
Sxy 64鞋样设计软件是一款专业级鞋类设计工具 专为鞋业设计师与制鞋企业开发 该软件提供全面的鞋样设计功能 包括二维开版 三维建模 放码排料等核心模块 支持从草图构思到成品输出的完整设计流程 内置丰富的鞋型数据库与部件库 可快速生成各种鞋款模板 软件采用智能放码技术 精…...

LeRobot 项目部署运行逻辑(六)——visualize_dataset_html.py/visualize_dataset.py
可视化脚本包括了两个方法:远程下载 huggingface 上的数据集和使用本地数据集 脚本主要使用两个: 目前来说,ACT 采集训练用的是统一时间长度的数据集,此外,这两个脚本最大的问题在于不能裁剪,这也是比较好…...

Windows Server 2025开启GPU分区(GPU-P)部署DoraCloud云桌面
本文描述在ShareStation工作站虚拟化方案的部署过程。 将服务器上部署 Windows Server、DoraCloud,并创建带有vGPU的虚拟桌面。 GPU分区技术介绍 GPU-P(GPU Partitioning) 是微软在 Windows 虚拟化平台(如 Hyper-V)中…...

TCP套接字通信核心要点
TCP套接字通信核心要点 通信模型架构 客户端-服务端模型 CS架构:客户端发起请求,服务端响应和处理请求双向通道:建立连接后实现全双工通信 服务端搭建流程 核心步骤 创建套接字 int server socket(AF_INET, SOCK_STREAM, 0); 参数说明&am…...

【C】初阶数据结构15 -- 计数排序与稳定性分析
本文主要讲解七大排序算法之外的另一种排序算法 -- 计数排序 目录 1 计数排序 1) 算法思想 2) 代码 3) 时间复杂度与空间复杂度分析 (1) 时间复杂度 (2) 空间复杂度 4) 计…...

高性能Python Web 框架--FastAPI 学习「基础 → 进阶 → 生产级」
以下是针对 FastAPI 的保姆级教程,包含核心概念、完整案例和关键注意事项,采用「基础 → 进阶 → 生产级」的三阶段教学法: 一、FastAPI介绍 FastAPI 是一个现代化的、高性能的 Python Web 框架,专门用于构建 APIs(应…...

Qt QML自定义LIstView
QML ListView组合拳做列表,代码不可直接复制使用,需要小改 先上图看效果 样式1 样式2 样式3 原理:操作:技术点:代码片段: 先上图看效果 样式1 三个表格组合成要给,上下滚动时,三个同时滚动&am…...

C++进阶--红黑树的实现
文章目录 红黑树的实现红黑树的概念红黑树的规则红黑树的效率 红黑树的实现红黑树的结构红黑树的插入变色单旋(变色)双旋(变色) 红黑树的查找红黑树的验证 总结:结语 很高兴和大家见面,给生活加点impetus&a…...

WPF之值转换器
文章目录 目录什么是值转换器IValueConverter接口Convert方法ConvertBack方法 创建和使用值转换器定义转换器类在XAML中使用转换器转换器参数(ConverterParameter) 常用转换器实现布尔值转可见性(BoolToVisibilityConverter)数值转…...
黄金、碳排放期货市场API接口文档
StockTV 提供了多种期货市场的数据接口,包括获取K线图表数据、查询特定期货的实时行情等。以下为对接期货市场的详细接口说明。 一、获取K线图表数据 通过调用/futures/kline接口,您可以获取指定期货合约的历史K线数据(例如开盘价、最高价、…...
云上系统CC攻击如何进行检测与防御?
云上系统遭受CC攻击(Challenge Collapsar,一种针对应用层的DDoS攻击)时,检测与防御需结合流量分析、行为识别和技术手段,以下是核心方法: 一、检测方法 异常流量分析 监控请求量突增&#…...

qml中的TextArea使用QSyntaxHighlighter显示高亮语法
效果图,左侧显示行号,右侧用TextArea显示文本内容,并且语法高亮。 2025年5月8号更新 1、多行文本注释 多行文本注释跟普通的高亮规则代码不太一样,代码需要修改,这里以JavaScript举例。 先制定多行文本注释规则&…...
QuecPython+腾讯云:快速连接腾讯云l0T平台
该模块提供腾讯 IoT 平台物联网套件客户端功能,目前的产品节点类型仅支持“设备”,设备认证方式支持“一机一密”和“动态注册认证”。 BC25PA系列不支持该功能。 初始化腾讯 IoT 平台 TXyun TXyun(productID, devicename, devicePsk, ProductSecret)配置腾讯 IoT…...
RocketMQ 深度解析:架构设计与最佳实践
在分布式系统架构日益复杂的今天,消息中间件作为系统间通信的桥梁,扮演着至关重要的角色。RocketMQ 作为阿里开源的高性能分布式消息中间件,凭借其卓越的性能、丰富的功能以及高可用性,在电商、金融、互联网等众多领域得到广泛应用…...

Transformer编码器+SHAP分析,模型可解释创新表达!
目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 基本介绍 基于SHAP分析的特征选择和贡献度计算,Matlab2023b代码实现;基于MATLAB的SHAP可解释Transformer编码器回归模型,敏感性分析方法。 详细介绍 引言 在正向渗透(…...

[特殊字符]适合母亲节的SVG模版[特殊字符]
宝藏模版 往期推荐(点击阅读): 趣味效果|高大上|可爱风|年终总结I|年终总结II|循环特效|情人节I|情人节II|情人节IIII|妇女节I&…...

浅蓝色调风格人像自拍Lr调色预设,手机滤镜PS+Lightroom预设下载!
调色教程 浅蓝色调风格人像自拍 Lr 调色是利用 Adobe Lightroom 软件针对人像自拍照进行后期处理的一种调色方式。它通过对照片的色彩、对比度、亮度等参数进行精细调整,将画面的主色调打造为清新、柔和的浅蓝色系,赋予人像自拍独特的清新、文艺风格&…...

isp流程介绍(yuv格式阶段)
一、前言介绍 前面两章里面,已经分别讲解了在Raw和Rgb域里面,ISP的相关算法流程,从前面文章里面可以看到,在Raw和Rgb域里面,很多ISP算法操作,更像是属于sensor矫正或者说sensor标定操作。本质上来说&#x…...

数巅智能携手北京昇腾创新中心深耕行业大模型应用
当前,AI技术正在加速向各行业深度渗透,成为驱动产业转型和社会经济发展的重要引擎。构建开放协作的AI应用生态体系、推动技术和应用深度融合,已成为行业发展的重要趋势。 近日,数巅智能与北京昇腾人工智能计算中心(北京昇腾创新中…...

【LangChain高级系列】LangGraph第一课
前言 我们今天直接通过一个langgraph的基础案例,来深入探索langgraph的核心概念和工作原理。 基本认识 LangGraph是一个用于构建具有LLMs的有状态、多角色应用程序的库,用于创建代理和多代理工作流。与其他LLM框架相比,它提供了以下核心优…...
增强学习(Reinforcement Learning)简介
增强学习(Reinforcement Learning)简介 增强学习是机器学习的一种范式,其核心目标是让智能体(Agent)通过与环境的交互,基于试错机制和延迟奖励反馈,学习如何选择最优动作以最大化长期累积回报。…...

常见降维算法分析
一、常见的降维算法 LDA线性判别PCA主成分分析t-sne降维 二、降维算法原理 2.1 LDA 线性判别 原理 :LDA(Linear Discriminant Analysis)线性判别分析是一种有监督的降维方法。它的目标是找到一个投影方向,使得不同类别的数据在…...

计算机二级(C语言)已过
非线性结构:树、图 链表和队列的结构特性不一样,链表可以在任何位置插入、删除,而队列只能在队尾入队、队头出队 对长度为n的线性表排序、在最坏情况下时间复杂度,二分查找为O(log2n),顺序查找为O(n),哈希查…...

2025年3月,韩先超对国网宁夏进行Python线下培训
大家好,我是韩先超!在2025年3月3号和4号,为 宁夏国网 的运维团队进行了一场两天的 Python培训 ,培训目标不仅是让大家学会Python编程,更是希望大家能够通过这门技术解决实际工作中的问题,提升工作效率。 对…...