intellistream-sage-middleware


Nameintellistream-sage-middleware JSON
Version 0.1.3 PyPI version JSON
download
home_pageNone
SummarySAGE Framework - Middleware Services (Storage, Vector DB, Memory, etc.)
upload_time2025-08-08 11:39:40
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseMIT
keywords data api reasoning dataflow llm ml middleware framework rag intellistream ai sage
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            
# SAGE 微服务架构改造

## 📋 改造概述

本次改造将SAGE的集成式memory service重构为真正的服务化架构,符合您提出的要求:

1. ✅ **使用sage-kernel的BaseServiceTask** - 所有服务继承自`sage.kernels.runtime.service.base_service_task.BaseServiceTask`
2. ✅ **服务作为Task运行** - 服务本质上是特殊的Task,可以在DAG中作为节点运行
3. ✅ **移除服务启动脚本** - 不再有独立的服务启动器,服务由应用程序在构建DAG时初始化
4. ✅ **支持Ray分布式** - 服务可以作为Ray Actor运行,支持集群部署

## 🏗️ 新架构

```
用户应用
    ↓ 注册服务
SAGE Environment
    ↓ 创建DAG
Service Tasks (BaseServiceTask)
    ├── KVService (键值存储)
    ├── VDBService (向量数据库) 
    └── MemoryOrchestratorService (记忆编排)
        ↓ 队列通信
    其他Function Tasks
```

## 🔧 核心组件

### 1. KVService
- **文件**: `src/sage/service/kv/kv_service.py`
- **基类**: `BaseServiceTask`
- **后端**: 内存 或 Redis
- **方法**: `get()`, `put()`, `delete()`, `list_keys()`, `clear()`

### 2. VDBService  
- **文件**: `src/sage/service/vdb/vdb_service.py`
- **基类**: `BaseServiceTask`
- **后端**: ChromaDB
- **方法**: `add()`, `search()`, `get()`, `delete()`, `update()`

### 3. MemoryOrchestratorService
- **文件**: `src/sage/service/memory_orchestrator/memory_service.py`
- **基类**: `BaseServiceTask`
- **功能**: 协调KV和VDB服务,提供统一记忆管理
- **方法**: `store_memory()`, `search_memories()`, `get_memory()`

## 🚀 使用方式

### 第一步:注册服务

```python
from sage.api.local_environment import LocalEnvironment
from sage.middleware.services import (
    create_kv_service_factory,
    create_vdb_service_factory,
    create_memory_service_factory
)

# 创建环境
env = LocalEnvironment("my_app", {})

# 注册服务
env.register_service("kv_service", KVService, create_kv_service_factory())
env.register_service("vdb_service", VDBService, create_vdb_service_factory()) 
env.register_service("memory_service", MemoryOrchestratorService, create_memory_service_factory())
```

### 第二步:在Function中使用

```python
from sage.api.function.base_function import BaseFunction

class MyProcessor(BaseFunction):
    def process(self, data):
        # 直接调用服务
        self.call_service["kv_service"].put("key1", data)
        result = self.call_service["memory_service"].store_memory(
            session_id="session_1",
            content=data['content'],
            vector=data['vector']
        )
        return result
```

### 第三步:构建DAG并运行

```python
# 创建数据流
stream = env.from_kafka_source(...)

# 应用处理函数
processed = stream.map(MyProcessor())

# 运行(服务自动启动)
env.execute()
```

## 📁 项目结构

```
packages/sage-middleware/
├── src/sage/service/
│   ├── __init__.py                     # 统一接口
│   ├── kv/kv_service.py               # KV服务任务
│   ├── vdb/vdb_service.py             # VDB服务任务
│   ├── memory_orchestrator/memory_service.py  # Memory编排服务
│   └── memory/                        # 旧版服务(兼容)
├── examples/
│   ├── dag_microservices_demo.py      # 完整使用演示
│   └── run_demo.sh                    # 快速启动脚本
├── MICROSERVICES_GUIDE.md             # 详细使用指南
└── README.md                          # 本文件
```

## 🎯 关键特性

### 1. 真正的服务化
- 每个服务都是独立的BaseServiceTask
- 服务可以单独运行、测试和扩展
- 支持不同的技术栈和存储后端

### 2. DAG集成
- 服务作为Task节点在DAG中运行
- 与其他数据处理Task无缝集成
- 统一的生命周期管理

### 3. 队列通信
- 使用SAGE的高性能队列机制
- 支持同步和异步调用
- 自动请求/响应匹配

### 4. 分布式支持
- 服务可以作为Ray Actor运行
- 支持跨节点服务调用
- 自动负载均衡和故障恢复

### 5. 应用控制
- 应用程序控制服务的启动和配置
- 不需要外部服务管理器
- 灵活的服务组合和依赖关系

## 📊 性能优势

1. **高效通信**: 队列机制比HTTP调用更高效
2. **内存优化**: 服务和数据处理共享内存空间
3. **批处理**: 支持批量服务调用
4. **并发处理**: 服务可以并发处理多个请求

## 🔄 迁移路径

### 从HTTP微服务迁移
- 移除HTTP客户端代码
- 使用`self.call_service[service_name].method()`替代HTTP调用
- 服务注册到SAGE环境而不是独立启动

### 从集成式服务迁移  
- 将大型服务拆分为独立的Service Task
- 使用服务调用替代直接方法调用
- 保持相同的业务逻辑和API

## 🧪 运行演示

```bash
# 快速启动
cd packages/sage-middleware
./examples/run_demo.sh

# 或直接运行Python
python examples/dag_microservices_demo.py
```

## 📚 参考文档

- **微服务指南**: [MICROSERVICES_GUIDE.md](MICROSERVICES_GUIDE.md)
- **SAGE文档**: [packages/sage-kernel/src/sage/runtime/service/README.md](../sage-kernel/src/sage/runtime/service/README.md)
- **BaseServiceTask**: [packages/sage-kernel/src/sage/runtime/service/base_service_task.py](../sage-kernel/src/sage/runtime/service/base_service_task.py)

---

## ✅ 改造成果

这次改造成功实现了您要求的所有目标:

1. ✅ **继承sage-kernel的BaseServiceTask** - 所有服务都继承正确的基类
2. ✅ **服务即Task** - 服务本质上是在DAG中运行的特殊Task
3. ✅ **应用控制** - 用户在构建DAG时初始化服务,而非独立启动脚本
4. ✅ **支持Ray** - 服务可以作为Ray Actor分布式运行
5. ✅ **队列通信** - 使用SAGE统一的高性能队列机制
6. ✅ **向后兼容** - 保留原有API兼容性

现在SAGE拥有了真正的服务化架构,每个服务都是独立的Task,可以灵活组合、分布式部署,完全符合现代微服务架构的设计理念!
=======
# SAGE Middleware - 中间件组件

SAGE Middleware提供中间件服务,包含LLM中间件、API服务、任务队列等企业级功能。

## 主要功能

### LLM中间件服务
- **多模型支持**: OpenAI、Ollama、智谱AI、Cohere等
- **统一API**: 标准化的LLM调用接口
- **高性能推理**: 基于vLLM的优化推理服务
- **模型管理**: 动态模型加载和卸载

### API服务
- **RESTful API**: 基于FastAPI的高性能API服务
- **认证授权**: JWT令牌和密码加密支持
- **服务发现**: 自动服务注册和发现

### 任务队列
- **异步处理**: 基于Celery的分布式任务队列
- **监控界面**: Flower监控和管理界面
- **容错机制**: 任务重试和错误处理

### 向量检索
- **FAISS集成**: 高性能向量相似度搜索
- **BM25搜索**: 传统文本检索算法
- **混合检索**: 向量和关键词混合检索

## 安装

```bash
pip install intellistream-sage-middleware
```

## 基本使用

### 启动LLM服务

```python
from sage.middleware.llm import LLMService

# 创建LLM服务
service = LLMService()

# 注册模型
service.register_model("gpt-3.5-turbo", provider="openai")
service.register_model("llama2", provider="ollama")

# 启动服务
service.start()
```

### API调用

```python
import requests

# 文本生成
response = requests.post("http://localhost:8000/generate", json={
    "model": "gpt-3.5-turbo",
    "prompt": "Hello, how are you?",
    "max_tokens": 100
})

result = response.json()
print(result["text"])
```

### 向量检索

```python
from sage.middleware.retrieval import VectorStore

# 创建向量存储
store = VectorStore()

# 添加文档
store.add_documents([
    "This is document 1",
    "This is document 2"
])

# 搜索
results = store.search("document", top_k=5)
for result in results:
    print(f"Score: {result.score}, Text: {result.text}")
```

## 配置

中间件服务可以通过环境变量或配置文件进行配置:

```yaml
# config.yaml
llm:
  providers:
    openai:
      api_key: "your-api-key"
    ollama:
      base_url: "http://localhost:11434"

api:
  host: "0.0.0.0"
  port: 8000
  
queue:
  broker: "redis://localhost:6379"
  backend: "redis://localhost:6379"
```

## 许可证

MIT License

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "intellistream-sage-middleware",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "data, api, reasoning, dataflow, llm, ml, middleware, framework, rag, intellistream, ai, sage",
    "author": null,
    "author_email": "IntelliStream Team <intellistream@outlook.com>",
    "download_url": null,
    "platform": null,
    "description": "\n# SAGE \u5fae\u670d\u52a1\u67b6\u6784\u6539\u9020\n\n## \ud83d\udccb \u6539\u9020\u6982\u8ff0\n\n\u672c\u6b21\u6539\u9020\u5c06SAGE\u7684\u96c6\u6210\u5f0fmemory service\u91cd\u6784\u4e3a\u771f\u6b63\u7684\u670d\u52a1\u5316\u67b6\u6784\uff0c\u7b26\u5408\u60a8\u63d0\u51fa\u7684\u8981\u6c42\uff1a\n\n1. \u2705 **\u4f7f\u7528sage-kernel\u7684BaseServiceTask** - \u6240\u6709\u670d\u52a1\u7ee7\u627f\u81ea`sage.kernels.runtime.service.base_service_task.BaseServiceTask`\n2. \u2705 **\u670d\u52a1\u4f5c\u4e3aTask\u8fd0\u884c** - \u670d\u52a1\u672c\u8d28\u4e0a\u662f\u7279\u6b8a\u7684Task\uff0c\u53ef\u4ee5\u5728DAG\u4e2d\u4f5c\u4e3a\u8282\u70b9\u8fd0\u884c\n3. \u2705 **\u79fb\u9664\u670d\u52a1\u542f\u52a8\u811a\u672c** - \u4e0d\u518d\u6709\u72ec\u7acb\u7684\u670d\u52a1\u542f\u52a8\u5668\uff0c\u670d\u52a1\u7531\u5e94\u7528\u7a0b\u5e8f\u5728\u6784\u5efaDAG\u65f6\u521d\u59cb\u5316\n4. \u2705 **\u652f\u6301Ray\u5206\u5e03\u5f0f** - \u670d\u52a1\u53ef\u4ee5\u4f5c\u4e3aRay Actor\u8fd0\u884c\uff0c\u652f\u6301\u96c6\u7fa4\u90e8\u7f72\n\n## \ud83c\udfd7\ufe0f \u65b0\u67b6\u6784\n\n```\n\u7528\u6237\u5e94\u7528\n    \u2193 \u6ce8\u518c\u670d\u52a1\nSAGE Environment\n    \u2193 \u521b\u5efaDAG\nService Tasks (BaseServiceTask)\n    \u251c\u2500\u2500 KVService (\u952e\u503c\u5b58\u50a8)\n    \u251c\u2500\u2500 VDBService (\u5411\u91cf\u6570\u636e\u5e93) \n    \u2514\u2500\u2500 MemoryOrchestratorService (\u8bb0\u5fc6\u7f16\u6392)\n        \u2193 \u961f\u5217\u901a\u4fe1\n    \u5176\u4ed6Function Tasks\n```\n\n## \ud83d\udd27 \u6838\u5fc3\u7ec4\u4ef6\n\n### 1. KVService\n- **\u6587\u4ef6**: `src/sage/service/kv/kv_service.py`\n- **\u57fa\u7c7b**: `BaseServiceTask`\n- **\u540e\u7aef**: \u5185\u5b58 \u6216 Redis\n- **\u65b9\u6cd5**: `get()`, `put()`, `delete()`, `list_keys()`, `clear()`\n\n### 2. VDBService  \n- **\u6587\u4ef6**: `src/sage/service/vdb/vdb_service.py`\n- **\u57fa\u7c7b**: `BaseServiceTask`\n- **\u540e\u7aef**: ChromaDB\n- **\u65b9\u6cd5**: `add()`, `search()`, `get()`, `delete()`, `update()`\n\n### 3. MemoryOrchestratorService\n- **\u6587\u4ef6**: `src/sage/service/memory_orchestrator/memory_service.py`\n- **\u57fa\u7c7b**: `BaseServiceTask`\n- **\u529f\u80fd**: \u534f\u8c03KV\u548cVDB\u670d\u52a1\uff0c\u63d0\u4f9b\u7edf\u4e00\u8bb0\u5fc6\u7ba1\u7406\n- **\u65b9\u6cd5**: `store_memory()`, `search_memories()`, `get_memory()`\n\n## \ud83d\ude80 \u4f7f\u7528\u65b9\u5f0f\n\n### \u7b2c\u4e00\u6b65\uff1a\u6ce8\u518c\u670d\u52a1\n\n```python\nfrom sage.api.local_environment import LocalEnvironment\nfrom sage.middleware.services import (\n    create_kv_service_factory,\n    create_vdb_service_factory,\n    create_memory_service_factory\n)\n\n# \u521b\u5efa\u73af\u5883\nenv = LocalEnvironment(\"my_app\", {})\n\n# \u6ce8\u518c\u670d\u52a1\nenv.register_service(\"kv_service\", KVService, create_kv_service_factory())\nenv.register_service(\"vdb_service\", VDBService, create_vdb_service_factory()) \nenv.register_service(\"memory_service\", MemoryOrchestratorService, create_memory_service_factory())\n```\n\n### \u7b2c\u4e8c\u6b65\uff1a\u5728Function\u4e2d\u4f7f\u7528\n\n```python\nfrom sage.api.function.base_function import BaseFunction\n\nclass MyProcessor(BaseFunction):\n    def process(self, data):\n        # \u76f4\u63a5\u8c03\u7528\u670d\u52a1\n        self.call_service[\"kv_service\"].put(\"key1\", data)\n        result = self.call_service[\"memory_service\"].store_memory(\n            session_id=\"session_1\",\n            content=data['content'],\n            vector=data['vector']\n        )\n        return result\n```\n\n### \u7b2c\u4e09\u6b65\uff1a\u6784\u5efaDAG\u5e76\u8fd0\u884c\n\n```python\n# \u521b\u5efa\u6570\u636e\u6d41\nstream = env.from_kafka_source(...)\n\n# \u5e94\u7528\u5904\u7406\u51fd\u6570\nprocessed = stream.map(MyProcessor())\n\n# \u8fd0\u884c\uff08\u670d\u52a1\u81ea\u52a8\u542f\u52a8\uff09\nenv.execute()\n```\n\n## \ud83d\udcc1 \u9879\u76ee\u7ed3\u6784\n\n```\npackages/sage-middleware/\n\u251c\u2500\u2500 src/sage/service/\n\u2502   \u251c\u2500\u2500 __init__.py                     # \u7edf\u4e00\u63a5\u53e3\n\u2502   \u251c\u2500\u2500 kv/kv_service.py               # KV\u670d\u52a1\u4efb\u52a1\n\u2502   \u251c\u2500\u2500 vdb/vdb_service.py             # VDB\u670d\u52a1\u4efb\u52a1\n\u2502   \u251c\u2500\u2500 memory_orchestrator/memory_service.py  # Memory\u7f16\u6392\u670d\u52a1\n\u2502   \u2514\u2500\u2500 memory/                        # \u65e7\u7248\u670d\u52a1(\u517c\u5bb9)\n\u251c\u2500\u2500 examples/\n\u2502   \u251c\u2500\u2500 dag_microservices_demo.py      # \u5b8c\u6574\u4f7f\u7528\u6f14\u793a\n\u2502   \u2514\u2500\u2500 run_demo.sh                    # \u5feb\u901f\u542f\u52a8\u811a\u672c\n\u251c\u2500\u2500 MICROSERVICES_GUIDE.md             # \u8be6\u7ec6\u4f7f\u7528\u6307\u5357\n\u2514\u2500\u2500 README.md                          # \u672c\u6587\u4ef6\n```\n\n## \ud83c\udfaf \u5173\u952e\u7279\u6027\n\n### 1. \u771f\u6b63\u7684\u670d\u52a1\u5316\n- \u6bcf\u4e2a\u670d\u52a1\u90fd\u662f\u72ec\u7acb\u7684BaseServiceTask\n- \u670d\u52a1\u53ef\u4ee5\u5355\u72ec\u8fd0\u884c\u3001\u6d4b\u8bd5\u548c\u6269\u5c55\n- \u652f\u6301\u4e0d\u540c\u7684\u6280\u672f\u6808\u548c\u5b58\u50a8\u540e\u7aef\n\n### 2. DAG\u96c6\u6210\n- \u670d\u52a1\u4f5c\u4e3aTask\u8282\u70b9\u5728DAG\u4e2d\u8fd0\u884c\n- \u4e0e\u5176\u4ed6\u6570\u636e\u5904\u7406Task\u65e0\u7f1d\u96c6\u6210\n- \u7edf\u4e00\u7684\u751f\u547d\u5468\u671f\u7ba1\u7406\n\n### 3. \u961f\u5217\u901a\u4fe1\n- \u4f7f\u7528SAGE\u7684\u9ad8\u6027\u80fd\u961f\u5217\u673a\u5236\n- \u652f\u6301\u540c\u6b65\u548c\u5f02\u6b65\u8c03\u7528\n- \u81ea\u52a8\u8bf7\u6c42/\u54cd\u5e94\u5339\u914d\n\n### 4. \u5206\u5e03\u5f0f\u652f\u6301\n- \u670d\u52a1\u53ef\u4ee5\u4f5c\u4e3aRay Actor\u8fd0\u884c\n- \u652f\u6301\u8de8\u8282\u70b9\u670d\u52a1\u8c03\u7528\n- \u81ea\u52a8\u8d1f\u8f7d\u5747\u8861\u548c\u6545\u969c\u6062\u590d\n\n### 5. \u5e94\u7528\u63a7\u5236\n- \u5e94\u7528\u7a0b\u5e8f\u63a7\u5236\u670d\u52a1\u7684\u542f\u52a8\u548c\u914d\u7f6e\n- \u4e0d\u9700\u8981\u5916\u90e8\u670d\u52a1\u7ba1\u7406\u5668\n- \u7075\u6d3b\u7684\u670d\u52a1\u7ec4\u5408\u548c\u4f9d\u8d56\u5173\u7cfb\n\n## \ud83d\udcca \u6027\u80fd\u4f18\u52bf\n\n1. **\u9ad8\u6548\u901a\u4fe1**: \u961f\u5217\u673a\u5236\u6bd4HTTP\u8c03\u7528\u66f4\u9ad8\u6548\n2. **\u5185\u5b58\u4f18\u5316**: \u670d\u52a1\u548c\u6570\u636e\u5904\u7406\u5171\u4eab\u5185\u5b58\u7a7a\u95f4\n3. **\u6279\u5904\u7406**: \u652f\u6301\u6279\u91cf\u670d\u52a1\u8c03\u7528\n4. **\u5e76\u53d1\u5904\u7406**: \u670d\u52a1\u53ef\u4ee5\u5e76\u53d1\u5904\u7406\u591a\u4e2a\u8bf7\u6c42\n\n## \ud83d\udd04 \u8fc1\u79fb\u8def\u5f84\n\n### \u4eceHTTP\u5fae\u670d\u52a1\u8fc1\u79fb\n- \u79fb\u9664HTTP\u5ba2\u6237\u7aef\u4ee3\u7801\n- \u4f7f\u7528`self.call_service[service_name].method()`\u66ff\u4ee3HTTP\u8c03\u7528\n- \u670d\u52a1\u6ce8\u518c\u5230SAGE\u73af\u5883\u800c\u4e0d\u662f\u72ec\u7acb\u542f\u52a8\n\n### \u4ece\u96c6\u6210\u5f0f\u670d\u52a1\u8fc1\u79fb  \n- \u5c06\u5927\u578b\u670d\u52a1\u62c6\u5206\u4e3a\u72ec\u7acb\u7684Service Task\n- \u4f7f\u7528\u670d\u52a1\u8c03\u7528\u66ff\u4ee3\u76f4\u63a5\u65b9\u6cd5\u8c03\u7528\n- \u4fdd\u6301\u76f8\u540c\u7684\u4e1a\u52a1\u903b\u8f91\u548cAPI\n\n## \ud83e\uddea \u8fd0\u884c\u6f14\u793a\n\n```bash\n# \u5feb\u901f\u542f\u52a8\ncd packages/sage-middleware\n./examples/run_demo.sh\n\n# \u6216\u76f4\u63a5\u8fd0\u884cPython\npython examples/dag_microservices_demo.py\n```\n\n## \ud83d\udcda \u53c2\u8003\u6587\u6863\n\n- **\u5fae\u670d\u52a1\u6307\u5357**: [MICROSERVICES_GUIDE.md](MICROSERVICES_GUIDE.md)\n- **SAGE\u6587\u6863**: [packages/sage-kernel/src/sage/runtime/service/README.md](../sage-kernel/src/sage/runtime/service/README.md)\n- **BaseServiceTask**: [packages/sage-kernel/src/sage/runtime/service/base_service_task.py](../sage-kernel/src/sage/runtime/service/base_service_task.py)\n\n---\n\n## \u2705 \u6539\u9020\u6210\u679c\n\n\u8fd9\u6b21\u6539\u9020\u6210\u529f\u5b9e\u73b0\u4e86\u60a8\u8981\u6c42\u7684\u6240\u6709\u76ee\u6807\uff1a\n\n1. \u2705 **\u7ee7\u627fsage-kernel\u7684BaseServiceTask** - \u6240\u6709\u670d\u52a1\u90fd\u7ee7\u627f\u6b63\u786e\u7684\u57fa\u7c7b\n2. \u2705 **\u670d\u52a1\u5373Task** - \u670d\u52a1\u672c\u8d28\u4e0a\u662f\u5728DAG\u4e2d\u8fd0\u884c\u7684\u7279\u6b8aTask\n3. \u2705 **\u5e94\u7528\u63a7\u5236** - \u7528\u6237\u5728\u6784\u5efaDAG\u65f6\u521d\u59cb\u5316\u670d\u52a1\uff0c\u800c\u975e\u72ec\u7acb\u542f\u52a8\u811a\u672c\n4. \u2705 **\u652f\u6301Ray** - \u670d\u52a1\u53ef\u4ee5\u4f5c\u4e3aRay Actor\u5206\u5e03\u5f0f\u8fd0\u884c\n5. \u2705 **\u961f\u5217\u901a\u4fe1** - \u4f7f\u7528SAGE\u7edf\u4e00\u7684\u9ad8\u6027\u80fd\u961f\u5217\u673a\u5236\n6. \u2705 **\u5411\u540e\u517c\u5bb9** - \u4fdd\u7559\u539f\u6709API\u517c\u5bb9\u6027\n\n\u73b0\u5728SAGE\u62e5\u6709\u4e86\u771f\u6b63\u7684\u670d\u52a1\u5316\u67b6\u6784\uff0c\u6bcf\u4e2a\u670d\u52a1\u90fd\u662f\u72ec\u7acb\u7684Task\uff0c\u53ef\u4ee5\u7075\u6d3b\u7ec4\u5408\u3001\u5206\u5e03\u5f0f\u90e8\u7f72\uff0c\u5b8c\u5168\u7b26\u5408\u73b0\u4ee3\u5fae\u670d\u52a1\u67b6\u6784\u7684\u8bbe\u8ba1\u7406\u5ff5\uff01\n=======\n# SAGE Middleware - \u4e2d\u95f4\u4ef6\u7ec4\u4ef6\n\nSAGE Middleware\u63d0\u4f9b\u4e2d\u95f4\u4ef6\u670d\u52a1\uff0c\u5305\u542bLLM\u4e2d\u95f4\u4ef6\u3001API\u670d\u52a1\u3001\u4efb\u52a1\u961f\u5217\u7b49\u4f01\u4e1a\u7ea7\u529f\u80fd\u3002\n\n## \u4e3b\u8981\u529f\u80fd\n\n### LLM\u4e2d\u95f4\u4ef6\u670d\u52a1\n- **\u591a\u6a21\u578b\u652f\u6301**: OpenAI\u3001Ollama\u3001\u667a\u8c31AI\u3001Cohere\u7b49\n- **\u7edf\u4e00API**: \u6807\u51c6\u5316\u7684LLM\u8c03\u7528\u63a5\u53e3\n- **\u9ad8\u6027\u80fd\u63a8\u7406**: \u57fa\u4e8evLLM\u7684\u4f18\u5316\u63a8\u7406\u670d\u52a1\n- **\u6a21\u578b\u7ba1\u7406**: \u52a8\u6001\u6a21\u578b\u52a0\u8f7d\u548c\u5378\u8f7d\n\n### API\u670d\u52a1\n- **RESTful API**: \u57fa\u4e8eFastAPI\u7684\u9ad8\u6027\u80fdAPI\u670d\u52a1\n- **\u8ba4\u8bc1\u6388\u6743**: JWT\u4ee4\u724c\u548c\u5bc6\u7801\u52a0\u5bc6\u652f\u6301\n- **\u670d\u52a1\u53d1\u73b0**: \u81ea\u52a8\u670d\u52a1\u6ce8\u518c\u548c\u53d1\u73b0\n\n### \u4efb\u52a1\u961f\u5217\n- **\u5f02\u6b65\u5904\u7406**: \u57fa\u4e8eCelery\u7684\u5206\u5e03\u5f0f\u4efb\u52a1\u961f\u5217\n- **\u76d1\u63a7\u754c\u9762**: Flower\u76d1\u63a7\u548c\u7ba1\u7406\u754c\u9762\n- **\u5bb9\u9519\u673a\u5236**: \u4efb\u52a1\u91cd\u8bd5\u548c\u9519\u8bef\u5904\u7406\n\n### \u5411\u91cf\u68c0\u7d22\n- **FAISS\u96c6\u6210**: \u9ad8\u6027\u80fd\u5411\u91cf\u76f8\u4f3c\u5ea6\u641c\u7d22\n- **BM25\u641c\u7d22**: \u4f20\u7edf\u6587\u672c\u68c0\u7d22\u7b97\u6cd5\n- **\u6df7\u5408\u68c0\u7d22**: \u5411\u91cf\u548c\u5173\u952e\u8bcd\u6df7\u5408\u68c0\u7d22\n\n## \u5b89\u88c5\n\n```bash\npip install intellistream-sage-middleware\n```\n\n## \u57fa\u672c\u4f7f\u7528\n\n### \u542f\u52a8LLM\u670d\u52a1\n\n```python\nfrom sage.middleware.llm import LLMService\n\n# \u521b\u5efaLLM\u670d\u52a1\nservice = LLMService()\n\n# \u6ce8\u518c\u6a21\u578b\nservice.register_model(\"gpt-3.5-turbo\", provider=\"openai\")\nservice.register_model(\"llama2\", provider=\"ollama\")\n\n# \u542f\u52a8\u670d\u52a1\nservice.start()\n```\n\n### API\u8c03\u7528\n\n```python\nimport requests\n\n# \u6587\u672c\u751f\u6210\nresponse = requests.post(\"http://localhost:8000/generate\", json={\n    \"model\": \"gpt-3.5-turbo\",\n    \"prompt\": \"Hello, how are you?\",\n    \"max_tokens\": 100\n})\n\nresult = response.json()\nprint(result[\"text\"])\n```\n\n### \u5411\u91cf\u68c0\u7d22\n\n```python\nfrom sage.middleware.retrieval import VectorStore\n\n# \u521b\u5efa\u5411\u91cf\u5b58\u50a8\nstore = VectorStore()\n\n# \u6dfb\u52a0\u6587\u6863\nstore.add_documents([\n    \"This is document 1\",\n    \"This is document 2\"\n])\n\n# \u641c\u7d22\nresults = store.search(\"document\", top_k=5)\nfor result in results:\n    print(f\"Score: {result.score}, Text: {result.text}\")\n```\n\n## \u914d\u7f6e\n\n\u4e2d\u95f4\u4ef6\u670d\u52a1\u53ef\u4ee5\u901a\u8fc7\u73af\u5883\u53d8\u91cf\u6216\u914d\u7f6e\u6587\u4ef6\u8fdb\u884c\u914d\u7f6e\uff1a\n\n```yaml\n# config.yaml\nllm:\n  providers:\n    openai:\n      api_key: \"your-api-key\"\n    ollama:\n      base_url: \"http://localhost:11434\"\n\napi:\n  host: \"0.0.0.0\"\n  port: 8000\n  \nqueue:\n  broker: \"redis://localhost:6379\"\n  backend: \"redis://localhost:6379\"\n```\n\n## \u8bb8\u53ef\u8bc1\n\nMIT License\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "SAGE Framework - Middleware Services (Storage, Vector DB, Memory, etc.)",
    "version": "0.1.3",
    "project_urls": {
        "Documentation": "https://intellistream.github.io/SAGE-Pub/",
        "Homepage": "https://github.com/intellistream/SAGE",
        "Issues": "https://github.com/intellistream/SAGE/issues",
        "Repository": "https://github.com/intellistream/SAGE.git"
    },
    "split_keywords": [
        "data",
        " api",
        " reasoning",
        " dataflow",
        " llm",
        " ml",
        " middleware",
        " framework",
        " rag",
        " intellistream",
        " ai",
        " sage"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2f3b6800a772ba447817874016ea9fc231d69d84bd86a6324f598d18ac6edced",
                "md5": "c86b420896fa5a8c3af7715bfd078af6",
                "sha256": "25f3135aa782cee2c006e4c6b558638b5fb3d56bab0213494b5309ae0ce1983b"
            },
            "downloads": -1,
            "filename": "intellistream_sage_middleware-0.1.3-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "c86b420896fa5a8c3af7715bfd078af6",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 16766,
            "upload_time": "2025-08-08T11:39:40",
            "upload_time_iso_8601": "2025-08-08T11:39:40.608660Z",
            "url": "https://files.pythonhosted.org/packages/2f/3b/6800a772ba447817874016ea9fc231d69d84bd86a6324f598d18ac6edced/intellistream_sage_middleware-0.1.3-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-08 11:39:40",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "intellistream",
    "github_project": "SAGE",
    "github_not_found": true,
    "lcname": "intellistream-sage-middleware"
}
        
Elapsed time: 0.93735s