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),我也可以帮你改成从文件加载!只需告诉我即可 😊

相关推荐
newsxun2 小时前
申晨案例解析:解码猫王如何从情怀走向现象级品牌的“熊猫罗盘”重塑之路
大数据·人工智能
拐爷2 小时前
Vibe‑coding九阳神功之夯:Git 基础操作,AI 时代的刹车系统(附速查表)
人工智能·git
Ro Jace2 小时前
Leveraging AI Algorithms for Electronic Warfare Data Processing
人工智能
总有刁民想爱朕ha2 小时前
VisionForgeSDK:基于YOLOv8的新一代人工智能视觉检测解决方案
人工智能·yolo·视觉检测
星爷AG I2 小时前
9-18 视觉预期(AGI基础理论)
人工智能·agi
轻览月2 小时前
【DL】复杂卷积神经网络Ⅱ
人工智能·神经网络·cnn
2501_936146042 小时前
YOLOv26鱼类目标检测与识别实现
人工智能·yolo·目标检测
AI 菌2 小时前
DeepSeek-OCR v2 解读
人工智能·大模型·ocr·多模态
朴实赋能2 小时前
2026年运营革命:新型AI驱动跨境电商矩阵解决方案
人工智能