河内机器人
作者:admin | 分类:河内机器人 | 浏览:3 | 日期:2026年08月03日结合你此前关注AI应用开发、RAG系统构建的相关背景,本项目将带你从“静态问答”进阶到
“动态交互”,实现一个具备记忆能力和工具调用能力的AI Agent(智能体)。
一、项目核心目标
记忆管理:利用 ChatMessageHistory 实现多轮对话上下文保持,让AI能记住前文信息。
工具调用:集成一个简单的计算器或搜索工具,让AI在遇到数学计算或实时信息查询时,自动调用
外部工具而非凭空捏造。
Agent编排:使用 LangChain 的 create_react_agent 构建 ReAct (Reasoning + Acting) 逻辑,
实现“思考-行动-观察”的闭环。
二、核心代码实现
python
import os
from langchain_openai import ChatOpenAI
from langchain.agents import create_react_agent, AgentExecutor
from langchain.tools import Tool
from langchain_community.utilities import SerpAPIWrapper # 需安装 google-search-results
from langchain.memory import ConversationBufferMemory
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
# 1. 初始化 LLM
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
# 2. 定义工具 (Tools)
def calculator_func(expression: str) -> str:
"""一个简单的计算器工具"""
try:
# 注意:生产环境请使用更安全的 eval替代方案或专用库如 numexpr
return str(eval(expression))
except Exception as e:
return f"计算错误: {e}"
tools = [
Tool(
name="Calculator",
func=calculator_func,
description="当你需要执行数学计算时使用此工具。输入必须是一个合法的数学表达式字符串。"
),
# 如果有 SerpAPI Key,可以添加搜索工具
# Tool(
# name="Search",
# func=SerpAPIWrapper().run,
# description="当你需要查询最新实时信息时使用此工具。输入应该是搜索查询字符串。"
# )
]
# 3. 设置提示词模板 (ReAct Prompt)
# LangChain 内置了标准的 ReAct prompt,也可以自定义
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个乐于助人的助手。你可以使用以下工具来帮助用户。"),
("human", "{input}"),
MessagesPlaceholder(variable_name="agent_scratchpad"),
])
# 4. 创建 Agent
agent = create_react_agent(llm, tools, prompt)
# 5. 创建 Agent Executor (执行器) 并添加记忆
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
memory=memory,
verbose=True, # 打印思考过程
handle_parsing_errors=True
)
# 6. 测试交互
def chat_with_agent():
print("=== AI Agent 聊天机器人 (输入 'quit' 退出) ===")
while True:
user_input = input("\n用户: ")
if user_input.lower() == 'quit':
break
if not user_input.strip():
continue
try:
response = agent_executor.invoke({"input": user_input})
print(f"AI: {response['output']}")
except Exception as e:
print(f"发生错误: {e}")
if __name__ == "__main__":
chat_with_agent()
三、关键知识点解析
ReAct 范式:Agent 不是直接生成答案,而是先生成 Thought(思考),决定是否需要调用 Action
(动作/工具),获取 Observation(观察结果)后,再结合上下文生成最终 Final Answer。
Tool 定义规范:每个工具必须包含 name(名称)、func(执行函数)和 description(描述)。
Description 至关重要,LLM 依靠它来判断何时调用该工具。
Memory 集成:通过 ConversationBufferMemory 将历史对话存入内存,并在每次调用时传递给
LLM,从而实现多轮连贯对话。
四、运行与调试建议
依赖安装:pip install langchain langchain-openai langchain-community
环境变量:确保设置了 OPENAI_API_KEY。
观察日志:设置 verbose=True 后,控制台会打印出 Agent 的完整思考链路(Thought -> Action ->
Observation -> Final Answer),这是调试 Agent 逻辑最有效的方式。
安全提示:示例中的 eval 仅用于演示,生产环境中严禁直接使用 eval 执行用户输入,应使用 numexpr
或专用数学库。
这个项目标志着你的 AI 应用开发从“被动问答”迈向了“主动代理”,是构建复杂 AI 应用的基础。
需要我为你演示如何为这个 Agent 添加一个自定义的天气查询工具吗?帮你掌握工具扩展的核心技巧。