<h1 align="center">
Promptulate
</h1>
<p align="center">
<a target="_blank" href="">
<img src="https://yellow-cdn.veclightyear.com/2b54e442/f8c88d6c-baa1-4765-9764-011016e1ab60.svg?style=flat-square" />
</a>
<a target="_blank" href=''>
<img src="https://yellow-cdn.veclightyear.com/2b54e442/c959ad8d-c08c-4a49-80b4-b7484ad42d9a.svg?style=flat-square"/>
</a>
<a target="_blank" href=''>
<img src="https://bestpractices.coreinfrastructure.org/projects/3018/badge"/>
</a>
<a target="_blank" href=''>
<img src="https://static.pepy.tech/personalized-badge/promptulate?period=month&units=international_system&left_color=grey&right_color=blue&left_text=Downloads/Week"/>
</a>
<a target="_blank" href=''>
<img src="https://raw.githubusercontent.com/Undertone0809/promptulate/main/docs/images/coverage.svg"/>
</a>
<a href="https://t.me/zeeland0809" target="_blank">
<img src="https://img.shields.io/badge/Telegram-join%20chat-2CA5E0?logo=telegram&logoColor=white" alt="chat on Telegram">
</a>
</p>
[English](/README.md) [中文](/README_zh.md)
<p align="center">
<img src="https://yellow-cdn.veclightyear.com/2b54e442/d79efd96-92d0-4904-836c-05785b47d9c7.png"/>
</p>
## News
- 2024.8.5 stream structured output: Now pne support structured output. ref: [https://x.com/kfhedRk3lXofRIB/status/1820489301299540346](https://x.com/kfhedRk3lXofRIB/status/1820489301299540346)
- 2024.7.20 llmapper: A experimental project for generating knowledge graph by LLM workflow. See [here](https://www.promptulate.cn/#/use_cases/llmapper)
- 2024.5.19 Now you can use `import pne` to import the promptulate package. ref: [https://github.com/Undertone0809/pne](https://github.com/Undertone0809/pne)
- 2024.5.14 OpenAI launched their newest "omni" model, offering improved speed and pricing compared to turbo.
## Overview
**Promptulate** is an AI Agent application development framework crafted by **Cogit Lab**, which offers developers an extremely concise and efficient way to build Agent applications through a Pythonic development paradigm. The core philosophy of Promptulate is to borrow and integrate the wisdom of the open-source community, incorporating the highlights of various development frameworks to lower the barrier to entry and unify the consensus among developers. With Promptulate, you can manipulate components like LLM, Agent, Tool, RAG, etc., with the most succinct code, as most tasks can be easily completed with just a few lines of code. 🚀
## 💡 Features
- 🐍 Pythonic Code Style: Embraces the habits of Python developers, providing a Pythonic SDK calling approach, putting everything within your grasp with just one `pne.chat` function to encapsulate all essential functionalities.
- 🧠 Model Compatibility: Supports nearly all types of large models on the market and allows for easy customization to meet specific needs.
- 🕵️♂️ Diverse Agents: Offers various types of Agents, such as WebAgent, ToolAgent, CodeAgent, etc., capable of planning, reasoning, and acting to handle complex problems. Atomize the Planner and other components to simplify the development process.
- 🔗 Low-Cost Integration: Effortlessly integrates tools from different frameworks like LangChain, significantly reducing integration costs.
- 🔨 Functions as Tools: Converts any Python function directly into a tool usable by Agents, simplifying the tool creation and usage process.
- 🪝 Lifecycle and Hooks: Provides a wealth of Hooks and comprehensive lifecycle management, allowing the insertion of custom code at various stages of Agents, Tools, and LLMs.
- 💻 Terminal Integration: Easily integrates application terminals, with built-in client support, offering rapid debugging capabilities for prompts.
- ⏱️ Prompt Caching: Offers a caching mechanism for LLM Prompts to reduce repetitive work and enhance development efficiency.
- 🤖 Powerful OpenAI Wrapper: With pne, you no longer need to use the openai sdk, the core functions can be replaced with pne.chat, and provides enhanced features to simplify development difficulty.
- 🧰 Streamlit Component Integration: Quickly prototype and provide many out-of-the-box examples and reusable streamlit components.
The following diagram shows the core architecture of `promptulate`:
![promptulate-architecture](https://yellow-cdn.veclightyear.com/2b54e442/63d3abc2-4efc-4a1c-ac0b-ace1d26651f6.png)
The core concept of Promptulate is we hope to provide a simple, pythonic and efficient way to build AI applications, which means you don't need to spend a lot of time learning the framework. We hope to use `pne.chat()` to do most of the works, and you can easily build any AI application with just a few lines of code.
> Below, `pne` stands for Promptulate, which is the nickname for Promptulate. The `p` and `e` represent the beginning and end of Promptulate, respectively, and `n` stands for 9, which is a shorthand for the nine letters between `p` and `e`.
## Supported Base Models
Promptulate integrates the capabilities of [litellm](https://github.com/BerriAI/litellm), supporting nearly all types of large models on the market, including but not limited to the following models:
| Provider | [Completion](https://docs.litellm.ai/docs/#basic-usage) | [Streaming](https://docs.litellm.ai/docs/completion/stream#streaming-responses) | [Async Completion](https://docs.litellm.ai/docs/completion/stream#async-completion) | [Async Streaming](https://docs.litellm.ai/docs/completion/stream#async-streaming) | [Async Embedding](https://docs.litellm.ai/docs/embedding/supported_embedding) | [Async Image Generation](https://docs.litellm.ai/docs/image_generation) |
| ------------- | ------------- | ------------- | ------------- | ------------- | ------------- | ------------- |
| [openai](https://docs.litellm.ai/docs/providers/openai) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| [azure](https://docs.litellm.ai/docs/providers/azure) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| [aws - sagemaker](https://docs.litellm.ai/docs/providers/aws_sagemaker) | ✅ | ✅ | ✅ | ✅ | ✅ |
| [aws - bedrock](https://docs.litellm.ai/docs/providers/bedrock) | ✅ | ✅ | ✅ | ✅ |✅ |
| [google - vertex_ai [Gemini]](https://docs.litellm.ai/docs/providers/vertex) | ✅ | ✅ | ✅ | ✅ |
| [google - palm](https://docs.litellm.ai/docs/providers/palm) | ✅ | ✅ | ✅ | ✅ |
| [google AI Studio - gemini](https://docs.litellm.ai/docs/providers/gemini) | ✅ | | ✅ | | |
| [mistral ai api](https://docs.litellm.ai/docs/providers/mistral) | ✅ | ✅ | ✅ | ✅ | ✅ |
| [cloudflare AI Workers](https://docs.litellm.ai/docs/providers/cloudflare_workers) | ✅ | ✅ | ✅ | ✅ |
| [cohere](https://docs.litellm.ai/docs/providers/cohere) | ✅ | ✅ | ✅ | ✅ | ✅ |
| [anthropic](https://docs.litellm.ai/docs/providers/anthropic) | ✅ | ✅ | ✅ | ✅ |
| [huggingface](https://docs.litellm.ai/docs/providers/huggingface) | ✅ | ✅ | ✅ | ✅ | ✅ |
| [replicate](https://docs.litellm.ai/docs/providers/replicate) | ✅ | ✅ | ✅ | ✅ |
| [together_ai](https://docs.litellm.ai/docs/providers/togetherai) | ✅ | ✅ | ✅ | ✅ |
| [openrouter](https://docs.litellm.ai/docs/providers/openrouter) | ✅ | ✅ | ✅ | ✅ |
| [ai21](https://docs.litellm.ai/docs/providers/ai21) | ✅ | ✅ | ✅ | ✅ |
| [baseten](https://docs.litellm.ai/docs/providers/baseten) | ✅ | ✅ | ✅ | ✅ |
| [vllm](https://docs.litellm.ai/docs/providers/vllm) | ✅ | ✅ | ✅ | ✅ |
| [nlp_cloud](https://docs.litellm.ai/docs/providers/nlp_cloud) | ✅ | ✅ | ✅ | ✅ |
| [aleph alpha](https://docs.litellm.ai/docs/providers/aleph_alpha) | ✅ | ✅ | ✅ | ✅ |
| [petals](https://docs.litellm.ai/docs/providers/petals) | ✅ | ✅ | ✅ | ✅ |
| [ollama](https://docs.litellm.ai/docs/providers/ollama) | ✅ | ✅ | ✅ | ✅ |
| [deepinfra](https://docs.litellm.ai/docs/providers/deepinfra) | ✅ | ✅ | ✅ | ✅ |
| [perplexity-ai](https://docs.litellm.ai/docs/providers/perplexity) | ✅ | ✅ | ✅ | ✅ |
| [Groq AI](https://docs.litellm.ai/docs/providers/groq) | ✅ | ✅ | ✅ | ✅ |
| [anyscale](https://docs.litellm.ai/docs/providers/anyscale) | ✅ | ✅ | ✅ | ✅ |
| [voyage ai](https://docs.litellm.ai/docs/providers/voyage) | | | | | ✅ |
| [xinference [Xorbits Inference]](https://docs.litellm.ai/docs/providers/xinference) | | | | | ✅ |
The powerful model support of pne allows you to easily build any third-party model calls.
Now let's see how to run local llama3 models of ollama with pne.
```python
import promptulate as pne
resp: str = pne.chat(model="ollama/llama2", messages=[{"content": "Hello, how are you?", "role": "user"}])
🌟 2024.5.14 OpenAI launched their newest "omni" model, offering improved speed and pricing compared to turbo.
You can use the available multimodal capabilities of it in any of your promptulate applications!
import promptulate as pne
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "What's in this image?"},
{
"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)
Use provider/model_name
to call the model, and you can easily build any third-party model calls.
For more models, please visit the litellm documentation.
You can also see how to use pne.chat()
in the Getting Started/Official Documentation.
📗 Related Documentation
- Getting Started/Official Documentation
- Current Development Plan
- Contributing/Developer's Manual
- Frequently Asked Questions
- PyPI Repository
📝 Examples
- Build a math application with agent [Steamlit, ToolAgent, Hooks].
- A Mulitmodal Robot Agent framework of ROS2 and Promptulate [Agent]
- Use streamlit and pne to compare different model a playground. [Streamlit]
🛠 Quick Start
- Open the terminal and enter the following command to install the framework:
pip install -U pne
Note: Your Python version should be 3.8 or higher.
Even though pne provides many modules, in 90% of LLM application development scenarios, you only need to use the pne.chat () function, so you only need to start with chat to understand the use of pne, and when you need to use additional modules, you can learn more about the features and use of other modules.
Chat like OpenAI
You can use pne.chat()
to chat like openai. OpenAI chat API document: https://platform.openai.com/docs/api-reference/chat
import promptulate as pne
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who are you?"},
]
response: str = pne.chat(messages=messages, model="gpt-4-turbo")
print(response)
Replace the OpenAI SDK
许多第三方库可以使用OpenAI SDK调用他们的模型,比如 [Deepseek](https://www.deepseek.com/)。在pne中,你可以直接使用 `pne.chat()` 函数调用这些模型,不需要使用OpenAI SDK,并且提供了增强功能以简化开发难度。使用模型中的 `openai/xxx` 提供者前缀,就可以使用OpenAI模型进行调用。
```python
import os
import promptulate as pne
os.environ["DEEPSEEK_API_KEY"] = "your api key"
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "How are you?"},
]
response = pne.chat(
messages=messages,
model="openai/deepseek-chat",
)
print(response)
结构化输出
稳健的输出格式是LLM应用开发的基本基础。我们希望LLMs能够返回稳定的数据。使用pne,你可以轻松地执行格式化输出。在以下示例中,我们使用Pydantic的BaseModel来封装需要返回的数据结构。
from typing import List
import promptulate as pne
from pydantic import BaseModel, Field
class LLMResponse(BaseModel):
provinces: List[str] = Field(description="List of provinces' names")
resp: LLMResponse = pne.chat("Please tell me all provinces in China.", output_schema=LLMResponse)
print(resp)
输出:
provinces=['安徽', '福建', '甘肃', '广东', '贵州', '海南', '河北', '黑龙江', '河南', '湖北', '湖南', '江苏', '江西', '吉林', '辽宁', '青海', '陕西', '山东', '山西', '四川', '云南', '浙江', '台湾', '广西', '内蒙古', '宁夏', '新疆', '西藏', '北京', '重庆', '上海', '天津', '香港', '澳门']
具有规划、工具使用和反思功能的代理
此外,受 Plan-and-Solve 论文的影响,pne还允许开发人员构建能够通过规划、推理和行动处理复杂问题的代理。通过使用 enable_plan
参数,可以激活代理的规划能力。
在这个例子中,我们使用 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("what is the hometown of the 2024 Australia open winner?", model="gpt-4-1106-preview", enable_plan=True)
输出:
[代理] 助理代理开始...
[用户指令] 2024年澳大利亚公开赛冠军的家乡是哪里?
[计划] {"目标": ["找到2024年澳大利亚公开赛冠军的家乡"], "任务": [{"任务编号": 1, "描述": "确定2024年澳大利亚公开赛的冠军。"}, {"任务编号": 2, "描述": "研究已确定的冠军,找到他们的出生地或家乡。"}, {"任务编号": 3, "描述": "记录2024年澳大利亚公开赛冠军的家乡。"}], "下一任务编号": 1}
[代理] 工具代理开始...
[用户指令] 确定2024年澳大利亚公开赛的冠军。
[思考] 由于当前日期是2024年3月26日,而澳大利亚公开赛通常在1月份举行,该赛事今年可能已经结束。为了确定冠军,我应该使用Tavily搜索工具来查找关于2024年澳大利亚公开赛冠军的最新信息。
[操作] tavily_search_results_json 参数: {'查询': '2024年澳大利亚公开赛冠军'}
[观察] [{'网址': 'https://ausopen.com/articles/news/sinner-winner-italian-takes-first-major-ao-2024', '内容': '这名灵活的右手选手,职业生涯中仅一次在两盘落后的情况下胜出,现在成为继1976年阿德里亚诺·帕纳塔之后,第二位在大满贯单打中夺冠的意大利男选手。在击败安德烈·卢布列夫、10次澳网冠军诺瓦克·德约科维奇和梅德韦杰夫之后,这位意大利人成为自1991年迈克尔·斯蒂克在温布尔登夺冠以来,在大满贯最后三场比赛中击败前五名对手的最年轻球员— 这在辛纳出生几个星期之前发生。他通过一个ACE球挽救了唯一一个破发点,并帮助自己在压力下成功破发梅德韦杰夫,通过一个巨大的正手击打迫使经验更加丰富的对手出现失误,赢得了第四盘,将比赛拖入决胜盘。让罗德·拉沃球场的观众兴奋不已的是,在梅德韦杰夫以5-3即将赢得第二盘时,辛纳凭借一对出色的通过球创造了破发点机会,这时梅德韦杰夫以他的耐心化解了这一切,引发对手的正手失误。”我们每天都在努力变得更好,即使是在比赛期间,我们也在努力变得更强大,尝试更好地理解每一个情况,我很高兴你们在那里支持我,理解我,因为有时候这并不容易,因为我有点年轻,”他微笑着说。梅德韦杰夫在第二盘的前三个发球局中都以零封对手,每次都施加了很大的压力,迫使这位意大利右手选手在接近12分钟的第二局中挽救了四个破发点。'}, {'网址': 'https://www.cbssports.com/tennis/news/australian-open-2024-jannik-sinner-claims-first-grand-slam-title-in-epic-comeback-win-over-daniil-medvedev/', '内容': '"\n我们的最新网球报道\n辛纳史诗般逆转赢得澳大利亚公开赛\n辛纳、萨巴伦卡赢得澳大利亚公开赛单打冠军\n2024年澳大利亚公开赛赔率,辛纳对梅德韦杰夫选择\n萨巴伦卡击败郑钦文赢得2024年澳大利亚公开赛\n2024年澳大利亚公开赛赔率,萨巴伦卡对郑钦文选择\n2024年澳大利亚公开赛赔率,梅德韦杰夫对兹维列夫选择\n澳大利亚公开赛赔率:德约科维奇对辛纳预测与下注\n澳大利亚公开赛赔率:高芙对萨巴伦卡预测与下注\n澳大利亚公开赛赔率:郑钦文对雅斯特姆斯卡预测与下注\n尼克·克耶高斯透露他正在考虑退役\n© 2004-2024 CBS Interactive. 亚尼克·辛纳首次夺得大满贯冠军,史诗般逆转击败梅德韦杰夫\n辛纳, 22岁,从两盘落后到成为历史上第三位夺得大满贯男子单打冠军的意大利人。在将近四个小时的比赛中,辛纳从两盘落后的状况下逆转,以6-3, 6-3, 6-4, 6-4, 6-3赢得了他的首个大满贯冠军。辛纳成为自1976年以来首位赢得澳大利亚公开赛的意大利男选手,以及第八位在大满贯决赛中从两盘落后成功逆转的男选手。\n他在对阵德约科维奇之前没有失掉一盘,而击败德约科维奇本身就是一项成就,因为德约科维奇在澳大利亚公开赛上有33场连胜,在墨尔本从未输掉过半决赛。\n@janniksin • @wwos • @espn • @eurosport • @wowowtennis pic.twitter.com/DTCIqWoUoR\n“我们每天都在努力变得更好,即使是在比赛期间,尽力变得更强大并更好地理解情况,”辛纳说。'}, {'网址': 'https://www.bbc.com/sport/tennis/68120937', '内容': '直播比分、结果和比赛顺序\n提醒:获取网球新闻发送到你的手机\n相关话题\n热门故事\n足总杯:布莱克本流浪者对雷克瑟姆 - 现场文本解说\n俄罗斯滑冰选手瓦莉娃因兴奋剂被禁赛四年\n阿尔特塔关于与巴塞罗那的连接是“完全不真实的”\n在BBC其他地方\n假冒色情丑闻背后的真相\n包含前所未见的警方录像和案件核心警员的采访\n他们的父亲和叔叔杀死了纳粹战犯?\n 一桩关于三个兄弟寻找真相的真实谋杀悬案\n乘坐世界上最快的飞机是什么感觉?\n带你幕后看协和飞机的超音速故事\n有毒的爱,冷酷的野心和令人震惊的背叛\n《告诉我谎言》讲述了一个充满难以置信后果的激情大学恋情...\n "\n马拉松选手梅德韦杰夫精疲力竭\n梅德韦杰夫是首位在大满贯决赛中两盘领先后输掉比赛的球员\n很多有大满贯决赛经验的球员都谈到了这种场合有多么不同,尤其是第一次参加的时候,可能会令人难以承受。\n亚尼克·辛纳在墨尔本决赛中击败梅德韦杰夫\n亚尼克·辛纳是自2008年诺瓦克·德约科维奇以来赢得澳大利亚公开赛男单冠军的最年轻选手\n亚尼克·辛纳用一场不寻常的逆转击败梅德韦杰夫,赢得了他期待已久的澳大利亚公开赛冠军。\n "\n辛纳2024年开年状态出色\n辛纳赢得了自2005年以来第一个没有费德勒、纳达尔或德约科维奇参加的澳大利亚公开赛男单决赛\n2024年初,随着上赛季末的出色表现,辛纳成为了大满贯冠军讨论的焦点。\n'}]
[执行结果] {'思考': "搜索结果提供了一致的信息,关于2024年澳大利亚公开赛的冠军。多处提到了亚尼克·辛纳作为冠军,确认了用户问题的答案。", '行动名称': '完成', '行动参数': {'内容': '亚尼克·辛纳赢得了2024年澳大利亚公开赛。'}}
[执行] 执行结束。
[修订计划] {"目标": ["找到2024年澳大利亚公开赛冠军的家乡"], "任务": [{"任务编号": 2, "描述": "研究亚尼克·辛纳,找到他的出生地或家乡。"}, {"任务编号": 3, "描述": "记录2024年澳大利亚公开赛冠军亚尼克·辛纳的家乡。"}], "下一任务编号": 2}
[代理] 工具代理开始...
[用户指令] 研究亚尼克·辛纳,找到他的出生地或家乡。
[思考] 要找到亚尼克·辛纳的出生地或家乡,我应该使用搜索工具查找最新和最准确的信息。
[操作] tavily_search_results_json 参数: {'查询': '亚尼克·辛纳 出生地 家乡'}
[观察] [{'网址': 'https://www.sportskeeda.com/tennis/jannik-sinner-nationality', '内容': "在杯赛半决赛中,辛纳连续第三次面对德约科维奇,并成为第一个在单打比赛中战胜他的球员。亚尼克·辛纳的国籍\n亚尼克·辛纳是意大利人,出生在因尼兴,这是位于意大利北部主要讲德语的南蒂罗尔地区的一个小镇。亚尼克·辛纳在2023年的加拿大公开赛上赢得了他的第一个大师1000冠军,在决赛中击败了亚历克斯·德·米纳尔。\n除了在2024年墨尔本公园的光辉胜利外,亚尼克·辛纳在大满贯的最佳表现是在2023年温布尔登锦标赛,他闯入了半决赛。2020年,辛纳成为继2006年诺瓦克·德约科维奇之后最年轻的打入法国公开赛四分之一决赛的选手。"}, {'网址': 'https://en.wikipedia.org/wiki/Jannik_Sinner', '内容': "在2023年澳大利亚公开赛,辛纳在第四轮输给了最终的亚军斯特凡诺斯·西西帕斯, 87 \n辛纳赢得了他本人在蒙彼利埃的第七个冠军,成为自2022年10月同胞洛伦佐·穆塞蒂在那不勒斯夺冠以来,第一个在不失一盘的情况下赢得巡回赛冠军的球员。 88 \n在ABN AMRO公开赛上,他击败头号种子、世界排名第三的斯特凡诺斯·西西帕斯,为澳大利亚公开赛失利复仇,取得了他有史以来最大的胜利。 89 \n在辛辛那提大师赛,他在领先一盘、一局和两个赛点的情况下,第三轮输给了菲利克斯·奥热·阿利亚西姆。 76 \n他在美网11号种子,在四盘击败布兰登·中岛后,打进了第四轮。 77 接下来,他在一场接近四小时的五盘比赛中击败伊利亚·伊瓦什卡,首次打进这项大满贯的四分之一决赛。 78 比赛持续五小时26分钟,是辛纳迄今为止职业生涯最长的比赛,也是比赛历史上第五长、赛季第二长的比赛,仅次于安迪·穆雷在澳大利亚公开赛上对阵塔纳西·科基纳基斯的比赛。 101 \n他在温布尔登连续两次打进四分之一决赛后,击败胡安·曼努埃尔·塞伦杜洛、迭戈·施瓦茨曼、昆廷·哈勒斯和丹尼尔·埃拉希·加兰。 102 他在击败罗曼·萨菲林后,首次打进了大满贯半决赛,随后在半决赛中输给了职业生涯对手、头号种子卡洛斯·阿尔卡拉斯。 103 在随后的半决赛中,他被职业生涯对手、头号种子卡洛斯·阿尔卡拉斯直落三盘击败,阿尔卡拉斯在比赛后重新登上世界第一。 92 在迈阿密,他在击败格里戈尔·季米特洛夫和安德烈·鲁布列夫后,第三次打进了这项赛事的四分之一决赛,从而重返世界排名前十名。 在决赛中,他从两盘落后的情况下逆转击败达尼尔·梅德韦杰夫,成为首位赢得澳大利亚公开赛单打冠军的意大利选手,无论男女,并成为第三位赢得大满贯的男选手(其中两位是在公开赛时代),是第一个在48年内赢得大满贯的意大利人。 8 122 '}, {'网址': 'https://www.thesportreview.com/biography/jannik-sinner/', '内容': '出生日期:2001年8月16日\n年龄:22岁\n出生地:意大利圣坎迪多\n国籍:意大利\n身高:188公分 / 6英尺2英寸\n体重:76公斤/ 167磅\n惯用右手\n转职业:2018年\n职业奖金:4896338 美元\nInstagram:@janniksin\n这位22岁的选手在2018年转职业后迅速在巡回赛上崭露头角,并在2019年首次跻身世界排名前100名。辛纳(照片:迪拜免税网球锦标赛)辛纳在赛季结束时排名世界第78位,成为继2003年拉斐尔·纳达尔之后最年轻的赛季结束时排名前80的选手。然后,意大利人以优雅的姿态结束了2019赛季,获得2019年下一代ATP决赛的参赛资格,并在决赛中击败了阿莱克斯·德·米纳尔赢得了比赛。辛纳在2019年美网首次大满贯正选赛亮相,在通过资格赛进入第一轮后输给了斯坦·瓦林卡。当被要求指出他发展过程中的一些关键人物时,辛纳回答说:“首先,我的家人,他们一直帮助我并给了我信心,让我在13岁半、14岁时改变了我的生活。'}]
[执行结果] {'思考': '搜索结果提供了两个不同的出生地给亚尼克·辛纳:因尼兴和圣坎迪多。事实上这是同一个地方,因为圣坎迪多是意大利名,因尼兴是德语名。由于用户问的是出生地或家乡,我现在可以提供此信息。', '行动名称': '完成', '行动参数': {'内容': '亚尼克·辛纳出生于意大利圣坎迪多(意大利名)/ 因尼兴(德语名)。'}}
[执行] 执行结束。
[修订计划] {"目标": ["找到2024年澳大利亚公开赛冠军的家乡"], "任务": [], "下一任务编号": null}
[代理结果] 亚尼克·辛纳出生于意大利圣坎迪多(意大利名)/ 因尼兴(德语名)。
[代理] 代理结束。
('目标', ['计划去巴黎旅行'])
('任务', [Task(task_id=1, description='检查护照有效性', status=<TaskStatus.TODO: 'todo'>), Task(task_id=2, description='确定旅行日期', status=<TaskStatus.TODO: 'todo'>), Task(task_id=3, description='研究并预订航班', status=<TaskStatus.TODO: 'todo'>), Task(task_id=4, description='预订住宿', status=<TaskStatus.TODO: 'todo'>), Task(task_id=5, description='计划旅行行程', status=<TaskStatus.TODO: 'todo'>), Task(task_id=6, description='调查并购买旅行保险', status=<TaskStatus.TODO: 'todo'>), Task(task_id=7, description='为旅行设定预算', status=<TaskStatus.TODO: 'todo'>), Task(task_id=8, description='打包行李', status=<TaskStatus.TODO: 'todo'>), Task(task_id=9, description='通知银行国际旅行', status=<TaskStatus.TODO: 'todo'>), Task(task_id=10, description='检查天气预报并相应打包', status=<TaskStatus.TODO: 'todo'>)])
('下一个任务编号', 1)
要获取详细信息,请查看 [入门/官方文档](https://undertone0809.github.io/promptulate/#/).
## 📚 设计原则
pne 框架的设计原则包括模块化、可扩展性、互操作性、鲁棒性、可维护性、安全性、效率和可用性。
- 模块化是指使用模块作为基本单元,允许轻松集成新组件、模型和工具。
- 可扩展性指框架能够处理大量数据、复杂任务和高并发。
- 互操作性意味着框架兼容各种外部系统、工具和服务,能够实现无缝集成和通信。
- 鲁棒性表明框架具有强大的错误处理、容错和恢复机制,以确保在各种条件下可靠运行。
- 安全性意味着框架实施了严格的措施,以防止未经授权的访问和恶意行为。
- 效率是指优化框架的性能、资源使用和响应时间,以确保流畅和快速的用户体验。
- 可用性意味着框架使用用户友好的界面和清晰的文档,使其易于使用和理解。
遵循这些原则并应用最新的人工智能技术,`pne` 旨在提供一个强大而灵活的框架,用于创建自动化代理。
## 💌 联系方式
获取更多信息,请联系:[zeeland4work@gmail.com](mailto:zeeland4work@gmail.com)
查看任何变更日志,请描述 [Telegram 频道](https://t.me/zeeland0809)
## ⭐ 贡献
感谢您对我们开源项目的兴趣。我们提供了一个 [开发者指南](https://undertone0809.github.io/promptulate/#/other/contribution),概述了如何贡献给 Promptulate 的步骤。请参考此指南以确保顺利合作和成功贡献。此外,您可以查看 [当前开发计划](https://undertone0809.github.io/promptulate/#/other/plan) 以了解最新的开发进展 🤝🚀