跳转到主要内容

使用LLM执行代码

项目描述

清单 ✨

通过调用函数来调用LLM。

  • 定义函数名称、参数、返回值和文档字符串。
  • 按常规调用您的函数,传入您的值。
  • 对于这些值,LLM将返回一个符合您返回类型的响应。

安装

pip install manifest

现在确保您的OpenAI密钥已设置

export OPENAI_API_KEY="your_api_key_here"

示例

情感分析

from manifest import ai

@ai
def is_optimistic(text: str) -> bool:
    """Determines if the text is optimistic"""

print(is_optimistic("This is amazing!")) # Prints True

翻译

from manifest import ai

@ai
def translate(english_text: str, target_lang: str) -> str:
    """Translates text from english into a target language"""

print(translate("Hello", "fr")) # Prints "Bonjour"

图像分析

from pathlib import Path
from manifest import ai

@ai
def breed_of_dog(image: Path) -> str:
    """Determines the breed of dog from a photo"""

image = Path("path/to/dog.jpg")
print(breed_of_dog(image)) # Prints "German Shepherd" (or whatever)

复杂对象

from dataclasses import dataclass
from manifest import ai

@dataclass
class Actor:
    name: str
    character: str

@dataclass
class Movie:
    title: str
    director: str
    year: int
    top_cast: list[Actor]

@ai
def similar_movie(movie: str, before_year: int | None=None) -> Movie:
    """Discovers a similar movie, before a certain year, if the year is
    provided."""

like_inception = similar_movie("Inception")
print(like_inception) # Prints a movie similar to inception

递归类型

它可以处理自引用类型。例如,每个Character都有一个social_graph,每个SocialGraphCharacters组成。

from dataclasses import dataclass
from pprint import pprint

from manifest import ai


@dataclass
class Character:
    name: str
    occupation: str
    social_graph: "SocialGraph"


@dataclass
class SocialGraph:
    friends: list[Character]
    enemies: list[Character]


@ai
def get_character_social_graph(character_name: str) -> SocialGraph:
    """For a given fictional character, return their social graph, resolving
    each friend and enemy's social graph recursively."""


graph = get_character_social_graph("Walter White")
pprint(graph)
SocialGraph(
    friends=[
        Character(
            name='Jesse Pinkman',
            occupation='Meth Manufacturer',
            social_graph=SocialGraph(
                friends=[Character(name='Walter White', occupation='Chemistry Teacher', social_graph=SocialGraph(friends=[], enemies=[]))],
                enemies=[Character(name='Hank Schrader', occupation='DEA Agent', social_graph=SocialGraph(friends=[], enemies=[]))]
            )
        ),
        Character(
            name='Saul Goodman',
            occupation='Lawyer',
            social_graph=SocialGraph(friends=[Character(name='Walter White', occupation='Chemistry Teacher', social_graph=SocialGraph(friends=[], enemies=[]))], enemies=[])
        )
    ],
    enemies=[
        Character(
            name='Hank Schrader',
            occupation='DEA Agent',
            social_graph=SocialGraph(
                friends=[Character(name='Marie Schrader', occupation='Radiologic Technologist', social_graph=SocialGraph(friends=[], enemies=[]))],
                enemies=[Character(name='Walter White', occupation='Meth Manufacturer', social_graph=SocialGraph(friends=[], enemies=[]))]
            )
        ),
        Character(
            name='Gus Fring',
            occupation='Businessman',
            social_graph=SocialGraph(
                friends=[Character(name='Mike Ehrmantraut', occupation='Fixer', social_graph=SocialGraph(friends=[], enemies=[]))],
                enemies=[Character(name='Walter White', occupation='Meth Manufacturer', social_graph=SocialGraph(friends=[], enemies=[]))]
            )
        )
    ]
)

它是如何工作的?

清单依赖于运行时元数据,如函数的名称、文档字符串、参数和类型提示。它使用所有这些在幕后创建提示,然后将提示发送给LLM。LLM“执行”提示,并返回一个基于json的格式,我们可以安全地将它解析回适当的对象。

为了充分利用@ai装饰器

  • 为您的函数命名。
  • 为您的函数添加类型提示。
  • 为您的函数添加高价值的文档字符串。

限制

REPL

由于清单需要访问它装饰的函数的源代码,因此它不能从REPL中工作。

类型

您只能传入和返回以下类型

  • 数据类
  • 枚举 子类
  • 基本数据类型(str, int, bool, None 等)
  • 基本容器类型(list, dict, tuple)
  • 联合类型
  • 上述类型的任意组合

提示信息

提示模板有时也有些麻烦。它们可以改进。

初始化

为了使事情尽可能简单,manifest 使用环境 LLM 凭证,目前仅为 OPENAI_API_KEY。如果未找到环境凭证,您将被告知自行初始化库。

项目详情


下载文件

下载您平台对应的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源代码分发

manifest-0.6.0.tar.gz (15.6 kB 查看哈希)

上传时间 源代码

构建分发

manifest-0.6.0-py3-none-any.whl (21.7 kB 查看哈希)

上传时间 Python 3

支持者: