LLM到Al Agent的技术演进想入门AI Agent开发先要了解一下LLM/RAG/Agent的技术路线 LLM/RAG/Agent已经成为人工智能领域进步的关键技术理解这三者的概念与关系是做好面向AI编程开发的基础。大模型(LLM)索引增强搜索(RAG)智能体(Agent)定义大型语言模型LLM如GPT系列、BERT等是利用大量文本数据训练的模型能够生成连贯的文本、理解语言、回答问题等。检索增强生成技术结合了传统的信息检索技术和最新的生成式模型。它先从一个大型的知识库中检索出与查询最相关的信息然后基于这些信息生成回答。智能体是指具有一定智能的程序或设备能够感知环境并根据感知结果做出响应或决策的实体。它们可以是简单的软件程序或复杂的机器人。作用LLM作为基础技术提供了强大的语言理解和生成能力是构建复杂人工智能系统的基石。RAG可以视为在LLM基础上的扩展或应用利用LLM的生成能力和外部知识库的丰富信息来提供更准确、信息丰富的输出。智能体可以利用LLM进行自然语言处理通过RAG技术获得和利用知识以在更广泛的环境中做出决策和执行任务。它们通常位于应用层级是对LLM和RAG技术在特定环境下的集成和应用。Agent无论传递了多少的工具、记忆、规划、行动等本质上都是统一编码到Prompt中并传递给大语言模型然后程序根据输出的内容执行不同的操作反复执行直到完成。任何一个Agent都可以在ChatGPT或者大模型的对话界面进行模拟并且实现类似的效果。实现一个集ip地址查询、数学表达式计算、网络搜索的简单Agent应用。为什么需要LLMops一个AIAgent应用涵盖了LLM、记忆、工具、Prompt、规划、知识库、执行者等模块但每个应用的流程又比较接近对开发者和非开发者都不友好。有没有一个平台能在可视化界面通过鼠标拖拽对应的模块提示词等内容就可以让无编程基础的人也可以快速创建一个AlAgent应用并调试部署?LLMOps是一个基于LLM的应用程序的生命周期管理平台或者工具涵盖了LLM应用的开发、部署、配置、运维。LLMOps的旨在简化和优化LLM应用程序的各个环节以确保LLM应用高效、可靠和安全地运行。LLMOps对使用者友好极大降低了企业创建AI Agent应用的成本把复杂的部分留给了LLMOps开发者。步骤未使用LLMOps平台使用LLMOps平台时间差异开发应用前后端集成和封装LLM能力花费较多时间开发前端应用直接使用LLMOps的后端服务可基于开放API、WebApp直接开发-80%提示工程仅能通过API或Playground进行Prompt可视化编排所见即所得完成调试-25%数据准备与嵌入编写代码实现长文本数据处理、嵌入在LLMOps平台上传文本、文件-80%应用日志与分析编写代码查看日志访问数据库查看平台提供实时日志与分析-70%AI插件开发与集成编写代码创建、集成AI插件平台提供可视化工具创建、快速集成自定义插件能力-50%AI工作流开发编写代码完成每一个工作流可视化编排工作流所见即所得调试-80%不使用LLMOps整理需求、Prompt编写、部署LLM、对接LLM接口、处理应用数据、记录日志、应用工具开发、AI工作流开发、前后端交互开发、前后端部署。使用LLMOps:需求整理、Prompt编写、上传数据、勾选关联插件、可视化编排工作流、选择LLM模型、发布。LLMops7层架构1.表示层面向用户与生态能力PC 网站、移动端 APP、开放 API 网关定位统一入口、多端一致价值对外提供交互界面对内屏蔽底层实现便于第三方对接与生态扩展2. 接入层流量入口与安全能力Nginx、负载均衡、限流、鉴权定位统一网关、高可用入口价值抗流量冲击、统一日志、安全防护是生产系统必备的 “大门”3. 控制层业务编排与权限能力AI 应用、用户、授权、插件模块定位业务逻辑中枢、权限管控点价值解耦 “业务规则” 与 “AI 能力”支持多租户、多应用、多角色管理4. 服务层原子化能力输出能力LLM 应用服务、文件上传、授权、文本嵌入等定位可复用、可监控、可编排价值将 AI 能力拆分为细粒度服务支持接口复用、独立扩容、链路追踪5. 核心层大模型与 Agent 引擎能力多 LLM 集成、Agent 调度、LangChain 封装定位LLM 能力内核、智能化引擎价值屏蔽不同模型差异统一调用、统一计费、统一异常支持工具链与复杂推理6. 存储层多模数据统一管理能力PostgreSQL、Redis、向量数据库、对象存储定位数据底座、RAG 基础价值同时支撑业务数据、缓存、向量知识库、文件 / 图片 / 音频满足 LLM 全场景数据需求7. 资源层基础设施与弹性算力能力Linux、Docker、K8s定位环境统一、弹性伸缩价值支持容器化部署、CI/CD、自动扩缩容解决 GPU/CPU 资源调度问题核心特点1. 分层解耦团队可分工前后端分离、业务与 AI 分离、应用与基础设施分离适合中大型团队并行开发前端组、后端组、AI 组、运维 / 平台组2. 生产级工程化能力高可用接入层负载均衡 服务层集群部署可观测每层可独立监控QPS、耗时、异常、Token 消耗可运维Docker K8s 实现一键发布、弹性扩缩容3. 天生适配 LLM 应用痛点支持多厂商模型统一管理内置向量存储 RAG 能力支持Agent 工具链与复杂对话可做计费、限流、权限、审计4. 极强扩展性横向服务独立扩容纵向新增模型、存储、插件不影响上层业务生态开放 API 支持外部系统对接5. 安全与合规可控统一授权、统一鉴权、统一日志支持敏感词、内容审核、数据隔离满足企业级合规与审计要求适用场景企业级 AI 助手 / 知识库 / 客服多模型统一管理平台LLM Gateway支持 RAG Agent 的私有化部署系统可商用、可交付的标准化 LLMOps 平台第一个GPT聊天机器人使用FlaskDeepSeekPostgres封装一个简单对话的机器人首先要接入那个大模型都要先注册一个用户创建一个应用会有唯一的一个API_KEY进行网络通信一个粗糙的开始就是一个好的开始万丈高楼平地起~Python 开发环境配置1.虚拟环境创建虚拟环境命令:python-m venv env命令在Python 2.7或Python 3.3以上可以使用。Python虚拟环境与系统环境之间是隔离的一个项目一个虚拟环境不同的虚拟环境不会相互影响最大程度避免包冲突。占用更大的空间进入虚拟环境都需要使用命令activate激活才能使用使用完要使用deactivate命令退出。# 创建虚拟环境 (env)是当前的虚拟环境PS E:\pythonProject\llmops\llmops-apipython-mvenvenvPS E:\pythonProject\llmops\llmops-api.\env\Scripts\activate(env)PS E:\pythonProject\llmops\llmops-apideactivate PS E:\pythonProject\llmops\llmops-api2.配置国内 PyPI 加速器命令行配置Windows/macOS/Linux 通用, 激活虚拟环境后执行pip config set global.index-url https://mirrors.cloud.tencent.com/pypi/simple/(env)PS E:\pythonProject\llmops\llmops-apipip configsetglobal.index-url https://mirrors.cloud.tencent.com/pypi/simple/ Writing to C:\Users\15117\AppData\Roaming\pip\pip.ini(env)PS E:\pythonProject\llmops\llmops-apipip config list global.index-urlhttps://mirrors.cloud.tencent.com/pypi/simple/3.Postgres数据库可以直接去官网下载安装客户端支持Linux、Mac、Windows安装的过程中有两个目录特别重要一个是安装目录里面包含了很多应用程序一个目录是数据储存的目录。# https://www.postgresql.org/D:\Program Files(x86)\PostgreSQL\16\bin D:\Program Files(x86)\PostgreSQL\16\data可以让AI帮我写一个Windows的启动/停止的.bat脚本脚本如下(亲测可用)启动脚本 start_postgres.batecho off chcp65001nul title PostgreSQL16启动脚本 :: 设置PostgreSQL的路径setPG_BIND:\Program Files (x86)\PostgreSQL\16\binsetPG_DATAD:\Program Files (x86)\PostgreSQL\16\data:: 切换到bin目录cd/d%PG_BIN%:: 检查是否以管理员身份运行 net sessionnul21if%errorLevel% neq0(echo请以管理员身份运行此脚本 pauseexit/b1)echo正在启动PostgreSQL16... pg_ctl.exe start-D%PG_DATA%-w:: 检查启动结果if%errorLevel% equ0(echoPostgreSQL16启动成功)else(echoPostgreSQL16启动失败请检查日志或路径是否正确)pause单独的停止脚本stop_postgres.batecho off chcp65001nul title PostgreSQL16停止脚本 :: 设置PostgreSQL的路径setPG_BIND:\Program Files (x86)\PostgreSQL\16\binsetPG_DATAD:\Program Files (x86)\PostgreSQL\16\data:: 切换到bin目录cd/d%PG_BIN%:: 检查是否以管理员身份运行 net sessionnul21if%errorLevel% neq0(echo请以管理员身份运行此脚本 pauseexit/b1)echo正在停止PostgreSQL16... pg_ctl.exe stop-D%PG_DATA%-mfast-w:: 检查停止结果if%errorLevel% equ0(echoPostgreSQL16停止成功)else(echoPostgreSQL16停止失败请检查服务是否正在运行)pause实践我使用的是Flask框架进行实践再实践之前我已经在Deepseek应用平台创建了应用生成了key值敏感的配置信息一般生成在根目录下的.env文件中这已经是很多程序员的共识。1.加载.env文件实现配置文件分离在Python项目中如果想将.env文件的信息加载成环境变量可以使用python-dotenv库,通过os.getenv即可获取在环境变量中的配置信息将代码与配置分离方便后期维护。# 安装# pip install python-dotenv# 加载importdotenv dotenv.load_dotenv()2. Flask-wtf 参数安全校验安全性:通过验证请求的数据可以确保输入符合预期避免存在的安全漏洞如SQL注入等。数据完整性:确保数据的完整例如数据格式、类型、长度等避免因为不完整或不正确的数据导致系统出错。提高用户体验:对用户提交的不合法请求给出友好提示引导用户按照规定格式或要求重新输入从而提高用户体验。Flask-wtf是基于wtforms封装的Flask插件支持CSRF保护快速提取数据、自定义验证规则及wtforms的所有规则。wtforms支持提取的数据类型:布尔值、日期、文本、时间、浮点数、邮箱、文件、音频、整数、自定义数据类型等。wtforms支持校验的规则:必填、长度、邮箱、正则、范围UUID、数据可选、URL等。# pip install -U Flask-WTFfromflask_wtfimportFlaskFormfromwtformsimportStringField,SubmitFieldfromwtforms.validatorsimportDataRequired,LengthclassCompletionRequest(FlaskForm): 基础聊天参数校验 queryStringField(query,validators[DataRequired(message用户的提问是必填),Length(min1,max1000,message用户的提问长度不能超过1000)])3. 响应接口设计与实现先定义一个枚举字典HttpCode类封装统一的输入输出其实就是统一的结构体封装完统一的输出如下{code:success,data:{description:这是一个简单的Deepseek对话的测试机器人,id:cab840dc-29c1-4f8d-b2eb-b792a7f1235a,name:划水鸭AI聊天机器人},message:}python的代码简单如下fromenumimportEnumclassHttpCode(str,Enum):SUCCESSsuccess# 成功FAILfail# 失败classResponse:code:HttpCodeHttpCode.SUCCESS message:strdata:Anyfield(default_factorydict)defjson(data:ResponseNone):returnjsonify(data),200defsuccess_json(data:AnyNone):returnjson(Response(codeHttpCode.SUCCESS,message,datadata))4. 异常处理也是同样的道理对于项目中的错误处理和异常也统一处理classCustomException(Exception):code:HttpCodeHttpCode.FAIL message:strdata:Anyfield(default_factorydict)def__init__(self,message:strNone,data:AnyNone):super().__init__()self.messagemessage self.datadataclassFailException(CustomException):passclassNotFoundException(CustomException):codeHttpCode.NOT_FOUND5. PyTest测试用例Pytest是一个功能强大且易于使用的Python测试框架用于编写和运行“单元测试“用例、集成测试和功能测试对比 unitest框架Pytest的优势非常明显:简单易用: Pytest的语法简单明了学习曲线低它采用了自然的测试用例编写方式使得编写测试代码变得更加简单和直观。灵活性:Pytest支持多种测试样式包括函数式、类式、模块级别的测试甚至支持测试生成器而且插件生态非常丰富可以通过 插件来扩展Pytest的功能满足各种测试场景。集成性:Pytest 可以很好地与其他测试工具和框架集成比如与Jenkins、Travis CI、Coverage.py等。它还支持与其他测试框架(如 unittest和doctest)协同工作。丰富的输出信息:Pytest在测试运行过程中提供丰富的输出信息包括测试结果、失败原因、详细的堆栈跟踪等便于开发人员定位 和修复问题。pipinstallpytestpytest会递归查找当前目录及子目录下的所有以test开始或者_test结尾的Python脚本执行其中符合规则的函数和方法不需要显 示调用在Pytest中基础的配置可以放在 pytest.ini配置文件中格式如下:[pytest]# pytest cachecache_dirtmp/.pytest_cache# pytest optionsaddopts-v-s2.fixture 设置测试环境importpytestfromapp.http.appimportapppytest.fixturedefclient():获取Flask应用的测试应用并返回app.config[TESTING]Truewithapp.test_client()asclient:yieldclient3.参数化测试调用方法importpytestfrompkg.responseimportHttpCodeclassTestAppHandler:pytest.mark.parametrize(query,[None,你好你是谁])deftest_completion(self,query,client):respclient.post(/app/completion,json{query:query})assertresp.status_code200ifqueryisNone:assertresp.json.get(code)HttpCode.VALIDATE_ERRORelse:assertresp.json.get(code)HttpCode.SUCCESSpytest 执行结果(env)PS E:\pythonProject\llmops\llmops-api\testpytest-v-stestsession startsplatform win32 -- Python3.10.11, pytest-9.0.2, pluggy-1.6.0 -- E:\pythonProject\llmops\llmops-api\env\Scripts\python.exe cachedir: tmp.pytest_cache rootdir: E:\pythonProject\llmops\llmops-api configfile: pytest.ini plugins: anyio-4.12.1 collected2items internal\handler\test_app_handler.py::TestAppHandler::test_completion[None]PASSED internal\handler\test_app_handler.py::TestAppHandler::test_completion[\u4f60\u597d\uff0c\u4f60\u662f\u8c01\uff1f]PASSED2passedin6.08s4.Flask_SQLAlchemy 数据操作# pip install flask-sqlalchemy psycopg2#SQLAlchemy数据库配置SQLALCHEMY_DATABASE_URIpostgresql://user:password127.0.0.1:5432/llmops?client_encodingutf8SQLALCHEMY_POOL_SIZE30SQLALCHEMY_POOL_RECYCLE3600SQLALCHEMY_ECHOTrue5.项目的实践步骤项目的加载流程和步骤1、加载根目录下的.env文件读取敏感配置2、Injector是全局加载的依赖注入库3、加载路由RouterFlask的路由蓝图完成注册到蓝图中4、SQLAlchemy 在启动Http服务的时候自动加载了importdotenvfrompkg.sqlalchemyimportSQLAlchemyfrominjectorimportInjectorfromapp.http.moduleimportExtensionModulefrominternal.routerimportRouterfrominternal.serverimportHttpfromconfigimportConfig dotenv.load_dotenv()confConfig()injectorInjector([ExtensionModule])appHttp(__name__,confconf,dbinjector.get(SQLAlchemy),routerinjector.get(Router))if__name____main__:app.run(debugTrue)至此一个接入Deepseek简单的聊天机器人就已经运行起来了有需要源码的小伙伴可以私聊我一起加油~