promptulate
Promptulate 是由 Cogit Lab 打造的一款轻量级大语言模型自动化与自主智能体(Agent)开发框架。它致力于让开发者通过纯正的 Python 风格,以极简的代码快速构建复杂的 AI 应用。
在传统开发中,整合大模型、工具链及记忆模块往往需要繁琐的配置和大量的样板代码。Promptulate 有效解决了这一痛点,它将 LLM、Agent、工具调用及 RAG 等核心组件高度封装,大多数任务仅需几行代码即可完成。其独特的技术亮点在于“函数即工具”的设计理念,允许开发者直接将任意 Python 函数转化为智能体可调用的工具;同时提供丰富的生命周期钩子(Hooks)和提示词缓存机制,既增强了灵活性又提升了运行效率。此外,它还无缝兼容 LangChain 等主流生态,并内置了强大的 OpenAI 封装与 Streamlit 组件,进一步降低了集成门槛。
这款框架非常适合希望高效落地 AI 应用的 Python 开发者、算法工程师及技术研究人员。如果你不想花费大量时间学习复杂的框架细节,而是希望通过直观的 pne.chat() 接口迅速实现想法,Promptulate 将是一个得心应手的选择,助你轻松从原型验证迈向生产部署。
使用场景
某电商公司的数据分析师需要构建一个能自动查询库存、分析销售趋势并生成日报的智能助手,以替代繁琐的人工统计流程。
没有 promptulate 时
- 开发门槛高:需分别学习不同大模型的 SDK 和复杂的 Agent 框架,编写大量样板代码才能打通模型调用链路。
- 工具集成难:将内部的库存查询 API 转化为 Agent 可调用的工具时,需手动封装参数解析与错误处理逻辑,耗时且易出错。
- 调试效率低:缺乏原生的终端交互与钩子机制,难以实时观察 Agent 的思考规划过程,排查问题如同“黑盒摸象”。
- 维护成本大:代码结构臃肿,一旦更换底层大模型或增加新功能,往往需要重构大量核心逻辑。
使用 promptulate 后
- 极简开发体验:利用
pne.chat这一 Pythonic 接口,仅需几行代码即可封装完整的对话逻辑,快速拉起应用原型。 - 函数即工具:直接将现有的 Python 库存查询函数注册为 Agent 工具,promptulate 自动完成参数映射,无需额外适配层。
- 全链路可观测:借助内置的生命周期 Hooks 和终端集成,开发者可清晰监控 Agent 的每一步推理与行动,调试效率倍增。
- 灵活扩展架构:依托其松耦合设计,无缝切换不同大模型或叠加 RAG 组件,业务迭代无需推倒重来。
promptulate 通过高度抽象的 Pythonic 范式,让开发者从繁琐的框架细节中解放,专注于业务逻辑本身,真正实现“几行代码构建智能体”。
运行环境要求
- 未说明
未说明
未说明

快速开始
概述
Promptulate 是由 Cogit Lab 打造的 AI Agent 应用开发框架,它以 Python 式的开发范式,为开发者提供了一种极为简洁高效的构建 Agent 应用的方式。Promptulate 的核心理念是借鉴并整合开源社区的智慧,融合各类开发框架的优点,从而降低开发门槛、统一开发者共识。借助 Promptulate,你可以用最精简的代码操控 LLM、Agent、Tool、RAG 等组件——大多数任务只需几行代码即可轻松完成。🚀
💡 特性
- 🐍 Python 式代码风格:贴合 Python 开发者的习惯,提供 Python 风格的 SDK 调用方式,仅需一个
pne.chat函数即可封装所有核心功能,让一切尽在掌握。 - 🧠 模型兼容性:支持市面上几乎所有类型的大型模型,并可轻松自定义以满足特定需求。
- 🕵️♂️ 多样化 Agent:提供 WebAgent、ToolAgent、CodeAgent 等多种 Agent 类型,具备规划、推理和执行能力,能够应对复杂问题。将 Planner 等组件原子化设计,简化开发流程。
- 🔗 低成本集成:可无缝集成 LangChain 等不同框架中的工具,显著降低集成成本。
- 🔨 函数即工具:可将任意 Python 函数直接转换为 Agent 可使用的工具,简化工具的创建与使用流程。
- 🪝 生命周期与钩子:提供丰富的钩子和完善的生命周期管理机制,允许在 Agent、Tool 和 LLM 的各个阶段插入自定义代码。
- 💻 终端集成:轻松集成应用终端,内置客户端支持,提供快速的提示词调试能力。
- ⏱️ 提示词缓存:为 LLM 提示词提供缓存机制,减少重复工作,提升开发效率。
- 🤖 强大的 OpenAI 封装:通过 pne,你无需再使用 openai sdk,核心功能均可由
pne.chat替代,并且提供了增强特性以简化开发难度。 - 🧰 Streamlit 组件集成:可快速进行原型开发,提供大量开箱即用的示例及可复用的 Streamlit 组件。
下图展示了 promptulate 的核心架构:

Promptulate 的核心理念在于,我们希望提供一种简单、Python 式且高效的 AI 应用构建方式,这意味着你无需花费大量时间去学习框架本身。我们期望通过 pne.chat() 完成大部分工作,让你仅需几行代码就能轻松搭建任何 AI 应用。
下文中,“pne” 是 Promptulate 的昵称,其中 “p” 和 “e” 分别代表 Promptulate 的首尾字母,“n” 则代表数字 9,象征着 “p” 和 “e” 之间的九个字母。
支持的基模型
Promptulate 集成了 litellm 的能力,支持市面上几乎所有类型的大型模型,包括但不限于以下模型:
| 提供商 | 完成 | 流式传输 | 异步完成 | 异步流式传输 | 异步嵌入 | 异步图像生成 |
|---|---|---|---|---|---|---|
| openai | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| azure | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| aws - sagemaker | ✅ | ✅ | ✅ | ✅ | ✅ | |
| aws - bedrock | ✅ | ✅ | ✅ | ✅ | ✅ | |
| google - vertex_ai [Gemini] | ✅ | ✅ | ✅ | ✅ | ||
| google - palm | ✅ | ✅ | ✅ | ✅ | ||
| google AI Studio - gemini | ✅ | ✅ | ||||
| mistral ai api | ✅ | ✅ | ✅ | ✅ | ✅ | |
| cloudflare AI Workers | ✅ | ✅ | ✅ | ✅ | ||
| cohere | ✅ | ✅ | ✅ | ✅ | ✅ | |
| anthropic | ✅ | ✅ | ✅ | ✅ | ||
| huggingface | ✅ | ✅ | ✅ | ✅ | ✅ | |
| replicate | ✅ | ✅ | ✅ | ✅ | ||
| together_ai | ✅ | ✅ | ✅ | ✅ | ||
| openrouter | ✅ | ✅ | ✅ | ✅ | ||
| ai21 | ✅ | ✅ | ✅ | ✅ | ||
| baseten | ✅ | ✅ | ✅ | ✅ | ||
| vllm | ✅ | ✅ | ✅ | ✅ | ||
| nlp_cloud | ✅ | ✅ | ✅ | ✅ | ||
| aleph alpha | ✅ | ✅ | ✅ | ✅ | ||
| petals | ✅ | ✅ | ✅ | ✅ | ||
| ollama | ✅ | ✅ | ✅ | ✅ | ||
| deepinfra | ✅ | ✅ | ✅ | ✅ | ||
| perplexity-ai | ✅ | ✅ | ✅ | ✅ | ||
| Groq AI | ✅ | ✅ | ✅ | ✅ | ||
| anyscale | ✅ | ✅ | ✅ | ✅ | ||
| voyage ai | ✅ | |||||
| xinference [Xorbits Inference] | ✅ |
pne 强大的模型支持使您能够轻松构建任何第三方模型调用。
现在让我们看看如何使用 pne 运行 ollama 的本地 llama3 模型。
import promptulate as pne
resp: str = pne.chat(model="ollama/llama2", messages=[{"content": "Hello, how are you?", "role": "user"}])
🌟 2024年5月14日,OpenAI推出了最新的“omni”模型,相比turbo版本在速度和定价上都有所提升。
您可以在任何 promptulate 应用中使用其可用的多模态功能!
import promptulate as pne
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "这张图片里有什么?"},
{
"type": "image_url",
"image_url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",
},
],
}
]
resp = pne.chat(model="gpt-4o", messages=messages)
print(resp)
使用 provider/model_name 调用模型,您可以轻松构建任何第三方模型调用。
如需了解更多模型,请访问 litellm 文档。
您还可以在 入门/官方文档 中查看如何使用 pne.chat()。
📗 相关文档
📝 示例
🛠 快速入门
- 打开终端并输入以下命令以安装框架:
pip install -U pne
注意:您的 Python 版本应为 3.8 或更高。
尽管 pne 提供了许多模块,在 90% 的 LLM 应用开发场景中,您只需要使用 pne.chat() 函数即可,因此只需从聊天开始了解 pne 的用法,当需要使用其他模块时,再进一步学习其他模块的功能和使用方法。
类似 OpenAI 的聊天
你可以使用 pne.chat() 来进行类似 OpenAI 的聊天。OpenAI 聊天 API 文档:https://platform.openai.com/docs/api-reference/chat
import promptulate as pne
messages = [
{"role": "system", "content": "你是一位 helpful assistant。"},
{"role": "user", "content": "你是谁?"},
]
response: str = pne.chat(messages=messages, model="gpt-4-turbo")
print(response)
替代 OpenAI SDK
许多第三方库会通过 OpenAI SDK 调用其模型,例如 Deepseek。在 pne 中,你可以直接使用 pne.chat() 函数来调用这些模型,无需再使用 OpenAI SDK,并且提供了增强的功能以简化开发难度。只需在模型名称中使用 openai/xxx 前缀,即可调用 OpenAI 的模型。
import os
import promptulate as pne
os.environ["DEEPSEEK_API_KEY"] = "your api key"
messages = [
{"role": "system", "content": "你是一位 helpful assistant。"},
{"role": "user", "content": "你好吗?"},
]
response = pne.chat(
messages=messages,
model="openai/deepseek-chat",
)
print(response)
结构化输出
强大的输出格式化是构建大模型应用的基础。我们希望大模型能够返回稳定的数据。借助 pne,你可以轻松实现格式化输出。在下面的例子中,我们使用 Pydantic 的 BaseModel 封装了需要返回的数据结构。
from typing import List
import promptulate as pne
from pydantic import BaseModel, Field
class LLMResponse(BaseModel):
provinces: List[str] = Field(description="省份名称列表")
resp: LLMResponse = pne.chat("请告诉我中国所有的省份。", output_schema=LLMResponse)
print(resp)
输出:
provinces=['安徽', '福建', '甘肃', '广东', '贵州', '海南', '河北', '黑龙江', '河南', '湖北', '湖南', '江苏', '江西', '吉林', '辽宁', '青海', '陕西', '山东', '山西', '四川', '云南', '浙江', '台湾', '广西', '内蒙古', '宁夏', '新疆', '西藏', '北京', '重庆', '上海', '天津', '香港', '澳门']
具有规划、工具使用和反思能力的 Agent
此外,受 Plan-and-Solve 论文启发,pne 还允许开发者构建能够通过规划、推理和行动来处理复杂问题的 Agent。可以通过 enable_plan 参数激活 Agent 的规划能力。

在这个示例中,我们使用 Tavily 作为搜索引擎,它是一款功能强大的网络信息搜索工具。要使用 Tavily,你需要从 Tavily 获取一个 API 密钥。
import os
os.environ["TAVILY_API_KEY"] = "your_tavily_api_key"
os.environ["OPENAI_API_KEY"] = "your_openai_api_key"
在此案例中,我们使用 LangChain 封装的 TavilySearchResults 工具。
from langchain_community.tools.tavily_search import TavilySearchResults
tools = [TavilySearchResults(max_results=5)]
import promptulate as pne
pne.chat("2024 年澳大利亚网球公开赛冠军的家乡是哪里?", model="gpt-4-1106-preview", enable_plan=True)
输出:
[代理] 助理代理开始…
[用户指令] 2024年澳大利亚网球公开赛的冠军家乡是哪里?
[计划] {"goals": ["查找2024年澳大利亚网球公开赛冠军的家乡"], "tasks": [{"task_id": 1, "description": "确定2024年澳大利亚网球公开赛的冠军是谁。"}, {"task_id": 2, "description": "研究已确定的冠军,找出其出生地或家乡。"}, {"task_id": 3, "description": "记录2024年澳大利亚网球公开赛冠军的家乡。"}], "next_task_id": 1}
[代理] 工具代理开始…
[用户指令] 确定2024年澳大利亚网球公开赛的冠军是谁。
[思考] 由于当前日期是2024年3月26日,而澳大利亚网球公开赛通常在1月份举行,因此该赛事很可能已经结束。为了确定冠军,我应该使用Tavily搜索工具来查找关于2024年澳大利亚网球公开赛冠军的最新信息。
[行动] tavily_search_results_json 参数:{'query': '2024年澳大利亚网球公开赛冠军'}
[观察] [{'url': 'https://ausopen.com/articles/news/sinner-winner-italian-takes-first-major-ao-2024', 'content': '这位灵活的右手球员,在他年轻的职业生涯中此前仅一次从落后两盘的情况下逆转取胜。他是继1976年的阿德里亚诺·帕纳塔之后,第二位在大满贯赛事中夺得男单冠军的意大利选手。在击败安德烈·鲁布列夫、十届澳网冠军得主诺瓦克·德约科维奇以及丹尼尔·梅德韦杰夫之后,这位意大利选手成为自1991年温布尔登网球锦标赛上米夏埃尔·施蒂希以来,最年轻的在大满贯赛事最后三场比赛中击败世界排名前五选手的球员——而那时西内尔还未出生。\n他在发球局中凭借一记ACE化解了唯一一次破发危机,并在比分压力的帮助下,通过一记强劲的正手击球迫使经验更丰富的对手出现失误,从而成功破发,将第四盘拿下,将比赛拖入决胜盘。\n当梅德韦杰夫以5比3领先准备拿下第二盘时,西内尔抓住机会,连续打出两记精彩的穿越球,为意大利人创造了破发点,但梅德韦杰夫凭借一贯的耐心化解了这次危机,迫使对手出现正手失误。“我们每天都在努力变得更好,即使在比赛期间,我们也试图变得更强大,更好地理解每一种情况,我很高兴有你们在这里支持我、理解我,尽管有时候这并不容易,因为我确实还很年轻,”他微笑着说道。\n梅德韦杰夫在第二盘的前三个发球局中都顺利保发,给意大利人施加了巨大压力,迫使西内尔发挥出最佳水平,在持续近12分钟的第二局中挽救了四个破发点。'}, {'url': 'https://www.cbssports.com/tennis/news/australian-open-2024-jannik-sinner-claims-first-grand-slam-title-in-epic-comeback-win-over-daniil-medvedev/', 'content': '"\n我们的最新网球新闻\n西内尔史诗般逆转夺冠,赢得澳大利亚网球公开赛\n西内尔和萨巴伦卡分别夺得澳大利亚网球公开赛男女单打冠军\n2024年澳大利亚网球公开赛赔率:西内尔对阵梅德韦杰夫预测\n萨巴伦卡击败郑钦文,赢得2024年澳大利亚网球公开赛\n2024年澳大利亚网球公开赛赔率:萨巴伦卡对阵郑钦文预测\n2024年澳大利亚网球公开赛赔率:梅德韦杰夫对阵兹维列夫预测\n澳大利亚网球公开赛赔率:德约科维奇对阵西内尔预测与投注\n澳大利亚网球公开赛赔率:高芙对阵萨巴伦卡预测与投注\n澳大利亚网球公开赛赔率:郑钦文对阵亚斯特雷姆斯卡预测与投注\n尼克·基里奥斯透露自己正在考虑退役\n© 2004-2024 CBS Interactive。贾尼奇·西内尔在一场史诗般的逆转胜利中首次夺得大满贯冠军,击败丹尼尔·梅德韦杰夫\n现年22岁的西内尔从落后两盘的情况下奋起直追,成为历史上第三位赢得大满贯男子单打冠军的意大利选手\n经过近四个小时的激战,贾尼奇·西内尔最终从落后两盘的局面中逆转,以3比6、3比6、6比4、6比4、6比3的比分战胜丹尼尔·梅德韦杰夫,首次夺得大满贯冠军。西内尔也成为自1976年以来首位赢得澳大利亚网球公开赛男子单打冠军的意大利选手,同时也是第八位在大满贯决赛中成功实现从落后两盘逆转的男子选手。\n在此之前,他从未丢掉过任何一盘,直到与德约科维奇的对决。而这场胜利本身也是一项壮举,因为当时德约科维奇在澳大利亚网球公开赛上保持着33连胜的纪录,并且从未在墨尔本的大满贯半决赛中失利。\n @janniksin • @wwos • @espn • @eurosport • @wowowtennis pic.twitter.com/DTCIqWoUoR\n“我们每天都在努力变好,甚至在比赛期间,也在不断强化自己,尝试更好地理解局势,”西内尔说道。'}, {'url': 'https://www.bbc.com/sport/tennis/68120937', 'content': '实时比分、结果及赛程安排\n提醒:将网球新闻发送到您的手机\n相关主题\n头条新闻\n足总杯:布莱克本流浪者队对阵雷克瑟姆队——文字直播\n俄罗斯滑冰运动员瓦利耶娃因兴奋剂违规被禁赛四年\n与巴塞罗那的联系“完全不属实”——阿尔特塔\nBBC其他内容\n虚假诱骗丑闻背后的真相\n包含未公开的警方录像以及案件核心警官的采访\n他们的父亲和叔叔是否杀害了纳粹战犯?\n一部基于真实事件的谋杀悬疑剧,讲述三兄弟追寻真相的故事\n乘坐最快的飞机是什么体验?\n带您走进协和式超音速客机背后的故事\n有毒的爱情、冷酷的野心与令人震惊的背叛\n《告诉我谎言》讲述了一段充满激情的大学恋情,却带来了难以想象的后果……\n “\n马拉松选手梅德韦杰夫体力耗尽\n梅德韦杰夫是第一位在先赢两盘后最终输掉大满贯决赛的选手\n许多拥有大满贯决赛经验的选手都曾表示,这种场合与其他比赛截然不同,尤其是第一次参加时,可能会让人感到不知所措。\n贾尼奇·西内尔在墨尔本决赛中击败丹尼尔·梅德韦杰夫\n贾尼奇·西内尔是自2008年诺瓦克·德约科维奇以来,最年轻的澳大利亚网球公开赛男子单打冠军\n贾尼奇·西内尔在澳大利亚网球公开赛决赛中上演了一场惊人的逆转,击败丹尼尔·梅德韦杰夫,终于实现了他长期以来的承诺,夺得了大满贯冠军。\n “\n西内尔以出色的状态开启2024年\n西内尔赢得了自2005年以来第一场没有罗杰·费德勒、拉斐尔·纳达尔或诺瓦克·德约科维奇参赛的澳大利亚网球公开赛男子单打决赛\n在上赛季末的一次精彩表现之后,西内尔迅速成为2024年讨论大满贯冠军时的焦点人物。'}]
[执行结果] {'thought': "搜索结果一致表明2024年澳大利亚网球公开赛的冠军是贾尼奇·西内尔。这一信息证实了用户问题的答案。", 'action_name': 'finish', 'action_parameters': {'content': '贾尼奇·西内尔赢得了2024年澳大利亚网球公开赛。'}}
[执行] 执行结束。
[修订后的计划] {"goals": ["查找2024年澳大利亚网球公开赛冠军的家乡"], "tasks": [{"task_id": 2, "description": "研究贾尼奇·西内尔,找出其出生地或家乡。"}, {"task_id": 3, "description": "记录贾尼奇·西内尔的家乡,即2024年澳大利亚网球公开赛的冠军。"}], "next_task_id": 2}
[代理] 工具代理开始…
[用户指令] 研究贾尼奇·西内尔,找出其出生地或家乡。
[思考] 为了找到贾尼奇·西内尔的出生地或家乡,我应该使用搜索工具来获取最新且准确的信息。
[行动] tavily_search_results_json 参数:{'query': '贾尼奇·西内尔 出生地 家乡'}
[观察] [{'url': 'https://www.sportskeeda.com/tennis/jannik-sinner-nationality', 'content': '在半决赛中,西内尔连续第三次对阵德约科维奇,并成为首位在单打比赛中击败他的选手。贾尼奇·西内尔的国籍\n贾尼奇·西内尔是意大利公民,出生于伊尼肯,这是位于意大利北部南蒂罗尔地区的一个主要讲德语的小镇。A. 贾尼奇·西内尔在2023年加拿大公开赛上夺得个人首个大师赛1000级别冠军,在决赛中直落两盘击败了亚历克斯·德米瑙尔。\n除了2024年在墨尔本公园取得的辉煌胜利外,贾尼奇·西内尔在大满贯赛事中的最佳表现出现在2023年的温布尔登网球锦标赛上,当时他打入了半决赛。2020年,西内尔成为自2006年诺瓦克·德约科维奇以来最年轻的进入法国网球公开赛四分之一决赛的选手。'}, {'url': 'https://en.wikipedia.org/wiki/Jannik_Sinner', 'content': '在2023年澳大利亚网球公开赛上,西内尔在第四轮以五盘大战负于最终亚军斯特凡诺斯·齐齐帕斯。[87]\n随后,西内尔在蒙彼利埃的法国南部公开赛上夺得第七个冠军头衔,成为本赛季首位在巡回赛级别赛事中保持全胜并夺冠的选手,也是自2022年10月同胞洛伦佐·穆塞蒂在那不勒斯夺冠以来的第一人。[88]\n在ABN AMRO公开赛上,他击败了头号种子、世界排名第3的斯特凡诺斯·齐齐帕斯,报了澳大利亚公开赛失利的一箭之仇,取得了职业生涯中最大的一场胜利。[89]\n在辛辛那提大师赛上,他曾在领先一盘、一次破发并握有两个赛点的情况下,最终以三盘告负,败给了费利克斯·奥热-阿利亚西姆。[76]\n在美国公开赛上,西内尔以第11号种子身份出战,经过四盘激战击败了布兰登·纳卡希马,晋级第四轮。[77]\n随后,他又经历了一场接近四小时的五盘大战,击败了伊利亚·伊瓦什卡,首次闯入这项大满贯赛事的四分之一决赛。[78]\n这场比赛历时5小时26分钟,是西内尔职业生涯中最长的比赛,也是该赛事历史上第五长的比赛,同时还是本赛季第二长的比赛,仅次于安迪·穆雷在澳大利亚网球公开赛上对阵塔纳西·科基纳基斯的比赛。[100]\n在温布尔登网球锦标赛上,他连续击败了胡安·曼努埃尔·塞伦多洛、迭戈·施瓦茨曼、昆汀·哈利斯和丹尼尔·埃拉希·加兰,再次闯入四分之一决赛。[102]\n随后,他首次进入大满贯半决赛,击败了罗曼·萨菲乌林,但在接下来的半决赛中以直落三盘负于诺瓦克·德约科维奇。[103]\n在下一轮半决赛中,他再次以直落三盘负于职业劲敌兼头号种子卡洛斯·阿尔卡拉兹,后者在比赛结束后重新夺回了世界第一的宝座。[92]\n在迈阿密公开赛上,他连续第三年进入该项赛事的四分之一决赛,先后击败了格里戈尔·季米特罗夫和安德烈·鲁布列夫,从而重返世界排名前十的位置。在决赛中,他从落后两盘的情况下奋起直追,击败了丹尼尔·梅德韦杰夫,成为首位赢得澳大利亚网球公开赛男子单打冠军的意大利选手,也是第三位赢得大满贯男子单打冠军的选手(其中第二位是在公开赛时代),更是48年来首位获此殊荣的意大利人。[8][122]'}, {'url': 'https://www.thesportreview.com/biography/jannik-sinner/', 'content': '• 出生日期:2001年8月16日\n• 年龄:22岁\n• 出生地:圣坎迪多,意大利\n• 国籍:意大利\n• 身高:188厘米 / 6英尺2英寸\n• 体重:76公斤 / 167磅\n• 持拍方式:右手\n• 转职业时间:2018年\n• 职业生涯奖金:4,896,338美元\n• Instagram:@janniksin\n这位才华横溢的22岁年轻人于2018年转为职业选手,很快便在巡回赛中崭露头角,于2019年首次进入世界排名前100位。\n 贾尼奇·西内尔(照片:迪拜免税店网球锦标赛)\n赛季结束时,西内尔的世界排名升至第78位,成为自2003年拉斐尔·纳达尔以来最年轻的年度排名进入前80位的选手。\n随后,意大利人在2019年以优异的表现收官,不仅获得了2019年新一代ATP总决赛的参赛资格,还在决赛中击败了亚历克斯·德米瑙尔,成功夺冠。\n西内尔随后首次进入大满贯赛事的正赛阶段,那是2019年美国公开赛,当时他通过资格赛晋级首轮,但在首轮比赛中输给了斯坦·瓦林卡。\n当被问及对其成长起到关键作用的人物时,西内尔回答道:“首先,我要感谢我的家人,他们一直支持我,并在我13岁半、14岁时给了我改变人生的信心。'}, {'url': 'https://www.tennisworldusa.com/tennis-news/jannik-sinner-becomes-the-youngest-player-to-defeat-top-5-opponents-in-a-major-final-since-michael-stich-in-1991/', 'content': '贾尼奇·西内尔成为自1991年米夏埃尔·施蒂希以来最年轻的在大满贯决赛中击败世界排名前五选手的球员\n贾尼奇·西内尔在2024年澳大利亚网球公开赛决赛中击败了丹尼尔·梅德韦杰夫,成为历史上第三位赢得大满贯男子单打冠军的意大利选手\n贾尼奇·西内尔在2024年澳大利亚网球公开赛决赛中上演了一场史诗般的逆转,从落后两盘的情况下奋起直追,最终以3比6、3比6、6比4、6比4、6比3的比分战胜了丹尼尔·梅德韦杰夫,夺得了个人首个大满贯冠军。这个胜利使西内尔成为自1976年阿德里亚诺·帕纳塔以来首位赢得澳大利亚网球公开赛男子单打冠军的意大利选手,也是历史上第三位赢得大满贯男子单打冠军的意大利人。此外,西内尔还创造了另一项历史性的成就:他成为自1991年米夏埃尔·施蒂希以来最年轻的在大满贯决赛中击败世界排名前五选手的球员。'}, {'url': 'https://www.theguardian.com/sport/tennis/2024/mar/26/jannik-sinner-wins-australian-open-after-epic-comeback-victory-over-daniil-medvedev', 'content': '贾尼奇·西内尔在史诗般的逆转胜利中夺得澳大利亚网球公开赛冠军\n贾尼奇·西内尔在2024年澳大利亚网球公开赛决赛中击败了丹尼尔·梅德韦杰夫,成为历史上第三位赢得大满贯男子单打冠军的意大利选手\n贾尼奇·西内尔在2024年澳大利亚网球公开赛决赛中上演了一场惊人的逆转,从落后两盘的情况下奋起直追,最终以3比6、3比6、6比4、6比4、6比3的比分战胜了丹尼尔·梅德韦杰夫,夺得了个人首个大满贯冠军。这个胜利使西内尔成为自1976年阿德里亚诺·帕纳塔以来首位赢得澳大利亚网球公开赛男子单打冠军的意大利选手,也是历史上第三位赢得大满贯男子单打冠军的意大利人。此外,西内尔还创造了另一项历史性的 achievement: 他成为自1991年米夏埃尔·施蒂希以来最年轻的在大满贯决赛中击败世界排名前五选手的球员。'}, {'url': 'https://www.theage.com.au/sport/tennis/jannik-sinner-wins-australian-open-after-epic-comeback-victory-over-daniil-medvedev', 'content': '贾尼奇·西内尔在2024年澳大利亚网球公开赛决赛中击败了丹尼尔·梅德韦杰夫,成为历史上第三位赢得大满贯男子单打冠军的意大利选手\n贾尼奇·西内尔在2024年澳大利亚网球公开赛决赛中上演了一场惊人的逆转,从落后两盘的情况下奋起直追,最终以3比6、3比6、6比4、6比4、6比3的比分战胜了丹尼尔·梅德韦杰夫,夺得了个人首个大满贯冠军。这个胜利使西内尔成为自1976年阿德里亚诺·帕纳塔以来首位赢得澳大利亚网球公开赛男子单打冠军的意大利选手,也是历史上第三位赢得大满贯男子单打冠军的意大利人。此外,西内尔还创造了另一项历史性的 achievement: 他成为自1991年米夏埃尔·施蒂希以来最年轻的在大满贯决赛中击败世界排名前五选手的球员。'}, {'url': 'https://www.news.com.au/sport/tennis/australian-open-2024-jannik-sinner-wins-australian-open-after-epic-comeback-victory-over-daniil-medvedev', 'content': '贾尼奇·西内尔在2024年澳大利亚网球公开赛决赛中击败了丹尼尔·梅德韦杰夫,成为历史上第三位赢得大满贯男子单打冠军的意大利选手\n贾尼奇·西内尔在2024年澳大利亚网球公开赛决赛中上演了一场惊人的逆转,从落后两盘的情况下奋起直追,最终以3比6、3比6、6比4、6比4、6比3的比分战胜了丹尼尔·梅德韦杰夫,夺得了个人首个大满贯冠军。这个胜利使西内尔成为自1976年阿德里亚诺·帕纳塔以来首位赢得澳大利亚网球公开赛男子单打冠军的意大利选手,也是历史上第三位赢得大满贯男子单打冠军的意大利人。此外,西内尔还创造了另一项 historical achievement: 他成为自1991年米夏埃尔·施蒂希以来最年轻的在大满贯决赛中击败世界排名前五选手的球员。'}, {'url': 'https://www.abc.net.au/news/2024/03/26/jannik-sinner-wins-australian-open-after-epic-comeback-victory-over-daniil-medvedev', 'content': '贾尼奇·西内尔在2024年澳大利亚网球公开赛决赛中击败了丹尼尔·梅德韦杰夫,成为历史上第三位赢得大满贯男子单打冠军的意大利选手\n贾尼奇·西内尔在2024年澳大利亚网球公开赛决赛中上演了一场惊人的逆转,从落后两盘的情况下奋起直追,最终以3比6、3比6、6比4、6比4、6比3的比分战胜了丹尼尔·梅德韦杰夫,夺得了个人首个大满贯冠军。这个 victory使西内尔成为自1976年阿德里亚诺·帕纳塔以来首位赢得澳大利亚网球公开赛男子单打冠军的意大利选手,也是历史上第三位赢得大满贯男子单打冠军的意大利人。此外,西内尔还创造了 another historical achievement: 他成为自1991年米夏埃尔·施蒂希以来最年轻的在大满贯决赛中击败世界排名前五选手的球员。'}, {'url': 'https://www.smh.com.au/sport/tennis/jannik-sinner-wins-australian-open-after-epic-comeback-victory-over-daniil-medvedev', 'content': '贾尼奇·西内尔在2024年澳大利亚网球公开赛决赛中击败了丹尼尔·梅德韦杰夫,成为历史上第三位赢得大满贯男子单打冠军的意大利选手\n贾尼奇·西内尔在2024年澳大利亚网球公开赛决赛中上演了一场惊人的逆转,从落后两盘的情况下奋起直追,最终以3比6、3比6、6比4、6比4、6比3的比分战胜了丹尼尔·梅德韦杰夫,夺得了个人首个大满贯冠军。这个 victory使西内尔成为自1976年阿德里亚诺·帕纳塔以来首位赢得澳大利亚网球公开赛男子单打冠军的意大利选手,也是历史上第三位赢得大满贯男子单打冠军的意大利人。此外,西内尔还创造了 another historical achievement: 他成为自1991年米夏埃尔·施蒂希以来最年轻的在大满贯决赛中击败世界排名前五选手的球员。'}, {'url': 'https://www.dailymail.co.uk/sport/tennis/article-12345678/jannik-sinner-wins-australian-open-after-epic-comeback-victory-over-daniil-medvedev', 'content': '贾尼奇·西内尔在2024年澳大利亚网球公开赛决赛中击败了丹尼尔·梅德韦杰夫,成为历史上第三位赢得大满贯男子单打冠军的意大利选手\n贾尼奇·西内尔在2024年澳大利亚网球公开赛决赛中上演了一场惊人的逆转,从落后两盘的情况下奋起直追,最终以3比6、3比6、6比4、6比4、6比3的比分战胜了丹尼尔·梅德韦杰夫,夺得了个人首个大满贯冠军。这个 victory使西内尔成为自1976年阿德里...
### 将 Agent 结构原子化
在 Agent 开发的场景中,我们通常需要拆分 Agent 的许多原子化组件,以实现更好的定制化。pne 提供了原子化的 Agent 组件,例如 Planner。以下示例展示了如何使用独立的 Planner 组件进行任务规划。
```python
import promptulate as pne
model = pne.LLMFactory.build("gpt-4-turbo")
planner = pne.Planner(model, system_prompt="You are a planner")
plans = planner.run("Plan a trip to Paris")
print(plans)
输出:
('goals', ['Plan a trip to Paris'])
('tasks', [Task(task_id=1, description='Check passport validity', status=<TaskStatus.TODO: 'todo'>), Task(task_id=2, description='Determine travel dates', status=<TaskStatus.TODO: 'todo'>), Task(task_id=3, description='Research and book flights', status=<TaskStatus.TODO: 'todo'>), Task(task_id=4, description='Book accommodations', status=<TaskStatus.TODO: 'todo'>), Task(task_id=5, description='Plan itinerary for the trip', status=<TaskStatus.TODO: 'todo'>), Task(task_id=6, description='Investigate and purchase travel insurance', status=<TaskStatus.TODO: 'todo'>), Task(task_id=7, description='Set a budget for the trip', status=<TaskStatus.TODO: 'todo'>), Task(task_id=8, description='Pack luggage', status=<TaskStatus.TODO: 'todo'>), Task(task_id=9, description='Notify bank of international travel', status=<TaskStatus.TODO: 'todo'>), Task(task_id=10, description='Check weather forecast and pack accordingly', status=<TaskStatus.TODO: 'todo'>)])
('next_task_id', 1)
如需了解更多详细信息,请查看 入门/官方文档。
📚 设计原则
pne 框架的设计原则包括模块化、可扩展性、互操作性、鲁棒性、可维护性、安全性、效率和易用性。
- 模块化:以模块为基本单位,便于集成新的组件、模型和工具。
- 可扩展性:框架能够处理大量数据、复杂任务以及高并发场景。
- 互操作性:框架与各种外部系统、工具和服务兼容,能够实现无缝集成与通信。
- 鲁棒性:框架具备强大的错误处理、容错和恢复机制,确保在各种条件下可靠运行。
- 安全性:框架实施了严格的措施,以防止未经授权的访问和恶意行为。
- 效率:优化框架的性能、资源使用和响应时间,以提供流畅、高效的用户体验。
- 易用性:框架采用用户友好的界面和清晰的文档,易于使用和理解。
遵循这些原则并结合最新的人工智能技术,pne 致力于提供一个强大而灵活的框架,用于构建自动化 Agent。
💌 联系方式
如需更多信息,请联系:zeeland4work@gmail.com
有关变更日志等信息,请参阅 Telegram 频道。
⭐ 贡献
我们非常感谢您对我们的开源项目感兴趣并愿意贡献力量。我们已提供一份 开发者指南,详细介绍了如何参与 Promptulate 的开发。请参考该指南,以确保协作顺畅、贡献成功。此外,您还可以查看 当前开发计划,了解最新的开发进展 🤝🚀
版本历史
v1.18.42024/10/08v1.18.32024/09/06v1.18.22024/08/23v1.18.12024/08/05v1.18.02024/08/04v1.17.02024/07/20v1.16.72024/05/26v1.16.62024/05/25v1.16.52024/05/18v1.16.42024/05/17v1.16.32024/05/17v1.16.22024/05/15v1.16.12024/05/12v1.16.02024/04/30v1.15.32024/04/23v1.15.22024/04/21v1.15.12024/04/18v1.15.02024/03/30v1.14.02024/03/11v1.13.22024/02/28常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备