
英語中文
Prightulate是Cogit Lab製作的AI代理應用程序開發框架,該框架為開發人員提供了一種通過Pythonic開發範式構建代理應用程序的極其簡潔,有效的方法。董事會的核心理念是藉用和整合開源社區的智慧,結合了各種開發框架的亮點,以降低進入障礙並統一開發人員之間的共識。借助提示,您可以使用最簡潔的代碼來操縱LLM,Agent,Tool,Tool,Rag等的組件,因為只需幾行代碼即可輕鬆完成大多數任務。
pne.chat功能將所有內容都放在您的掌握之中,以封裝所有基本功能。下圖顯示了promptulate的核心體系結構:

啟動的核心概念是,我們希望提供一種簡單,pythonic且有效的方法來構建AI應用程序,這意味著您無需花費大量時間學習框架。我們希望使用pne.chat()完成大部分工作,您可以輕鬆地使用幾行代碼構建任何AI應用程序。
在下面,
pne代表提示,這是提示的暱稱。p和e分別代表升降機的開始和結尾,n代表9,這是p和e之間九個字母的速記。
啟動集成了Litellm的功能,支持市場上幾乎所有類型的大型模型,包括但不限於以下模型:
| 提供者 | 完成 | 流 | 異步完成 | 異步流 | 異步嵌入 | 異步圖像生成 |
|---|---|---|---|---|---|---|
| Openai | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| azure | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| AWS -Sagemaker | ✅ | ✅ | ✅ | ✅ | ✅ | |
| AWS-基岩 | ✅ | ✅ | ✅ | ✅ | ✅ | |
| Google -vertex_ai [gemini] | ✅ | ✅ | ✅ | ✅ | ||
| Google -Palm | ✅ | ✅ | ✅ | ✅ | ||
| Google AI Studio -Gemini | ✅ | ✅ | ||||
| Mistral AI API | ✅ | ✅ | ✅ | ✅ | ✅ | |
| Cloudflare AI工人 | ✅ | ✅ | ✅ | ✅ | ||
| 共同 | ✅ | ✅ | ✅ | ✅ | ✅ | |
| 人類 | ✅ | ✅ | ✅ | ✅ | ||
| 擁抱面 | ✅ | ✅ | ✅ | ✅ | ✅ | |
| 複製 | ✅ | ✅ | ✅ | ✅ | ||
| 在一起_ai | ✅ | ✅ | ✅ | ✅ | ||
| OpenRouter | ✅ | ✅ | ✅ | ✅ | ||
| AI21 | ✅ | ✅ | ✅ | ✅ | ||
| 貝特尼 | ✅ | ✅ | ✅ | ✅ | ||
| vllm | ✅ | ✅ | ✅ | ✅ | ||
| NLP_Cloud | ✅ | ✅ | ✅ | ✅ | ||
| Aleph Alpha | ✅ | ✅ | ✅ | ✅ | ||
| 花瓣 | ✅ | ✅ | ✅ | ✅ | ||
| 霍拉馬 | ✅ | ✅ | ✅ | ✅ | ||
| Deepinfra | ✅ | ✅ | ✅ | ✅ | ||
| 困惑 | ✅ | ✅ | ✅ | ✅ | ||
| GROQ AI | ✅ | ✅ | ✅ | ✅ | ||
| 任何規模 | ✅ | ✅ | ✅ | ✅ | ||
| 航行AI | ✅ | |||||
| Xinference [Xorbits推論] | ✅ |
PEN的強大模型支持使您可以輕鬆構建任何第三方模型調用。
現在,讓我們看看如何使用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相比,速度和價格提高了。
您可以在任何提示應用程序中使用它的可用多模式功能!
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 )使用provider/model_name調用模型,您可以輕鬆構建任何第三方模型調用。
有關更多型號,請訪問Litellm文檔。
您還可以在入門/官方文檔中查看如何使用pne.chat() 。
構建pne的精簡聊天機器人
構建PNE的Gradio Chatbot
用代理構建數學應用程序
Groq,Llama3,簡化構建應用程序
使用簡化和PNE構建知識圖
使用PNE+簡化構建聊天機器人與GitHub Repo聊天
使用代理[Steamlit,toolagent,Hooks]構建數學應用程序。
ROS2的MulitModal機器人代理框架,並提示[代理]
使用shatlit和pne比較不同的模型一個操場。 [簡化]
GCOP:您的GIT AI副駕駛,基於提示
pip install -U pne注意:您的Python版本應為3.8或更高。
即使PNE提供了許多模塊,在90%的LLM應用程序開發方案中,您只需要使用PNE.CHAT()函數,因此您只需要從聊天開始即可了解PNE的使用,並且當您需要使用其他模塊時,您就可以了解更多有關其他模塊的功能和使用。
您可以使用pne.chat()像Openai一樣聊天。 OpenAI CHAT API文檔: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 )許多第三方庫可以使用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" : "You are a helpful assistant." },
{ "role" : "user" , "content" : "How are you?" },
]
response = pne . chat (
messages = messages ,
model = "openai/deepseek-chat" ,
)
print ( response )強大的輸出格式是LLM應用程序開發的基本基礎。我們希望LLM可以返回穩定的數據。使用PNE,您可以輕鬆執行格式的輸出。在下面的示例中,我們使用Pydantic的基本模型封裝了需要返回的數據結構。
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=['Anhui', 'Fujian', 'Gansu', 'Guangdong', 'Guizhou', 'Hainan', 'Hebei', 'Heilongjiang', 'Henan', 'Hubei', 'Hunan', 'Jiangsu', 'Jiangxi', 'Jilin', 'Liaoning', 'Qinghai', 'Shaanxi', 'Shandong', 'Shanxi', 'Sichuan', 'Yunnan', 'Zhejiang', 'Taiwan', 'Guangxi', 'Nei Mongol', 'Ningxia', 'Xinjiang', 'Xizang', 'Beijing', 'Chongqing', 'Shanghai', 'Tianjin', 'Hong Kong', 'Macao']
此外,受計劃和解決論文的影響,PNE還允許開發人員構建能夠通過計劃,推理和行動來處理複雜問題的代理。可以使用enable_plan參數激活代理的計劃能力。

在此示例中,我們將Tavely用作搜索引擎,這是用於在網絡上搜索信息的強大工具。要使用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 )輸出:
[Agent] Assistant Agent start...
[User instruction] what is the hometown of the 2024 Australia open winner?
[Plan] {"goals": ["Find the hometown of the 2024 Australian Open winner"], "tasks": [{"task_id": 1, "description": "Identify the winner of the 2024 Australian Open."}, {"task_id": 2, "description": "Research the identified winner to find their place of birth or hometown."}, {"task_id": 3, "description": "Record the hometown of the 2024 Australian Open winner."}], "next_task_id": 1}
[Agent] Tool Agent start...
[User instruction] Identify the winner of the 2024 Australian Open.
[Thought] Since the current date is March 26, 2024, and the Australian Open typically takes place in January, the event has likely concluded for the year. To identify the winner, I should use the Tavily search tool to find the most recent information on the 2024 Australian Open winner.
[Action] tavily_search_results_json args: {'query': '2024 Australian Open winner'}
[Observation] [{'url': 'https://ausopen.com/articles/news/sinner-winner-italian-takes-first-major-ao-2024', 'content': 'The agile right-hander, who had claimed victory from a two-set deficit only once previously in his young career, is the second Italian man to achieve singles glory at a major, following Adriano Panatta in1976.With victories over Andrey Rublev, 10-time AO champion Novak Djokovic, and Medvedev, the Italian is the youngest player to defeat top 5 opponents in the final three matches of a major since Michael Stich did it at Wimbledon in 1991 – just weeks before Sinner was born.n He saved the only break he faced with an ace down the tee, and helped by scoreboard pressure, broke Medvedev by slamming a huge forehand to force an error from his more experienced rival, sealing the fourth set to take the final to a decider.n Sensing a shift in momentum as Medvedev served to close out the second at 5-3, Sinner set the RLA crowd alight with a pair of brilliant passing shots en route to creating a break point opportunity, which Medvedev snuffed out with trademark patience, drawing a forehand error from his opponent. “We are trying to get better every day, even during the tournament we try to get stronger, trying to understand every situation a little bit better, and I’m so glad to have you there supporting me, understanding me, which sometimes it’s not easy because I am a little bit young sometimes,” he said with a smile.n Medvedev, who held to love in his first three service games of the second set, piled pressure on the Italian, forcing the right-hander to produce his best tennis to save four break points in a nearly 12-minute second game.n'}, {'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': '"nOur Latest Tennis StoriesnSinner makes epic comeback to win Australian OpennSinner, Sabalenka win Australian Open singles titlesn2024 Australian Open odds, Sinner vs. Medvedev picksnSabalenka defeats Zheng to win 2024 Australian Openn2024 Australian Open odds, Sabalenka vs. Zheng picksn2024 Australian Open odds, Medvedev vs. Zverev picksnAustralian Open odds: Djokovic vs. Sinner picks, betsnAustralian Open odds: Gauff vs. Sabalenka picks, betsnAustralian Open odds: Zheng vs. Yastremska picks, betsnNick Kyrgios reveals he's contemplating retirementn© 2004-2024 CBS Interactive. Jannik Sinner claims first Grand Slam title in epic comeback win over Daniil MedvedevnSinner, 22, rallied back from a two-set deficit to become the third ever Italian Grand Slam men's singles championnAfter almost four hours, Jannik Sinner climbed back from a two-set deficit to win his first ever Grand Slam title with an epic 3-6, 3-6, 6-4, 6-4, 6-3 comeback victory against Daniil Medvedev. Sinner became the first Italian man to win the Australian Open since 1976, and just the eighth man to successfully come back from two sets down in a major final.n He did not drop a single set until his meeting with Djokovic, and that win in itself was an accomplishment as Djokovic was riding a 33-match winning streak at the Australian Open and had never lost a semifinal in Melbourne.n @janniksin • @wwos • @espn • @eurosport • @wowowtennis pic.twitter.com/DTCIqWoUoRn"We are trying to get better everyday, and even during the tournament, trying to get stronger and understand the situation a little bit better," Sinner said.'}, {'url': 'https://www.bbc.com/sport/tennis/68120937', 'content': 'Live scores, results and order of playnAlerts: Get tennis news sent to your phonenRelated TopicsnTop StoriesnFA Cup: Blackburn Rovers v Wrexham - live text commentarynRussian skater Valieva given four-year ban for dopingnLinks to Barcelona are 'totally untrue' - ArtetanElsewhere on the BBCnThe truth behind the fake grooming scandalnFeaturing unseen police footage and interviews with the officers at the heart of the casenDid their father and uncle kill Nazi war criminals?n A real-life murder mystery following three brothers in their quest for the truthnWhat was it like to travel on the fastest plane?nTake a behind-the-scenes look at the supersonic story of the ConcordenToxic love, ruthless ambition and shocking betrayalnTell Me Lies follows a passionate college relationship with unimaginable consequences...n "nMarathon man Medvedev runs out of steamnMedvedev is the first player to lose two Grand Slam finals after winning the opening two setsnSo many players with the experience of a Grand Slam final have talked about how different the occasion can be, particularly if it is the first time, and potentially overwhelming.n Jannik Sinner beats Daniil Medvedev in Melbourne finalnJannik Sinner is the youngest player to win the Australian Open men's title since Novak Djokovic in 2008nJannik Sinner landed the Grand Slam title he has long promised with an extraordinary fightback to beat Daniil Medvedev in the Australian Open final.n "nSinner starts 2024 in inspired formnSinner won the first Australian Open men's final since 2005 which did not feature Roger Federer, Rafael Nadal or Novak DjokovicnSinner was brought to the forefront of conversation when discussing Grand Slam champions in 2024 following a stunning end to last season.n'}]
[Execute Result] {'thought': "The search results have provided consistent information about the winner of the 2024 Australian Open. Jannik Sinner is mentioned as the winner in multiple sources, which confirms the answer to the user's question.", 'action_name': 'finish', 'action_parameters': {'content': 'Jannik Sinner won the 2024 Australian Open.'}}
[Execute] Execute End.
[Revised Plan] {"goals": ["Find the hometown of the 2024 Australian Open winner"], "tasks": [{"task_id": 2, "description": "Research Jannik Sinner to find his place of birth or hometown."}, {"task_id": 3, "description": "Record the hometown of Jannik Sinner, the 2024 Australian Open winner."}], "next_task_id": 2}
[Agent] Tool Agent start...
[User instruction] Research Jannik Sinner to find his place of birth or hometown.
[Thought] To find Jannik Sinner's place of birth or hometown, I should use the search tool to find the most recent and accurate information.
[Action] tavily_search_results_json args: {'query': 'Jannik Sinner place of birth hometown'}
[Observation] [{'url': 'https://www.sportskeeda.com/tennis/jannik-sinner-nationality', 'content': "During the semifinal of the Cup, Sinner faced Djokovic for the third time in a row and became the first player to defeat him in a singles match. Jannik Sinner NationalitynJannik Sinner is an Italian national and was born in Innichen, a town located in the mainly German-speaking area of South Tyrol in northern Italy. A. Jannik Sinner won his maiden Masters 1000 title at the 2023 Canadian Open defeating Alex de Minaur in the straight sets of the final.n Apart from his glorious triumph at Melbourne Park in 2024, Jannik Sinner's best Grand Slam performance came at the 2023 Wimbledon, where he reached the semifinals. In 2020, Sinner became the youngest player since Novak Djokovic in 2006 to reach the quarter-finals of the French Open."}, {'url': 'https://en.wikipedia.org/wiki/Jannik_Sinner', 'content': "At the 2023 Australian Open, Sinner lost in the 4th round to eventual runner-up Stefanos Tsitsipas in 5 sets.[87]nSinner then won his seventh title at the Open Sud de France in Montpellier, becoming the first player to win a tour-level title in the season without having dropped a single set and the first since countryman Lorenzo Musetti won the title in Naples in October 2022.[88]nAt the ABN AMRO Open he defeated top seed and world No. 3 Stefanos Tsitsipas taking his revenge for the Australian Open loss, for his biggest win ever.[89] At the Cincinnati Masters, he lost in the third round to Félix Auger-Aliassime after being up a set, a break, and 2 match points.[76]nSeeded 11th at the US Open, he reached the fourth round after defeating Brandon Nakashima in four sets.[77] Next, he defeated Ilya Ivashka in a five set match lasting close to four hours to reach the quarterfinals for the first time at this Major.[78] At five hours and 26 minutes, it was the longest match of Sinner's career up until this point and the fifth-longest in the tournament history[100] as well as the second longest of the season after Andy Murray against Thanasi Kokkinakis at the Australian Open.[101]nHe reached back to back quarterfinals in Wimbledon after defeating Juan Manuel Cerundolo, Diego Schwartzman, Quentin Halys and Daniel Elahi Galan.[102] He then reached his first Major semifinal after defeating Roman Safiullin, before losing to Novak Djokovic in straight sets.[103] In the following round in the semifinals, he lost in straight sets to career rival and top seed Carlos Alcaraz who returned to world No. 1 following the tournament.[92] In Miami, he reached the quarterfinals of this tournament for a third straight year after defeating Grigor Dimitrov and Andrey Rublev, thus returning to the top 10 in the rankings at world No. In the final, he came from a two-set deficit to beat Daniil Medvedev to become the first Italian player, male or female, to win the Australian Open singles title, and the third man to win a Major (the second of which is in the Open Era), the first in 48 years.[8][122]"}, {'url': 'https://www.thesportreview.com/biography/jannik-sinner/', 'content': '• Date of birth: 16 August 2001n• Age: 22 years oldn• Place of birth: San Candido, Italyn• Nationality: Italiann• Height: 188cm / 6ft 2insn• Weight: 76kg / 167lbsn• Plays: Right-handedn• Turned Pro: 2018n• Career Prize Money: US$ 4,896,338n• Instagram: @janniksinnThe impressive 22-year-old turned professional back in 2018 and soon made an impact on the tour, breaking into the top 100 in the world rankings for the first time in 2019.n Jannik Sinner (Photo: Dubai Duty Free Tennis Championships)nSinner ended the season as number 78 in the world, becoming the youngest player since Rafael Nadal in 2003 to end the year in the top 80.n The Italian then ended the 2019 season in style, qualifying for the 2019 Next Gen ATP Finals and going on to win the tournament with a win over Alex de Minaur in the final.n Sinner then reached the main draw of a grand slam for the first time at the 2019 US Open, when he came through qualifying to reach the first round, where he lost to Stan Wawrinka.n Asked to acknowledge some of the key figures in his development, Sinner replied: “I think first of all, my family who always helped me and gave me the confidence to actually change my life when I was 13-and-a-half, 14 years old.n'}]
[Execute Result] {'thought': 'The search results have provided two different places of birth for Jannik Sinner: Innichen and San Candido. These are actually the same place, as San Candido is the Italian name and Innichen is the German name for the town. Since the user asked for the place of birth or hometown, I can now provide this information.', 'action_name': 'finish', 'action_parameters': {'content': 'Jannik Sinner was born in San Candido (Italian) / Innichen (German), Italy.'}}
[Execute] Execute End.
[Revised Plan] {"goals": ["Find the hometown of the 2024 Australian Open winner"], "tasks": [], "next_task_id": null}
[Agent Result] Jannik Sinner was born in San Candido (Italian) / Innichen (German), Italy.
[Agent] Agent End.
在代理開發的情況下,我們通常需要分割許多代理的原子成分,以實現更好的自定義。 PNE提供了霧化代理組件,例如計劃者。以下示例顯示了使用單獨的計劃者組件進行任務計劃。
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目的是為創建自動化代理提供一個強大而靈活的框架。
有關更多信息,請聯繫:[email protected]
查看任何變換的內容,描述電報頻道
我們感謝您有興趣為我們的開源計劃做出貢獻。我們為開發人員提供了指南,概述了為提示做出貢獻的步驟。請參閱本指南,以確保平穩的協作和成功的貢獻。此外,您可以查看當前的開發計劃以查看最新的發展進展嗎?