semantica-agi/semantica
Cơ sở hạ tầng đồ thị gốc cho bối cảnh và hệ thống AI có trách nhiệm
README
Cơ sở hạ tầng đồ thị gốc cho bối cảnh và hệ thống AI có trách nhiệm
Palantir mã nguồn mở dành cho đại lý AI
Nhập dữ liệu doanh nghiệp của bạn, trích xuất những gì quan trọng, xây dựng Biểu đồ ngữ cảnh và biểu đồ tri thức (KG), đồng thời chạy phân tích biểu đồ và suy luận nhân quả trên tất cả dữ liệu đó, với đầy đủ nguồn gốc quyết định được đưa vào. Có thể giải thích, truy nguyên và đáng tin cậy theo thiết kế.
Thông tin quyết định · Quản lý bối cảnh · Lý luận xác định · Quản lý bản thể · Mô hình hóa kiến thức · Truy xuất nguồn gốc từ đầu đến cuối
Mã nguồn mở · Tự lưu trữ · Có thể kiểm tra · Được quản lý · Không khóa nhà cung cấp
Lưu trữ đồ thị Polyglot · Hỗ trợ RDF & LPG · Tiêu chuẩn W3C · Có thể tương tác
Được xây dựng cho các tên miền được quản lý, có giá trị cao
pip install semantica
Knowledge Explorer · Đồ thị ngữ cảnh · Công cụ lập luận · Thông tin quyết định · Trung tâm bản thể học
Hầu hết các đặc vụ AI hành động mà không để lại dấu vết. Chúng lưu trữ các phần nhúng, không có ý nghĩa: bối cảnh không thể giải thích được, các quyết định không thể kiểm tra được. Trong việc cho vay, khoảng cách đó là một rủi ro về tuân thủ chứ không phải là một sự bất tiện: sự chấp thuận của đại lý bảo lãnh phát hành phải tồn tại trước câu hỏi "tại sao" của cơ quan quản lý vài tháng sau đó.
Semantica nằm bên dưới LLM, kho vectơ và khung tác nhân của bạn dưới dạng lớp cơ sở hạ tầng xác định: không cần LLM để xây dựng, lập luận hoặc xuất xứ biểu đồ.
⚠️ Khả năng giải thích ở cấp hệ thống, không phải khả năng giải thích của mô hình nền tảng. Semantica không phơi bày hoặc tái tạo lại những gì xảy ra bên trong LLM — lý luận bên trong hoặc chuỗi suy nghĩ của nó vẫn không rõ ràng, giống như đối với bất kỳ hệ thống bên ngoài nào. Semantica giải thích những gì bên ngoài mô hình: bối cảnh và dữ liệu được cung cấp, quyết định được đưa ra, nguồn gốc của nó, các mối quan hệ liên quan, chính sách được áp dụng và lộ trình thực hiện đầy đủ.
Nó dành cho ai:
- Nhóm nền tảng AI/ML đại lý vận chuyển đưa ra quyết định mang tính hệ quả và cần bối cảnh có cấu trúc, có thể truy vấn được xây dựng từ dữ liệu thô bị phân mảnh, không chỉ là chỉ mục vectơ
- Nhóm nền tảng dữ liệu trên Databricks hoặc Snowflake những người cần biến các bảng đã có trong Danh mục Unity hoặc kho Snowflake thành một biểu đồ tri thức được quản lý, theo dõi dòng dõi mà không xuất dữ liệu đó sang SaaS của bên thứ ba trước
- Các nhóm tuân thủ, rủi ro và kiểm toán người cần câu trả lời thẳng thắn cho "tại sao AI lại làm vậy?" theo một định dạng mà cơ quan quản lý sẽ thực sự chấp nhận
- Doanh nghiệp được quản lý (tài chính, chăm sóc sức khỏe, pháp lý, chính phủ, quốc phòng) không thể gửi hộp đen và không thể gửi dữ liệu của họ tới SaaS của người khác để nhận hộp đen
- Kỹ sư nền tảng và cơ sở hạ tầng những người muốn ngăn xếp KG, lý luận và xuất xứ được tự lưu trữ và có thể hoán đổi, không bị khóa vào chương trình phụ trợ của một nhà cung cấp
- Kỹ sư dữ liệu và tri thức xây dựng KG từ dữ liệu đa nguồn, lộn xộn: các thực thể và mối quan hệ được trích xuất, các sự kiện xung đột hoặc mâu thuẫn được gắn cờ thay vì ghi đè âm thầm và các bản sao được hợp nhất trước khi chúng biến thành tiếng ồn
Bắt đầu nhanh · Kiến trúc · Những gì bạn nhận được · Tại sao ngữ nghĩa · Quyết định thông minh · Đồ thị bối cảnh · Công thức: Đường mòn kiểm toán · Tham khảo mô-đun · Tích hợp · CLI · Hiệu suất · cài đặt
Semantica mang lại cho bạn những gì
- Đồ thị bối cảnh: Một biểu đồ có cấu trúc, có thể truy vấn về mọi thứ mà đại lý của bạn biết, quyết định và lý do về
- Quyết định thông minh: Mọi quyết định đều là đối tượng hạng nhất: có thể theo dõi, có thể tìm kiếm theo tiền lệ và được liên kết nhân quả
- Quản trị và bản thể học AI: Các ràng buộc SHACL, phát hiện xung đột, quy tắc tuân thủ, tạo OWL và quản lý từ vựng SKOS bằng trình chỉnh sửa trực quan
- Kiểm toán đầy đủ: Xuất xứ W3C PROV-O trên mọi thực tế, với các bản kiểm tra có thể xuất sang JSON, CSV hoặc RDF
- Lý luận xác định: Chuỗi chuyển tiếp, mạng Rete, Datalog và SPARQL với các đường dẫn có thể giải thích đầy đủ, không phải hộp đen
- Kênh kiến thức: Nhập nhiều nguồn, phân nhóm nhận biết thực thể, trích xuất NER/quan hệ/sự kiện và xây dựng biểu đồ tri thức, với tính năng loại bỏ trùng lặp ngữ nghĩa và hợp nhất bảo toàn xuất xứ xuyên suốt
- Nền tảng dữ liệu doanh nghiệp: Trình kết nối gốc dành cho Databricks (Unity Catalog + Delta Lake, xác thực PAT/OAuth M2M, xem xét nội tâm danh mục/lược đồ/bảng/dòng dõi) và Snowflake (kho/cơ sở dữ liệu/lược đồ, cặp khóa và xác thực OAuth), do đó, các bảng đã tồn tại trong kho lưu trữ hoặc kho của bạn trở thành các nút biểu đồ có xuất xứ chứ không phải bước nhảy xuất/nhập khác
- Phân tích biểu đồ: Tính trung tâm, phát hiện cộng đồng, dự đoán liên kết và truy vấn đường dẫn ngắn nhất trên biểu đồ bạn vừa tạo
- Lưu trữ đồ thị Polyglot: RDF gốc (được nhúng Oxigraph, Blazegraph, Apache Jena, Eclipse RDF4J qua SPARQL) và Đồ thị thuộc tính được gắn nhãn (Neo4j, FalkorDB, Apache AGE, AWS Neptune qua Cypher), cùng với các cửa hàng vectơ, tất cả đều có thể hoán đổi mà không cần chạm vào mã của bạn
- Trực quan hóa: Khám phá bất kỳ biểu đồ, bản thể luận hoặc dòng thời gian nào trong bàn làm việc của trình duyệt tương tác
- Tích hợp thả vào: Hỗ trợ Native Agno và CrewAI, máy chủ MCP đầy đủ tính năng, CLI toàn diện, REST API và các plugin trên các trình chỉnh sửa chính
Tại sao ngữ nghĩa
| Vectơ DB + RAG | Bộ nhớ LLM đơn giản | ngữ nghĩa | |
|---|---|---|---|
| Phương pháp thu hồi | Nhúng sự tương đồng | Cửa sổ mã thông báo | Truyền tải đồ thị + tìm kiếm ngữ nghĩa |
| Lịch sử quyết định | Không được lưu trữ | Không được lưu trữ | Các đối tượng có thể truy vấn hạng nhất |
| Xuất xứ | không có | không có | W3C PROV-O, liên kết nguồn |
| Lý luận | không có | Hộp đen | Chuỗi chuyển tiếp, Rete, Datalog, SPARQL |
| Phát hiện xung đột | Ghi đè im lặng | Ghi đè im lặng | Đã phát hiện, gắn cờ, giải quyết |
| Du hành thời gian | Không | Không | Ảnh chụp nhanh biểu đồ theo thời gian |
| Xuất tuân thủ | không có | không có | PROV-O, SHACL, OWL, RDF |
| Thực thi chính sách | không có | không có | Công cụ quy tắc tích hợp + SHACL |
| Độ phân giải thực thể | Không | Không | Chặn + trùng lặp ngữ nghĩa |
| Bối cảnh đa tác nhân | Riêng biệt cho mỗi đại lý | Riêng biệt cho mỗi đại lý | Lớp thông minh được chia sẻ duy nhất |
Semantica bổ sung cho ngăn xếp hiện có của bạn thay vì thay thế nó. Giữ nguyên chính xác LLM, cửa hàng vectơ và khung tác nhân của bạn; Semantica bổ sung thêm các bản ghi quyết định, lý luận nhân quả, nguồn gốc, quản trị bản thể luận, phát hiện xung đột và các quy trình kiểm toán lên trên cùng. Các công cụ lý luận, cấu trúc KG và lớp xuất xứ hoàn toàn mang tính quyết định; không cần có LLM để sử dụng chúng.
Bắt đầu nhanh
pip install semantica
from semantica.context import ContextGraph
graph = ContextGraph(advanced_analytics=True)
# Every agent decision becomes a queryable, auditable knowledge node
decision_id = graph.record_decision(
category="vendor_selection",
scenario="Choose cloud provider for HIPAA workload",
reasoning="AWS offers BAA, mature HIPAA tooling, and existing team expertise",
outcome="selected_aws",
confidence=0.93,
)
# Ask "why did this happen?" and get a real, structured answer
chain = graph.trace_decision_chain(decision_id) # full causal ancestry
similar = graph.find_similar_decisions("cloud vendor", max_results=5) # precedents
impact = graph.analyze_decision_impact(decision_id) # downstream influence map
compliant = graph.check_decision_rules({"category": "vendor_selection"}) # policy gate
Xác minh cài đặt của bạn sau 5 giây:
semantica doctor
# Python 3.11.9 pass
# semantica 0.6.6 pass
# faiss vector store pass
# Config file pass ~/.semantica/config.yaml
Chạy trong tập lệnh hoặc CI? Thanh tiến trình chỉ được ghi khi thiết bị xuất chuẩn là thiết bị đầu cuối tương tác (hoặc sổ ghi chép Jupyter), do đó, đường ống và chuyển hướng luôn sạch sẽ theo mặc định. Ghi đè bằng SEMANTICA_DISABLE_PROGRESS=1 để im lặng tiến bộ ở khắp mọi nơi, hoặc SEMANTICA_FORCE_PROGRESS=1 để giữ nó khi thiết bị xuất chuẩn được chuyển hướng. SEMANTICA_DISABLE_PROGRESS được ưu tiên.
Nếu Semantica giải quyết được một vấn đề thực sự cho bạn thì một ngôi sao sẽ giúp người khác tìm ra vấn đề đó.
Kiến trúc
Semantica là một đường dẫn từ đầu đến cuối thực sự, không phải là một thư viện duy nhất có tên tiếp thị. Mỗi giai đoạn bên dưới là một mô-đun vận chuyển, có thể nhập độc lập:
Sources → Ingest → Parse → Normalize → Split → Extract → Conflict Detection → Deduplication
→ Knowledge Graph → [ Ontology · Reasoning · Provenance · Decisions ] → Enriched KG
→ Vector Store + Polyglot Graph Store (RDF & LPG) → Export / Visualize / REST · MCP · CLI
- Nhập: tệp, web, cơ sở dữ liệu, nền tảng dữ liệu doanh nghiệp (Databricks, Snowflake), đám mây (Google Drive, Elaticsearch), luồng (Kafka, Kinesis), Git, email, MCP
- Phân tích → Chuẩn hóa → Tách: phân tích tài liệu, chuẩn hóa văn bản/thực thể/ngày, phân đoạn nhận biết thực thể gốc GraphRAG
- Trích xuất → Phát hiện xung đột → Chống trùng lặp: NER, quan hệ, sự kiện, bộ ba; các sự kiện xung đột được gắn cờ và giải quyết trước khi chúng hợp nhất
- Sơ đồ tri thức:
GraphBuilderxây dựng đồ thị; dữ kiện hai thời gian và phân tích biểu đồ đầy đủ (trung tâm, cộng đồng, dự đoán liên kết) chạy trên đó - Bản thể học · Lý luận · Xuất xứ · Quyết định: lớp thông minh nằm trong KG, với khả năng quản trị SHACL/OWL, suy luận Rete/Datalog/SPARQL, dòng W3C PROV-O và các bản ghi quyết định hạng nhất
- Lưu trữ: polyglot theo thiết kế, với ba cửa hàng RDF (được nhúng Oxigraph, Blazegraph, Apache Jena, Eclipse RDF4J), Đồ thị thuộc tính được gắn nhãn (Neo4j, FalkorDB, Apache AGE, AWS Neptune) và các cửa hàng vectơ, tất cả đều có thể hoán đổi mà không cần chạm vào mã của bạn
- Đầu ra: xuất (RDF, OWL, Parquet, Cypher, JSON-LD), trực quan hóa tương tác và truy cập qua máy chủ REST API, MCP hoặc CLI
→ Sơ đồ Mermaid đầy đủ cho quy trình và vòng đời thông tin quyết định
Quyết định thông minh
Quyết định Thông minh biến mọi lựa chọn AI từ một suy luận nhất thời thành một bản ghi vĩnh viễn, có thể kiểm tra và có thể truy vấn. Nó trả lời "AI của bạn đã quyết định điều gì, tại sao và điều gì xảy ra tiếp theo?": câu hỏi mà các cơ quan quản lý và nhóm quản lý rủi ro doanh nghiệp đặt ra với mức độ khẩn cấp ngày càng tăng.
Trong Semantica, một quyết định không phải là một dòng nhật ký. Đây là nút biểu đồ hạng nhất có vòng đời đầy đủ. Trong các miền được quản lý, mọi quyết định của AI phải được truy nguyên theo nguồn và có thể được kiểm toán viên bảo vệ: record_decision() tạo một bản ghi có cấu trúc, vĩnh viễn có thể xuất dưới dạng W3C PROV-O, định dạng mà hầu hết các khung tuân thủ chấp nhận để gửi cho cơ quan quản lý.
record_decision() → stored as a graph node with full structured context
add_causal_relationship() → linked to upstream causes and downstream effects
find_similar_decisions() → semantic precedent search across all past decisions
trace_decision_chain() → full causal ancestry back to root causes
analyze_decision_impact() → downstream influence map - everything this decision affected
check_decision_rules() → policy compliance gate against configurable rule sets
export / audit trail → W3C PROV-O, CSV, or JSON for regulator submission
from semantica.context import ContextGraph
graph = ContextGraph(advanced_analytics=True)
# Record decisions with full structured context
app_id = graph.record_decision(
category="credit_application",
scenario="Personal loan, $85k income, 31% DTI, 3yr employment",
reasoning="Income meets threshold; employment stable; no adverse credit events",
outcome="proceed_to_underwriting",
confidence=0.88,
metadata={"applicant_id": "A-7291"},
)
uw_id = graph.record_decision(
category="loan_underwriting",
scenario="Underwriting review for A-7291",
reasoning="DTI within policy; clean 36-month credit history",
outcome="approved",
confidence=0.94,
)
rate_id = graph.record_decision(
category="interest_rate",
scenario="Rate assignment for approved loan A-7291",
outcome="rate_set_8.9pct",
reasoning="Prime + 2.4% based on risk tier B2",
confidence=0.99,
)
# Build the auditable causal chain - relationship_type must be one of
# CAUSED, INFLUENCED, or PRECEDENT_FOR
graph.add_causal_relationship(app_id, uw_id, relationship_type="CAUSED")
graph.add_causal_relationship(uw_id, rate_id, relationship_type="INFLUENCED")
# Query the intelligence
chain = graph.trace_decision_chain(rate_id)
similar = graph.find_similar_decisions("personal loan approval, 31% DTI", max_results=5)
impact = graph.analyze_decision_impact(uw_id)
compliant = graph.check_decision_rules({"category": "loan_underwriting", "confidence": 0.94})
insights = graph.get_decision_insights()
Đồ thị bối cảnh
Biểu đồ bối cảnh là lớp bộ nhớ có cấu trúc mà RAG truyền thống bị thiếu. Thay vì nhúng phẳng câu trả lời "Cái gì giống nhau?", một câu trả lời cho Biểu đồ bối cảnh "cái gì được kết nối, tại sao và như thế nào?" Mọi thực thể, mối quan hệ, quyết định và thực tế đều là nút hạng nhất, có thể truy vấn bằng cách truyền tải biểu đồ. Các thực thể liên kết với các tài liệu nguồn, các quyết định liên kết với bằng chứng và hậu quả, các sự kiện có nguồn gốc đầy đủ và các xung đột được phát hiện chứ không bị ghi đè một cách âm thầm.
from semantica.context import ContextGraph, AgentContext
from semantica.vector_store import VectorStore
graph = ContextGraph(advanced_analytics=True)
# Add nodes with typed properties
graph.add_node("acme_corp", "Organization", name="Acme Corp", industry="SaaS")
graph.add_node("alice_chen", "Person", name="Alice Chen", role="CTO")
graph.add_node("contract_001", "Contract", value=2_400_000, currency="USD")
# Add typed, weighted edges (extra kwargs become edge metadata)
graph.add_edge("alice_chen", "acme_corp", edge_type="works_for", since="2019-03-01")
graph.add_edge("acme_corp", "contract_001", edge_type="party_to", signed="2024-01-15")
# BFS traversal - hop through the graph from any node
neighbors = graph.get_neighbors("acme_corp", hops=2)
# Point-in-time snapshot - the graph as it existed on any past date
snapshot = graph.state_at("2024-01-01")
# AgentContext - high-level API for agent memory workflows
vs = VectorStore(backend="faiss")
ctx = AgentContext(vector_store=vs, knowledge_graph=graph)
ctx.store("Alice approved the Acme renewal in Q1 2024", conversation_id="conv_001")
retrieved = ctx.retrieve("who approved the Acme contract?")
Tại sao biểu đồ trên phần nhúng: truyền tải tìm thấy các kết nối bị bỏ sót (một người cách hợp đồng 3 bước); mọi nút đều có xuất xứ nên bạn luôn có thể hỏi "Cái này đến từ đâu?"; xung đột được gắn cờ trước khi chúng làm hỏng nền tảng kiến thức của bạn; ảnh chụp nhanh theo thời điểm cho phép bạn phát lại lịch sử mà không cần xử lý lại.
Công thức: Quá trình kiểm tra cho một quyết định được quản lý
Mẫu hàng đầu: ghi lại chuỗi quyết định được liên kết nhân quả, gắn nguồn gốc xuất xứ cho mọi thực thể và xuất ra dấu vết kiểm tra sẵn sàng cho cơ quan quản lý.
from semantica.context import ContextGraph
from semantica.provenance import ProvenanceManager
from semantica.export import RDFExporter
graph = ContextGraph(advanced_analytics=True)
prov = ProvenanceManager(storage_path="./audit.db")
# Record the decision chain
d1 = graph.record_decision(
category="drug_interaction_check", scenario="Patient P-4821: warfarin + amiodarone co-prescribed",
reasoning="Amiodarone potentiates warfarin's anticoagulant effect", outcome="flag_for_review", confidence=0.91,
)
d2 = graph.record_decision(
category="dosage_adjustment", scenario="INR monitoring plan for P-4821",
reasoning="Reduce warfarin dose per interaction severity; recheck INR in 5 days", outcome="dose_reduced_30pct", confidence=0.87,
)
# relationship_type must be one of CAUSED, INFLUENCED, or PRECEDENT_FOR
graph.add_causal_relationship(d1, d2, relationship_type="CAUSED")
# Track provenance for every entity
prov.track_entity("patient_P4821", source="ehr/medication_orders_2024.json",
metadata={"extractor": "NamedEntityRecognizer"})
# Export W3C PROV-O for regulator submission - to_kg_dict() is the official
# adapter that emits the {"entities": [...], "relationships": [...]} /
# source_id shape RDFExporter expects, so no manual field mapping is needed
kg = graph.to_kg_dict()
RDFExporter().export(kg, "audit_trail.ttl", format="turtle")
Nhiều công thức nấu ăn khác (đường dẫn GraphRAG, công cụ quy tắc AML, ontology-to-KG trong một lần) đều có trong Thêm công thức nấu ăn bên dưới.
Khám phá nền tảng
Mỗi mô-đun bên dưới đều có thể nhập độc lập, với các mẫu mã hoạt động được xác minh dựa trên cây nguồn hiện tại; sử dụng một hoặc tất cả chúng.
| mô-đun | Nó làm gì |
|---|---|
semantica.ingest |
Tệp, web, cơ sở dữ liệu, API, luồng, email, Git, Parquet, Databricks, Snowflake, MCP |
semantica.semantic_extract |
NER, trích xuất quan hệ, phát hiện sự kiện, tạo bộ ba |
semantica.kg |
Xây dựng đồ thị, tính trung tâm, cộng đồng, dự đoán liên kết |
semantica.reasoning |
Chuỗi chuyển tiếp, Rete, Datalog, SPARQL, có thể giải thích đầy đủ |
semantica.vector_store |
FAISS, Qdrant, Weaviate, Milvus, Pinecone, PGVector, tìm kiếm kết hợp |
semantica.split |
Phân đoạn nhận biết thực thể, nhận biết mối quan hệ, nhận biết bản thể luận cho GraphRAG |
semantica.provenance |
Dòng dõi W3C PROV-O trên mọi thực tế |
semantica.ontology |
Tạo OWL, xác thực SHACL, từ vựng SKOS |
semantica.conflicts |
Phát hiện và giải quyết các sự kiện xung đột giữa các nguồn |
semantica.deduplication |
Độ phân giải thực thể ở quy mô |
semantica.normalize |
Chuẩn hóa văn bản, thực thể, ngày tháng và số; làm sạch tập dữ liệu |
semantica.pipeline |
DSL đường dẫn song song, khai báo để nhập vào → trích xuất → xây dựng → xuất |
semantica.export |
RDF, OWL, Sàn gỗ, Cypher, JSON-LD |
semantica.visualization |
Đồ thị hướng lực, hệ thống phân cấp bản thể luận, bảng điều khiển thời gian |
| Trí tuệ tạm thời | Sự kiện hai thời gian, đại số khoảng Allen, du hành thời gian |
| Đa tác nhân (Agno) | Một biểu đồ ngữ cảnh được chia sẻ trên mọi tổng đài viên trong một nhóm |
↓ Mở rộng Tham khảo mô-đun bên dưới để biết ví dụ hoạt động của mọi mô-đun hoặc chuyển đến Thêm công thức nấu ăn, đầy đủ Tích hợp ma trận, Danh sách công cụ MCPvà Điểm cuối REST.
Tham khảo mô-đun
Mở rộng bất kỳ mô-đun nào bên dưới để biết ví dụ có thể chạy được của nó.
semantica.ingest: Nhập nhiều nguồn
Nhập từ các tệp, web, cơ sở dữ liệu, API, luồng, email, kho lưu trữ Git, Parquet, Databricks, Snowflake hoặc máy chủ MCP, tất cả đều thông qua một giao diện hợp nhất.
from semantica.ingest import FileIngestor, WebIngestor, ParquetIngestor, DBIngestor
# Ingest an entire directory of contracts (PDF, DOCX, HTML, TXT)
docs = FileIngestor().ingest_directory("./contracts/", recursive=True)
# Ingest live web content with robots.txt compliance
pages = WebIngestor().ingest_url("https://example.com/reports/annual-2024.html")
# Ingest structured data from Parquet with Snappy compression
records = ParquetIngestor().ingest("./data/transactions.parquet")
# Ingest from a SQL database - specify which tables to pull
rows = DBIngestor().ingest_database(
connection_string="postgresql://user:pass@localhost/mydb",
include_tables=["customer_events"],
max_rows_per_table=50_000,
)
# Enterprise data platforms - pull tables straight out of your lakehouse
# or warehouse, with lineage, instead of exporting to CSV first
from semantica.ingest import DatabricksIngestor, SnowflakeIngestor
# pip install "semantica[db-databricks]"
databricks = DatabricksIngestor(
host="https://adb-xxx.azuredatabricks.net",
token="dapi-xxxxxxxx", # or client_id/client_secret for OAuth M2M
http_path="/sql/1.0/warehouses/xxxxxxxx",
catalog="main",
)
customers = databricks.ingest_table("customers", limit=10_000)
sales = databricks.ingest_query("SELECT * FROM sales WHERE region = 'EMEA'")
table_lineage = databricks.get_table_lineage("customers", catalog="main", schema="default") # Unity Catalog lineage
# pip install semantica[db-snowflake]
snowflake = SnowflakeIngestor(
account="myaccount",
user="myuser",
password="mypassword", # or private_key=... for key-pair; use authenticator="oauth", token=... for OAuth
warehouse="COMPUTE_WH",
database="MYDB",
)
orders = snowflake.ingest_table("ORDERS", limit=10_000)
Lưu ý bảo mật: Không bao giờ mã hóa thông tin xác thực (
token,password,private_key) trong mã sản xuất; chuyển chúng qua các biến môi trường (ví dụ:DATABRICKS_TOKEN,SNOWFLAKE_PASSWORD) hoặc người quản lý bí mật.
Các nguồn được hỗ trợ: Tệp cục bộ (PDF, DOCX, PPTX, HTML, TXT, CSV, JSON, YAML, Excel, XML) · Trang web · Nguồn cấp dữ liệu RSS/Atom · API REST · Cơ sở dữ liệu (PostgreSQL, MySQL, SQLite, Oracle, SQL Server) · Bộ dữ liệu Parquet · Databricks (Unity Catalog + Delta Lake) · Snowflake · Kho lưu trữ Git · Email (IMAP/POP3) · Luồng tin nhắn (Kafka, RabbitMQ, Kinesis, Pulsar) · MCP tài nguyên · Mũi tên Apache/Feather/IPC (ArrowIngestor)
Quá trình nhập DuckDB, Elaticsearch, Google Drive, HuggingFace, MongoDB và Pandas cũng được cung cấp (DuckDBIngestor, ElasticIngestor, GDriveIngestor, HuggingFaceIngestor, MongoIngestor, PandasIngestor) nhưng không được tái xuất từ cấp cao nhất semantica.ingest chưa có không gian tên - nhập chúng trực tiếp: from semantica.ingest.duckdb_ingestor import DuckDBIngestor.
semantica.semantic_extract: NER, Quan hệ, Sự kiện, Bộ ba
Trích xuất kiến thức có cấu trúc từ văn bản thô trong một lượt.
from semantica.semantic_extract import (
NamedEntityRecognizer,
RelationExtractor,
EventDetector,
TripletExtractor,
)
text = """
Anthropic CEO Dario Amodei announced a $7.3B Series E funding round in partnership
with Google and Spark Capital, valuing the company at $61.5B as of Q4 2024.
"""
# Named entity recognition with confidence thresholding
ner = NamedEntityRecognizer(confidence_threshold=0.7)
entities = ner.extract_entities(text)
# → [Entity(name="Dario Amodei", type="PERSON"), Entity(name="Anthropic", type="ORG"),
# Entity(name="Google", type="ORG"), Entity(name="$7.3B", type="MONEY"), ...]
# Relationship extraction - bidirectional support
rel_extractor = RelationExtractor(confidence_threshold=0.6, bidirectional=True)
relations = rel_extractor.extract_relations(text, entities=entities)
# → [Relation(subject="Dario Amodei", predicate="ceo_of", object="Anthropic"),
# Relation(subject="Anthropic", predicate="raised", object="$7.3B Series E"), ...]
# Event detection with temporal processing
events = EventDetector(extract_participants=True, extract_time=True).detect_events(text)
# → [Event(type="FUNDING", participants=["Anthropic","Google","Spark Capital"],
# amount="$7.3B", date="Q4 2024")]
# RDF triplets with optional provenance metadata
triplets = TripletExtractor(include_temporal=True, include_provenance=True).extract_triplets(text)
# → [("Anthropic", "valuation", "$61.5B"), ("Dario Amodei", "is_ceo_of", "Anthropic"), ...]
Xử lý hàng loạt trên nhiều tài liệu sử dụng ner.process_batch([...]), không phải cho mỗi cuộc gọi extract_entities_batch trên lớp mặt tiền.
semantica.kg: Xây dựng & Phân tích Sơ đồ Tri thức
Xây dựng biểu đồ kiến thức sản xuất từ các tài liệu và chạy các thuật toán biểu đồ trên đó.
from semantica.ingest import FileIngestor
from semantica.kg import (
GraphBuilder,
GraphAnalyzer,
CentralityCalculator,
CommunityDetector,
PathFinder,
LinkPredictor,
BiTemporalFact,
)
from datetime import datetime
# Build KG - merge duplicate entities, track temporal edges
sources = FileIngestor().ingest_directory("./contracts/", recursive=True)
kg = GraphBuilder(merge_entities=True, enable_temporal=True).build(sources)
# Graph analytics
analyzer = GraphAnalyzer()
analysis = analyzer.analyze_graph(kg) # full graph metrics
centrality = CentralityCalculator()
degree = centrality.calculate_degree_centrality(kg) # most-connected entities
betweenness = centrality.calculate_betweenness_centrality(kg)
communities = CommunityDetector().detect_communities(kg, method="louvain") # natural clusters
path = PathFinder().find_shortest_path(kg, "alice_chen", "contract_001")
predictions = LinkPredictor().predict_links(kg, top_k=10) # relationship predictions
# Bi-temporal facts - track valid time vs. recorded time independently
fact = BiTemporalFact(
valid_from=datetime(2024, 3, 1),
valid_until=datetime(2025, 1, 1),
recorded_at=datetime(2024, 3, 5),
)
semantica.reasoning: Chuỗi chuyển tiếp, Rete, Datalog, SPARQL
Chạy suy luận dựa trên quy tắc có thể giải thích được, không phải hộp đen.
from semantica.reasoning import ReteEngine, Rule, Fact, RuleType
rete = ReteEngine()
rete.build_network([
Rule(
rule_id="aml_flag",
name="Flag high-risk transactions",
conditions=[
{"field": "amount", "operator": ">", "value": 10_000},
{"field": "country", "operator": "in", "value": ["IR", "KP", "SY"]},
],
conclusion="flag_for_compliance_review",
rule_type=RuleType.IMPLICATION,
),
Rule(
rule_id="velocity_check",
name="Flag rapid sequential transfers",
conditions=[
{"field": "transfers_in_1h", "operator": ">", "value": 5},
{"field": "total_amount", "operator": ">", "value": 50_000},
],
conclusion="flag_velocity_breach",
rule_type=RuleType.IMPLICATION,
),
])
rete.add_fact(Fact("tx_001", "transaction", [{"amount": 15_000, "country": "IR"}]))
flagged = rete.match_patterns()
# → [{"rule": "aml_flag", "matched_facts": ["tx_001"], "conclusion": "flag_for_compliance_review"}]
Giới hạn hiện tại:
ReteEngineTrình so khớp điều kiện nút alpha của nó rất đơn giản trong bản phát hành này — xác thựcmatch_patterns()đầu ra dựa trên bộ quy tắc thực tế của bạn trước khi nối nó vào cổng tuân thủ sản xuất; Đánh giá điều kiện có chọn lọc hơn nằm trong lộ trình.
# Recursive Datalog - natural language for graph queries
from semantica.reasoning import DatalogReasoner
engine = DatalogReasoner()
engine.add_fact("parent(tom, bob)")
engine.add_fact("parent(bob, ann)")
engine.add_fact("parent(ann, pat)")
engine.add_rule("ancestor(X, Y) :- parent(X, Y).")
engine.add_rule("ancestor(X, Z) :- parent(X, Y), ancestor(Y, Z).")
ancestors = engine.query("ancestor(tom, ?X)")
# → [{"X": "bob"}, {"X": "ann"}, {"X": "pat"}]
# Explainable reasoning - trace the path, not just the answer
from semantica.reasoning import ExplanationGenerator, Reasoner
reasoner = Reasoner()
reasoner.add_fact("parent(tom, bob)")
reasoner.add_rule("ancestor(X, Y) :- parent(X, Y)")
result = reasoner.forward_chain()
explainer = ExplanationGenerator()
explanation = explainer.generate_explanation(result)
# → Explanation(conclusion="...", steps=[ReasoningStep(...)], justification=Justification(...))
semantica.vector_store: Tìm kiếm ngữ nghĩa kết hợp và lọc
Cửa hàng vectơ thả vào với nhiều phụ trợ, tìm kiếm kết hợp và truy xuất nhận biết quyết định.
from semantica.vector_store import VectorStore, HybridSearch
# In-memory backend shown here: HybridSearch and explain_decision() work out of the box.
# Swap backend="qdrant" / "weaviate" / "milvus" / "pinecone" / "pgvector" / "faiss" once you
# scale past a single process — search() and store_decision() work identically on all of them.
vs = VectorStore(backend="inmemory", dimension=1536)
# Store a decision with scenario description and outcome
vs.store_decision(
scenario="Personal loan A-7291, $85k income, 31% DTI, 3yr employment",
outcome="approved",
confidence=0.94,
category="loan_underwriting",
)
# Semantic similarity search
results = vs.search(
query="personal loan approval with low DTI",
limit=10,
)
# Hybrid search - dense + sparse retrieval in one pass with RRF fusion
hs = HybridSearch(vector_store=vs)
hits = hs.search("high-risk transactions 2024")
# Explain why a decision was retrieved
explanation = vs.explain_decision(results[0]["id"])
Phần phụ trợ: faiss · qdrant · weaviate · milvus · pinecone · pgvector · sqlite · inmemory
semantica.split: Phân đoạn tài liệu gốc GraphRAG
Phân tách nhận biết KG giúp duy trì ranh giới thực thể, bộ ba quan hệ và khái niệm bản thể luận, những điều cần thiết cho quy trình GraphRAG.
from semantica.split import TextSplitter, EntityAwareChunker, RelationAwareChunker
text = open("contracts/master_agreement.txt").read()
# Standard recursive chunking
chunks = TextSplitter(method="recursive", chunk_size=1000, chunk_overlap=200).split(text)
# Entity-aware chunking - never splits a named entity across chunks (GraphRAG)
chunks = TextSplitter(method="entity_aware", ner_method="llm", chunk_size=1000).split(text)
# Relation-aware chunking - preserves (subject, predicate, object) triplets intact
chunks = RelationAwareChunker(chunk_size=1000, preserve_triplets=True).chunk(text)
# Graph-based chunking - uses centrality to find natural community boundaries
chunks = TextSplitter(method="graph_based", chunk_size=1000).split(text)
# Hierarchical chunking - multi-level (section → paragraph → sentence)
chunks = TextSplitter(method="hierarchical", levels=["section", "paragraph"]).split(text)
Các phương pháp được hỗ trợ: recursive · token · sentence · paragraph · semantic_transformer · entity_aware · relation_aware · graph_based · ontology_aware · hierarchical · community_detection · centrality_based · llm
semantica.provenance: Dòng W3C PROV-O
Mọi sự thật đều được liên kết với nguồn của nó. Không có hộp đen, không có đầu ra bí ẩn.
from semantica.provenance import ProvenanceManager
prov = ProvenanceManager(storage_path="./provenance.db")
# Track where every entity came from
prov.track_entity(
entity_id="acme_corp",
source="contracts/acme_master_agreement_2024.pdf",
metadata={"page": 1, "confidence": 0.97, "extractor": "NamedEntityRecognizer"},
)
# Track a relationship's provenance - entity linkage travels in metadata
prov.track_relationship(
relationship_id="alice_works_for_acme",
source="hr_records/employees_q1_2024.csv",
metadata={"source_entity_id": "alice_chen", "target_entity_id": "acme_corp"},
)
# Answer "where did this come from?"
lineage = prov.get_lineage("acme_corp")
trail = prov.trace_lineage("alice_chen") # full ancestor chain
entry = prov.get_provenance("acme_corp")
semantica.ontology: Tạo OWL, Xác thực SHACL
Tạo bản thể luận từ dữ liệu, xác thực hình dạng và quản lý từ vựng của bạn.
from semantica.ontology import OntologyGenerator, OntologyValidator
data = {
"entities": [
{"id": "acme_corp", "type": "Organization", "industry": "SaaS", "founded": 2012},
{"id": "alice_chen", "type": "Person", "role": "CTO", "since": 2019},
],
"relationships": [
{"source": "alice_chen", "target": "acme_corp", "type": "works_for"},
],
}
gen = OntologyGenerator(base_uri="https://semantica.dev/ontology/")
ontology = gen.generate_ontology(data)
classes = gen.infer_classes(data)
props = gen.infer_properties(data, classes)
optimized = gen.optimize_ontology(ontology)
# Validate against SHACL shapes
validator = OntologyValidator()
report = validator.validate(ontology)
# → ValidationResult(valid=True, consistent=True, satisfiable=True, errors=[], warnings=[])
semantica.conflicts: Phát hiện và giải quyết xung đột
Phát hiện và giải quyết các sự kiện xung đột từ nhiều nguồn trước khi chúng làm hỏng nền tảng kiến thức của bạn.
from semantica.conflicts import ConflictDetector, ConflictResolver, SourceTracker
entities_from_source_a = [
{"id": "alice_chen", "role": "CTO", "salary": 250_000, "start_date": "2019-03-01"},
]
entities_from_source_b = [
{"id": "alice_chen", "role": "VP Eng", "salary": 275_000, "start_date": "2019-03-01"},
]
# Detect all conflict types: value, type, relationship, temporal, logical
detector = ConflictDetector()
conflicts = detector.detect_conflicts(entities_from_source_a + entities_from_source_b)
# → [Conflict(entity="alice_chen", field="role", values=["CTO","VP Eng"], severity="HIGH"),
# Conflict(entity="alice_chen", field="salary", values=[250000,275000], severity="MEDIUM")]
# Resolve using multiple strategies
resolver = ConflictResolver()
resolved = resolver.resolve_conflicts(conflicts, strategy="credibility_weighted") # weighted by source trust
resolved = resolver.resolve_conflicts(conflicts, strategy="most_recent") # prefer most recent
resolved = resolver.resolve_conflicts(conflicts, strategy="voting") # majority wins
# Track source credibility over time
tracker = SourceTracker()
tracker.register_source("source_a", source_type="document", credibility_score=0.85)
tracker.register_source("source_b", source_type="document", credibility_score=0.72)
semantica.deduplication: Độ phân giải thực thể ở quy mô
Chặn, phân cụm và hợp nhất các bản sao có sự tương đồng về ngữ nghĩa.
from semantica.deduplication import DuplicateDetector, EntityMerger
entities = [
{"id": "e1", "name": "Acme Corporation", "domain": "acme.com"},
{"id": "e2", "name": "Acme Corp.", "domain": "acme.com"},
{"id": "e3", "name": "ACME Corp", "domain": "acme.co"},
{"id": "e4", "name": "Globex Industries", "domain": "globex.com"},
]
detector = DuplicateDetector(similarity_threshold=0.75, use_clustering=True)
candidates = detector.detect_duplicates(entities)
groups = detector.detect_duplicate_groups(entities)
# → DuplicateGroup(entities=["e1","e2","e3"], confidence=0.91, strategy="semantic+blocking")
merger = EntityMerger(preserve_provenance=True)
ops = merger.merge_duplicates(entities, strategy="keep_most_complete")
history = merger.get_merge_history()
semantica.normalize: Chuẩn hóa và làm sạch dữ liệu
Chuẩn hóa văn bản, thực thể, ngày tháng, số và mã hóa trước khi xây dựng biểu đồ tri thức của bạn.
from semantica.normalize import (
TextNormalizer,
EntityNormalizer,
DateNormalizer,
NumberNormalizer,
DataCleaner,
)
# Unicode, whitespace, casing, HTML tags, smart quotes
text = TextNormalizer().normalize(" Acme Corp.'s Q4 report... ")
# → "Acme Corp.'s Q4 report..."
# Alias resolution + entity disambiguation with confidence scores
canonical = EntityNormalizer().normalize_entity("ACME Corp.")
# → NormalizedEntity(canonical="Acme Corporation", type="Organization", confidence=0.91)
# Natural language date parsing with timezone conversion
dt = DateNormalizer().normalize_date("3 weeks ago")
# → datetime(2026, 7, 1, tzinfo=UTC)
# Unit conversion and currency normalization
price = NumberNormalizer().normalize_number("$1.25M USD")
# → NormalizedNumber(value=1_250_000, currency="USD")
# Deduplicate, validate, and impute missing values across a dataset
clean = DataCleaner().clean_data(records, remove_duplicates=True, handle_missing=True)
semantica.pipeline: DSL đường ống
Soạn thảo việc nhập, trích xuất và xây dựng biểu đồ thành một quy trình khai báo, song song.
from semantica.pipeline import PipelineBuilder, ExecutionEngine
builder = PipelineBuilder()
# add_step() returns the created PipelineStep, not the builder, so these don't chain
builder.add_step("ingest", step_type="ingest", source="./contracts/", recursive=True)
builder.add_step("extract", step_type="ner_extract")
builder.add_step("relations", step_type="relation_extract")
builder.add_step("build_kg", step_type="kg_build", merge_entities=True)
builder.add_step("deduplicate", step_type="deduplicate", threshold=0.75)
builder.add_step("export", step_type="export", format="turtle", output="kg.ttl")
# connect_steps() and set_parallelism() return the builder, so these do chain
pipeline = (
builder
.connect_steps("ingest", "extract")
.connect_steps("extract", "relations")
.connect_steps("relations", "build_kg")
.connect_steps("build_kg", "deduplicate")
.connect_steps("deduplicate", "export")
.set_parallelism(4)
.build(name="contracts_pipeline")
)
engine = ExecutionEngine()
result = engine.execute_pipeline(pipeline)
status = engine.get_pipeline_status(pipeline.name)
progress = engine.get_progress(pipeline.name)
Trí tuệ thời gian: Đồ thị hai thời gian và du hành thời gian
Theo dõi thời điểm sự thật là đúng trên thế giới so với khi họ ở đó ghi lạivà truy vấn một trong hai trục.
from semantica.context import ContextGraph
from semantica.kg import (
BiTemporalFact,
TemporalGraphQuery,
TemporalNormalizer,
)
from datetime import datetime
graph = ContextGraph(advanced_analytics=True)
graph.add_node("alice_chen", "Person", role="VP Engineering")
graph.add_node("acme_corp", "Organization", valuation=1_200_000_000)
# A temporally-bounded edge - valid_from/valid_until define when it held true
graph.add_edge(
"alice_chen", "acme_corp", edge_type="works_for",
valid_from="2024-03-01T00:00:00", valid_until="2025-01-01T00:00:00",
)
# Point-in-time snapshots - replay history without reprocessing
snapshot_2023 = graph.state_at("2023-06-01")
snapshot_2024 = graph.state_at("2024-01-01")
# Bi-temporal facts - valid_time is when true in the world;
# recorded_at is when you learned about it
fact = BiTemporalFact(
valid_from=datetime(2024, 3, 1),
valid_until=datetime(2025, 1, 1),
recorded_at=datetime(2024, 3, 5),
)
# Query facts valid within a time window - to_kg_dict() is the official
# adapter that emits {"entities", "relationships"} with source_id/target_id
# keys, the shape query_time_range() expects (no manual mapping required)
kg = graph.to_kg_dict()
tq = TemporalGraphQuery()
facts_in_window = tq.query_time_range(
kg, query="valid_facts", start_time="2024-01-01", end_time="2024-12-31"
)
# Normalize natural language temporal expressions - returns a (start, end) range
norm = TemporalNormalizer()
start, end = norm.normalize("last quarter")
semantica.export: RDF, OWL, Sàn gỗ, Cypher, JSON-LD
Xuất sang bất kỳ định dạng nào theo yêu cầu của cơ quan quản lý, cơ sở dữ liệu đồ thị hoặc hệ thống hạ nguồn.
from semantica.export import (
RDFExporter,
JSONExporter,
ParquetExporter,
LPGExporter,
ReportGenerator,
)
kg = {"entities": [...], "relationships": [...]}
rdf = RDFExporter()
turtle_str = rdf.export_to_rdf(kg, format="turtle") # returns string
jsonld_str = rdf.export_to_rdf(kg, format="json-ld")
rdf.export(kg, "kg_audit.ttl", format="turtle")
rdf.export(kg, "kg_audit.jsonld", format="json-ld")
rdf.export(kg, "kg_audit.nt", format="n-triples")
# Columnar analytics - Snappy-compressed Parquet (writes kg_snapshot_entities.parquet
# and kg_snapshot_relationships.parquet)
ParquetExporter(compression="snappy").export_knowledge_graph(kg, "kg_snapshot")
# JSON knowledge graph
JSONExporter().export_knowledge_graph(kg, "kg.json")
# Neo4j / Memgraph Cypher statements for graph database import
LPGExporter().export(kg, "kg_import.cypher")
# Human-readable HTML report
ReportGenerator().generate_report(
{"title": "KG Audit Report", "summary": "Weekly ingestion summary", "metrics": {"entities": len(kg["entities"])}},
file_path="audit_report.html",
format="html",
)
semantica.visualization: Bàn làm việc đồ thị tương tác
Hiển thị các biểu đồ theo hướng bắt buộc, bản đồ cộng đồng, hệ thống phân cấp bản thể luận và bảng điều khiển thời gian.
from semantica.visualization import (
KGVisualizer,
OntologyVisualizer,
EmbeddingVisualizer,
TemporalVisualizer,
)
import numpy as np
kg = {"entities": [...], "relationships": [...]}
# Interactive force-directed graph (opens in browser)
viz = KGVisualizer(layout="force", color_scheme="default")
viz.visualize_network(kg, output="interactive", file_path="kg.html")
viz.visualize_communities(kg, communities, output="interactive")
viz.visualize_centrality(kg, centrality, centrality_type="degree")
viz.visualize_entity_types(kg, output="html", file_path="entity_types.html")
# Ontology class hierarchy
OntologyVisualizer().visualize_hierarchy(ontology, output="interactive")
# 2D embedding projection (UMAP / t-SNE / PCA)
EmbeddingVisualizer().visualize_2d_projection(
embeddings=np.array([...]),
labels=["entity_a", "entity_b"],
method="umap",
)
# Timeline scrubber - watch the graph evolve
TemporalVisualizer().visualize_timeline(kg, output="interactive")
Bối cảnh chia sẻ đa tác nhân với Agno
Một lớp thông minh được chia sẻ. Tất cả các tác nhân đọc và ghi vào cùng một biểu đồ ngữ cảnh.
# pip install semantica[agno]
from agno.agent import Agent
from agno.team import Team
from agno.models.anthropic import Claude
from semantica.context import ContextGraph
from semantica.vector_store import VectorStore
from integrations.agno import AgnoSharedContext, AgnoDecisionKit, AgnoKGToolkit
shared = AgnoSharedContext(
vector_store=VectorStore(backend="faiss"),
knowledge_graph=ContextGraph(advanced_analytics=True),
decision_tracking=True,
)
researcher = Agent(
name="Researcher",
model=Claude(id="claude-sonnet-4-5"),
memory=shared.bind_agent("researcher"),
tools=[AgnoKGToolkit(context=shared)],
)
analyst = Agent(
name="Analyst",
model=Claude(id="claude-sonnet-4-5"),
memory=shared.bind_agent("analyst"),
tools=[AgnoDecisionKit(context=shared)],
)
team = Team(agents=[researcher, analyst], mode="coordinate")
# Researcher's findings are instantly available to the Analyst - no copy, no sync
→ sổ ghi chép có thể chạy được trong sách nấu ăn, mỗi sản phẩm đều khép kín và có thể chạy trong vòng chưa đầy 5 phút
Thêm công thức nấu ăn
Công thức theo dõi kiểm toán hàng đầu là ở trên. Dưới đây là ba mẫu phổ biến hơn.
Đường dẫn GraphRAG từ đầu đến cuối
from semantica.ingest import FileIngestor
from semantica.split import TextSplitter
from semantica.semantic_extract import NamedEntityRecognizer, RelationExtractor
from semantica.kg import GraphBuilder
from semantica.vector_store import VectorStore, HybridSearch
from semantica.context import AgentContext
# 1. Ingest
docs = FileIngestor().ingest_directory("./docs/", recursive=True)
# 2. Entity-aware chunking - never splits an entity across a chunk boundary
splitter = TextSplitter(method="entity_aware", chunk_size=1000)
chunks = [splitter.split(doc["text"]) for doc in docs]
# 3. Extract entities and relations
ner = NamedEntityRecognizer(confidence_threshold=0.7)
rel_ext = RelationExtractor(confidence_threshold=0.6)
entities = [ner.extract_entities(chunk) for chunk_group in chunks for chunk in chunk_group]
# 4. Build KG
kg = GraphBuilder(merge_entities=True, enable_temporal=True).build(docs)
# 5. Hybrid retrieval
vs = VectorStore(backend="inmemory")
ctx = AgentContext(vector_store=vs, knowledge_graph=kg)
ctx.store("Alice approved the Acme renewal in Q1 2024", conversation_id="c1")
results = HybridSearch(vector_store=vs).search("who approved the renewal?")
Công cụ quy tắc AML
from semantica.reasoning import ReteEngine, Rule, Fact, RuleType
rete = ReteEngine()
rete.build_network([
Rule(
rule_id="sanctions_check",
name="Flag sanctioned-country transactions",
conditions=[
{"field": "amount", "operator": ">", "value": 10_000},
{"field": "country", "operator": "in", "value": ["IR", "KP", "SY", "CU"]},
],
conclusion="flag_for_compliance_review",
rule_type=RuleType.IMPLICATION,
),
])
# Run the rule across a batch of incoming transactions, not just one
for tx in [
Fact("tx_101", "transaction", [{"amount": 25_000, "country": "IR"}]),
Fact("tx_102", "transaction", [{"amount": 4_500, "country": "DE"}]),
Fact("tx_103", "transaction", [{"amount": 60_000, "country": "KP"}]),
]:
rete.add_fact(tx)
flagged = rete.match_patterns()
Thông báo trước đối sánh điều kiện tương tự như ở trên áp dụng - xác thực theo bộ quy tắc của bạn trước khi sử dụng sản xuất.
Từ bản thể đến tri thức-đồ thị trong một lần
from semantica.ingest import FileIngestor
from semantica.semantic_extract import NamedEntityRecognizer, RelationExtractor
from semantica.kg import GraphBuilder
from semantica.ontology import OntologyGenerator, OntologyValidator
from semantica.export import RDFExporter
sources = FileIngestor().ingest_directory("./contracts/")
ner = NamedEntityRecognizer(confidence_threshold=0.7)
entities = ner.process_batch([s["text"] for s in sources])
kg = GraphBuilder(merge_entities=True).build(sources)
gen = OntologyGenerator(base_uri="https://myco.dev/ontology/")
ont = gen.generate_ontology({"entities": entities[0], "relationships": []})
report = OntologyValidator().validate(ont)
if report.valid:
RDFExporter().export({"entities": entities[0]}, "ontology.ttl", format="turtle")
Các tính năng trong nháy mắt
| Khả năng | Điểm nổi bật |
|---|---|
| Đồ thị bối cảnh | Biểu đồ có thể truy vấn của các thực thể, quyết định, mối quan hệ; liên kết nhân quả; điều hướng đồ thị chéo |
| Quyết định thông minh | record_decision · trace_decision_chain · find_similar_decisions · analyze_decision_impact · check_decision_rules |
| Trí tuệ tạm thời | Ảnh chụp nhanh thời điểm · Đại số khoảng Allen (13 quan hệ) · TemporalNormalizer · xuất xứ hai thời gian |
| Thông minh khoảng cách | Ma trận khoảng cách ngữ nghĩa N×N · trực quan hóa chế độ bản ngã · dải khoảng cách · nhúng bộ đệm |
| Trích xuất ngữ nghĩa | NER · trích xuất quan hệ · phát hiện sự kiện · tạo bộ ba · coreference |
| Động cơ suy luận | Chuỗi tiến · Rete · suy diễn · bắt cóc · SPARQL · Datalog với đầu ra có thể giải thích được |
| Phân đoạn đồ thịRAG | Nhận biết thực thể · nhận biết mối quan hệ · dựa trên đồ thị · nhận biết bản thể học · phân đoạn phát hiện cộng đồng |
| Phát hiện xung đột | Giá trị/loại/mối quan hệ/xung đột thời gian/logic · nhiều chiến lược giải quyết |
| Xuất xứ | W3C PROV-O · mọi sự kiện đều được truy tìm nguồn gốc · xuất nhật ký kiểm tra JSON/CSV/RDF |
| Trung tâm bản thể học | SHACL Studio · trình soạn thảo trực quan · sắp xếp chéo bản thể · bảng điều khiển tình trạng |
| Cửa Hàng Vector | FAISS · Pinecone · Weaviate · Qdrant · Milvus · PgVector · tìm kiếm kết hợp + lọc |
| Cơ sở dữ liệu đồ thị (LPG) | Neo4j · FalkorDB · AGE Apache · AWS Neptune |
| Ba cửa hàng (RDF) | Oxigraph (được nhúng) · Blazegraph · Apache Jena · Eclipse RDF4J · hợp nhất TripletStore giao diện · Truy vấn SPARQL & tải hàng loạt |
| Nền tảng dữ liệu doanh nghiệp | Databricks (DatabricksIngestor: Danh mục Unity + Hồ Delta, PAT/OAuth M2M, nhập bảng/truy vấn, xem xét nội tâm danh mục/lược đồ/bảng/dòng dõi) · Bông tuyết (SnowflakeIngestor: kho/cơ sở dữ liệu/lược đồ, mật khẩu/cặp khóa/xác thực OAuth) |
| LLM Nhà cung cấp | Tất cả đã được hỗ trợ ngày hôm nay: OpenAI (GPT-4o, o1, o3) · Anthropic (Claude) · Google Gemini · Mistral · Meta Llama · Groq · Cohere · Azure OpenAI · AWS Bedrock · Ollama · DeepSeek · Sự bối rối · Cùng nhau AI · Pháo hoa AI · Tái tạo · HuggingFace · thông qua semantica.llms và LiteLLM |
Hiệu suất
Điểm chuẩn từ v0.5.0 trên biểu đồ sản xuất 118.000 nút:
| hoạt động | trước đây | Sau | Cải tiến |
|---|---|---|---|
| Tìm kiếm nút (nút 118k) | 24 mili giây | 0,004 mili giây | 6.000× nhanh hơn |
| Nhúng bộ nhớ đệm | tải lạnh | bộ đệm dựa trên sửa đổi | 10× thông lượng |
| Sao chép ngữ nghĩa | đường cơ sở | thế hệ ứng viên được tối ưu hóa | 6,98× nhanh hơn |
| Thế hệ ứng viên | đường cơ sở | chiến lược chặn | 63.6% nhanh hơn |
Được đo trên biểu đồ sản xuất 118.000 nút (AMD EPYC, RAM 64 GB); số liệu loại bỏ trùng lặp/tạo ứng cử viên là các phép đo lịch sử được ghi lại trong CHANGELOG.md thay vì tự động tests/ khẳng định. Các kết quả khác nhau tùy theo phần cứng, cấu trúc liên kết tập dữ liệu và lựa chọn phụ trợ - chạy pytest tests/vector_store/test_performance_benchmarks.py -s để đo dữ liệu của riêng bạn.
CLI
Mọi khả năng đều có sẵn từ thiết bị đầu cuối. CLI đi kèm với gói, không cần cài đặt riêng.
pip install semantica
semantica # startup dashboard
semantica doctor # health check
semantica --help # full grouped command reference
Bắt đầu với semantica, xác minh với doctor, xây dựng biểu đồ và khám phá các nhóm lệnh từ một thiết bị đầu cuối.
Các nhóm lệnh: ingest · parse · extract · kg · reason · decision · temporal · provenance · ontology · embed · deduplicate · validate · export · visualize · pipeline · server · explorer · mcp · doctor · shell · init · watch
Tích hợp
Gói plugin gốc cho Claude Code, Cursor, Codex, Windsurf, Cline, Continue, VS Code và OpenClaw; máy chủ MCP đầy đủ tính năng dành cho mọi ứng dụng khách tương thích với MCP; REST API toàn diện; và hỗ trợ Agno và CrewAI hạng nhất cho các khung tác nhân. Mọi nhà cung cấp LLM chính đều đã được hỗ trợ thông qua semantica.llms và LiteLLM: OpenAI, Anthropic, Gemini, Mistral, Llama, Groq, Cohere, Azure, Bedrock, Ollama, DeepSeek, HuggingFace, v.v.
Quá trình thiết lập MCP mất 30 giây — xem Máy chủ MCP bên dưới.
Ma trận tích hợp đầy đủ (trình chỉnh sửa, ứng dụng khách MCP, ứng dụng khách REST, khung tác nhân)
| Gói plugin gốc | MCP Máy chủ + Plugin | ||||||
|---|---|---|---|---|---|---|---|
|
Claude Code Kỹ năng · đại lý · móc |
Cursor Kỹ năng · đại lý |
Codex CLI Kỹ năng · đại lý |
Windsurf phần bổ trợ |
Cline phần bổ trợ |
Tiếp tục phần bổ trợ |
VS Code phần bổ trợ |
OpenClaw MCP + phần bổ trợ |
| Máy chủ MCP | Còn lại API | ||||||
|
Claude Máy tính để bàn máy chủ MCP |
GitHub Copilot Còn lại API |
Mã Roo Còn lại API |
Ngỗng Còn lại API |
Mã Kilo Còn lại API |
Người trợ giúp Còn lại API |
Amazon Q Còn lại API |
Zed Còn lại API |
Khung tác nhân
Máy chủ MCP
Kết nối bất kỳ ứng dụng khách nào tương thích với MCP (Claude Desktop, Windsurf, Cline, VS Code) trong 30 giây:
python -m semantica.mcp_server
# or via the installed entry point
semantica-mcp
{
"mcpServers": {
"semantica": { "command": "python", "args": ["-m", "semantica.mcp_server"] }
}
}
Công cụ được hiển thị trên MCP:
| Công cụ | Nó làm gì |
|---|---|
extract_entities |
NER trên bất kỳ văn bản nào |
extract_relations |
Trích xuất quan hệ |
record_decision |
Kiên trì một nút quyết định |
query_decisions |
Lịch sử quyết định tìm kiếm |
find_precedents |
Tra cứu tiền lệ ngữ nghĩa |
get_causal_chain |
Tổ tiên nhân quả đầy đủ |
add_entity |
Thêm nút KG |
add_relationship |
Thêm một cạnh KG |
run_reasoning |
Thực thi bộ quy tắc |
get_graph_analytics |
Trung tâm, cộng đồng |
export_graph |
Xuất sang RDF/JSON/Sàn gỗ |
get_graph_summary |
Thống kê đồ thị |
Còn lại API
# Start the backend
python -m semantica.server # port 8000
# Extract entities & relations via REST
curl -X POST http://localhost:8000/api/enrich/extract \
-H "Content-Type: application/json" \
-d '{"text": "Apple CEO Tim Cook announced record earnings."}'
# List recorded decisions
curl "http://localhost:8000/api/decisions?category=vendor_selection"
# Query the knowledge graph
curl "http://localhost:8000/api/graph/node/acme_corp/neighbors?depth=2"
Khoảng điểm cuối REST: enrich (trích xuất) · graph · decisions · reasoning · provenance · ontology · embeddings · search · export · pipeline · temporal · deduplication
Gói plugin
Kỹ năng miền: extract · ingest · query · ontology · validate · deduplicate · embed · reason · decision · causal · temporal · provenance · policy · explain · export · change · visualize
Đại lý chuyên ngành: kg-assistant · decision-advisor · explainability
Các gói dành cho Claude Code, Cursor, Codex, Windsurf, Cline, Continue, VS Code và OpenClaw trong plugins/.
Người khám phá kiến thức
Bàn làm việc đồ thị dựa trên trình duyệt. Xoay và thu phóng các biểu đồ trực tiếp, xóa dòng thời gian, xem xét chuỗi nhân quả của mọi quyết định, giải quyết các bản sao và tạo bản thể luận của bạn một cách trực quan. Được xây dựng trên React 19 + Sigma.js.
| Không gian làm việc | Bạn có thể làm gì |
|---|---|
| Sơ đồ tri thức | Canvas Sigma.js trực tiếp với bố cục ForceAtlas2, Chế độ Ego, bản đồ nhiệt khoảng cách ngữ nghĩa |
| Dòng thời gian | Xem qua các sự kiện tạm thời và xem biểu đồ phát triển |
| Quyết định | Duyệt qua chuỗi nhân quả đằng sau mỗi quyết định được ghi lại |
| Đăng ký | Nhật ký kiểm tra trực tiếp của mọi đột biến biểu đồ |
| Độ phân giải thực thể | Xem xét và hợp nhất các bản sao |
| Trung tâm bản thể học | SHACL Studio, trình soạn thảo trực quan, sắp xếp chéo bản thể, trình duyệt SKOS |
| dòng dõi | Trực quan hóa nguồn gốc W3C PROV-O cho mọi thực thể |
Cách bắt đầu nhanh nhất (không cần Node.js):
pip install "semantica[explorer]"
semantica-explorer --graph my_graph.json
# Dashboard opens at http://127.0.0.1:8000
Để thiết lập người đóng góp/máy chủ nhà phát triển: explorer/README.md: Hướng dẫn thiết lập cục bộ
Có gì mới trong v0.6.6
Bản phát hành bảo mật - nên nâng cấp. Các bản sửa lỗi cho một loạt lỗ hổng được tiết lộ riêng bao gồm sao lưu/khôi phục, xuất cơ sở dữ liệu, yêu cầu gửi đi và chương trình phụ trợ lưu trữ bộ ba, cùng với việc tăng cường SSRF trong quá trình nhập:
- Truyền tải đường dẫn khôi phục Tarball:
semantica backup restorehiện xác thực mọi thành viên lưu trữ để ngăn chặn đường dẫn và từ chối thoát liên kết tượng trưng/liên kết cứng trước khi trích xuất - Việc chèn SQL tiềm ẩn vào
DataExporter.export_table_data(): tên bảng/lược đồ hiện nằm trong danh sách nhận dạng được phép vàwhere/order_bycác mảnh đã được kiểm tra danh sách chặn - TOCTOU liên kết lại DNS trong bộ bảo vệ SSRF được chia sẻ: IP đã được giải quyết vượt qua quá trình xác thực hiện là IP được ghim vào, kết thúc cuộc đua kiểm tra rồi sử dụng (cũng đóng
100.64.0.0/10khoảng cách CGNAT) - XSS được lưu trữ trong tạo báo cáo HTML và IRI đối tượng SPARQL không được xác thực trong AnzoStore (chèn SPARQL): cả hai hiện đều thoát/xác thực trước khi nội suy
Authorization/Proxy-Authorizationrò rỉ thông tin xác thực trên các chuyển hướng, cộng Khoảng trống SSRF trongFeedIngestor/FeedMonitor,RepoIngestorvà đường dẫn nhập MCP/public-API: tất cả bây giờ đều định tuyến thông qua bộ bảo vệ SSRF được chia sẻ, an toàn chuyển hướng- Nội dung tiêu đề phản hồi HTTP và DoS bộ nhớ không giới hạn trong Explorer API, và một
fastapi/python-multipartLàm lại (PYSEC-2024-38): nâng sàn, vệ sinh đầu vào, giới hạn nhóm ứng viên
Ngoài ra tàu: Tích hợp CrewAI hạng nhất (semantica[crewai], công cụ trích xuất/quyết định + nguồn kiến thức), ContextGraph rút lại và thanh lọc (Xóa theo kiểu GDPR mà không cần xóa đầy đủ clear()), một tuyên bố Từ vựng Semantica RDF với các IRI thực thể/mối quan hệ xác định (xuất khẩu ổn định, có thể thay đổi) và dấu thời gian nhận biết múi giờ ngang qua export/ và provenance/.
→ Ghi chú phát hành đầy đủ · Nhật ký thay đổi
Được xây dựng cho các miền có giá trị đặt cược cao
Semantica được thiết kế cho các môi trường mà đầu ra AI phải có thể giải thích được, có thể kiểm tra được và có thể bảo vệ được, đồng thời dữ liệu không thể rời khỏi cơ sở hạ tầng của bạn. Có khả năng tự lưu trữ mà không cần khóa nhà cung cấp, nó được xây dựng dành cho các tổ chức xử lý dữ liệu bí mật hoặc mật cũng như dành cho các ngành được quản lý đang theo đuổi lộ trình kiểm toán:
- Tài chính: Lộ trình kiểm tra bảo lãnh khoản vay, phát hiện gian lận, tuân thủ AML, biểu đồ kiến thức về rủi ro quy định
- Chăm sóc sức khỏe: Hỗ trợ quyết định lâm sàng, biểu đồ tương tác thuốc và quá trình kiểm tra an toàn bệnh nhân
- Pháp lý: Nghiên cứu dựa trên bằng chứng, phân tích hợp đồng, lý luận án lệ và theo dõi đặc quyền
- Chính phủ & Quốc phòng: Hồ sơ quyết định chính sách, quản trị thông tin mật và báo cáo theo quy định, được lưu trữ hoàn toàn tự lưu trữ và không có dữ liệu nào rời khỏi phạm vi của bạn
- Thực thi pháp luật: Liên kết vụ án, chuỗi xuất xứ bằng chứng và biểu đồ kiến thức điều tra được pháp luật giám sát
- An ninh mạng: Phân bổ mối đe dọa, mốc thời gian ứng phó sự cố và theo dõi xuất xứ IOC
- Hệ thống tự trị: Nhật ký quyết định, xác nhận an toàn và AI có thể giải thích để chứng nhận
⚠️ Đây là khả năng giải thích ở cấp hệ thống, không phải khả năng giải thích của mô hình nền tảng. Semantica không phơi bày, tái tạo hoặc giải thích những gì xảy ra bên trong mô hình LLM/nền tảng — lý luận bên trong hoặc chuỗi suy nghĩ của nó vẫn không rõ ràng, giống như đối với bất kỳ hệ thống bên ngoài nào. Những gì Semantica giải thích là bên ngoài mô hình: bối cảnh và dữ liệu được cung cấp, quyết định được đưa ra, nguồn gốc của nó, các mối quan hệ liên quan, các chính sách được áp dụng và quá trình thực hiện đầy đủ. Nói tóm lại, Semantica giải thích và kiểm tra những gì hệ thống AI đã làm chứ không phải lý luận nội bộ riêng tư của LLM.
Cài đặt
pip install semantica # core
pip install semantica[all] # everything
pip install semantica[agno] # Agno multi-agent integration
pip install semantica[crewai] # CrewAI integration
pip install semantica[llm-litellm] # OpenAI, Anthropic, Gemini, Mistral, Llama, Groq, Cohere, Bedrock, Ollama, DeepSeek, and more
pip install semantica[graph-neo4j] # Neo4j graph store (LPG)
pip install semantica[graph-falkordb] # FalkorDB graph store (LPG)
pip install semantica[graph-apache-age] # Apache AGE graph store (LPG)
pip install semantica[graph-amazon-neptune] # AWS Neptune graph store (LPG)
pip install semantica[tripletstore-oxigraph] # Embedded in-memory/on-disk RDF store
# RDF triple stores (Blazegraph, Apache Jena, Eclipse RDF4J) need no extra:
# semantica.triplet_store talks SPARQL over HTTP using the core `requests` dependency
pip install semantica[vectorstore-qdrant] # Qdrant vector store
pip install semantica[vectorstore-pinecone] # Pinecone vector store
pip install semantica[db-snowflake] # Snowflake
pip install semantica[db-databricks] # Databricks (SDK + SQL connector)
pip install semantica[ingest-parquet] # Parquet / PyArrow
pip install semantica[ingest-arrow] # Apache Arrow, Feather, IPC
pip install semantica[viz] # HTML interactive visualization
pip install semantica[watch] # Directory file watcher
pip install semantica[explorer] # Knowledge Explorer dashboard
Để triển khai sản xuất, hãy sử dụng Docker hoặc Kubernetes thay vì cục bộ pip install. Đặt SEMANTICA_SECRET_KEY, định cấu hình kho lưu trữ đồ thị LPG liên tục (Neo4j / FalkorDB / Apache AGE / AWS Neptune) và/hoặc kho lưu trữ ba RDF (Blazegraph / Apache Jena / Eclipse RDF4J) và trỏ kho lưu trữ vectơ vào một chương trình phụ trợ được lưu trữ (Qdrant / Pinecone). Xem KIẾN TRÚC.md cho cấu trúc liên kết triển khai đầy đủ.
# From source
git clone https://github.com/semantica-agi/semantica.git
cd semantica && pip install -e ".[dev]" && pytest tests/
Doanh nghiệp
Triển khai tại chỗ · Đám mây riêng · Triển khai miền tùy chỉnh · Hỗ trợ được hỗ trợ bởi SLA · Dịch vụ chuyên nghiệp cho các ngành được quản lý (tài chính, y tế, pháp lý, chính phủ).
getemantica.ai cho các giải pháp doanh nghiệp và giá cả.
Cộng đồng & Hỗ trợ
| Bất hòa | discord.gg/sV34vps5hH: trợ giúp, giới thiệu và thông báo theo thời gian thực |
| GitHub Thảo luận | Hỏi đáp và yêu cầu tính năng |
| GitHub vấn đề | Báo cáo lỗi |
| Tài liệu | docs.getsemantica.ai |
| Sách dạy nấu ăn | Máy tính xách tay Jupyter có thể chạy được |
| Nhật ký thay đổi | CHANGELOG.md · Ghi chú phát hành |
Lịch sử ngôi sao
Người đóng góp
Đóng góp
Mọi đóng góp đều được hoan nghênh: sửa lỗi, tính năng, kiểm tra và tài liệu.
- Fork repo và tạo một nhánh
pip install -e ".[dev]"- Viết bài kiểm tra cùng với những thay đổi của bạn (
pytest tests/) - Mở PR và gắn thẻ
@KaifAhmad1để xem xét
Xem ĐÓNG GÓP.md để được hướng dẫn đầy đủ.
Trích dẫn chúng tôi
Nếu bạn sử dụng Semantica trong hệ thống nghiên cứu hoặc sản xuất của mình, vui lòng trích dẫn nó là:
@software{semantica2026,
title = {Semantica: Graph-Native Infrastructure for Context and Accountable AI Systems},
author = {Semantica},
year = {2026},
url = {https://github.com/semantica-agi/semantica}
}
Tất cả các định dạng trích dẫn (APA, MLA, Chicago, IEEE) đều có trên Trích dẫn trang - mọi định dạng đều thuộc tính tác giả ngữ nghĩa, không phải là những người đóng góp cá nhân.
Giấy phép MIT · Được xây dựng bởi ngữ nghĩa
GitHub · Bất hòa · Twitter/X · Trang web · Tài liệu · PyPI
Nếu dự án này giúp bạn xây dựng AI tốt hơn thì một ngôi sao có ý nghĩa rất lớn.
Tiếng Anh · tiếng Đức · người Pháp · tiếng Tây Ban Nha · tiếng Ý · người Bồ Đào Nha · العربية · اردو · हिन्दी · 中文 · 日本語 · 한국어
Dự án cùng danh mục
Trợ lý AI cá nhân của riêng bạn. Bất kỳ hệ điều hành nào. Bất kỳ nền tảng nào. Cách tôm hùm. 🦞
Hệ thống tối ưu hóa hiệu suất khai thác tác nhân. Kỹ năng, bản năng, trí nhớ, bảo mật và sự phát triển ưu tiên nghiên cứu cho Claude Code, Codex, Opencode, Cursor và hơn thế nữa.
Đại lý phát triển cùng bạn
Kỹ năng dành cho kỹ sư thực sự. Trực tiếp từ thư mục .agents của tôi.
Triển lãm bảo tàng do đại lý quản lý, được xây dựng trong Rust với Gajae-Code / LazyCodex — được phát triển và duy trì mà không có sự can thiệp của con người.