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

相关推荐
聆风吟º1 小时前
CANN runtime 实战指南:异构计算场景中运行时组件的部署、调优与扩展技巧
人工智能·神经网络·cann·异构计算
Codebee3 小时前
能力中心 (Agent SkillCenter):开启AI技能管理新时代
人工智能
聆风吟º4 小时前
CANN runtime 全链路拆解:AI 异构计算运行时的任务管理与功能适配技术路径
人工智能·深度学习·神经网络·cann
uesowys4 小时前
Apache Spark算法开发指导-One-vs-Rest classifier
人工智能·算法·spark
AI_56784 小时前
AWS EC2新手入门:6步带你从零启动实例
大数据·数据库·人工智能·机器学习·aws
User_芊芊君子4 小时前
CANN大模型推理加速引擎ascend-transformer-boost深度解析:毫秒级响应的Transformer优化方案
人工智能·深度学习·transformer
智驱力人工智能4 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
qq_160144875 小时前
亲测!2026年零基础学AI的入门干货,新手照做就能上手
人工智能
Howie Zphile5 小时前
全面预算管理难以落地的核心真相:“完美模型幻觉”的认知误区
人工智能·全面预算
人工不智能5775 小时前
拆解 BERT:Output 中的 Hidden States 到底藏了什么秘密?
人工智能·深度学习·bert