
一、AI Agent 介绍
1. 定义
AI Agent(智能体) = 具备自主思考、记忆、规划、工具使用、自我反思能力的 AI 系统。它不是简单问答机器人,而是能独立完成复杂任务的自动化助手。
2. 核心特点

✅ 自主性:无需人工逐步干预 ✅ 记忆能力:短期上下文 + 长期知识库 ✅ 任务规划:自动拆解复杂目标 ✅ 工具调用:联网搜索、数据库、代码执行、API ✅ 反馈迭代:执行失败自动重试 / 优化

1. 五大核心模块
- 大脑(LLM)
决策、推理、规划核心 - 感知层
接收用户输入 / 环境数据 - 记忆层
短期记忆 + 长期记忆 - 规划层
目标拆解、步骤生成 - 执行 / 工具层
调用外部能力(搜索、代码、数据库)



四、AI Agent 实现
第一部分:完整版 Agent(联网+数据库+代码执行)
核心目标:实现“自主感知→联网检索→数据库读写→代码执行→反馈迭代”全闭环,支持复杂任务(如“爬取行业数据→存入数据库→分析数据→生成可视化报告”),覆盖Python、Java、Go三种语言,对应主流框架。
1. Python(LangChain)完整版 Agent
集成:DuckDuckGo联网搜索 + SQLite数据库(读写) + Python代码执行(数据分析、绘图),可直接运行,需提前安装依赖。
1.1 依赖安装
pip install langchain langchain-openai langchain-community duckduckgo-search sqlite3 matplotlib pandas1.2 完整代码
from langchain.agents import create_tool_calling_agent, AgentExecutorfrom langchain_community.tools import DuckDuckGoSearchRun, PythonREPLToolfrom langchain_community.utilities import SQLDatabasefrom langchain_openai import ChatOpenAIfrom langchain_core.prompts import ChatPromptTemplate# 1. 初始化核心组件# 1.1 LLM大脑(GPT-3.5/4均可,替换api_key即可)llm = ChatOpenAI(model="gpt-3.5-turbo",temperature=0,api_key="你的OpenAI API Key" # 替换为自己的API Key)# 1.2 联网搜索工具(DuckDuckGo,无需额外配置)search_tool = DuckDuckGoSearchRun()# 1.3 代码执行工具(Python REPL,支持数据分析、绘图、逻辑执行)python_repl_tool = PythonREPLTool()# 1.4 数据库工具(SQLite,本地文件数据库,无需部署,可替换为MySQL/PostgreSQL)db = SQLDatabase.from_uri("sqlite:///ai_agent_db.db") # 自动创建数据库文件db_tool = db.as_tool() # 转为LangChain可调用工具# 2. 整合所有工具tools = [search_tool, python_repl_tool, db_tool]# 3. 提示词(核心:引导Agent自主选择工具、闭环执行)prompt = ChatPromptTemplate.from_messages([("system", """你是一个具备自主能力的完整版AI Agent,拥有联网搜索、数据库读写、代码执行能力,核心任务是完成用户复杂需求,执行逻辑如下:1. 先判断是否需要联网:若需求涉及实时数据、最新信息,先调用搜索工具获取数据;2. 再判断是否需要数据库:若需存储、查询历史数据,调用数据库工具(增删改查);3. 最后判断是否需要代码执行:若需数据分析、绘图、复杂计算,调用Python代码执行工具;4. 执行过程中,若某一步失败,自动重试(更换工具或调整参数),无需人工干预;5. 完成所有步骤后,整理结果,输出清晰、易懂的最终答案,若有图表,保存为本地文件并提示路径。"""),("user", "{input}"),("agent_scratchpad", "{agent_scratchpad}") # 保存Agent思考过程])# 4. 创建Agent并执行agent = create_tool_calling_agent(llm, tools, prompt)# 开启verbose=True,可查看Agent思考、工具调用全过程agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True, handle_parsing_errors=True)# 5. 测试复杂任务(可替换为任意需求,如"爬取2025年AI行业市场规模→存入数据库→分析同比增长率→生成柱状图")if __name__ == "__main__":user_input = """完成以下任务:1. 联网搜索2024年和2025年全球人工智能行业市场规模(单位:亿美元);2. 将搜索到的数据存入SQLite数据库,表名设为ai_market_size,字段包括year(年份)、market_size(市场规模);3. 用Python代码计算2025年相对2024年的同比增长率;4. 生成柱状图(对比两年市场规模),保存为ai_market_chart.png;5. 输出最终结果(增长率+图表路径)。"""result = agent_executor.invoke({"input": user_input})print("\n==================== 最终结果 ====================")print(result["output"])
1.3 核心说明
数据库:自动创建SQLite数据库(ai_agent_db.db),可替换为MySQL(修改连接URI:mysql+pymysql://user:password@host:port/dbname);
代码执行:支持matplotlib绘图、pandas数据分析,生成的图表保存在本地;
闭环能力:Agent会自主判断“是否需要工具→用哪个工具→工具执行失败如何重试”,无需人工干预。
2. Java(Spring AI + LangChain4j)完整版 Agent
企业级实现,集成:OkHttp联网搜索 + MySQL数据库 + Java代码执行(通过ScriptEngine),适配Spring Boot项目,可直接集成到企业系统。
2.1 依赖(pom.xml)
<!-- Spring Boot 基础依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>3.2.0</version></dependency><!-- Spring AI 核心依赖 --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId><version>1.0.0</version></dependency><!-- LangChain4j 依赖(增强工具调用能力) --><dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j</artifactId><version>0.32.0</version></dependency><!-- 数据库依赖(MySQL) --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.36</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId><version>3.2.0</version></dependency><!-- 联网工具(OkHttp) --><dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.11.0</version></dependency><!-- 代码执行工具(ScriptEngine) --><dependency><groupId>org.codehaus.groovy</groupId><artifactId>groovy-all</artifactId><version>3.0.17</version><type>pom</type></dependency>
2.2 完整代码(Spring Boot项目)
2.2.1 配置文件(application.yml)
spring:# OpenAI 配置ai:openai:api-key: 你的OpenAI API Keychat:model: gpt-3.5-turbotemperature: 0# MySQL 数据库配置datasource:url: jdbc:mysql://localhost:3306/ai_agent_db?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTCusername: root # 替换为你的MySQL用户名password: 123456 # 替换为你的MySQL密码driver-class-name: com.mysql.cj.jdbc.Driver# 服务器配置server:port: 8080
2.2.2 工具类
package com.ai.agent.tool;import dev.langchain4j.agent.tool.Tool;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.stereotype.Component;import javax.script.ScriptEngine;import javax.script.ScriptEngineManager;import javax.script.ScriptException;import java.io.IOException;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;/*** 整合三大工具:联网搜索、数据库操作、代码执行*/@Componentpublic class AgentTools {// 1. 数据库工具(MySQL)@Autowiredprivate JdbcTemplate jdbcTemplate;// 2. 联网搜索工具(OkHttp)private final OkHttpClient okHttpClient = new OkHttpClient();// 3. 代码执行工具(ScriptEngine,支持Groovy/Java代码)private final ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("groovy");/*** 工具1:联网搜索(输入搜索关键词,返回搜索结果)*/@Tool(description = "用于获取实时、最新信息,输入搜索关键词,返回搜索到的文本内容")public String webSearch(String keyword) throws IOException {String url = "https://api.duckduckgo.com/?q=" + keyword + "&format=json&no_redirect=1";Request request = new Request.Builder().url(url).build();try (Response response = okHttpClient.newCall(request).execute()) {assert response.body() != null;return response.body().string();}}/*** 工具2:数据库操作(输入SQL语句,执行增删改查,返回执行结果)*/@Tool(description = "用于操作MySQL数据库,输入合法SQL语句,返回执行结果(查询返回数据,增删改返回影响行数)")public String dbOperation(String sql) {try {// 判断SQL类型,执行对应操作if (sql.trim().toLowerCase().startsWith("select")) {return jdbcTemplate.queryForList(sql).toString();} else {int rows = jdbcTemplate.update(sql);return "执行成功,影响行数:" + rows;}} catch (Exception e) {return "SQL执行失败:" + e.getMessage();}}/*** 工具3:代码执行(输入Groovy/Java代码,执行并返回结果,支持数据分析、计算)*/@Tool(description = "用于执行复杂计算、数据分析,输入合法的Groovy或Java代码,返回执行结果")public String codeExecute(String code) throws ScriptException {Object result = scriptEngine.eval(code);return "代码执行成功,结果:" + result.toString();}}
2.2.3 Agent核心类(Spring AI + LangChain4j整合)
package com.ai.agent.service;import com.ai.agent.tool.AgentTools;import dev.langchain4j.memory.chat.MessageWindowChatMemory;import dev.langchain4j.model.openai.OpenAiChatModel;import dev.langchain4j.service.AiServices;import org.springframework.ai.chat.client.ChatClient;import org.springframework.ai.openai.OpenAiChatModel;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;/*** 完整版AI Agent(整合三大工具,支持闭环执行)*/@Servicepublic class FullAgentService {// 注入工具类@Autowiredprivate AgentTools agentTools;// 初始化LLM(Spring AI整合OpenAI)private final OpenAiChatModel chatModel;// 初始化Agent(LangChain4j提供工具调用能力)private final Agent agent;@Autowiredpublic FullAgentService(OpenAiChatModel chatModel) {this.chatModel = chatModel;// 配置Agent:LLM + 记忆 + 工具this.agent = AiServices.builder(Agent.class).chatModel(chatModel).chatMemory(MessageWindowChatMemory.withMaxMessages(20)) // 长期记忆(保存20条上下文).tools(agentTools) // 注入三大工具.build();}// Agent接口(定义交互方法)public interface Agent {String executeTask(String task);}// 执行复杂任务public String runFullAgent(String task) {// 引导Agent自主调用工具,闭环执行任务String systemPrompt = "你是企业级AI Agent,具备联网搜索、MySQL数据库操作、代码执行能力,执行逻辑:" +"1. 先判断任务是否需要实时数据,需要则调用webSearch工具;" +"2. 若需要存储/查询数据,调用dbOperation工具执行SQL;" +"3. 若需要计算/分析,调用codeExecute工具执行代码;" +"4. 执行失败自动重试,无需人工干预,最终输出清晰结果。";// 整合系统提示词和用户任务String finalPrompt = systemPrompt + "\n用户任务:" + task;return agent.executeTask(finalPrompt);}}
2.2.4 测试接口(Controller)
package com.ai.agent.controller;import com.ai.agent.service.FullAgentService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class AgentController {@Autowiredprivate FullAgentService fullAgentService;// 测试完整版Agent的接口(POST请求,接收任务指令)@PostMapping("/agent/run")public String runAgent(@RequestBody String task) {return fullAgentService.runFullAgent(task);}}
3. Go(langchaingo)完整版 Agent
高性能实现,集成:DuckDuckGo联网 + PostgreSQL数据库 + Go代码执行(通过exec包),轻量、高效,适合高并发场景。
3.1 依赖安装
go get github.com/tmc/langchaingogo get github.com/tmc/langchaingo/agentsgo get github.com/tmc/langchaingo/llms/openaigo get github.com/tmc/langchaingo/toolsgo get github.com/lib/pq # PostgreSQL驱动go get github.com/duckduckgo/ddg-go # 联网搜索
3.2 完整代码
package mainimport ("context""database/sql""fmt""os/exec""github.com/duckduckgo/ddg-go""github.com/lib/pq""github.com/tmc/langchaingo/agents""github.com/tmc/langchaingo/chains""github.com/tmc/langchaingo/llms/openai""github.com/tmc/langchaingo/tools")// 1. 联网搜索工具(DuckDuckGo)type WebSearchTool struct{}func(w *WebSearchTool) Name() string {return "web_search"}func(w *WebSearchTool) Description() string {return "用于获取实时、最新信息,输入搜索关键词,返回搜索到的文本内容"}func(w *WebSearchTool) Call(ctx context.Context, input string) (string, error) {results, err := ddg.Search(input)if err != nil {return "", err}var resultStr stringfor i, res := range results[:5] { // 取前5条结果resultStr += fmt.Sprintf("%d. 标题:%s\n内容:%s\n链接:%s\n\n", i+1, res.Title, res.Abstract, res.Link)}return resultStr, nil}// 2. 数据库工具(PostgreSQL)type DBTool struct {db *sql.DB}funcNewDBTool(connStr string) (*DBTool, error) {db, err := sql.Open("postgres", connStr)if err != nil {return nil, err}return &DBTool{db: db}, nil}func(d *DBTool) Name() string {return "db_operation"}func(d *DBTool) Description() string {return "用于操作PostgreSQL数据库,输入合法SQL语句,返回执行结果"}func(d *DBTool) Call(ctx context.Context, sql string) (string, error) {// 判断SQL类型if len(sql) >= 6 && sql[:6] == "SELECT" {rows, err := d.db.QueryContext(ctx, sql)if err != nil {return "", err}defer rows.Close()cols, err := rows.Columns()if err != nil {return "", err}var resultStr stringfor rows.Next() {values := make([]interface{}, len(cols))valuePtrs := make([]interface{}, len(cols))for i := range values {valuePtrs[i] = &values[i]}if err := rows.Scan(valuePtrs...); err != nil {return "", err}for i, col := range cols {resultStr += fmt.Sprintf("%s: %v ", col, values[i])}resultStr += "\n"}return resultStr, nil} else {result, err := d.db.ExecContext(ctx, sql)if err != nil {return "", err}rowsAffected, err := result.RowsAffected()if err != nil {return "", err}return fmt.Sprintf("执行成功,影响行数:%d", rowsAffected), nil}}// 3. 代码执行工具(Go代码执行)type CodeExecuteTool struct{}func(c *CodeExecuteTool) Name() string {return "code_execute"}func(c *CodeExecuteTool) Description() string {return "用于执行Go代码,输入合法的Go代码片段,返回执行结果"}func(c *CodeExecuteTool) Call(ctx context.Context, code string) (string, error) {// 将代码写入临时文件tmpFile := "temp.go"if err := os.WriteFile(tmpFile, []byte(code), 0644); err != nil {return "", err}defer os.Remove(tmpFile)// 执行代码cmd := exec.CommandContext(ctx, "go", "run", tmpFile)output, err := cmd.CombinedOutput()if err != nil {return fmt.Sprintf("代码执行失败:%s", err.Error()), nil}return fmt.Sprintf("代码执行成功,结果:%s", string(output)), nil}// 主程序:创建完整版Agent并执行任务funcmain() {ctx := context.Background()// 1. 初始化LLMllm, err := openai.NewChat(openai.WithModel("gpt-3.5-turbo"),openai.WithAPIKey("你的OpenAI API Key"),)if err != nil {panic(err)}// 2. 初始化三大工具webSearchTool := &WebSearchTool{}// PostgreSQL连接字符串(替换为自己的数据库信息)connStr := "user=postgres password=123456 dbname=ai_agent_db host=localhost port=5432 sslmode=disable"dbTool, err := NewDBTool(connStr)if err != nil {panic(err)}codeExecuteTool := &CodeExecuteTool{}// 3. 整合工具toolList := []tools.Tool{webSearchTool, dbTool, codeExecuteTool}// 4. 创建Agentagent := agents.NewOpenAIFunctionsAgent(llm, toolList)executor := agents.NewExecutor(agent, toolList)// 5. 测试复杂任务task := `完成以下任务:1. 联网搜索2024年和2025年中国AI行业从业人员数量(单位:万人);2. 将数据存入PostgreSQL数据库,表名ai_employee,字段year(年份)、employee_count(从业人员数量);3. 用Go代码计算2025年相对2024年的同比增长率;4. 输出最终结果(增长率)。`result, err := chains.Run(ctx, executor, task)if err != nil {panic(err)}fmt.Println("==================== 最终结果 ====================")fmt.Println(result)}
第二部分:前端界面的可视化 Agent 系统
核心目标:实现“前端可视化操作 + 后端Agent执行”的完整系统,支持用户输入任务、查看Agent执行过程(思考、工具调用)、查看最终结果(文本+图表),前端采用Vue3+Element Plus,后端复用第一部分的Agent接口,可直接部署。
1. 系统架构
前端(Vue3) ←→ 后端(Spring Boot/Flask/Gin) ←→ Agent核心(LangChain/Spring AI/langchaingo) ←→ 工具(联网+数据库+代码执行)2. 前端实现(Vue3 + Element Plus)
直接复制代码,安装依赖后运行,支持任务输入、执行日志、结果展示、图表预览。
2.1 依赖安装
# 创建Vue项目npm create vue@latest ai-agent-frontendcd ai-agent-frontend# 安装依赖npm install element-plus axios echarts
2.2 完整代码(核心页面)
2.2.1 主页面(src/views/AgentView.vue)
<template><divclass="agent-container"><el-page-headercontent="AI Agent 可视化系统" /><!-- 任务输入区域 --><el-cardclass="input-card"shadow="hover"><el-form-itemlabel="任务指令"><el-inputtype="textarea"v-model="taskInput"placeholder="请输入复杂任务(如:爬取2025年AI市场规模→存入数据库→分析增长率→生成图表)"rows="4"class="task-input"/></el-form-item><el-buttontype="primary" @click="runAgent":disabled="isRunning">{{ isRunning ? '执行中...' : '运行Agent' }}</el-button><el-buttontype="default" @click="clearAll"style="margin-left: 10px">清空</el-button></el-card><!-- 执行日志区域 --><el-cardclass="log-card"shadow="hover"><el-page-headercontent="Agent执行日志" /><divclass="log-content"v-if="logList.length > 0"><divv-for="(log, index) in logList":key="index"class="log-item"><spanclass="log-time">{{ log.time }}</span><spanclass="log-type":class="log.type">{{ log.typeText }}</span><spanclass="log-content-text">{{ log.content }}</span></div></div><divclass="empty-log"v-else>暂无执行日志,点击“运行Agent”开始执行任务</div></el-card><!-- 结果展示区域 --><el-cardclass="result-card"shadow="hover"><el-page-headercontent="执行结果" /><divclass="result-content"v-if="result"><el-dividercontent-position="left">文本结果</el-divider><divclass="result-text"v-html="result.text"></div><el-dividercontent-position="left"v-if="result.chartPath">图表预览</el-divider><el-imagev-if="result.chartPath":src="result.chartPath"class="chart-image"preview-src-list="[result.chartPath]"/></div><divclass="empty-result"v-else>暂无执行结果,等待Agent执行完成</div></el-card></div></template><scriptsetup>import { ref } from 'vue';import axios from 'axios';import { ElMessage, ElPageHeader, ElCard, ElFormItem, ElInput, ElButton, ElDivider, ElImage } from 'element-plus';import 'element-plus/dist/index.css';// 状态管理const taskInput = ref('');const isRunning = ref(false);const logList = ref([]); // 执行日志:time, type, typeText, contentconst result = ref(null); // 执行结果:text, chartPath// 格式化时间const formatTime = () => {const date = new Date();return date.toLocaleString('zh-CN', { hour12: false });};// 新增日志const addLog = (type, content) => {const typeMap = {info: { text: '信息', class: 'log-info' },tool: { text: '工具调用', class: 'log-tool' },error: { text: '错误', class: 'log-error' },success: { text: '成功', class: 'log-success' }};logList.value.push({time: formatTime(),type: typeMap[type].class,typeText: typeMap[type].text,content});// 滚动到底部const logContent = document.querySelector('.log-content');if (logContent) {logContent.scrollTop = logContent.scrollHeight;}};// 运行Agentconst runAgent = async () => {if (!taskInput.value.trim()) {ElMessage.warning('请输入任务指令');return;}// 重置状态isRunning.value = true;logList.value = [];result.value = null;addLog('info', `开始执行任务:${taskInput.value}`);try {// 调用后端Agent接口(替换为你的后端接口地址)const response = await axios.post('http://localhost:8080/agent/run', taskInput.value, {headers: { 'Content-Type': 'text/plain' }});// 解析结果(假设后端返回JSON:{text: "结果文本", chartPath: "图表路径"})const resData = response.data;addLog('success', '任务执行完成');result.value = {text: resData.text || resData, // 兼容不同返回格式chartPath: resData.chartPath || ''};} catch (error) {addLog('error', `任务执行失败:${error.message}`);ElMessage.error('任务执行失败,请检查后端服务或任务指令');} finally {isRunning.value = false;}};// 清空所有内容const clearAll = () => {taskInput.value = '';logList.value = [];result.value = null;};</script><stylescoped>.agent-container {padding: 20px;max-width: 1200px;margin: 0 auto;}.input-card {margin-bottom: 20px;}.task-input {width: 100%;margin-bottom: 10px;}.log-card, .result-card {margin-bottom: 20px;}.log-content {height: 300px;overflow-y: auto;padding: 10px;background-color: #f8f9fa;border-radius: 4px;}.log-item {margin-bottom: 8px;line-height: 1.5;}.log-time {color: #909399;font-size: 12px;margin-right: 10px;}.log-type {padding: 2px 6px;border-radius: 4px;font-size: 12px;margin-right: 10px;color: white;}.log-info {background-color: #409eff;}.log-tool {background-color: #67c23a;}.log-error {background-color: #f56c6c;}.log-success {background-color: #1f9d58;}.empty-log, .empty-result {text-align: center;padding: 20px;color: #909399;}.result-content {padding: 10px;}.result-text {line-height: 1.8;white-space: pre-wrap;}.chart-image {max-width: 100%;margin-top: 10px;border-radius: 4px;}</style>
2.2.2 路由配置(src/router/index.js)
import { createRouter, createWebHistory } from 'vue-router';import AgentView from '../views/AgentView.vue';const routes = [{path: '/',name: 'Agent',component: AgentView}];const router = createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes});export default router;
2.2.3 主入口(src/main.js)
import { createApp } from 'vue';import App from './App.vue';import router from './router';import ElementPlus from 'element-plus';import 'element-plus/dist/index.css';import axios from 'axios';const app = createApp(App);app.use(router);app.use(ElementPlus);app.config.globalProperties.$axios = axios;app.mount('#app');
2.3 前端部署
# 打包前端项目npm run build# 部署方式1:本地测试(使用serve)npm install -g serveserve -s dist# 部署方式2:部署到Nginx(复制dist目录到Nginx的html目录,修改nginx.conf)# nginx.conf配置示例:server {listen 80;server_name localhost;location / {root html/dist;index index.html;try_files $uri $uri/ /index.html;}# 跨域配置(若前端和后端不在同一端口)location /agent {proxy_pass http://localhost:8080;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}}
2.4 后端适配(以Spring Boot为例)
修改第一部分的Spring Boot Agent接口,返回JSON格式结果(包含文本和图表路径),示例:
// 修改AgentController.java@PostMapping("/agent/run")public ResponseEntity<Map<String, String>> runAgent(@RequestBodyString task) {String result = fullAgentService.runFullAgent(task);Map<String, String> response = new HashMap<>();// 假设Agent执行后生成图表,路径为本地静态资源目录response.put("text", result);response.put("chartPath", "/static/ai_market_chart.png"); // 前端可访问的图表路径return ResponseEntity.ok(response);}// 配置静态资源访问(application.yml)spring:resources:static-locations: classpath:/static/,file:./static/
第三部分:企业级多智能体(Multi-Agent)架构
核心目标:设计企业级多智能体系统,支持“多Agent协作、任务拆分、角色分工、负载均衡”,适配复杂业务场景(如企业自动化办公、多维度数据分析、全流程研发辅助),基于主流框架实现,可横向扩展。
1. 企业级多智能体核心架构
架构设计遵循“高内聚、低耦合”原则,分为5层,支持动态扩展Agent数量、灵活分配任务,具备容错、监控能力。
1.1 架构图

1.2 架构原理图

2. 多智能体协作流程
以“企业月度经营分析报告生成”为例,展示多Agent协作全流程:


3. 多智能体实现(基于LangChain Multi-Agent)
以Python LangChain为例,实现简化版企业级多智能体,包含主控Agent、执行Agent、调度逻辑,可直接扩展为生产级系统。
3.1 依赖安装
pip install langchain langchain-openai langchain-community pymilvus python-dotenv kafka-python3.2 部分代码
from langchain.agents import create_tool_calling_agent, AgentExecutorfrom langchain_openai import ChatOpenAIfrom langchain_core.prompts import ChatPromptTemplatefrom langchain_community.tools import DuckDuckGoSearchRun, SQLDatabaseToolfrom langchain_community.utilities import SQLDatabasefrom kafka import KafkaProducer, KafkaConsumerimport jsonimport timefrom dotenv import load_dotenvimport osimport matplotlib.pyplot as pltimport requests # 用于调用ERP/CRM接口from typing import List, Dict# 加载环境变量(API Key、数据库地址等)load_dotenv()# 1. 初始化通用组件# 1.1 LLM大脑(GPT-4,企业级推荐使用)llm = ChatOpenAI(model="gpt-4",temperature=0,api_key=os.getenv("OPENAI_API_KEY"))# 1.2 工具池(所有Agent共享)db = SQLDatabase.from_uri(os.getenv("DATABASE_URI")) # 企业MySQL集群地址db_tool = db.as_tool()search_tool = DuckDuckGoSearchRun()# 新增:ERP/CRM接口调用工具(适配协作流程中的子任务1、2)class ERPAPITool:"""ERP系统接口工具,用于获取企业营收数据"""def __init__(self):self.erp_api_url = os.getenv("ERP_API_URL")self.erp_api_key = os.getenv("ERP_API_KEY")def call(self, month: str, year: str) -> Dict:"""调用ERP接口获取指定年月的营收数据"""headers = {"Authorization": f"Bearer {self.erp_api_key}"}params = {"year": year, "month": month}response = requests.get(self.erp_api_url, headers=headers, params=params)response.raise_for_status() # 接口调用失败抛出异常return response.json()class CRMAPITool:"""CRM系统接口工具,用于获取用户数据"""def __init__(self):self.crm_api_url = os.getenv("CRM_API_URL")self.crm_api_key = os.getenv("CRM_API_KEY")def call(self, month: str, year: str) -> Dict:"""调用CRM接口获取指定年月的用户数据"""headers = {"Authorization": f"Bearer {self.crm_api_key}"}params = {"year": year, "month": month}response = requests.get(self.crm_api_url, headers=headers, params=params)response.raise_for_status()return response.json()# 初始化业务工具erp_tool = ERPAPITool()crm_tool = CRMAPITool()# 1.3 消息队列(Kafka,用于Agent间通信)producer = KafkaProducer(bootstrap_servers='localhost:9092', value_serializer=lambda v: json.dumps(v).encode('utf-8'))consumer = KafkaConsumer('agent_tasks', bootstrap_servers='localhost:9092', value_deserializer=lambda v: json.loads(v.decode('utf-8')))# 新增:结果反馈队列(用于执行Agent返回结果给主控Agent)result_consumer = KafkaConsumer('agent_results', bootstrap_servers='localhost:9092', value_deserializer=lambda v: json.loads(v.decode('utf-8')))# 1.4 图表生成工具(适配子任务2生成折线图需求)def generate_line_chart(data: Dict, save_path: str = "user_growth_chart.png") -> str:"""生成用户增长趋势折线图,返回保存路径"""months = list(data.keys())user_counts = list(data.values())plt.figure(figsize=(10, 6))plt.plot(months, user_counts, marker='o', linestyle='-', color='#409eff')plt.title('用户增长趋势图', fontsize=14)plt.xlabel('月份', fontsize=12)plt.ylabel('用户数量(万人)', fontsize=12)plt.grid(True, alpha=0.3)plt.savefig(save_path, dpi=300, bbox_inches='tight')plt.close()return save_path# 1.5 OA系统推送工具(适配结果交付流程)def push_to_oa(report_content: str, chart_path: str = None) -> bool:"""将报告和图表推送至企业OA系统"""oa_api_url = os
夜雨聆风