当前位置: 首页 > news >正文

AI应用开发 - AI Agent Practical Exercise

AI Agent 实战练习

什么是 AI Agent?

AI Agent 是能够感知环境、自主决策并执行任务的智能系统。与传统 AI 不同,AI Agent 不是被动响应输入,而是能够主动规划、执行多步骤任务,并调用外部工具。

传统 AI: 输入 → 输出(一次性的) AI Agent: 输入 → 思考 → 行动 → 观察 → 思考...(循环迭代)

核心架构

AI Agent 由四个核心组件构成:

组件作用本项目实现
Model(模型)理解用户输入,生成决策MiniMax M2
Orchestration(编排)管理任务流程和执行逻辑LangChain AgentExecutor
Tools(工具)扩展 Agent 能力rag_search, calculator, time_query
Memory(记忆)存储历史信息短期记忆 + 长期记忆

前置要求

1. 环境准备

# Python 3.11+python3.11--version# 创建虚拟环境(推荐)python3.11-mvenv venvsourcevenv/bin/activate# macOS/Linux

2. 安装依赖

pipinstalllangchain langchain-core langchain-community langchain-openai pipinstallllama-index llama-index-llms-openai-like llama-index-embeddings-huggingface pipinstalllangchain-huggingface# embedding(如果兼容)pipinstallfaiss-cpu# 向量数据库pipinstallsentence-transformers# 嵌入模型pipinstallpendulum# 时间查询(可选)pipinstallrich# 输出美化(可选)

3. API 准备

本项目使用 MiniMax API,你需要:

  • API Key
  • API Base URL
  • 模型名称

完整代码

importwarnings warnings.filterwarnings("ignore",category=DeprecationWarning)importos os.environ["HF_ENDPOINT"]="https://hf-mirror.com"fromlangchain_openaiimportChatOpenAIfromlangchain_core.toolsimporttoolfromlangchain.agentsimportcreate_tool_calling_agent,AgentExecutorfromlangchain_core.promptsimportChatPromptTemplatefromllama_index.coreimportVectorStoreIndex,Document,Settingsfromllama_index.llms.openai_likeimportOpenAILikefromllama_index.embeddings.huggingfaceimportHuggingFaceEmbeddingfromlangchain.memoryimportConversationBufferMemoryfromlangchain_community.vectorstoresimportFAISSfromlangchain_community.embeddingsimportHuggingFaceEmbeddings# ==================== LLM 配置 ====================API_KEY="your-api-key"API_BASE="https://api.minimax.chat/v1"MODEL="MiniMax-M2.7"llm=ChatOpenAI(temperature=0.3,model=MODEL,openai_api_key=API_KEY,openai_api_base=API_BASE)# RAG 专用 LLMrag_llm=OpenAILike(model=MODEL,api_base=API_BASE,api_key=API_KEY,is_chat_model=True)# ==================== Embedding 配置 ====================embed_model=HuggingFaceEmbedding(model_name="sentence-transformers/all-MiniLM-L6-v2")# LangChain 和 LlamaIndex 需要不同的 embedding 实例langchain_embed_model=HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")Settings.embed_model=embed_model# ==================== RAG 文档数据 ====================documents=[Document(text="AI Agent 是能够感知环境、自主决策并执行任务的智能系统。"),# ... 更多文档]# ==================== 构建索引 ====================index=VectorStoreIndex.from_documents(documents)query_engine=index.as_query_engine(llm=rag_llm)# ==================== 定义工具 ====================@tooldefrag_search(query:str)->str:"""查询内部知识库(RAG)"""response=query_engine.query(query)returnstr(response)@tooldefcalculator(expression:str)->str:"""数学计算器"""try:returnstr(eval(expression))exceptExceptionase:returnf"计算错误:{str(e)}"@tooldeftime_query(city:str)->str:"""查询城市时间"""fromdatetimeimportdatetimetry:importpendulum dt=pendulum.now(city)returndt.to_formatted_date_string()+" "+dt.to_time_string()exceptException:returndatetime.now().strftime("%Y-%m-%d %H:%M:%S")tools=[rag_search,calculator,time_query]# ==================== Prompt 模板 ====================prompt=ChatPromptTemplate.from_messages([("system","""你是一个AI Agent助手... 【可用工具】 1. rag_search: 查询知识库 2. calculator: 数学计算 3. time_query: 查询时间 【调用规则】 1. 知识性问题 → rag_search 2. 数学计算 → calculator 3. 时间问题 → time_query 【输出规则】 直接输出最终答案... """),("placeholder","{chat_history}"),("user","{input}"),("placeholder","{agent_scratchpad}")])# ==================== 记忆系统 ====================# 短期记忆(内存)memory=ConversationBufferMemory(memory_key="chat_history",return_messages=True)# 长期记忆(磁盘)MEMORY_DIR="./memory_store"os.makedirs(MEMORY_DIR,exist_ok=True)defload_vector_memory():"""加载或创建向量记忆库"""index_path=os.path.join(MEMORY_DIR,"index.faiss")pkl_path=os.path.join(MEMORY_DIR,"index.pkl")ifos.path.exists(index_path)andos.path.exists(pkl_path):vectorstore=FAISS.load_local(MEMORY_DIR,langchain_embed_model,allow_dangerous_deserialization=True)print("记忆已从磁盘加载")else:vectorstore=FAISS.from_texts(["初始化记忆"],langchain_embed_model)print("创建新的记忆库")returnvectorstore vectorstore=load_vector_memory()defsave_to_long_memory(user_input,output):"""保存对话到长期记忆"""vectorstore.add_texts([f"User:{user_input}| Assistant:{output}"])vectorstore.save_local(MEMORY_DIR)# ==================== 创建 Agent ====================agent=create_tool_calling_agent(llm=llm,tools=tools,prompt=prompt)agent_executor=AgentExecutor(agent=agent,tools=tools,max_iterations=3,memory=memory)# ==================== 运行 ====================print("Agent started")whileTrue:user_input=input("You: ")ifuser_input.lower()in["exit","quit"]:break# 1. 检索长期记忆relevant_memory=vectorstore.similarity_search(user_input,k=3)memory_text="\n".join([doc.page_contentfordocinrelevant_memory])# 2. 注入 promptfull_input=f"历史相关记忆:\n{memory_text}\n当前问题:\n{user_input}"# 3. 执行result=agent_executor.invoke({"input":full_input})output=result["output"]print("Agent:",output)# 4. 保存长期记忆save_to_long_memory(user_input,output)

组件详解

1. LLM 配置

llm=ChatOpenAI(temperature=0.3,# 0=确定性,1=创造性model=MODEL,openai_api_key=API_KEY,openai_api_base=API_BASE)

关键参数:

  • temperature: 控制输出随机性。0.3 适合需要准确答案的场景
  • openai_api_base: 不同 API 服务商有不同的 base URL

2. 工具定义

使用@tool装饰器定义工具:

@tooldefcalculator(expression:str)->str:"""数学计算器 Args: expression: 数学表达式,如 "2+3*5" Returns: 计算结果字符串 """try:returnstr(eval(expression))exceptExceptionase:returnf"计算错误:{str(e)}"

工具描述的重要性:

  • 描述越详细,LLM 越能正确判断何时调用
  • 必须包含:适用场景、不适用场景、参数说明、返回值格式

3. Prompt 模板

prompt=ChatPromptTemplate.from_messages([("system","你是一个AI Agent助手..."),("placeholder","{chat_history}"),# 短期记忆注入点("user","{input}"),("placeholder","{agent_scratchpad}")# Agent 内部工作区])

placeholder 类型:

  • {input}: 用户输入
  • {chat_history}: 短期记忆(ConversationBufferMemory)
  • {agent_scratchpad}: Agent 内部推理过程

4. 记忆系统

短期记忆:

memory=ConversationBufferMemory(memory_key="chat_history",return_messages=True# 返回 message 对象列表)
  • 存储当前会话的上下文
  • 由 AgentExecutor 自动管理
  • 每次对话后自动更新

长期记忆:

vectorstore=FAISS.from_texts(["初始化记忆"],embed_model)vectorstore.save_local(MEMORY_DIR)# 持久化vectorstore=FAISS.load_local(...)# 加载
  • 使用向量数据库存储
  • 基于语义相似度检索
  • 持久化到磁盘,重启后不丢失

5. Agent 创建

agent=create_tool_calling_agent(llm=llm,tools=tools,prompt=prompt)agent_executor=AgentExecutor(agent=agent,tools=tools,max_iterations=3,# 最大迭代次数,防止死循环memory=memory)

关键参数:

  • max_iterations: 防止 Agent 在工具调用循环中卡住
  • memory: 短期记忆管理器
  • verbose: 是否输出调试信息

完整项目结构

AI Agent/ ├── AI Agent.py # 主程序 └── memory_store/ # 长期记忆存储目录 ├── index.faiss # FAISS 索引文件 └── index.pkl # 文档 pickle 文件

测试验证

测试 1:基础工具调用

You: AI Agent 有什么应用场景? Agent: [应调用 rag_search,返回知识库中的答案]

测试 2:数学计算

You: 帮我计算 25*17+99 Agent: [应调用 calculator,输出 524]

测试 3:短期记忆

You: 帮我计算 25*17+99 Agent: 524 You: 把刚才的结果乘以2 Agent: [应记住 524,输出 1048]

测试 4:长期记忆(重启后)

# 重启程序 You: 我们刚才做了什么运算? Agent: [应检索到之前的 25*17+99=524]

常见问题

1. 长期记忆没有持久化

检查:

  • save_to_long_memory()是否在每次对话后调用
  • load_vector_memory()是否在启动时调用
  • vectorstore.save_local()是否执行

2. 工具调用失败

检查:

  • 工具描述是否清晰
  • 参数格式是否正确
  • max_iterations是否足够

3. 短期记忆不生效

检查:

  • prompt 是否包含{chat_history}placeholder
  • return_messages是否为 True
  • AgentExecutor 是否传入了memory参数

进阶方向

1. Multi-Tools 协作

添加更多工具(搜索、数据库、API 调用),让 Agent 能够组合使用多个工具完成任务。

2. 记忆优化

  • 短期记忆:设置 token 限制,避免超出 context window
  • 长期记忆:添加时间戳,支持按时间检索

3. Multi-Agent 系统

多个专业 Agent 协同工作,如一个协调者 + 多个执行者。

4. 评估与监控

添加工具调用成功率、任务完成率等指标。


关键概念回顾

概念说明
AI Agent自主决策、执行任务的智能系统
Tool CallingLLM 调用外部工具的机制
ReActThought → Action → Observation 循环
短期记忆ConversationBufferMemory,会话级
长期记忆FAISS 向量数据库,持久化
RAG检索增强生成,结合知识库回答问题
http://www.cnnetsun.cn/news/2074678.html

相关文章:

  • WarcraftHelper:3步解决魔兽争霸3在现代系统上的兼容性问题
  • Windows驱动管理终极指南:使用DriverStore Explorer高效清理与优化系统
  • 手把手教你用Java实现高并发流量控制:从Booking面试题到可运行Demo
  • AI写论文别错过!4个AI论文写作神器,助力期刊论文顺利发表!
  • Phi-3.5-mini-instruct保姆级教程:从镜像拉取、服务启动到首问响应全记录
  • 软件设计师备考笔记【day2】-UML 图解 | 面向对象 | 设计模式
  • 为什么大厂都在去 Spring Cloud 化?
  • 你的笔记本为什么充不上电?从USB PD的‘Reject’和‘Wait’消息说起
  • FanControl终极配置指南:免费Windows风扇控制软件的完整中文优化方案
  • 为什么你的Windows效率工具还在说英文?PowerToys-CN汉化项目深度解析
  • 100道Python面试必背题目(基础理论 + 工程实践篇)
  • 抖音素材库构建指南:从零开始掌握高效批量下载
  • 前端-闭包
  • Office Custom UI Editor:重新定义你的Office工作界面,效率提升50%不是梦!
  • 【C++高吞吐MCP网关实战权威指南】:20年架构师亲授7类高频报错的根因定位与毫秒级修复方案
  • C++26反射特性深度解密(元编程架构跃迁白皮书):仅限首批内测开发者获取的5类高危误用场景分析
  • VSCode实时协作卡顿、光标不同步、文件同步失败(2024企业级协同开发避坑白皮书)
  • 三步搞定网络测速:用iperf3 Windows版精准测量你的网络性能
  • VCS NLP仿真入门:手把手教你用UPF文件验证低功耗设计(含Verdi调试)
  • C语言学习笔记 - 12.C语言简介 - 一元二次方程详解
  • 5个高效使用OpenProject的终极技巧:从新手到项目管理专家
  • 2026年沙市AI培训有何新亮点?
  • 你的服务器还在“负重前行”?是时候让它“弹性”起来了!
  • 上市公司-智能制造词频数据(2000-2023年)
  • 程序员蓝牙耳机选购指南:办公降噪 / 低延迟 / 长续航,实用不踩坑
  • 一课一得:公有云环境部署与网站配置全流程实战总结
  • 嵌入式开发老鸟的SecureCRT私房配置:这样调教你的终端,效率翻倍!
  • Pydantic 模型
  • UE5 动画状态机
  • 气水换热器能否满足供暖需求且实现高效余热利用?