实现了一个具备记忆功能和工具调用能力的智能对话 Agent,基于 LangChain 框架构建,可实现天气查询、数学运算两大核心功能,同时支持多轮对话记忆。代码中初始化了大模型并配置相关参数,通过装饰器定义工具函数,让 Agent 能够根据用户需求,自动调用对应工具完成天气查询和数学计算任务;同时引入对话历史存储机制,确保 Agent 能记住过往对话内容,实现自然、连贯的多轮交互,整体流程清晰,既保留了 AI 的对话能力,又通过工具调用拓展了实际应用场景,可满足用户多样化的查询需求。

 

# 导入大模型统一调用接口

from langchain_openai import ChatOpenAI

# 自定义工具的装饰器(@tool:把函数变为AI工具)

from langchain_core.tools import tool

# 提示词的模板 + 历史消息占位符(做记忆必须用)

from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder

# 对话历史存储器(有的是聊天记录)

from langchain_community.chat_message_histories import ChatMessageHistory

from langchain_core.runnables.history import RunnableWithMessageHistory

# 创建agent(会思考, 会调用工具)

from langgraph.prebuilt import create_react_agent

 

# 1:自定义工具

@tool

def get_weather(city:str) -> str:

    """

    查询指定城市的天气

    """

    return f'{city}今天天气很好,气温39.9度。'

 

@tool

def cal(expr:str) -> str:

    """

    做数学运算, 传入的是表达式

    """

    return f'{eval(expr)}'

 

# 2:初始化大模型

llm = ChatOpenAI(

    api_key="嘿嘿嘿嘿嘿", # 身份凭证(密钥)

    model="deepseek-chat", # 调用的 DeepSeek 模型名称

    base_url="嘿嘿嘿" # DeepSeek 模型接口地址(网页解析失败不影响接口调用)

)

# 工具列表

tools = [get_weather, cal]

 

# 3:创建支持工具的agent

agent = create_react_agent(llm, tools)

 

# 4: 配置对话记忆

# 存储会话历史

chat_history = ChatMessageHistory()

 

# 5给agent加上记忆功能

agent_with_history = RunnableWithMessageHistory(

    agent,

    lambda session_id: chat_history,

    input_messages_key = "messages"

)

 

# 6多轮问话测试

# 第一轮问天气+计算

res1 = agent_with_history.invoke(

    {"messages":[{"role":"user","content":"榆次天气怎么样,帮我算一下3*5"}]},

    config = {"configurable":{"session_id":"user01"}}

)

print('第一轮回答:')

print(res1["messages"][-1].content)

print('*'*20)

# 第二轮利用记忆,说城市,表达式

res2 = agent_with_history.invoke(

    {"messages":[{"role":"user","content":"我刚才问了那两个问题"}]},

    config = {"configurable":{"session_id":"user01"}}

)

print('第二轮回答(带记忆):')

print(res2["messages"][-1].content) 描述一下这是在干什么,生动形象

 

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐