Marvin是一个用于构建 AI 驱动软件的Python库。 Marvin 的工作是将 AI 直接集成到你的代码库中,使其看起来和感觉起来与任何其他功能一样。
Marvin 引入了一个新概念,称为 AI 函数(AI functions)。 AI函数与传统函数的不同之处在于,它们不依赖于源代码,而是通过使用 LLM 作为运行时,使用 AI 按需生成源代码。 借助 AI 函数,你不必为从网页中提取实体、对情绪评分或对数据库中的项目进行分类等任务编写复杂的代码。 只需描述你的需求,调用函数,即可大功告成!
推荐:用 NSDT设计器 快速搭建可编程3D场景。
AI 函数与原生数据类型一起工作,因此你可以将它们无缝集成到任何代码库中,并将它们链接到复杂的管道中。 从技术上讲,Marvin 将使用 AI 的签名从 (str) -> str 转换为 (**kwargs) -> Any。 我们称之为“函数式提示工程”(functional prompt engineering)。
除了 AI 函数,Marvin 还引入了更灵活的机器人(bots)。 机器人是功能强大的 AI 助手,可以为其提供特定的指令和个性或角色。 他们可以使用自定义插件并利用外部知识,并自动创建每个线程的历史记录。 在幕后,AI函数实际上是一种机器人。
为了方便使用机器人,Marvin 提供了一个功能齐全的 TUI。 TUI 跨多个机器人跟踪线程,甚至允许你通过对话界面管理你的机器人。
开发人员可以使用 Marvin 在最有影响力的地方添加 AI 功能,而无需从头开始。 Marvin 的文档可在 askmarvin.ai 上找到。
1、Marvin快速上手
创建一个机器人:
marvin bots create ObiWanKenoBot -p "knows every Star Wars meme"
与机器人交谈:
marvin chat -b ObiWanKenoBot
2、AI函数
AI 函数是在本地定义但使用 AI 大模型生成其代码的函数。 与普通函数一样,AI 函数接受参数并返回结构化输出,如列表、字典甚至 Pydantic 模型。 与普通函数不同,它们不需要任何源代码!
考虑以下示例,其中包含一个生成水果列表的函数。 该函数是用描述性名称、带注释的输入和返回类型以及文档字符串定义的——但似乎实际上没有做任何事情。 尽管如此,由于 @ai_fn 装饰器,它可以像普通函数一样被调用并返回一个水果列表。
from marvin import ai_fn
@ai_fn
def list_fruits(n: int) -> list[str]:
"""Generate a list of n fruits"""
list_fruits(n=3) # ["apple", "banana", "orange"]
AI 功能对于难以编码、耗时或无法编码的活动特别有用。 它们在解析和处理字符串方面特别强大,但几乎可以用于任何数据结构。 这里还有几个例子。
提取文本中的动物列表:
@ai_fn
def extract_animals(text: str) -> list[str]:
"""Returns a list of all animals mentioned in the text"""
文本情感分类:
@ai_fn
def classify_sentiment(tweets: list[str]) -> list[bool]:
"""
Given a list of tweets, classifies each one as
positive (true) or negative (false) and returns
a corresponding list
"""
文章标题建议:
@ai_fn
def suggest_title(article: str, style: str=None) -> str:
"""
Suggest a title for the provided article, optionally in
the style of a publication (such as the AP, NYTimes, etc.)
"""
提取文本中的关键词:
@ai_fn
def extract_keywords(text:str, criteria:str=None) -> list[str]:
"""
Extract important keywords from text, optionally only including
those that meet the provided criteria (for example, "colors",
"proper nouns", or "European capitals")
"""