砍材农夫砍材农夫
  • 微信记账小程序
  • java
  • redis
  • mysql
  • 场景类
  • 框架类
  • vuepress搭建
  • hexo搭建
  • 云图
  • llm wiki

    • 基于karpathy
    • gradle
  • 常用工具

    • git
    • gradle
    • Zadig
    • it-tools
    • 开源推荐
    • curl
  • 大前端

    • 环境配置
    • 微信生态
    • 正则
    • 全栈技能
  • java圈

    • java基础
    • jdk体系
    • jvm
    • spring框架
    • 分库分表
    • zookeeper
  • python技能

    • python编程
    • python数据
  • 算法

    • 算法
  • 网关

    • spring_cloud_gateway
    • openresty
  • 高可用

    • 秒杀
    • 分布式
    • 缓存一致
  • MQ

    • MQ
    • rabbitMQ
    • rocketMQ
    • kafka
  • 其它

    • 设计模式
    • 领域驱动(ddd)
  • 关系型数据库

    • mysql5.0
    • mysql8.0
  • 非关系型数据库

    • redis
    • mongoDB
  • 分布式/其他

    • ShardingSphere
    • 区块链
  • 向量数据库

    • M3E
    • OPEN AI
  • Jmeter
  • fiddler
  • wireshark
  • AI入门
  • AI大模型
  • AI插件
  • AI集成框架
  • 相关算法
  • AI训练师
  • 量化交易
  • AIoT
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 相关运营
  • devops
  • 元宇宙
  • 区块链
  • 物联网
  • webrtc
  • web3.0
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 中考
  • 投资
  • 保险
  • 思
  • 微信记账小程序
  • java
  • redis
  • mysql
  • 场景类
  • 框架类
  • vuepress搭建
  • hexo搭建
  • 云图
  • llm wiki

    • 基于karpathy
    • gradle
  • 常用工具

    • git
    • gradle
    • Zadig
    • it-tools
    • 开源推荐
    • curl
  • 大前端

    • 环境配置
    • 微信生态
    • 正则
    • 全栈技能
  • java圈

    • java基础
    • jdk体系
    • jvm
    • spring框架
    • 分库分表
    • zookeeper
  • python技能

    • python编程
    • python数据
  • 算法

    • 算法
  • 网关

    • spring_cloud_gateway
    • openresty
  • 高可用

    • 秒杀
    • 分布式
    • 缓存一致
  • MQ

    • MQ
    • rabbitMQ
    • rocketMQ
    • kafka
  • 其它

    • 设计模式
    • 领域驱动(ddd)
  • 关系型数据库

    • mysql5.0
    • mysql8.0
  • 非关系型数据库

    • redis
    • mongoDB
  • 分布式/其他

    • ShardingSphere
    • 区块链
  • 向量数据库

    • M3E
    • OPEN AI
  • Jmeter
  • fiddler
  • wireshark
  • AI入门
  • AI大模型
  • AI插件
  • AI集成框架
  • 相关算法
  • AI训练师
  • 量化交易
  • AIoT
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 相关运营
  • devops
  • 元宇宙
  • 区块链
  • 物联网
  • webrtc
  • web3.0
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 中考
  • 投资
  • 保险
  • 思
  • 入门

    • 学习路径

      • AI入门实战路径
    • 相关名词概念

      • 专有名词概念
      • loopengineering
    • 开放平台

      • 专有名词概念
      • loopengineering
  • AI入门实战

    • Agent骨架

      • 环境搭建
      • 吃透核心概念
      • 基础LLM调用
      • Tools工具调用
      • Memory记忆模块
      • Planning规划能力
      • LangGraph流程编排
      • 极简演示Agent
      • ReAct模式
      • ReAct模式
      • LangGraph基础
      • LangGraph基础
    • RGA架构

      • 学习环境准备
    • Skills开发和封装

      • 学习环境准备
    • 多Agent协作

      • 学习环境准备
    • 部署

      • 学习环境准备
  • agent智能体

    • Harness

      • Harness 部署
      • 常用工具列表
    • Hermes

      • Hermes 部署
      • Hermes 新手操作集成飞书
      • Hermes 搭建可视化web-dashboard界面
    • OpenClaw

      • OpenClaw 部署
      • 常用工具列表
    • OpenClaude

      • OpenClaude 部署
      • 常用工具列表
    • zcode

      • zcode 部署
    • MateClaw

      • MateClaw 部署
  • 工具

    • 工具
    • 常用工具列表
  • 向量数据库

    • 介绍
    • Neo4j
    • milvus

      • milvus部署
      • milvus 是什么
    • Chroma

      • Chroma部署
      • Chroma是什么
  • AI入门实战|Agent骨架与工具调用|吃透核心概念
    • 简述
    • 源码(sample-01-demo)
    • Agent = LLM + Planning + Memory + Tools
      • LLM(大语言模型)
      • Planning(规划)
      • Memory(记忆)
      • Tools(工具)
    • Agent闭环:感知 → 规划 → 行动 → 观察
      • 感知
      • 规划
      • 行动
      • 观察
    • 代码演示
      • 项目目录
      • demo1
      • demo2
      • demo3
      • 导出项目依赖包

AI入门实战|Agent骨架与工具调用|吃透核心概念

简述

Agent = LLM + Planning + Memory + Tools

  • 大脑 (LLM) 思考,规划 (Planning) 定方案,依靠记忆 (Memory) 调取过往信息,最后用工具 (Tools) 落地执行

源码(sample-01-demo)

https://gitee.com/kcnf-python/ai-in-action

Agent = LLM + Planning + Memory + Tools

LLM(大语言模型)

  • 相当于 Agent 的大脑,负责理解人类语言、分析问题、产生想法,是所有决策的核心基础

Planning(规划)

  • 负责拆解任务、制定步骤。面对复杂需求时,把大任务拆成多个小步骤,决定先做什么、后做什么、选用什么方式执行

Memory(记忆)

  • 相当于 Agent 的记忆力。分为短期对话记忆(记住本轮聊天上下文)和长期知识库记忆(存储文档、知识、历史数据),避免 “聊完就忘”

Tools(工具)

  • 相当于 Agent 的手脚。LLM 和规划只负责思考,工具用来执行具体操作,比如计算、查询时间、检索文档、调用外部接口等,拓展模型的能力边界

Agent闭环:感知 → 规划 → 行动 → 观察

感知

接收外部输入,包括用户提问、历史对话内容、记忆里的相关数据,把所有信息汇总后交给模型,完成信息收集

规划

LLM 结合感知到的信息做判断:判断任务难度、是否需要调用工具、选择对应工具、梳理执行顺序,输出执行方案

行动

按照规划结果,调用指定工具并执行具体操作,比如运算、检索、接口请求等

观察

收集工具执行后的返回结果,把结果再次回传给 LLM

代码演示

项目目录

Image text

demo1

Image text

from langchain_openai import ChatOpenAI
from langchain.tools import tool
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_core.chat_history import BaseChatMessageHistory
from langchain_community.chat_message_histories import ChatMessageHistory
from config import DEEPSEEK_API_KEY, DEEPSEEK_BASE_URL

# 初始化 DeepSeek 模型
llm = ChatOpenAI(
    api_key=DEEPSEEK_API_KEY,
    base_url=DEEPSEEK_BASE_URL,
    model="deepseek-chat",
    temperature=0.1
)

# 计算器工具
@tool
def calculator(expression: str) -> str:
    """数学计算工具,接收四则运算表达式"""
    try:
        return str(eval(expression))
    except Exception as e:
        return f"计算失败:{str(e)}"

# 会话记忆
session_store = {}
def get_session_history(session_id: str) -> BaseChatMessageHistory:
    if session_id not in session_store:
        session_store[session_id] = ChatMessageHistory()
    return session_store[session_id]

# 提示词 & 执行链
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是智能助手,可以回答问题,也可以协助做数学计算。"),
    MessagesPlaceholder(variable_name="history"),
    ("human", "{input}")
])
chain = prompt | llm
chain_with_history = RunnableWithMessageHistory(
    chain,
    get_session_history,
    input_messages_key="input",
    history_messages_key="history"
)

# 交互式主逻辑
if __name__ == "__main__":
    print("===== 交互式对话(输入 exit 退出)=====")
    print("支持聊天、数学计算\n")
    session_id = "session_001"

    while True:
        user_text = input("你:")
        if user_text.strip().lower() == "exit":
            print("助手:再见!")
            break
        
        # 单独调用计算工具(演示)
        if any(char in user_text for char in "+-*/") and all(c not in user_text for c in "一二三四五六七八九十"):
            print(f"计算器结果:{calculator.run(user_text)}")
            continue

        # 正常对话
        res = chain_with_history.invoke(
            {"input": user_text},
            config={"session_id": session_id}
        )
        print(f"助手:{res.content}")

input("\n按回车键关闭窗口...")

demo2

from langchain_chroma import Chroma
from langchain_community.embeddings import HuggingFaceEmbeddings

# 本地向量模型
embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")

# 初始化向量库
vector_db = Chroma(
    persist_directory="./chroma_db",
    embedding_function=embeddings,
    collection_name="agent_knowledge"
)

# 写入知识库
knowledge_texts = [
    "AI Agent 核心公式:Agent = LLM + Planning + Memory + Tools",
    "Agent 运行闭环:感知 → 规划 → 行动 → 观察,循环执行直到任务结束",
    "ChromaDB 是轻量级本地向量数据库,用来实现Agent长期知识库记忆"
]
vector_db.add_texts(texts=knowledge_texts)
vector_db.persist()

# 交互式问答
if __name__ == "__main__":
    print("===== 知识库问答(输入 exit 退出)=====")
    print("可提问 AI Agent 相关问题\n")

    while True:
        user_query = input("请提问:")
        if user_query.strip().lower() == "exit":
            print("已退出问答")
            break
        
        docs = vector_db.similarity_search(user_query, k=1)
        for doc in docs:
            print(f"检索答案:{doc.page_content}\n")

input("\n按回车键关闭窗口...")

demo3

from langchain_openai import ChatOpenAI
from langchain.tools import tool
from langgraph.graph import StateGraph, END
from typing import TypedDict, Annotated, Sequence
import operator
from langchain_core.messages import BaseMessage, HumanMessage, AIMessage
from langchain_community.chat_message_histories import ChatMessageHistory
from config import DEEPSEEK_API_KEY, DEEPSEEK_BASE_URL

# 初始化 DeepSeek
llm = ChatOpenAI(
    api_key=DEEPSEEK_API_KEY,
    base_url=DEEPSEEK_BASE_URL,
    model="deepseek-chat",
    temperature=0
)

# 全局记忆
chat_history = ChatMessageHistory()

# 计算器工具
@tool
def calculator(expression: str) -> str:
    """数学计算工具,仅处理四则运算表达式"""
    try:
        return f"计算结果:{eval(expression)}"
    except Exception:
        return "表达式错误,计算失败"

# 定义状态
class AgentState(TypedDict):
    messages: Annotated[Sequence[BaseMessage], operator.add]

# 规划节点(感知+判断)
def plan_node(state: AgentState) -> AgentState:
    messages = state["messages"]
    prompt_text = """
你是智能Agent,严格遵守规则:
1. 遇到数学计算,只输出:【工具:calculator|数学表达式】
2. 普通问题直接正常回答
"""
    full_messages = [HumanMessage(content=prompt_text)] + messages
    response = llm.invoke(full_messages)
    return {"messages": [response]}

# 行动节点(执行工具)
def action_node(state: AgentState) -> AgentState:
    last_msg = state["messages"][-1].content
    if "【工具:calculator|" in last_msg:
        expr = last_msg.split("|")[-1].replace("】", "").strip()
        tool_result = calculator.run(expr)
        return {"messages": [AIMessage(content=f"工具返回:{tool_result}")]}
    return {"messages": state["messages"]}

# 终止判断
def judge_end(state: AgentState) -> str:
    last_msg = state["messages"][-1].content
    if "【工具:" in last_msg:
        return "continue"
    return END

# 构建工作流
workflow = StateGraph(AgentState)
workflow.add_node("plan", plan_node)
workflow.add_node("action", action_node)
workflow.set_entry_point("plan")
workflow.add_edge("plan", "action")
workflow.add_conditional_edges(
    "action",
    judge_end,
    {"continue": "plan", END: END}
)
agent_app = workflow.compile()

# 交互式主程序
if __name__ == "__main__":
    print("===== LangGraph 智能Agent(输入 exit 退出)=====")
    print("支持聊天、自动数学计算\n")

    while True:
        user_input = input("你:")
        if user_input.strip().lower() == "exit":
            print("助手:再见!")
            break
        
        # 执行Agent流程
        final_answer = ""
        for step_output in agent_app.stream({"messages": [HumanMessage(content=user_input)]}):
            for _, state_data in step_output.items():
                final_answer = state_data["messages"][-1].content
        
        print(f"助手:{final_answer}\n")

input("\n按回车键关闭窗口...")

导出项目依赖包

  • 导出精简conda环境

conda env export --from-history > environment.yml

  • 导出uv所有第三方依赖

uv pip freeze > requirements.txt

最近更新: 2026/6/14 20:29
Contributors: kcnf
Prev
环境搭建
Next
基础LLM调用