当前位置: 首页 > article >正文

【python openai function2json小工具】

两种方法 一种openai-swarm中提供的、一种langchain实现的

一、openai工具函数调用

import inspect


def merge_chunk(final_response: dict, delta: dict) -> None:
    delta.pop("role", None)
    merge_fields(final_response, delta)

    tool_calls = delta.get("tool_calls")
    if tool_calls and len(tool_calls) > 0:
        index = tool_calls[0].pop("index")
        merge_fields(final_response["tool_calls"][index], tool_calls[0])


def function_to_json(func) -> dict:
    """
    Converts a Python function into a JSON-serializable dictionary
    that describes the function's signature, including its name,
    description, and parameters.

    Args:
        func: The function to be converted.

    Returns:
        A dictionary representing the function's signature in JSON format.
    """
    type_map = {
        str: "string",
        int: "integer",
        float: "number",
        bool: "boolean",
        list: "array",
        dict: "object",
        type(None): "null",
    }

    try:
        signature = inspect.signature(func)
    except ValueError as e:
        raise ValueError(
            f"Failed to get signature for function {func.__name__}: {str(e)}"
        )

    parameters = {}
    for param in signature.parameters.values():
        try:
            param_type = type_map.get(param.annotation, "string")
        except KeyError as e:
            raise KeyError(
                f"Unknown type annotation {param.annotation} for parameter {param.name}: {str(e)}"
            )
        parameters[param.name] = {"type": param_type}

    required = [
        param.name
        for param in signature.parameters.values()
        if param.default == inspect._empty
    ]

    return {
        "type": "function",
        "function": {
            "name": func.__name__,
            "description": func.__doc__ or "",
            "parameters": {
                "type": "object",
                "properties": parameters,
                "required": required,
            },
        },
    }


if __name__=='__main__':
    print(function_to_json(merge_chunk))

二、使用langchain

from langchain_core.utils.function_calling import (
    convert_to_openai_function,
    convert_to_openai_tool,
)
from langchain_core.tools.convert import tool
from typing import Annotated


@tool
def slide_ops(
    idx: Annotated[int, "元素index"],
    left: Annotated[int, "元素的左上横坐标"] = None,
    top: Annotated[int, "元素的左上纵坐标"] = None,
    width: Annotated[int, "元素的宽度"] = None,
    height: Annotated[int, "元素的高度"] = None,
    fontcolor: Annotated[str, "元素的前景颜色"] = None,
    backcolor: Annotated[int, "元素的背景颜色"] = None,
    delete: Annotated[bool, "删除此元素"] = None,
):
    """修改幻灯片中元素的信息"""
    ...


convert_to_openai_function(slide_ops)
convert_to_openai_tool(slide_ops)


http://www.kler.cn/news/365184.html

相关文章:

  • 微信网页授权回调地址放多个参数的方法
  • Vivado自定义IP修改顶层后Port and Interface不更新解决方案
  • 《Sui区块链:重塑去中心化应用的新星与未来潜力》
  • 华为“纯血鸿蒙”重磅发布!首次融入原生AI能力
  • OpenCV与AI深度学习 | 实战 | OpenCV中更稳更快的找圆方法--EdgeDrawing使用演示(详细步骤 + 代码)
  • WPS电信定制版 v12.8.2.18205 自带 VBA\无广告
  • 在PHP中,读取大文件
  • html+css+js实现Notification 通知
  • 洞察云上风险,主机安全尽在掌握
  • 【LeetCode】1297、子串的最大出现次数
  • AI 开启财富密码:探索多元化赚钱之路
  • 【PyTorch][chapter31][transformer-4]
  • sharpkeys-键盘部分按键不好用,用其它不常用按键代替
  • 【机器学习】13. 决策树
  • 现代Web界面交互新利器!来探一探这个魔法组件库——MagicUI
  • 【SPIE出版,EI检索稳定】2024年人机交互与虚拟现实国际会议(HCIVR 2024,11月15-17日)
  • 系统架构设计师教程 第18章18.8 安全架构设计案例分析 笔记
  • Android修改第三方应用相机方向
  • paddleocr使用FastDeploy 部署工具部署 rknn 模型
  • 250MS/s 4通道16bit PCIE采集卡
  • 【YOLOv11改进[损失函数]】使用结合InnerIoU和Focaler的各种损失函数助力YOLOv11更优秀
  • Xshell远程连接工具详解
  • 什么是标准差?详解
  • Android Kotlin中协程详解
  • docker安装postgres扩展age以及使用nodejs连接
  • TCP单包数据大于1460字节会被拆包的问题