[智能体-352]:对大模型的上下文封装与交互得到的特定能力,称为skill;对外部工具调用形成的特定能力,称为工具;
·
一、概念严格对齐(按你的定义)
Skill:封装大模型专有能力 + 上下文交互,形成的专属能力。 本质:模型内生能力,无外部系统调用,依赖 LLM 推理、上下文记忆、提示词编排。
Tool:封装外部系统 / 服务调用,形成的专属能力。 本质:外部资源能力,必须发起网络 / IO 请求,对接 API、数据库、脚本、硬件等。
核心边界
- 执行主体
- Skill:大模型自身完成计算、理解、创作、推理
- Tool:外部服务完成执行,模型只负责发起调用、解析结果
- 依赖
- Skill:仅依赖 LLM + 对话上下文 / 提示模板
- Tool:依赖网络、第三方服务、权限、接口协议(如 MCP)
- 运行环境
- Skill:进程内闭环,低延迟、无外网依赖
- Tool:跨进程 / 跨网络调用,存在可用性、网络、安全风险
二、LangChain 中 Skill 标准实现(模型能力 + 上下文封装)
下面实现纯 Skill:基于 LLM + 固定上下文模板封装,不调用任何外部接口。 场景:文本摘要、文案改写、逻辑分析(典型大模型专有能力)。
环境依赖
bash
运行
pip install langchain langchain-openai python-dotenv
完整代码:Skill 封装(模型 + 上下文)
python
运行
from langchain.tools import tool
from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_react_agent
from langchain_core.prompts import PromptTemplate
from dotenv import load_dotenv
load_dotenv()
# 初始化大模型(Skill 唯一依赖)
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
# ===================== 定义 Skill:封装模型能力 + 固定上下文模板 =====================
@tool
def text_summary_skill(long_text: str) -> str:
"""
Skill:长文本摘要(大模型专有能力,纯上下文+LLM推理)
封装固定提示上下文,复用摘要能力,无外部调用
Args:
long_text: 待摘要的长文本
"""
# 固定上下文模板 = 能力封装的核心
prompt_template = PromptTemplate(
input_variables=["content"],
template="""
请精简总结下面内容,提炼核心观点,控制在100字以内:
原文:{content}
总结:
"""
)
# 拼接上下文 + 调用模型(纯内生能力)
prompt = prompt_template.format(content=long_text)
return llm.invoke(prompt).content
@tool
def copywriting_skill(raw_text: str, tone: str) -> str:
"""
Skill:文案风格改写(大模型语义能力+上下文封装)
Args:
raw_text: 原始文本
tone: 风格:正式/活泼/商务
"""
prompt = f"""
固定上下文规则:仅改写语气,不增删原意。
将以下文本改写为{tone}风格:
{raw_text}
"""
return llm.invoke(prompt).content
# ===================== 智能体加载 Skill 并调用 =====================
all_skills = [text_summary_skill, copywriting_skill]
agent_prompt = PromptTemplate.from_template("""
你拥有文本摘要、文案改写两项能力,请根据用户问题选择对应Skill执行。
用户输入:{input}
可用能力:{tools}
能力名称:{tool_names}
{agent_scratchpad}
""")
# 创建智能体 & 执行器
agent = create_react_agent(llm, all_skills, agent_prompt)
agent_executor = AgentExecutor(agent=agent, tools=all_skills, verbose=True)
if __name__ == "__main__":
# 测试 1:调用摘要 Skill
print("===== 测试 文本摘要 Skill =====")
text = """
本周公司整体营收稳步增长,线上渠道贡献主要订单,
线下门店客流略有回升。团队完成季度复盘,确定下月重点拓展新客户。
"""
res1 = agent_executor.invoke({"input": f"帮我总结这段内容:{text}"})
print(res1["output"])
# 测试 2:调用文案改写 Skill
print("\n===== 测试 文案改写 Skill =====")
res2 = agent_executor.invoke({"input": "把「今天订单很多,大家辛苦啦」改成商务风格"})
print(res2["output"])
代码解读(贴合你的定义)
- 整个能力 = 固定上下文模板 + 大模型推理,属于对模型专有能力的封装;
- 全程无任何外部接口、数据库、API 调用,是标准
Skill; - 可以反复复用这套 “上下文 + 模型逻辑”,成为智能体的固定能力。
三、LangChain 中 Tool 标准实现(外部调用能力)
同样用 @tool 封装,但内部逻辑是调用外部资源,属于标准 Tool。 示例:模拟查询业务数据(对接外部接口 / 数据库,搭配 MCP 调用思想)。
python
运行
from langchain.tools import tool
import requests
# 模拟外部服务地址(真实场景为数据库/业务API/MCP服务)
EXTERNAL_DATA_API = "http://127.0.0.1:8001/mcp/tool"
@tool
def business_data_query_tool(query_key: str) -> str:
"""
Tool:业务数据查询(外部工具调用能力)
依赖外部API/MCP服务,非模型原生能力
Args:
query_key: 查询字段:sales/orders/users
"""
# 发起外部网络调用(Tool 核心特征)
payload = {"tool": "db_query", "params": {"query_key": query_key}}
try:
resp = requests.post(EXTERNAL_DATA_API, json=payload, timeout=5)
data = resp.json()
return f"查询结果:{data.get('data', '暂无数据')}"
except Exception as e:
return f"工具调用失败:{str(e)}"
# 单独调用测试
if __name__ == "__main__":
print(business_data_query_tool.invoke({"query_key": "sales"}))
代码解读
- 能力来源于外部服务,模型只负责 “发起调用、接收结果”;
- 依赖网络、第三方服务,符合
Tool定义; - 企业场景中,这类调用统一走 MCP 协议 标准化接入。
四、Skill + Tool 完整协同链路(企业标准流程)
真实业务中二者组合使用,流程: 用户指令 → Skill(理解 / 规划 / 文本加工,模型能力) → Tool(查外部数据,外部调用) → Skill(整理输出,模型能力)
组合代码示例
python
运行
from langchain.tools import tool
from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_react_agent
from langchain_core.prompts import PromptTemplate
import requests
from dotenv import load_dotenv
load_dotenv()
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
EXTERNAL_DATA_API = "http://127.0.0.1:8001/mcp/tool"
# ---------- 1. 定义 Skill(模型能力:报告生成) ----------
@tool
def report_generate_skill(data_content: str) -> str:
"""Skill:基于原始数据生成分析报告(大模型上下文+推理)"""
prompt = f"""
请根据以下数据,生成简短业务分析报告:
{data_content}
要求:分数据展示、简短分析两部分。
"""
return llm.invoke(prompt).content
# ---------- 2. 定义 Tool(外部调用:数据查询) ----------
@tool
def data_query_tool(query_key: str) -> str:
"""Tool:查询外部业务数据(外部接口调用)"""
payload = {"tool": "db_query", "params": {"query_key": query_key}}
resp = requests.post(EXTERNAL_DATA_API, json=payload, timeout=5)
return str(resp.json())
# ---------- 智能体加载 Skill + Tool ----------
tools = [report_generate_skill, data_query_tool]
agent_prompt = PromptTemplate.from_template("""
流程要求:先使用 data_query_tool 查询数据,再使用 report_generate_skill 生成报告。
用户输入:{input}
可用工具:{tools}
工具名称:{tool_names}
{agent_scratchpad}
""")
agent = create_react_agent(llm, tools, agent_prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
if __name__ == "__main__":
# 完整链路:Tool查数据 → Skill生成报告
res = agent_executor.invoke({"input": "查询销售额并生成分析报告"})
print("\n最终输出:")
print(res["output"])
链路对应定义
data_query_tool:调用外部接口 → Toolreport_generate_skill:模型 + 上下文生成报告 → Skill
五、汇总对比(严格匹配你的定义)
表格
| 对比项 | Skill(模型专有能力封装) | Tool(外部工具调用封装) |
|---|---|---|
| 能力来源 | 大模型原生推理、语义、创作能力 | 外部 API / 数据库 / 系统 / 硬件 |
| 实现核心 | 上下文模板 + LLM 调用 | 网络 / IO 请求 + 外部服务交互 |
| 外部依赖 | 无 | 强依赖外部服务、网络、权限 |
| 运行特征 | 进程内闭环、低延迟、高隐私 | 跨网络调用、有延迟、需安全管控 |
| 典型场景 | 摘要、改写、翻译、逻辑分析、报告文案 | 查数据、发邮件、执行命令、调用 RPA |
| 协议关联 | 纯模型层,不依赖 MCP | 企业场景统一通过 MCP 对接 |
六、结合你整套架构做最终映射
- 大模型:能力本体,所有 Skill 的基础
- Skill:对模型能力 + 上下文做封装 → 智能体内生岗位技能
- Tool:对外部系统调用做封装 → 智能体使用的外部作业工具
- 智能体框架 (LangChain):流程 / 制度,调度 Skill 与 Tool 协同
- A2A:多智能体之间通信协作
- MCP:智能体与 Tool 之间的标准调用协议
完整企业 AI 运行范式:
大模型(决策大脑)→ 智能体框架(流程制度)→ Skill(内生技能做理解 / 加工) + A2A(多 Agent 协作) → Tool(外部操作) + MCP(工具标准接口)
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)