მაგალითი AI დამწყებთათვის სასწავლო პროგრამა-დან.
ამ ნიმუშში ჩვენ განვახორციელებთ ცოდნაზე დაფუძნებულ მარტივ სისტემას, რათა განვსაზღვროთ ცხოველი ზოგიერთი ფიზიკური მახასიათებლების საფუძველზე. სისტემა შეიძლება წარმოდგენილი იყოს შემდეგი AND-OR ხით (ეს არის მთელი ხის ნაწილი, ჩვენ შეგვიძლია მარტივად დავამატოთ კიდევ რამდენიმე წესი):

ჩვენი საკუთარი საექსპერტო სისტემების გარსი ჩამორჩენილი დასკვნის საშუალებით
შევეცადოთ განვსაზღვროთ ცოდნის წარმოდგენის მარტივი ენა წარმოების წესებზე დაყრდნობით. ჩვენ გამოვიყენებთ პითონის კლასებს, როგორც საკვანძო სიტყვებს წესების დასადგენად. არსებითად იქნებოდა 3 ტიპის კლასი:
Askწარმოადგენს შეკითხვას, რომელიც უნდა დაუსვას მომხმარებელს. ის შეიცავს შესაძლო პასუხების კომპლექტს.Ifწარმოადგენს წესს და ეს მხოლოდ სინტაქსური შაქარია წესის შინაარსის შესანახადAND/ORარის კლასები, რომლებიც წარმოადგენენ ხის და/ან ტოტებს. ისინი უბრალოდ ინახავენ არგუმენტების სიას შიგნით. კოდის გასამარტივებლად, ყველა ფუნქციონალობა განისაზღვრება მშობლის კლასშიContent
იტვირთება…ჩვენს სისტემაში სამუშაო მეხსიერება შეიცავს ფაქტების სიას, როგორც ატრიბუტ-მნიშვნელობის წყვილებს. ცოდნის ბაზა შეიძლება განისაზღვროს, როგორც ერთი დიდი ლექსიკონი, რომელიც ასახავს მოქმედებებს (ახალი ფაქტები, რომლებიც უნდა იყოს ჩასმული სამუშაო მეხსიერებაში) პირობებთან, გამოხატული როგორც AND-OR გამონათქვამები. ასევე, ზოგიერთი ფაქტი შეიძლება იყოს Ask-ed.
იტვირთება…უკან დასკვნის შესასრულებლად, ჩვენ განვსაზღვრავთ Knowledgebase კლასს. ის შეიცავს:
- სამუშაო
memory- ლექსიკონი, რომელიც ასახავს მნიშვნელობებს ატრიბუტებს - ცოდნის ბაზა
rulesზემოთ განსაზღვრულ ფორმატში
ორი ძირითადი მეთოდია:
getატრიბუტის მნიშვნელობის მისაღებად, საჭიროების შემთხვევაში დასკვნის გაკეთება. მაგალითად,get('color')მიიღებს ფერის სლოტის მნიშვნელობას (საჭიროების შემთხვევაში ითხოვს მნიშვნელობას და ინახავს მნიშვნელობას შემდგომი გამოყენებისთვის სამუშაო მეხსიერებაში). თუ ჩვენ ვთხოვთget('color:blue'), ის ითხოვს ფერს და შემდეგ დააბრუნებსy/nმნიშვნელობას ფერის მიხედვით.evalასრულებს ფაქტობრივ დასკვნას, ანუ კვეთს AND/OR ხეს, აფასებს ქვემიზნებს და ა.შ.
იტვირთება…ახლა მოდით განვსაზღვროთ ჩვენი ცხოველთა ცოდნის ბაზა და ჩავატაროთ კონსულტაცია. გაითვალისწინეთ, რომ ეს ზარი დაგისვამთ კითხვებს. თქვენ შეგიძლიათ უპასუხოთ აკრეფით y/n დიახ-არა კითხვებისთვის, ან ნომრის (0..N) მითითებით კითხვებისთვის, რომელთა პასუხები უფრო გრძელია, მრავალჯერადი არჩევანით.
იტვირთება…გამოტანა
hair
y/n
sharp teeth
y/n
claws
y/n
forward-looking eyes
y/n
color
0. red-brown
1. black and white
2. other
has hooves
y/n
long neck
y/n
long legs
y/n
pattern
0. dark stripes
1. dark spots
'giraffe'Experta-ს გამოყენება წინსვლის დასკვნისთვის
შემდეგ მაგალითში, ჩვენ შევეცდებით განვახორციელოთ წინა დასკვნა ცოდნის წარმოდგენის ერთ-ერთი ბიბლიოთეკის გამოყენებით, ექსპერტი. Experta არის ბიბლიოთეკა Python-ში წინა დასკვნის სისტემების შესაქმნელად, რომელიც შექმნილია კლასიკური ძველი სისტემის კლიპები-ის მსგავსი.
ჩვენ ასევე შეგვეძლო განგვეხორციელებინა წინ მიჯაჭვულობა მრავალი პრობლემის გარეშე, მაგრამ გულუბრყვილო განხორციელებები, როგორც წესი, არც თუ ისე ეფექტურია. უფრო ეფექტური წესების შესატყვისად გამოიყენება სპეციალური ალგორითმი რეტე.
იტვირთება…გამოტანა
Collecting git+https://github.com/nilp0inter/experta
Cloning https://github.com/nilp0inter/experta to /tmp/pip-req-build-7qurtwk3
Running command git clone --filter=blob:none --quiet https://github.com/nilp0inter/experta /tmp/pip-req-build-7qurtwk3
Resolved https://github.com/nilp0inter/experta to commit c6d5834b123861f5ae09e7d07027dc98bec58741
Installing build dependencies ... [?25ldone
[?25h Getting requirements to build wheel ... [?25ldone
[?25h Preparing metadata (pyproject.toml) ... [?25ldone
[?25hRequirement already satisfied: frozendict~=2.4.6 in /opt/conda/envs/ai4beg/lib/python3.12/site-packages (from experta==1.9.5.dev1) (2.4.7)
Collecting schema~=0.6.7 (from experta==1.9.5.dev1)
Downloading schema-0.6.8-py2.py3-none-any.whl.metadata (14 kB)
Downloading schema-0.6.8-py2.py3-none-any.whl (14 kB)
Building wheels for collected packages: experta
Building wheel for experta (pyproject.toml) ... [?25ldone
[?25h Created wheel for experta: filename=experta-1.9.5.dev1-py3-none-any.whl size=34804 sha256=888c459512a5e713f4b674caa9a0f96cfdf07ec0d6eb56cc318ce0653d218014
Stored in directory: /tmp/pip-ephem-wheel-cache-1eeii9zy/wheels/3d/e8/bb/22d7956359603fa8dd679aa09f5b8efb3f29991c3986fdc787
Successfully built experta
Installing collected packages: schema, experta
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2/2 [experta]
Successfully installed experta-1.9.5.dev1 schema-0.6.8
იტვირთება…ჩვენ განვსაზღვრავთ ჩვენს სისტემას, როგორც კლასს, რომელიც ქვეკლასებს KnowledgeEngine. თითოეული წესი განისაზღვრება ცალკეული ფუნქციით @Rule ანოტაციით, რომელიც განსაზღვრავს, როდის უნდა გააქტიურდეს წესი. წესის შიგნით, ჩვენ შეგვიძლია დავამატოთ ახალი ფაქტები declare ფუნქციის გამოყენებით, და ამ ფაქტების დამატება გამოიწვევს კიდევ რამდენიმე წესს, რომელიც გამოიძახება წინა დასკვნის ძრავით.
იტვირთება…მას შემდეგ, რაც ჩვენ განვსაზღვრავთ ცოდნის ბაზას, ჩვენ ვავსებთ ჩვენს სამუშაო მეხსიერებას რამდენიმე საწყისი ფაქტებით და შემდეგ გამოვიძახებთ run() მეთოდს დასკვნის შესასრულებლად. შედეგად, თქვენ ხედავთ, რომ სამუშაო მეხსიერებას ემატება ახალი დასკვნა ფაქტები, მათ შორის ცხოველის შესახებ საბოლოო ფაქტი (თუ ჩვენ სწორად დავაყენეთ ყველა საწყისი ფაქტი).
იტვირთება…გამოტანა
Animal is tiger
FactList([(0, InitialFact()),
(1, Fact(color='red-brown')),
(2, Fact(pattern='dark stripes')),
(3, Fact('sharp teeth')),
(4, Fact('claws')),
(5, Fact('forward looking eyes')),
(6, Fact('gives milk')),
(7, Fact('mammal')),
(8, Fact('carnivor')),
(9, Fact(animal='tiger'))])