使用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
,每个SocialGraph
由Characters
组成。
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 查看哈希)
关闭
manifest-0.6.0.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7dab5403869149c4cfd6c5b66be1e9a3034e4e39720107b387c8c456752cdb02 |
|
MD5 | 18450188e0f828c31463dff3790fc08a |
|
BLAKE2b-256 | a70d95147e6c3b47d7380130a3800aae3193d392cb274fc8b74c81468ed6fd5a |
关闭
manifest-0.6.0-py3-none-any.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 94b0929df89d13f9a908f7207f79796cb3cfd8695f27dae5bdd88b7583333fa9 |
|
MD5 | 251d88bf35f8b5dfcc8c9e8dc5b47d9d |
|
BLAKE2b-256 | 5eb3125e8b78ce6871fbbe8691876896b4fea8d8d90c6dc265dd20386e0eb1cb |