AIOps系列--从模型“说”到模型“做”
先看效果
系统架构组件
Streamlit 界面:
- 侧边栏和输入区域:提供用户界面,用于输入数据(如 Azure 端点)并进行配置。
- 聊天输入和输出区域:主要区域,用户在此与聊天助手交互并查看结果。
LLM(大型语言模型)配置设置:
- OpenAI 配置:配置用于使用 OpenAI 模型(如
gpt-4o-2024-08-06
)。 - 本地 LLM 配置:本地 LLM 模型(如
ollama/llama3:latest
)的配置。
- OpenAI 配置:配置用于使用 OpenAI 模型(如
助手代理(AssistantAgent)和用户代理(UserProxyAgent):
- TrackableAssistantAgent:继承自
AssistantAgent
,负责与用户输入进行处理和响应,同时集成在 Streamlit 中以显示聊天消息。 - TrackableUserProxyAgent:继承自
UserProxyAgent
,用于接收用户输入,处理用户命令,并在助手代理与用户之间进行代理交互。
- TrackableAssistantAgent:继承自
实用工具函数:
get_url_info_from_kong
:从 Kong API 网关中查询 URL 的路由、服务和上游配置的信息,并返回格式化结果。dns_record_status
:检查给定 URL 的 DNS 记录状态。query_from_cmdb
:从 CMDB(配置管理数据库)中检索特定云服务提供商(如阿里云、AWS 等)的服务器、数据库和中间件实例的数量。
异步聊天系统:
- 使用异步事件循环(
asyncio
),用户代理(User Proxy Agent)可以异步与助手代理(Assistant Agent)进行对话,提供更高效的交互体验。
- 使用异步事件循环(
架构图
+---------------------------------------------------------------+
| Streamlit Interface |
|---------------------------------------------------------------|
| +-----------------------------------------------------------+ |
| | Sidebar (Azure Endpoint Config, etc.) | |
| +-----------------------------------------------------------+ |
| |
| +-----------------------------------------------------------+ |
| | Chat Input / Output Area | |
| | | |
| | User Input --> UserProxyAgent --> AssistantAgent | |
| | | |
| | AssistantAgent --> UserProxyAgent --> Output Display | |
| +-----------------------------------------------------------+ |
+---------------------------------------------------------------+
+--------------------+ +--------------------+
| LLM Configurations | | Utility Functions|
|--------------------| |--------------------|
| - OpenAI (GPT-4) | | - get_url_info_from|
| - Local LLM (LLaMA)| | _kong() |
+--------------------+ | (Interacts with |
| Kong API Gateway)|
| - dns_record_status|
| (Checks DNS) |
| - query_from_cmdb |
| (Interacts with |
| CMDB Database) |
+--------------------+
+-----------------+ +-------------------+
| AssistantAgent | <--- asyncio ->| UserProxyAgent |
| (Handles LLM | | (Manages User |
| Requests) | | Input/Commands) |
+-----------------+ +-------------------+
^ | ^ |
| | | |
| v | v
+----------------+ +-------------------+
| LLM Config | | Utility Functions|
| Setup (OpenAI)| | (Kong, DNS, CMDB) |
+----------------+ +-------------------+
+----------------+
| Data Flow |
|----------------|
| - User Input |
| - Assistant |
| - ProxyAgent |
| - Utility Func|
+----------------+
架构图描述
- 用户输入(通过 Streamlit):
用户通过 Streamlit 界面输入聊天内容或命令。 - 助手代理和用户代理交互:
用户代理接收用户输入,解析并处理命令,然后与助手代理交互。助手代理根据注册的工具函数或LLM配置进行响应。 - 工具函数交互:
当助手代理或用户代理调用工具函数时,这些函数将与 Kong API 网关、DNS 解析服务或 CMDB 模拟数据进行交互。 - 结果显示:
通过 Streamlit 界面将助手代理和用户代理的响应结果显示给用户。
核心优势
超越简单的 RAG 和提示词工程:
- 传统的 RAG 方法主要依赖于检索和生成的结合,通过从知识库中检索相关信息并用语言模型生成答案。然而,这种方法局限于信息查询和简单的问答系统,无法处理更复杂的任务。
- 提示词工程则是通过精细设计提示词来引导语言模型生成特定输出,依然依赖于语言模型本身的生成能力,不能主动与外部系统进行交互或执行特定操作。
使用 Function Call 完成真实世界的任务:
- 本系统通过引入 Function Call 技术,赋予助手代理(Assistant Agent)和用户代理(User Proxy Agent)调用实际功能的能力。这些功能可以执行复杂的任务,如查询 Kong API 网关中的服务配置、检查 DNS 记录状态、从 CMDB 检索云资源信息等。
- 通过注册和调用实际的 Python 函数,系统能够与外部 API、数据库和服务进行交互,执行逻辑操作和数据处理。这种能力使得系统不仅限于简单的对话和问答,更能够执行真实世界中的操作任务。
集成异步交互和高效任务处理:
- 使用异步框架(如
asyncio
)实现用户代理和助手代理之间的异步通信,大幅提升了任务处理的效率和响应速度。这样的设计确保了系统能够并发处理多个任务,而不阻塞用户输入和系统响应。 - 异步处理机制也增强了系统的稳定性和扩展性,使其能够处理更大规模的请求和更复杂的任务逻辑。
- 使用异步框架(如
技术含量高,解决复杂场景问题:
- 系统架构充分考虑了实际应用场景中的复杂性,通过模块化设计,支持各种工具函数的集成和扩展,能够适应不同的企业和业务需求。
- 例如,
get_url_info_from_kong
函数能够通过调用 Kong API,获取详细的路由、服务和插件信息,并对这些数据进行格式化处理和展示;query_from_cmdb
函数能够从 CMDB 中动态检索并整合不同云服务商的资源信息。这样的功能大大提升了系统的实际应用价值。
提升企业运营效率与智能化水平:
- 通过整合各种实用功能和自动化操作,系统能够显著提升企业运维和运营效率。例如,它可以自动查询和管理 API 网关配置、检查网络 DNS 状态、整合和分析云资源数据,帮助企业做出更高效的决策和管理。