هذا المشروع هو شوكة من Autogen الأصلي ولكن يتم في TypeScript.
Aibitat هو إطار عمل عديمي الجنسية وقابل للتمديد مصمم لتمكين التفاعل بين عوامل متعددة مع السماح بمشاركة الإنسان.
فكر في الأمر على أنه الركود ولكن لوكلاء الذكاء الاصطناعي. قم بإنشاء وكلاء ، وأضفهم إلى القنوات واتركهم يتحدثون مع بعضهم البعض. يمكنك أيضًا إضافة عوامل مستعصية إلى القنوات والسماح لهم بالمشاركة في المحادثة.
للحصول على مثال أكثر اكتمالا ، تحقق من مجلد الأمثلة.
يمكنك تثبيت الحزمة:
# to install bun go to https://bun.sh and follow the instructions
# then run to start a new project:
mkdir my-project
cd my-project
bun init
# then install aibitat
bun install aibitat قم بإنشاء ملف .env وأضف OPENAI_API_KEY :
OPENAI_API_KEY=... ثم قم بإنشاء ملف يسمى index.ts وأضف ما يلي:
import { AIbitat } from 'aibitat'
import { cli } from 'aibitat/plugins'
const aibitat = new AIbitat ( )
. use ( cli ( ) )
. agent ( 'client' , {
interrupt : 'ALWAYS' ,
role : 'You are a human assistant. Reply "TERMINATE" when there is a correct answer or there`s no answer to the question.' ,
} )
. agent ( 'mathematician' , {
role : `You are a Mathematician and only solve math problems from @client` ,
} )
. agent ( 'reviewer' , {
role : `You are a Peer-Reviewer and you do not solve math problems.
Check the result from @mathematician and then confirm. Just confirm, no talk.` ,
} )
. channel ( 'management' , [ 'mathematician' , 'reviewer' , 'client' ] )
// aibitat.onMessage(console.log)
await aibitat . start ( {
from : 'client' ,
to : 'management' ,
content : 'How much is 2 + 2?' ,
} )
console . log ( aibitat . chats )ثم قم بالتشغيل:
bun run index.ts| ميزة | ماذا تفعل | حالة |
|---|---|---|
| الرسائل المباشرة | يتحدث الوكلاء مباشرة مع بعضهم البعض. | ✅ |
| تعليق | حافظ على الدردشة على قيد الحياة حتى يقاطع بعض الوكيل الدردشة. | ✅ |
| القنوات | يتحدث الوكلاء مع العديد من الآخرين ، كما هو الحال في قناة الركود. | ✅ |
| معالجة الخطأ | إدارة حدود المعدل بسلاسة دون تحطم. | ✅ |
| تنفيذ الوظيفة | يمكن للوكلاء تنفيذ المهام وفهم النتائج. | ✅ |
| تصفح الويب | انتقل على الإنترنت. | ؟ |
| مخبأ | احفظ سجل الدردشة لمكالمات API أسرع وأقل. | ؟ |
| تفاعل الملف | التفاعل مع الملفات المحلية عن طريق القراءة/الكتابة/التنفيذ | ؟ |
| تنفيذ رمز | يمكن للوكلاء تشغيل التعليمات البرمجية ومشاركة النتائج. | ؟ |
| حد التكلفة | الحد من عدد التفاعلات حسب التكلفة. | ؟ |
| مزود | حالة |
|---|---|
| Openai | ✅ |
| الإنسان | ✅ |
| التحم | ؟ |
| الألعاب النارية | ؟ |
| الوجه المعانقة | ؟ |
| تكرار | ؟ |
بعض المصطلحات المستخدمة في هذا الوثائق:
interrupt : NEVER ، ALWAYS . عندما NEVER ، لن يقاطع الوكيل المحادثة أبدًا. عندما ALWAYS ، سيقاطع الوكيل دائمًا المحادثة. (ملاحظة: يمكن لأي منهم مقاطعة المحادثة إذا رد "مقاطعة" أو إنهاء الدردشة عند الرد "إنهاء".).role : دور الوكيل. يتم استخدامه لوصف الدور الذي سيؤديه الوكيل في الدردشة.maxRounds : الحد الأقصى لعدد الدردشات التي سيجدها وكيل أو مجموعة على المحادثة. يتم استخدامه لمنع الحلقات.new AIbitat(config) يخلق مثيل Aibitat جديد. يمكن استخدام كائن config لتكوين المثيل. بشكل افتراضي ، يستخدم Aibitat Openai و GPT-3.5-Turbo كمزود للمحادثة و GPT-4 للتنبؤ بالوكيل التالي للتحدث. يمكنك تغييره عن طريق تمرير provider model إلى مُنشئ AIbitat أو عن طريق إعدادها على تكوين Agent/Channel المحدد. التكوين الافتراضي:
{
providers : 'openai' ,
model : 'gpt-3.5-turbo' ,
interrupt : 'NEVER' ,
maxRounds : 100 ,
chats : [
// {
// from: '?',
// to: '?',
// content: `Talk about something`,
// state: 'success',
// },
] ,
}.agent(name, config) يخلق وكيلًا جديدًا. يمكن استخدام كائن config لتكوين الوكيل. بشكل افتراضي ، يستخدم الوكلاء interrupt من تكوين AIbitat .
.channel(name, agents, config) يخلق قناة جديدة. يمكن استخدام كائن config لتكوين القناة. بشكل افتراضي ، يتم تعيين maxRounds على 100 .
.function(config) يتم استخدام الوظائف لتنفيذ التعليمات البرمجية وإرجاع النتيجة إلى المحادثة. لاستخدامه ، اتصل على طريقة function التي تمرير تعريفات الوظيفة وأضف اسمها إلى خاصية functions إلى تكوين العقدة:
const aibitat = new AIbitat ( )
. agent ( '...' , { functions : [ 'doSomething' ] } )
. function ( {
name : 'doSomething' ,
description : 'Let me do something for you.' ,
parameters : {
type : 'object' ,
properties : { } ,
} ,
async handler ( ) {
return '...'
} ,
} )سيتم بعد ذلك إرسال النتائج إلى المزود وإعادتها إلى المحادثة.
.use(plugin) يتم استخدام المكونات الإضافية لتوسيع وظائف Aibitat. يمكن استخدامها لإضافة ميزات جديدة أو للتكامل مع الخدمات الأخرى. يمكنك إنشاء البرنامج المساعد الخاص بك عن طريق تطبيق واجهة AIbitatPlugin .
لاستخدام مكون إضافي ، اتصل بطريقة use :
...
import { cli } from 'aibitat/plugins'
const aibitat = new AIbitat ( ) . use ( cli ( ) ) يمكنك أيضًا إنشاء البرنامج المساعد الخاص بك عن طريق تطبيق واجهة AIbitatPlugin :
import { AIbitatPlugin } from 'aibitat'
export function myPlugin ( ) : AIbitatPlugin {
return {
name : 'my-plugin' ,
setup ( aibitat ) {
console . log ( `setting up my plugin` )
aibitat . onMessage ( ( { from , to , content } ) => {
console . log ( ` ${ from } : ${ content } ` )
} )
} ,
}
}قائمة الإضافات المتاحة:
cli : يضيف تفاعل CLI إلى الدردشة.fileHistory : يحفظ سجل الدردشة في ملف JSON. الإعدادات الافتراضية إلى مجلد historyexperimental_webBrowsing : يضيف وظيفة web-browsing إلى الدردشة التي تمكن الوكلاء من البحث والتنقل على الإنترنت. ملاحظة: هذا البرنامج المساعد تجريبي وقد لا يعمل كما هو متوقع.يدعم Aibitat أحداث دورة الحياة ، والتي تؤدي إلى لحظات محددة. يوضح الرسم البياني التالي دورة حياة المحادثة:

تتكون أحداث دورة الحياة في Aibitat من:
start : استدعاء عندما تبدأ الدردشة.error : استدعاء عندما يكون هناك خطأ معروف (انظر src/error.ts ). لإعادة المحاولة ، اتصل .retry() .message : تسمى عند إضافة رسالة إلى سجل الدردشة.terminate : يسمى عند إنهاء المحادثة. بشكل عام يعني أنه لا يوجد شيء آخر يجب القيام به وينبغي بدء محادثة جديدة.interrupt : تسمى عندما يتم مقاطعة المحادثة من قبل وكيل. بشكل عام يعني أن الوكيل لديه سؤال أو يحتاج إلى مساعدة. يمكن استئناف المحادثة عن طريق الاتصال .continue(feedback) . انسخ ملف .env.example إلى .env وأضف المفاتيح/الرموز الموجودة هناك.
لتثبيت التبعيات:
bun installلتشغيل:
bun run examples/beginner-chat.tsتحقق من مجلد الأمثلة لمزيد من الأمثلة.
تم إنشاء هذا المشروع باستخدام bun init في BUN V1.0.3. BUN هو وقت تشغيل JavaScript سريع الكل في واحد.
معهد ماساتشوستس للتكنولوجيا