langchain框架怎么让 Skills 与 MCP(tools)协同使用

技能 - LangChain 文档

ts我看不懂我让ai转成python的了

要给注册的tool写技能详细提示的的文档,在主文件夹创建skills的文件夹,把skills放到里面,然后创建子文件夹:ue_mod制作助手,blender_mod制作助手,网页_mod制作助手,三个文件夹,每个文件夹内有一个skills.md,里面写name:技能名称,description:简短描述和,detail详细描述,详细描述里面写uemod制作流程,有几步,每一步要用什么tool,skills.py可以从每个skills文件夹里构造出所有skills的简短描述,ai可以从里面方法获取对应文档的详细描述

没问题!下面我将你提供的 TypeScript(TS)版技能加载智能体 完全转换为 Python 版本 ,并提供一个完整、可运行、带注释 的示例,使用 LangChain for Python 实现"按需加载技能"的功能。


✅ 目标

构建一个 Python 智能体(Agent),它:

  • 初始不具备专业能力;
  • 当用户提出 SQL 或法律相关问题时,自动调用 load_skill 工具;
  • 动态加载对应领域的提示词(prompt);
  • 基于该提示生成专业回答。

📦 所需依赖

bash

编辑

复制代码
pip install langchain langchain-openai python-dotenv

请确保你已设置 OPENAI_API_KEY 环境变量,或在代码中直接传入。


🐍 完整 Python 代码(可直接运行)

python

编辑

python 复制代码
# skill_agent.py
import os
from typing import Any, Dict, List
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.messages import HumanMessage

# ----------------------------
# 1. 定义 load_skill 工具
# ----------------------------
@tool
def load_skill(skill_name: str) -> str:
    """
    根据技能名称加载对应的专家提示(prompt)。
    支持的技能:write_sql, review_legal_doc
    """
    skills = {
        "write_sql": """
你是一位专业的 SQL 工程师。请遵守以下规则:
- 使用 PostgreSQL 语法。
- 避免 SELECT *,明确列出字段。
- 为复杂逻辑添加注释。
- 假设有表:users(id, name, email), orders(id, user_id, amount)

现在,请根据用户需求生成高质量 SQL。
        """.strip(),
        
        "review_legal_doc": """
你是一位资深法律顾问。请审查用户提供的法律条款,重点关注:
- 责任限制是否过于宽泛
- 是否缺少终止条件
- 是否违反 GDPR/CCPA
- 条款是否模糊或不可执行

请用正式法律语言回复,并指出具体风险点。
        """.strip()
    }
    
    if skill_name not in skills:
        available = ", ".join(skills.keys())
        return f"错误:技能 '{skill_name}' 不存在。可用技能:{available}"
    
    return skills[skill_name]

# ----------------------------
# 2. 初始化 LLM
# ----------------------------
llm = ChatOpenAI(
    model="gpt-4o",
    temperature=0,
    api_key=os.getenv("OPENAI_API_KEY")  # 请确保设置了环境变量
)

# ----------------------------
# 3. 创建 Agent 的系统提示
# ----------------------------
system_prompt = (
    "你是一个乐于助人的智能助手,但你本身不直接具备专业领域知识。\n"
    "当你需要处理 SQL 编写或法律文档审查时,必须先调用 `load_skill` 工具加载对应技能。\n"
    "加载技能后,你将获得该领域的专家提示,请严格遵循该提示生成回答。\n"
    "可用技能:write_sql(SQL 专家)、review_legal_doc(法律审查专家)。\n"
    "不要猜测------如果任务需要专业知识,请务必先加载技能!"
)

prompt = ChatPromptTemplate.from_messages([
    ("system", system_prompt),
    MessagesPlaceholder(variable_name="chat_history"),
    ("human", "{input}"),
    MessagesPlaceholder(variable_name="agent_scratchpad")
])

# ----------------------------
# 4. 绑定工具并创建 Agent
# ----------------------------
tools = [load_skill]
agent = create_tool_calling_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True, handle_parsing_errors=True)

# ----------------------------
# 5. 测试函数
# ----------------------------
def run_query(user_input: str):
    response = agent_executor.invoke({
        "input": user_input,
        "chat_history": []  # 可扩展为多轮对话
    })
    print("\n最终回答:")
    print(response["output"])

# ----------------------------
# 6. 运行示例
# ----------------------------
if __name__ == "__main__":
    # 示例 1:SQL 任务
    print("=" * 50)
    print("测试 1:SQL 查询")
    run_query("帮我写一个 SQL,找出总消费超过 100 元的用户姓名和邮箱。")

    print("\n" + "=" * 50)
    print("测试 2:法律审查")
    run_query("请审查这句话:'甲方在任何情况下均不承担法律责任。'")

🔧 如何运行?

  1. 保存代码为 skill_agent.py

  2. 设置 OpenAI API Key (二选一):

    • 方法 A(推荐):创建 .env 文件env

      编辑

      复制代码
      OPENAI_API_KEY=你的实际API密钥

      并在代码开头加:python

      编辑

      复制代码
      from dotenv import load_dotenv
      load_dotenv()
    • 方法 B:直接替换代码中的 api_key=... 为字符串(不推荐,有泄露风险)

  3. 终端运行 :bash

    编辑

    复制代码
    python skill_agent.py

🧠 预期输出(简化版)

text

编辑

复制代码
测试 1:SQL 查询
Thought: 用户需要 SQL 查询,应加载 write_sql 技能。
Tool: load_skill
Tool Input: {"skill_name": "write_sql"}
Tool Output: 你是一位专业的 SQL 工程师...
Final Answer: 
-- 查询总消费超过 100 元的用户
SELECT u.name, u.email
FROM users u
JOIN orders o ON u.id = o.user_id
GROUP BY u.id, u.name, u.email
HAVING SUM(o.amount) > 100;

💡 关键说明

表格

概念 Python 实现
tool @tool 装饰器定义函数即可
createAgent 对应 create_tool_calling_agent + AgentExecutor
技能存储 用 Python 字典模拟,生产环境可改用 JSON/数据库
多轮对话 通过 chat_history 支持(当前示例未启用)

✅ 优势

  • 轻量:技能只是字符串提示,无额外服务开销
  • 安全:专业规则内置于提示中,避免模型自由发挥
  • 可维护 :非技术人员也能编辑 skills 字典中的提示内容

如果你希望将技能存到文件(如 skills/write_sql.txt),我也可以帮你改成从文件加载!只需告诉我即可 😊

相关推荐
CV@CV19 小时前
拆解自动驾驶核心架构——感知、决策、控制三层逻辑详解
人工智能·机器学习·自动驾驶
海心焱19 小时前
从零开始构建 AI 插件生态:深挖 MCP 如何打破 LLM 与本地数据的连接壁垒
jvm·人工智能·oracle
阿杰学AI19 小时前
AI核心知识85——大语言模型之 RLAIF(简洁且通俗易懂版)
人工智能·深度学习·ai·语言模型·aigc·rlaihf·基于ai反馈的强化学习
Coco恺撒19 小时前
【脑机接口】难在哪里,【人工智能】如何破局(2.研发篇)
人工智能·深度学习·开源·人机交互·脑机接口
kebijuelun20 小时前
ERNIE 5.0:统一自回归多模态与弹性训练
人工智能·算法·语言模型·transformer
Network_Engineer20 小时前
从零手写LSTM:从门控原理到PyTorch源码级实现
人工智能·pytorch·lstm
芝士爱知识a20 小时前
AlphaGBM 深度解析:下一代基于 AI 与蒙特卡洛的智能期权分析平台
数据结构·人工智能·python·股票·alphagbm·ai 驱动的智能期权分析·期权
weixin_66820 小时前
GitHub 2026年AI项目热度分析报告-AI分析-分享
人工智能·github
vlln20 小时前
【论文速读】达尔文哥德尔机 (Darwin Gödel Machine): 自进化智能体的开放式演化
人工智能·深度学习·ai agent
Katecat9966320 小时前
目标检测咖啡果实成熟度检测:RetinaNet-X101模型实现
人工智能·目标检测·目标跟踪