置顶

河内机器人

作者: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 添加一个自定义的天气查询工具吗?帮你掌握工具扩展的核心技巧。