【Azure 架构师学习笔记 】- Azure AI(19) - Agent升级增强

本文属于【Azure 架构师学习笔记】系列

本文属于【Azure AI】系列

接上文 【Azure 架构师学习笔记 】- Azure AI(18)-搭建基于Azure的入门级Agent

一、前言(承接上一篇)

上一篇我们成功跑通了第一个基础Azure Agent,核心实现了「文本总结」单一功能,只能处理纯文本输入,且无法记住上下文、不能扩展其他功能,只能满足最基础的使用需求。

这一篇我们直接对Agent进行升级,摆脱"单一功能、无记忆"的局限,打造一个真正能用的实用型Agent,全程复用已有的Azure GPT-4模型和azure_config.json配置文件,代码可直接复制运行,无需额外配置,新手也能轻松上手。

本篇核心收获(3个升级点+1个核心能力):

  • ✅ 新增「多轮记忆功能」:Agent能记住你上一句的提问和回复,实现连贯对话,不用重复输入上下文;

  • ✅ 支持「多工具调度」:在文本总结基础上,新增智能问答工具,Agent可自动识别任务类型,调用对应工具;

  • ✅ 优化「意图解析逻辑」:不用死板输入"文本总结"前缀,输入自然语言(如"总结这段话""什么是Agent"),Agent可自动识别需求;

  • ✅ 掌握「Agent扩展架构」:理解多工具、记忆模块的整合逻辑,为下一篇实现"文件处理"打下基础。

下面是这次的架构图:

二、实操

需确认以下2点:

  1. 确认azure_config.json文件存在(和本篇代码放在同一目录),文件中包含azure_endpoint、api_key、deployment_name三个核心配;

  2. 确认OpenAI依赖已安装,若未安装,打开CMD/PowerShell执行以下命令:pip install openai --user

代码

python 复制代码
from openai import AzureOpenAI
import json
import os

# ===================== 1. Azure配置加载(完全复用第二篇,无需修改) =====================
# 配置文件路径
CONFIG_FILE = "azure_config.json"

def load_azure_config():
    """加载Azure OpenAI配置,新增容错处理,避免配置错误导致程序崩溃"""
    if os.path.exists(CONFIG_FILE):
        try:
            with open(CONFIG_FILE, "r", encoding="utf-8") as f:
                config = json.load(f)
            # 验证核心配置是否完整(适配GPT-4部署,避免误填)
            required_keys = ["azure_endpoint", "api_key", "deployment_name"]
            if all(key in config for key in required_keys):
                return config
            else:
                print("⚠️  Azure配置文件不完整,将重新引导输入")
        except Exception as e:
            print(f"⚠️  配置文件读取失败({str(e)}),将重新引导输入")
    
    # 若配置文件不存在/读取失败,引导用户重新输入并生成新文件(
    config = {
        "azure_endpoint": input("请输入AzureEndpoint:"),
        "api_key": input("请输入Azure OpenAI API Key:"),
        "deployment_name": input("请输入GPT-4模型部署名称:")
    }
    with open(CONFIG_FILE, "w", encoding="utf-8") as f:
        json.dump(config, f, ensure_ascii=False, indent=4)
    return config

# 初始化Azure OpenAI客户端
config = load_azure_config()
client = AzureOpenAI(
    azure_endpoint=config["azure_endpoint"],
    api_key=config["api_key"],
    api_version="2025-01-01-preview"  # 兼容GPT-4的稳定版本,避免调用失败
)

# ===================== 2. 核心工具模块(新增智能问答,复用文本总结) =====================
# 工具1:文本总结工具(优化提示词,适配多场景)
def summary_tool(text: str) -> str:
    """文本总结工具,GPT-4驱动,总结简洁、准确,适配职场、学习等多场景"""
    try:
        response = client.chat.completions.create(
            model=config["deployment_name"],
            messages=[
                {"role": "system", "content": "你是专业的文本总结助手,总结需简洁、准确,突出核心要点,控制在100字内,无冗余内容,适配多场景需求。"},
                {"role": "user", "content": f"请总结以下文本:\n{text}"}
            ],
            temperature=0.2  # 降低随机性,确保总结结果稳定、可复用
        )
        return response.choices[0].message.content.strip()
    except Exception as e:
        return f"❌ 总结失败:{str(e)}(请检查Azure配置或网络连接)"

# 工具2:智能问答工具(新增,支持多轮上下文问答,依赖记忆模块)
def qa_tool(question: str, history: list) -> str:
    """智能问答工具,GPT-4驱动,可结合历史对话记忆,回答更连贯"""
    # 构建对话历史,将之前的交互加入消息列表,实现上下文关联
    messages = []
    for q, a in history:
        messages.append({"role": "user", "content": q})
        messages.append({"role": "assistant", "content": a})
    # 加入当前用户的提问
    messages.append({"role": "user", "content": question})

    try:
        response = client.chat.completions.create(
            model=config["deployment_name"],
            messages=messages,
            temperature=0.3  # 适度提高随机性,让回答更灵活
        )
        return response.choices[0].message.content.strip()
    except Exception as e:
        return f"❌ 问答失败:{str(e)}(请检查Azure配置或网络连接)"

# ===================== 3. 升级后Agent核心(带记忆+多工具调度) =====================
class MemoryAgent:
    def __init__(self):
        self.history = []  # 记忆存储列表,存储(用户提问,Agent回复)的元组
        # 工具映射字典:工具名称→工具函数,后续新增工具只需添加映射,扩展性强
        self.tools = {
            "总结": summary_tool,
            "问答": qa_tool
        }

    def parse_intent(self, msg: str) -> tuple:
        """智能意图解析(升级重点):自动识别用户需求,无需死板输入指令头"""
        # 转换为小写,提高关键词匹配的容错性(不区分大小写)
        instruction_lower = msg.lower()
        # 关键词匹配,判断任务类型
        if any(keyword in instruction_lower for keyword in ["总结", "概括", "简述", "提炼"]):
            # 识别到总结需求,返回任务类型和待处理文本
            return "总结", msg
        else:
            # 未识别到总结需求,默认视为问答需求(包含上下文问答)
            return "问答", msg

    def run(self, msg: str) -> str:
        """Agent运行入口:串联「解析指令→调用工具→记忆上下文→返回结果」全流程"""
        print(f"🔍 Agent接收指令:{msg}")
        # 1. 解析用户意图,判断任务类型
        intent, content = self.parse_intent(msg)

        # 2. 根据任务类型,调用对应工具
        if intent == "总结":
            # 调用总结工具,处理用户输入的文本
            result = self.tools["总结"](content)
        else:
            # 调用问答工具,传入历史记忆,实现上下文关联
            result = self.tools["问答"](content, self.history)

        # 3. 将本次交互存入记忆(用于后续多轮对话)
        self.history.append((msg, result))
        # 控制记忆长度,避免占用过多内存(只保留最近5次交互,可按需调整)
        if len(self.history) > 5:
            self.history.pop(0)

        # 4. 返回格式化结果,清晰易懂
        return result

# ===================== 4. 运行测试(附完整样本,直接复制使用) =====================
if __name__ == "__main__":
    # 初始化带记忆的多工具Agent
    agent = MemoryAgent()
    print("✅ 记忆型多工具Azure Agent已启动(基于GPT-4驱动)")
    print("📌 支持功能:文本总结 + 多轮智能问答(带上下文记忆)")
    print("📌 示例指令(直接复制使用,无需固定格式):")
    print("   1. 总结:今天召开项目会议,讨论了下一版本的功能迭代计划,确定了需求优先级,预计下周三完成开发。")
    print("   2. 提问:什么是AI Agent?")
    print("   3. 追问:它的核心模块有哪些?(无需重复说明,Agent会记住上一个问题)")
    print("📌 输入「退出」即可结束运行")
    
    # 交互测试,模拟实际使用场景(带多轮记忆演示)
    while True:
        user_input = input("\n请输入指令:")
        if user_input in ["退出", "exit", "quit"]:
            print("❌ Agent已停止运行")
            break
        # 运行Agent并输出结果
        result = agent.run(user_input)
        print(f"\nAgent:{result}\n")

出现启动提示后,证明代码正常:

测试:

  1. 基础文本总结 。 输入以下内容:
    总结:今天完成了Azure环境配置,安装了Python依赖包,成功运行了第一个GPT-4智能Agent,测试了文本总结功能,后续将升级文件处理功能。

预期结果:Agent自动识别总结需求,调用总结工具,返回简洁的总结(100字内),示例如下:

  1. 多轮智能问答(验证记忆功能)。输入以下两条记录内容:

第一条: 什么是Azure OpenAI Agent?

第二条:它和普通的GPT-4调用有什么区别?

预期结果:Agent记住第一条指令的提问,第二条追问无需重复说明"Azure OpenAI Agent",直接给出连贯的回答,验证多轮记忆功能。

  1. 自然语言意图识别,输入以下内容:

简述一下AI Agent的核心作用

预期结果:Agent自动识别"简述"为总结需求,调用总结工具,返回简洁的核心作用说明,验证意图解析的灵活性。

  1. 异常场景验证。

输入以下指令,验证Agent的容错能力:

总结

预期结果:Agent不会崩溃,返回清晰的错误提示(如"请提供需要总结的文本内容"),避免程序异常退出。

注意记忆功能仅限于当前会话,退出之后会清除:

三、 知识点讲解

本次升级的核心逻辑

  • 记忆机制:用列表self.history存储(用户提问,Agent回复)的元组,每次交互后存入,调用问答工具时传入历史记录,实现上下文关联;同时控制记忆长度,避免内存占用过多。

  • 多工具调度:通过self.tools字典实现"工具名称→工具函数"的映射,后续新增文件处理、结果保存等工具,只需在字典中添加对应映射,无需修改Agent核心逻辑,扩展性强。

  • 意图解析优化:摆脱"固定指令头"的局限,通过关键词匹配识别用户需求,更贴合自然语言交互习惯,为后续职场实战(处理文件指令)打下基础。

四、总结

本次升级让Agent具备了"记忆+多工具"能力,但仍局限于纯文本处理,无法满足职场中"处理文件"的高频需求。下一篇我们将进入实战落地阶段,基于本篇的架构,实现以下核心功能:

  • ✅ 读取Word、PDF、TXT三种常见办公文件;

  • ✅ 自动总结文件内容(结合本篇的总结工具);

  • ✅ 将总结结果保存到本地文件(新增保存工具);

  • ✅ 优化容错性,适配职场中常见的文件异常场景。

本篇我们完成了Azure Agent的核心升级,实现了「多轮记忆」和「多工具调度」两大核心功能,优化了意图解析逻辑,摆脱了"单一功能、无记忆"的局限,让Agent从"基础工具"升级为"实用型助手"。

相关推荐
luoganttcc8 小时前
自动驾驶 世界模型 有哪些(二)
人工智能·机器学习·自动驾驶
人工智能AI技术8 小时前
315曝光AI投毒!用C#构建GEO污染检测与数据安全防护方案
人工智能·c#
Hamm8 小时前
不想花一分钱玩 OpenClaw?来,一起折腾这个!
javascript·人工智能·agent
_李小白8 小时前
【AI大模型学习笔记之平台篇】第二篇:Gemini
人工智能·音视频
一点一木8 小时前
🚀 2026 年 2 月 GitHub 十大热门项目排行榜 🔥
人工智能·github
理性的曜9 小时前
VoloData——基于LangChain的智能数据分析系统
人工智能·vscode·数据分析·npm·reactjs·fastapi·ai应用
flying_13149 小时前
图神经网络分享系列-MPNN(Neural Message Passing for Quantum Chemistry)(二)
人工智能·深度学习·神经网络·图神经网络·消息传递·门控机制·mpnn
HyperAI超神经9 小时前
AI驱动量子精修,卡内基梅隆大学等提出AQuaRef,首次用量子力学约束精修蛋白质全原子模型
人工智能·深度学习·机器学习·架构·机器人·cpu·量子计算
balmtv10 小时前
Grok 3技术深度拆解:20万卡集群、思维链推理与DeepSearch的架构实现
人工智能·架构