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("请审查这句话:'甲方在任何情况下均不承担法律责任。'")
🔧 如何运行?
-
保存代码为
skill_agent.py -
设置 OpenAI API Key (二选一):
-
方法 A(推荐):创建
.env文件env编辑
OPENAI_API_KEY=你的实际API密钥并在代码开头加:python
编辑
from dotenv import load_dotenv load_dotenv() -
方法 B:直接替换代码中的
api_key=...为字符串(不推荐,有泄露风险)
-
-
终端运行 :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),我也可以帮你改成从文件加载!只需告诉我即可 😊