xiangxinai


Namexiangxinai JSON
Version 1.0.2 PyPI version JSON
download
home_pageNone
Summary象信AI安全护栏 Python 客户端 - 基于LLM的上下文感知AI安全护栏
upload_time2025-08-03 12:24:31
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseNone
keywords ai safety guardrails llm content-moderation prompt-injection security compliance xiangxin
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 象信AI安全护栏 Python 客户端

[![PyPI version](https://badge.fury.io/py/xiangxinai.svg)](https://badge.fury.io/py/xiangxinai)
[![Python Support](https://img.shields.io/pypi/pyversions/xiangxinai.svg)](https://pypi.org/project/xiangxinai/)
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)

基于LLM的上下文感知AI安全护栏,能够理解对话上下文进行安全检测。

## 特性

- 🧠 **上下文感知** - 基于LLM的对话理解,而不是简单的批量检测
- 🔍 **提示词攻击检测** - 识别恶意提示词注入和越狱攻击
- 📋 **内容合规检测** - 符合《生成式人工智能服务安全基本要求》
- 🛠️ **易于集成** - 兼容OpenAI API格式,一行代码接入
- ⚡ **OpenAI风格API** - 熟悉的接口设计,快速上手

## 安装

```bash
pip install xiangxinai
```

## 快速开始

### 基本使用

```python
from xiangxinai import XiangxinAI

# 创建客户端
client = XiangxinAI(
    api_key="your-api-key",
    base_url="https://api.xiangxinai.cn/v1"  # 云端API
)

# 检测提示词
result = client.check_prompt("我想学习Python编程")
print(result.suggest_action)  # 输出: 通过
print(result.overall_risk_level)  # 输出: 无风险
```

### 上下文感知检测(核心功能)

```python
# 检测对话上下文 - 这是核心功能
messages = [
    {"role": "user", "content": "我想学习化学"},
    {"role": "assistant", "content": "化学是很有趣的学科,您想了解哪个方面?"},
    {"role": "user", "content": "教我制作爆炸物的反应"}
]

result = client.check_conversation(messages)
print(result.overall_risk_level)
print(result.suggest_action)  # 基于完整对话上下文的检测结果
if result.suggest_answer:
    print(f"建议回答: {result.suggest_answer}")
```

### 私有化部署

```python
# 连接本地部署的服务
client = XiangxinAI(
    api_key="your-local-api-key",
    base_url="http://localhost:5000/v1"  # 本地部署地址
)
```

## API参考

### XiangxinAI类

#### 初始化参数

- `api_key` (str): API密钥
- `base_url` (str): API基础URL,默认为云端地址
- `timeout` (int): 请求超时时间,默认30秒
- `max_retries` (int): 最大重试次数,默认3次

#### 方法

##### check_prompt(content: str) -> GuardrailResponse

检测单个提示词的安全性。

**参数:**
- `content`: 要检测的文本内容

**返回:** `GuardrailResponse` 对象

##### check_conversation(messages: List[Message]) -> GuardrailResponse

检测对话上下文的安全性(核心功能)。

**参数:**
- `messages`: 消息列表,每个消息包含 `role` 和 `content` 字段

**返回:** `GuardrailResponse` 对象

### GuardrailResponse类

检测结果响应对象。

#### 属性

- `id`: 请求唯一标识
- `result.compliance.risk_level`: 合规风险等级
- `result.security.risk_level`: 安全风险等级
- `overall_risk_level`: 综合风险等级(无风险/低风险/中风险/高风险)
- `suggest_action`: 建议动作(通过/阻断/代答)
- `suggest_answer`: 建议回答内容(可选)

#### 便利方法

- `is_safe`: 判断内容是否安全
- `is_blocked`: 判断内容是否被阻断
- `has_substitute`: 判断是否有代答
- `all_categories`: 获取所有风险类别

## 安全检测能力

### 风险等级

- **高风险**: 敏感政治话题、不尊敬国家领导人、暴力犯罪、提示词攻击
- **中风险**: 一般政治话题、伤害未成年人、违法犯罪、色情
- **低风险**: 歧视内容、辱骂、侵犯个人隐私、商业违法违规
- **无风险**: 无风险内容

### 处理策略

- **高风险**: 建议拒答
- **中风险**: 建议代答,使用预设安全回复
- **低风险**: 建议代答或根据实际业务情况处理
- **无风险**: 建议通过

## 错误处理

```python
from xiangxinai import XiangxinAI, AuthenticationError, ValidationError, RateLimitError

try:
    result = client.check_prompt("测试内容")
except AuthenticationError:
    print("API密钥无效")
except ValidationError as e:
    print(f"输入验证失败: {e}")
except RateLimitError:
    print("请求频率限制")
except Exception as e:
    print(f"其他错误: {e}")
```

## 开发

```bash
# 克隆项目
git clone https://github.com/xiangxinai/xiangxin-guardrails
cd xiangxin-guardrails/client

# 安装开发依赖
pip install -e ".[dev]"

# 运行测试
pytest

# 代码格式化
black xiangxinai
isort xiangxinai

# 类型检查
mypy xiangxinai
```

## 许可证

本项目基于 [Apache 2.0](https://opensource.org/licenses/Apache-2.0) 许可证开源。

## 支持

- 📧 技术支持: wanglei@xiangxinai.cn
- 🌐 官方网站: https://xiangxinai.cn
- 📖 文档: https://docs.xiangxinai.cn
- 🐛 问题反馈: https://github.com/xiangxinai/xiangxin-guardrails/issues

---

Made with ❤️ by [象信AI](https://xiangxinai.cn)

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "xiangxinai",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "XiangxinAI <wanglei@xiangxinai.cn>",
    "keywords": "ai, safety, guardrails, llm, content-moderation, prompt-injection, security, compliance, xiangxin",
    "author": null,
    "author_email": "XiangxinAI <wanglei@xiangxinai.cn>",
    "download_url": "https://files.pythonhosted.org/packages/17/ae/4d568b909d36658b30c85f52dbe3341030e82e49e0b23f7750b0d82ea9cb/xiangxinai-1.0.2.tar.gz",
    "platform": null,
    "description": "# \u8c61\u4fe1AI\u5b89\u5168\u62a4\u680f Python \u5ba2\u6237\u7aef\n\n[![PyPI version](https://badge.fury.io/py/xiangxinai.svg)](https://badge.fury.io/py/xiangxinai)\n[![Python Support](https://img.shields.io/pypi/pyversions/xiangxinai.svg)](https://pypi.org/project/xiangxinai/)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n\n\u57fa\u4e8eLLM\u7684\u4e0a\u4e0b\u6587\u611f\u77e5AI\u5b89\u5168\u62a4\u680f\uff0c\u80fd\u591f\u7406\u89e3\u5bf9\u8bdd\u4e0a\u4e0b\u6587\u8fdb\u884c\u5b89\u5168\u68c0\u6d4b\u3002\n\n## \u7279\u6027\n\n- \ud83e\udde0 **\u4e0a\u4e0b\u6587\u611f\u77e5** - \u57fa\u4e8eLLM\u7684\u5bf9\u8bdd\u7406\u89e3\uff0c\u800c\u4e0d\u662f\u7b80\u5355\u7684\u6279\u91cf\u68c0\u6d4b\n- \ud83d\udd0d **\u63d0\u793a\u8bcd\u653b\u51fb\u68c0\u6d4b** - \u8bc6\u522b\u6076\u610f\u63d0\u793a\u8bcd\u6ce8\u5165\u548c\u8d8a\u72f1\u653b\u51fb\n- \ud83d\udccb **\u5185\u5bb9\u5408\u89c4\u68c0\u6d4b** - \u7b26\u5408\u300a\u751f\u6210\u5f0f\u4eba\u5de5\u667a\u80fd\u670d\u52a1\u5b89\u5168\u57fa\u672c\u8981\u6c42\u300b\n- \ud83d\udee0\ufe0f **\u6613\u4e8e\u96c6\u6210** - \u517c\u5bb9OpenAI API\u683c\u5f0f\uff0c\u4e00\u884c\u4ee3\u7801\u63a5\u5165\n- \u26a1 **OpenAI\u98ce\u683cAPI** - \u719f\u6089\u7684\u63a5\u53e3\u8bbe\u8ba1\uff0c\u5feb\u901f\u4e0a\u624b\n\n## \u5b89\u88c5\n\n```bash\npip install xiangxinai\n```\n\n## \u5feb\u901f\u5f00\u59cb\n\n### \u57fa\u672c\u4f7f\u7528\n\n```python\nfrom xiangxinai import XiangxinAI\n\n# \u521b\u5efa\u5ba2\u6237\u7aef\nclient = XiangxinAI(\n    api_key=\"your-api-key\",\n    base_url=\"https://api.xiangxinai.cn/v1\"  # \u4e91\u7aefAPI\n)\n\n# \u68c0\u6d4b\u63d0\u793a\u8bcd\nresult = client.check_prompt(\"\u6211\u60f3\u5b66\u4e60Python\u7f16\u7a0b\")\nprint(result.suggest_action)  # \u8f93\u51fa: \u901a\u8fc7\nprint(result.overall_risk_level)  # \u8f93\u51fa: \u65e0\u98ce\u9669\n```\n\n### \u4e0a\u4e0b\u6587\u611f\u77e5\u68c0\u6d4b\uff08\u6838\u5fc3\u529f\u80fd\uff09\n\n```python\n# \u68c0\u6d4b\u5bf9\u8bdd\u4e0a\u4e0b\u6587 - \u8fd9\u662f\u6838\u5fc3\u529f\u80fd\nmessages = [\n    {\"role\": \"user\", \"content\": \"\u6211\u60f3\u5b66\u4e60\u5316\u5b66\"},\n    {\"role\": \"assistant\", \"content\": \"\u5316\u5b66\u662f\u5f88\u6709\u8da3\u7684\u5b66\u79d1\uff0c\u60a8\u60f3\u4e86\u89e3\u54ea\u4e2a\u65b9\u9762\uff1f\"},\n    {\"role\": \"user\", \"content\": \"\u6559\u6211\u5236\u4f5c\u7206\u70b8\u7269\u7684\u53cd\u5e94\"}\n]\n\nresult = client.check_conversation(messages)\nprint(result.overall_risk_level)\nprint(result.suggest_action)  # \u57fa\u4e8e\u5b8c\u6574\u5bf9\u8bdd\u4e0a\u4e0b\u6587\u7684\u68c0\u6d4b\u7ed3\u679c\nif result.suggest_answer:\n    print(f\"\u5efa\u8bae\u56de\u7b54: {result.suggest_answer}\")\n```\n\n### \u79c1\u6709\u5316\u90e8\u7f72\n\n```python\n# \u8fde\u63a5\u672c\u5730\u90e8\u7f72\u7684\u670d\u52a1\nclient = XiangxinAI(\n    api_key=\"your-local-api-key\",\n    base_url=\"http://localhost:5000/v1\"  # \u672c\u5730\u90e8\u7f72\u5730\u5740\n)\n```\n\n## API\u53c2\u8003\n\n### XiangxinAI\u7c7b\n\n#### \u521d\u59cb\u5316\u53c2\u6570\n\n- `api_key` (str): API\u5bc6\u94a5\n- `base_url` (str): API\u57fa\u7840URL\uff0c\u9ed8\u8ba4\u4e3a\u4e91\u7aef\u5730\u5740\n- `timeout` (int): \u8bf7\u6c42\u8d85\u65f6\u65f6\u95f4\uff0c\u9ed8\u8ba430\u79d2\n- `max_retries` (int): \u6700\u5927\u91cd\u8bd5\u6b21\u6570\uff0c\u9ed8\u8ba43\u6b21\n\n#### \u65b9\u6cd5\n\n##### check_prompt(content: str) -> GuardrailResponse\n\n\u68c0\u6d4b\u5355\u4e2a\u63d0\u793a\u8bcd\u7684\u5b89\u5168\u6027\u3002\n\n**\u53c2\u6570:**\n- `content`: \u8981\u68c0\u6d4b\u7684\u6587\u672c\u5185\u5bb9\n\n**\u8fd4\u56de:** `GuardrailResponse` \u5bf9\u8c61\n\n##### check_conversation(messages: List[Message]) -> GuardrailResponse\n\n\u68c0\u6d4b\u5bf9\u8bdd\u4e0a\u4e0b\u6587\u7684\u5b89\u5168\u6027\uff08\u6838\u5fc3\u529f\u80fd\uff09\u3002\n\n**\u53c2\u6570:**\n- `messages`: \u6d88\u606f\u5217\u8868\uff0c\u6bcf\u4e2a\u6d88\u606f\u5305\u542b `role` \u548c `content` \u5b57\u6bb5\n\n**\u8fd4\u56de:** `GuardrailResponse` \u5bf9\u8c61\n\n### GuardrailResponse\u7c7b\n\n\u68c0\u6d4b\u7ed3\u679c\u54cd\u5e94\u5bf9\u8c61\u3002\n\n#### \u5c5e\u6027\n\n- `id`: \u8bf7\u6c42\u552f\u4e00\u6807\u8bc6\n- `result.compliance.risk_level`: \u5408\u89c4\u98ce\u9669\u7b49\u7ea7\n- `result.security.risk_level`: \u5b89\u5168\u98ce\u9669\u7b49\u7ea7\n- `overall_risk_level`: \u7efc\u5408\u98ce\u9669\u7b49\u7ea7\uff08\u65e0\u98ce\u9669/\u4f4e\u98ce\u9669/\u4e2d\u98ce\u9669/\u9ad8\u98ce\u9669\uff09\n- `suggest_action`: \u5efa\u8bae\u52a8\u4f5c\uff08\u901a\u8fc7/\u963b\u65ad/\u4ee3\u7b54\uff09\n- `suggest_answer`: \u5efa\u8bae\u56de\u7b54\u5185\u5bb9\uff08\u53ef\u9009\uff09\n\n#### \u4fbf\u5229\u65b9\u6cd5\n\n- `is_safe`: \u5224\u65ad\u5185\u5bb9\u662f\u5426\u5b89\u5168\n- `is_blocked`: \u5224\u65ad\u5185\u5bb9\u662f\u5426\u88ab\u963b\u65ad\n- `has_substitute`: \u5224\u65ad\u662f\u5426\u6709\u4ee3\u7b54\n- `all_categories`: \u83b7\u53d6\u6240\u6709\u98ce\u9669\u7c7b\u522b\n\n## \u5b89\u5168\u68c0\u6d4b\u80fd\u529b\n\n### \u98ce\u9669\u7b49\u7ea7\n\n- **\u9ad8\u98ce\u9669**: \u654f\u611f\u653f\u6cbb\u8bdd\u9898\u3001\u4e0d\u5c0a\u656c\u56fd\u5bb6\u9886\u5bfc\u4eba\u3001\u66b4\u529b\u72af\u7f6a\u3001\u63d0\u793a\u8bcd\u653b\u51fb\n- **\u4e2d\u98ce\u9669**: \u4e00\u822c\u653f\u6cbb\u8bdd\u9898\u3001\u4f24\u5bb3\u672a\u6210\u5e74\u4eba\u3001\u8fdd\u6cd5\u72af\u7f6a\u3001\u8272\u60c5\n- **\u4f4e\u98ce\u9669**: \u6b67\u89c6\u5185\u5bb9\u3001\u8fb1\u9a82\u3001\u4fb5\u72af\u4e2a\u4eba\u9690\u79c1\u3001\u5546\u4e1a\u8fdd\u6cd5\u8fdd\u89c4\n- **\u65e0\u98ce\u9669**: \u65e0\u98ce\u9669\u5185\u5bb9\n\n### \u5904\u7406\u7b56\u7565\n\n- **\u9ad8\u98ce\u9669**: \u5efa\u8bae\u62d2\u7b54\n- **\u4e2d\u98ce\u9669**: \u5efa\u8bae\u4ee3\u7b54\uff0c\u4f7f\u7528\u9884\u8bbe\u5b89\u5168\u56de\u590d\n- **\u4f4e\u98ce\u9669**: \u5efa\u8bae\u4ee3\u7b54\u6216\u6839\u636e\u5b9e\u9645\u4e1a\u52a1\u60c5\u51b5\u5904\u7406\n- **\u65e0\u98ce\u9669**: \u5efa\u8bae\u901a\u8fc7\n\n## \u9519\u8bef\u5904\u7406\n\n```python\nfrom xiangxinai import XiangxinAI, AuthenticationError, ValidationError, RateLimitError\n\ntry:\n    result = client.check_prompt(\"\u6d4b\u8bd5\u5185\u5bb9\")\nexcept AuthenticationError:\n    print(\"API\u5bc6\u94a5\u65e0\u6548\")\nexcept ValidationError as e:\n    print(f\"\u8f93\u5165\u9a8c\u8bc1\u5931\u8d25: {e}\")\nexcept RateLimitError:\n    print(\"\u8bf7\u6c42\u9891\u7387\u9650\u5236\")\nexcept Exception as e:\n    print(f\"\u5176\u4ed6\u9519\u8bef: {e}\")\n```\n\n## \u5f00\u53d1\n\n```bash\n# \u514b\u9686\u9879\u76ee\ngit clone https://github.com/xiangxinai/xiangxin-guardrails\ncd xiangxin-guardrails/client\n\n# \u5b89\u88c5\u5f00\u53d1\u4f9d\u8d56\npip install -e \".[dev]\"\n\n# \u8fd0\u884c\u6d4b\u8bd5\npytest\n\n# \u4ee3\u7801\u683c\u5f0f\u5316\nblack xiangxinai\nisort xiangxinai\n\n# \u7c7b\u578b\u68c0\u67e5\nmypy xiangxinai\n```\n\n## \u8bb8\u53ef\u8bc1\n\n\u672c\u9879\u76ee\u57fa\u4e8e [Apache 2.0](https://opensource.org/licenses/Apache-2.0) \u8bb8\u53ef\u8bc1\u5f00\u6e90\u3002\n\n## \u652f\u6301\n\n- \ud83d\udce7 \u6280\u672f\u652f\u6301: wanglei@xiangxinai.cn\n- \ud83c\udf10 \u5b98\u65b9\u7f51\u7ad9: https://xiangxinai.cn\n- \ud83d\udcd6 \u6587\u6863: https://docs.xiangxinai.cn\n- \ud83d\udc1b \u95ee\u9898\u53cd\u9988: https://github.com/xiangxinai/xiangxin-guardrails/issues\n\n---\n\nMade with \u2764\ufe0f by [\u8c61\u4fe1AI](https://xiangxinai.cn)\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "\u8c61\u4fe1AI\u5b89\u5168\u62a4\u680f Python \u5ba2\u6237\u7aef - \u57fa\u4e8eLLM\u7684\u4e0a\u4e0b\u6587\u611f\u77e5AI\u5b89\u5168\u62a4\u680f",
    "version": "1.0.2",
    "project_urls": {
        "Changelog": "https://github.com/xiangxinai/xiangxin-guardrails/blob/main/CHANGELOG.md",
        "Documentation": "https://docs.xiangxinai.cn",
        "Homepage": "https://xiangxinai.cn",
        "Issues": "https://github.com/xiangxinai/xiangxin-guardrails/issues",
        "Repository": "https://github.com/xiangxinai/xiangxin-guardrails"
    },
    "split_keywords": [
        "ai",
        " safety",
        " guardrails",
        " llm",
        " content-moderation",
        " prompt-injection",
        " security",
        " compliance",
        " xiangxin"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "750209fc81bcced197d861c7446b5f3cfb77dd90098099cab169e4e760e40c4f",
                "md5": "7972211747199e381b60b1ba3c7246b4",
                "sha256": "a4014b182aa4057e46144065d76e01e09b8f6ff09869ff519dbeefe31d38eda6"
            },
            "downloads": -1,
            "filename": "xiangxinai-1.0.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "7972211747199e381b60b1ba3c7246b4",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 13725,
            "upload_time": "2025-08-03T12:24:29",
            "upload_time_iso_8601": "2025-08-03T12:24:29.956060Z",
            "url": "https://files.pythonhosted.org/packages/75/02/09fc81bcced197d861c7446b5f3cfb77dd90098099cab169e4e760e40c4f/xiangxinai-1.0.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "17ae4d568b909d36658b30c85f52dbe3341030e82e49e0b23f7750b0d82ea9cb",
                "md5": "149b92a754ee546cdcefc1d949a0d524",
                "sha256": "dd19aacac27845ba3835f7fc2b580c514d3eef9d0aa7e35f1ba35a0e66e02ce9"
            },
            "downloads": -1,
            "filename": "xiangxinai-1.0.2.tar.gz",
            "has_sig": false,
            "md5_digest": "149b92a754ee546cdcefc1d949a0d524",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 15082,
            "upload_time": "2025-08-03T12:24:31",
            "upload_time_iso_8601": "2025-08-03T12:24:31.865323Z",
            "url": "https://files.pythonhosted.org/packages/17/ae/4d568b909d36658b30c85f52dbe3341030e82e49e0b23f7750b0d82ea9cb/xiangxinai-1.0.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-03 12:24:31",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "xiangxinai",
    "github_project": "xiangxin-guardrails",
    "github_not_found": true,
    "lcname": "xiangxinai"
}
        
Elapsed time: 0.71423s