Mentals AI เป็นเครื่องมือที่ออกแบบมาสำหรับการสร้างและดำเนินการตัวแทนที่มี loops memory และ tools ต่าง ๆ ทั้งหมดผ่านไฟล์ markdown ที่ตรงไปตรงมาพร้อมส่วนขยาย. GEN คิดว่าไฟล์ตัวแทนเป็นไฟล์ที่เรียกใช้งานได้ คุณมุ่งเน้นไปที่ตรรกะของเอเจนต์โดยสิ้นเชิงกำจัดความจำเป็นในการเขียนรหัสนั่งร้านใน Python หรือภาษาอื่น ๆ โดยพื้นฐานแล้วมันกำหนดกรอบพื้นฐานสำหรับแอปพลิเคชัน AI ในอนาคตหรือไม่?
บันทึก
เกมโซ่คำในวงดนตรีที่ควบคุมโดย LLM: 
NLOP - การใช้ภาษาธรรมชาติ
หรือกรณีการใช้งานที่ซับซ้อนมากขึ้น:
| การโต้ตอบหลายตัวแทน | - ตัวแทนเครื่องกำเนิดอวกาศ Invaders | - ตัวแทนเครื่องกำเนิดไฟฟ้า 2D Platformer |
|---|---|---|
![]() | ![]() | ![]() |
หรือช่วยเนื้อหา:
ตัวอย่างทั้งหมดข้างต้นอยู่ในโฟลเดอร์ตัวแทน
บันทึก
การสนับสนุน LLAMA3 มีให้สำหรับผู้ให้บริการโดยใช้ OpenAI API ที่เข้ากันได้
เริ่มต้นด้วยการรักษาความปลอดภัยคีย์ OpenAI API ผ่านการสร้างบัญชี OpenAI หากคุณมีคีย์ API อยู่แล้วให้ข้ามขั้นตอนนี้
ข้อกำหนดเบื้องต้น
ก่อนที่จะสร้างโครงการตรวจสอบให้แน่ใจว่ามีการติดตั้งการพึ่งพาต่อไปนี้:
ขึ้นอยู่กับระบบปฏิบัติการของคุณคุณสามารถติดตั้งเหล่านี้ได้โดยใช้คำสั่งต่อไปนี้:
ลินเวกซ์
sudo apt-get update
sudo apt-get install libcurl4-openssl-dev libfmt-dev libpoppler-devแม็กอส
brew update
brew install curl fmt popplerหน้าต่าง
สำหรับ Windows ขอแนะนำให้ใช้ VCPKG หรือตัวจัดการแพ็คเกจที่คล้ายกัน:
vcpkg install curl fmt popplerการติดตั้ง PGVECTOR
บันทึก
ในสาขา main คุณสามารถข้ามขั้นตอนนี้ได้
โคลนที่เก็บ
git clone https://github.com/turing-machines/mentals-ai
cd mentals-aiการกำหนดค่า
วางคีย์ API ของคุณในไฟล์ config.toml :
[llm]
# OpenAI
api_key = " "
endpoint = " https://api.openai.com/v1 "
model = " gpt-4o "สร้างโครงการ
makeวิ่ง
./build/mentals agents/loop.gen -dMentals AI แยกแยะตัวเองจากกรอบอื่น ๆ ในสามวิธีที่สำคัญ:
Agent Executor ? ทำงานผ่านวงวนซ้ำ LLM กำหนดขั้นตอนต่อไป: การเลือกคำแนะนำ (พรอมต์) และการจัดการข้อมูลตามลูปก่อนหน้า กระบวนการตัดสินใจแบบเรียกซ้ำนี้เป็นส่วนสำคัญของระบบของเราที่ระบุไว้ใน mentals_system.promptMarkdown ซึ่งไม่จำเป็นต้องใช้ภาษาการเขียนโปรแกรมแบบดั้งเดิม อย่างไรก็ตาม Python สามารถรวมเข้ากับสคริปต์ Markdown ของตัวแทนได้โดยตรงหากจำเป็นTree of Thoughts , ReAct , Self-Discovery , Auto-CoT และอื่น ๆ นอกจากนี้ยังสามารถเชื่อมโยงเฟรมเวิร์กเหล่านี้เข้าด้วยกันในลำดับที่ซับซ้อนมากขึ้นแม้กระทั่งการสร้างเครือข่ายของกรอบการใช้เหตุผลที่หลากหลาย ไฟล์ตัวแทนเป็นคำอธิบายข้อความของคำสั่งตัวแทนที่มีส่วนขยาย .gen
คำแนะนำเป็นองค์ประกอบพื้นฐานของตัวแทนใน Mentals ตัวแทนสามารถประกอบด้วยหนึ่งคำแนะนำหรือมากกว่าซึ่งสามารถอ้างถึงกันและกัน

คำแนะนำสามารถเขียนในรูปแบบฟรี แต่พวกเขามักจะมีชื่อที่เริ่มต้นด้วยสัญลักษณ์ # ## use: คำสั่งใช้เพื่อระบุการอ้างอิงไปยังคำแนะนำอื่น ๆ มีการอ้างอิงหลายรายการที่คั่นด้วยเครื่องหมายจุลภาค
ด้านล่างเป็นตัวอย่างที่มีสองคำแนะนำ root และ meme_explain พร้อมการอ้างอิง:
# root
## use: meme_explain
1. Create 3 memes about AGI;
2. Then do meme explain with meme per call;
3. Output memes and their explanations in a list.
# meme_explain
Explain the gist of the meme in 20 words in medieval style.
Return explanation.
ในตัวอย่างนี้คำสั่ง root เรียกคำสั่ง meme_explain การตอบสนองจาก meme_explain จะถูกส่งกลับไปยังคำสั่งที่เรียกว่าคือรูท
คำสั่งสามารถใช้พารามิเตอร์ input ซึ่งสร้างขึ้นโดยอัตโนมัติตามบริบทเมื่อมีการเรียกคำสั่ง ในการระบุข้อมูลอินพุตที่แม่นยำยิ่งขึ้นคุณสามารถใช้ พรอมต์แบบฟรีฟอร์ม ใน ## input: คำสั่งเช่นวัตถุ JSON หรือ null
ใช้เอกสารสำหรับอินพุต:
# some_instruction
## input: design document only
ใช้วัตถุ JSON เป็นอินพุต:
# duckduckgo
## input: { search_query: search query, search_limit: search limit }
Write a Python script to search in DuckDuckGo.
Simulate request headers correctly e.g. user-agent as Mozilla and Linux.
บันทึก
การเรียกใช้คำสั่งจะถูกนำไปใช้อย่างอิสระจากฟังก์ชั่นหรือการโทรเครื่องมือที่ OpenAI ทำให้การทำงานของตัวแทนด้วยโมเดลเช่น LLAMA3 การใช้งานการเรียกใช้คำสั่งนั้นโปร่งใสและรวมอยู่ในไฟล์ mentals_system.prompt
เครื่องมือเป็นคำสั่งประเภทหนึ่ง Mentals มีชุดเครื่องมือดั้งเดิมในการจัดการเอาต์พุตข้อความอินพุตผู้ใช้การจัดการไฟล์ล่าม Python คำสั่ง BASH และหน่วยความจำระยะสั้น
ถามตัวอย่างผู้ใช้:
# root
## use: user_input
Ask user name.
Then output: `Welcome, user_name!`
ตัวอย่างการจัดการไฟล์:
# root
## use: write_file, read_file
Write 'Hello world' to a file.
Then read and output file content.
รายการเครื่องมือดั้งเดิมทั้งหมดแสดงอยู่ในไฟล์ native_tools.toml
แต่ละคำสั่งมีหน่วยความจำในการทำงานของตัวเอง - บริบท เมื่อออกจากคำสั่งและเข้าสู่อีกครั้งบริบทจะถูกเก็บไว้ตามค่าเริ่มต้น ในการล้างบริบทเมื่อออกคำสั่งคุณสามารถใช้ ## keep_context: false :
# meme_explain
## keep_context: false
Explain the gist of the meme in 20 words in medieval style.
Return explanation.
โดยค่าเริ่มต้นขนาดของบริบทคำสั่งไม่ จำกัด ในการ จำกัด บริบทมีคำสั่ง ## max_context: number ที่ระบุว่าควรเก็บ number ข้อความล่าสุดเท่านั้น ข้อความเก่าจะถูกผลักออกจากบริบท คุณลักษณะนี้มีประโยชน์เมื่อคุณต้องการเก็บข้อมูลล่าสุดไว้ในบริบทเพื่อให้ข้อมูลเก่าไม่ส่งผลกระทบต่อห่วงโซ่การให้เหตุผล
# python_code_generation
## input: development tasks in a list
## use: write_file
## max_context: 5
Do all development tasks in a loop: task by task.
Save the Python code you implement in the main.py file.
หน่วยความจำระยะสั้นช่วยให้สามารถจัดเก็บผลลัพธ์ระดับกลางจากกิจกรรมของตัวแทนซึ่งสามารถใช้เพื่อการให้เหตุผลเพิ่มเติม เนื้อหาของหน่วยความจำนี้สามารถเข้าถึงได้ในบริบทคำสั่งทั้งหมด
เครื่องมือหน่วย memory ใช้ในการจัดเก็บข้อมูล เมื่อเก็บข้อมูลคำหลักและคำอธิบายของเนื้อหาจะถูกสร้างขึ้น ในตัวอย่างด้านล่างคำสั่ง meme_recall ได้รับรู้ถึง MEME เนื่องจากก่อนหน้านี้ถูกเก็บไว้ในหน่วยความจำ
# root
## use: memory, meme_recall
Come up with and memorize a meme.
Call meme recall.
# meme_recall
## input: nothing
What the meme was about?
กระแสการควบคุมซึ่งรวมถึงเงื่อนไขการเรียกร้องคำสั่งและลูป (เช่น ReAct , Auto-CoT ฯลฯ ) จะแสดงออกอย่างเต็มที่ในภาษาธรรมชาติ วิธีนี้ช่วยให้การสร้าง semantic conditions ที่โดยตรงสตรีมการแตกแขนง ตัวอย่างเช่นคุณสามารถขอให้เอเจนต์เล่นเกมโซ่คำด้วยตนเองในลูปหรือสร้างเงื่อนไขทางออกที่คลุมเครือ: exit the loop if you are satisfied with the result ที่นี่รูปแบบภาษาและบริบทของมันจะพิจารณาว่าจะดำเนินการต่อหรือหยุด ทั้งหมดนี้ทำได้โดยไม่จำเป็นต้องกำหนดตรรกะการไหลใน Python หรือภาษาการเขียนโปรแกรมอื่น ๆ
## use: execute_bash_command, software_development, quality_assurance
...
You run in a loop of "Thought", "Action", "Observation".
At the end of the loop return with the final answer.
Use "Thought" to describe your thoughts about the task
you have been asked. Use "Action" to run one of the actions
available to you. Output action as: "Action: action name to call".
"Observation" will be the result of running those actions.
Your available actions:
- `execute_bash_command` for util purposes e.g. make directory, install packages, etc.;
- `software_development` for software development and bug fixing purposes;
- `quality_assurance` for QA testing purposes.
...
แนวคิดที่อยู่เบื้องหลัง TOT คือการสร้างแนวคิดหลายประการเพื่อแก้ปัญหาแล้วประเมินคุณค่าของพวกเขา ความคิดที่มีค่าได้รับการเก็บรักษาและพัฒนาความคิดอื่น ๆ จะถูกทิ้ง
มาเป็นตัวอย่างของเกม 24 เกม ปริศนา 24 ตัวเป็นปริศนาทางคณิตศาสตร์ซึ่งมีวัตถุประสงค์เพื่อหาวิธีที่จะจัดการกับจำนวนเต็มสี่ตัวเพื่อให้ผลลัพธ์สุดท้ายคือ 24 ก่อนอื่นเรากำหนดคำสั่งที่สร้างและจัดการโครงสร้างข้อมูลต้นไม้ แบบจำลองรู้ว่าต้นไม้คืออะไรและสามารถแสดงได้ในรูปแบบใด ๆ ตั้งแต่ข้อความธรรมดาไปจนถึง XML/JSON หรือรูปแบบที่กำหนดเองใด ๆ
ในตัวอย่างนี้เราจะใช้รูปแบบข้อความธรรมดา:
# tree
## input: e.g. "add to node `A` child nodes `B` and `C`", "remove node `D` with all branches", etc.
## use: memory
## keep_context: false
Build/update tree structure in formatted text.
Update the tree structure within the specified action;
Memorize final tree structure.
ต่อไปเราต้องเริ่มต้นต้นไม้ด้วยข้อมูลเริ่มต้นมาเริ่มต้นด้วยคำสั่งรูท:
# root
## use: tree
Input: 4 5 8 2
Generate 8 possible next steps.
Store all steps in the tree as nodes e.g.
Node value 1: "2 + 8 = 10 (left: 8 10 14)"
Node value 2: "8 / 2 = 4 (left: 4 8 14)"
etc.
การเรียกคำสั่งรูทจะแนะนำ 8 ขั้นตอนต่อไปที่เป็นไปได้ในการคำนวณด้วยตัวเลข 2 ตัวแรกและจัดเก็บขั้นตอนเหล่านี้เป็นโหนดต้นไม้ การทำงานเพิ่มเติมโดยตัวแทนผลลัพธ์ในการสร้างต้นไม้ที่สะดวกสำหรับแบบจำลองที่จะเข้าใจและอนุมานคำตอบสุดท้าย
4 5 8 2
├── 4 + 5 = 9 (left: 9, 8, 2)
│ └── discard
├── 4 + 8 = 12 (left: 12, 5, 2)
│ └── discard
├── 4 + 2 = 6 (left: 6, 5, 8)
│ └── discard
├── 5 + 8 = 13 (left: 13, 4, 2)
│ └── discard
├── 5 + 2 = 7 (left: 7, 4, 8)
│ └── (7 - 4) * 8 = 24
├── 8 + 2 = 10 (left: 10, 4, 5)
│ └── discard
├── 4 * 5 = 20 (left: 20, 8, 2)
│ └── (20 - 8) * 2 = 24
└── 4 * 8 = 32 (left: 32, 5, 2)
└── discard
Based on the evaluations, we have found two successful paths to reach 24:
1. From the node "5 + 2 = 7 (left: 7, 4, 8)", we have the equation: (7 - 4) * 8 = 24.
2. From the node "4 * 5 = 20 (left: 20, 8, 2)", we have the equation: (20 - 8) * 2 = 24.
Thus, the final equations using all given numbers from the input are:
1. (5 + 2 - 4) * 8 = 24
2. (4 * 5 - 8) * 2 = 24
ตัวอย่างที่สมบูรณ์มีอยู่ในตัวแทน/tree_structure.gen
แนวคิดที่มาจากการศึกษาเกี่ยวกับฟังก์ชั่นผู้บริหารจิตวิเคราะห์สำรวจผู้บริหารกลาง Alan Baddeley, 1996 เขาอธิบายระบบที่จัดทำกระบวนการทางปัญญาและหน่วยความจำในการทำงานอำนวยความสะดวกในการดึงข้อมูลจากหน่วยความจำระยะยาว LLM ทำหน้าที่เป็น System 1 การประมวลผลการสืบค้นและการดำเนินการตามคำแนะนำโดยไม่มีแรงจูงใจโดยธรรมชาติหรือการตั้งค่าเป้าหมาย แล้ว System 2 คืออะไร? ภาพวาดจากข้อมูลเชิงลึกทางประวัติศาสตร์ตอนนี้พิจารณาใหม่ผ่านเลนส์วิทยาศาสตร์:
ผู้บริหารส่วนกลางหรือฟังก์ชั่นผู้บริหารเป็นสิ่งสำคัญสำหรับการประมวลผลที่ควบคุมในหน่วยความจำการทำงาน มันจัดการงานรวมถึงการชี้นำความสนใจการรักษาวัตถุประสงค์งานการตัดสินใจและการดึงหน่วยความจำ
สิ่งนี้ทำให้เกิดความเป็นไปได้ที่น่าสนใจ: สร้างตัวแทนที่ซับซ้อนมากขึ้นโดยการรวม System 1 และ System 2 LLM ในฐานะ System 1 ทำงานควบคู่กับ System 2 ซึ่งควบคุมและควบคุม LLM การเป็นหุ้นส่วนนี้ก่อให้เกิดความสัมพันธ์แบบคู่กับ Mentals AI