如何用python自己写一个通过对话自动创建和使用skills的功能代码
不依赖第三方库或插件,用python代码+openai的api实现。
网友回复
要实现“自动创建技能并使用技能”的核心思想是:
元编程 (Meta-programming):让 LLM 编写 Python 代码(函数)。
动态执行 (Dynamic Execution):在 Python 运行时中执行这段代码,将其注册为可用函数。
工具调用 (Tool Calling):利用 OpenAI 兼容 API 的 Function Calling 能力,既用来调用“创建技能”的工具,也用来调用“新创建好”的技能。
下面是一个完整的 Python 示例代码。这个代码构建了一个 Agent,它初始时只有一个核心技能:create_new_tool。当它遇到无法直接解决的问题时,它会编写一个新的 Python 函数,注册它,然后立即使用这个新函数来解决问题。
前置准备
你需要安装 OpenAI 的 Python SDK:
pip install openai
完整代码实现
import os import json import inspect from typing import Dict, Any, List, Callable from openai import OpenAI # ================= 配置部分 ================= # 这里以阿里云 DashScope (通义千问) 为例,也可以换成本地 vLLM/Ollama # 如果是本地 Qwen,base_url 通常是 "http://localhost:8000/v1" AP...
点击查看剩余70%
要实现“自动创建技能并使用技能”的核心思想是:
元编程 (Meta-programming):让 LLM 编写 Python 代码(函数)。
动态执行 (Dynamic Execution):在 Python 运行时中执行这段代码,将其注册为可用函数。
工具调用 (Tool Calling):利用 OpenAI 兼容 API 的 Function Calling 能力,既用来调用“创建技能”的工具,也用来调用“新创建好”的技能。
下面是一个完整的 Python 示例代码。这个代码构建了一个 Agent,它初始时只有一个核心技能:create_new_tool。当它遇到无法直接解决的问题时,它会编写一个新的 Python 函数,注册它,然后立即使用这个新函数来解决问题。
前置准备
你需要安装 OpenAI 的 Python SDK:
pip install openai
完整代码实现
import os
import json
import inspect
from typing import Dict, Any, List, Callable
from openai import OpenAI
# ================= 配置部分 =================
# 这里以阿里云 DashScope (通义千问) 为例,也可以换成本地 vLLM/Ollama
# 如果是本地 Qwen,base_url 通常是 "http://localhost:8000/v1"
API_KEY = "sk-xxxxxxxxxxxxxxxxxxx" # 替换你的 API Key
BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1"
MODEL_NAME = "qwen-plus" # 或者 qwen-max, qwen-turbo, qwen2.5-72b-instruct
client = OpenAI(
api_key=API_KEY,
base_url=BASE_URL,
)
# ================= 技能注册表 =================
class SkillRegistry:
def __init__(self):
self.functions: Dict[str, Callable] = {}
self.tools_schema: List[Dict] = []
def register(self, func_name: str, func_callable: Callable, schema: Dict):
"""注册一个新函数及其 Schema"""
self.functions[func_name] = func_callable
self.tools_schema.append(schema)
print(f" [系统] 新技能已注册: {func_name}")
def get_function(self, name: str) -> Callable:
return self.functions.get(name)
def get_tools_schema(self) -> List[Dict]:
return self.tools_schema
registry = SkillRegistry()
# ================= 核心:定义"创建技能"的元技能 =================
def create_new_tool(function_name: str, python_code: str, description: str, parameters_json: str):
"""
这是一个元技能,允许 AI 编写新的 Python 代码并将其注册为工具。
Args:
function_name: 新函数的名称 (例如 'calculate_fibonacci')
python_code: 可执行的 Python 函数代码字符串。
description: 对该函数功能的描述。
parameters_json: 符合 OpenAI JSON Schema 格式的参数定义字符串。
"""
print(f" [Agent] 正在编写新技能: {function_name}...")
# 1. 动态执行代码
local_scope = {}
try:
# 警告:exec 在生产环境中极其危险,这里仅用于演示
exec(python_code, globals(), local_scope)
if function_name not in local_scope:
return f"Error: The code executed successfully but function '{function_name}' was not found."
new_func = local_scope[function_name]
except Exception as e:
return f"Error executing python code: {str(e)}"
# 2. 构建 Tool Schema
try:
...点击查看剩余70%
python有哪些算法可以将视频中的每个帧图片去除指定区域水印合成新的视频?
iphone的激光雷达数据能否实时传输到three三维空间中?
豆包sora等ai视频生成大模型生成的视频水印如何去除?
python如何实现在电脑上拨号打电话给手机?
具身机器人与人形机器人区别?
nodejs如何将一个完整的js代码文件切割成不同的部分混淆后动态加载进入html运行?
为啥windows.onerror捕获js错误是这样的{"message":"Script error.","source":"","lineno":0,"colno":0,"stack":null,
2026年ai将全面接管编程?
WebMCP是干啥的?
电商系统架构中订单状态机如何设计?


