
注意:Obsei目前仍处于alpha阶段,因此请在生产环境中谨慎使用。此外,由于它正在持续开发中,主分支可能包含许多破坏性更改。请使用已发布的版本。
Obsei(发音为“奥布西” | /əb-'sē/)是一款开源、低代码、基于人工智能的自动化工具。_Obsei_由以下部分组成:
- 观察者:从各种来源收集非结构化数据,例如Twitter上的推文、Reddit上的Subreddit评论、Facebook页面帖子的评论、应用商店评价、Google评价、Amazon评价、新闻、网站等。
- 分析器:利用多种人工智能任务对收集到的非结构化数据进行分析,如分类、情感分析、翻译、个人身份信息处理等。
- 通知者:将分析后的数据发送到各种目的地,如工单平台、数据存储、数据框等,以便用户采取进一步行动并对数据进行分析。
所有观察者都可以将其状态存储在数据库中(SQLite、PostgreSQL、MySQL等),这使得Obsei非常适合定时作业或无服务器应用。

未来方向 -
- 面向文本、图像、音频、文档和视频的工作流
- 从所有可能的私有和公共渠道收集数据
- 将所有可能的工作流添加到人工智能下游应用中,以实现手动认知工作的自动化
使用场景
_Obsei_的使用场景包括但不限于:
- 社交监听:监听社交媒体帖子、评论、客户反馈等。
- 警报/通知:针对客户投诉、合格销售线索等事件自动获取警报。
- 根据社交媒体、电子邮件等渠道的客户投诉自动生成客户问题。
- 根据客户投诉内容自动为工单分配合适的标签,例如登录问题、注册问题、配送问题等。
- 从各个平台的反馈中提取更深入的洞察。
- 市场研究。
- 为各种人工智能任务创建数据集。
- 更多基于创造力的场景💡
安装
先决条件
安装以下内容(如果尚未安装):
安装 Obsei
您可以根据自己的偏好,通过 PIP 或 Conda 安装 Obsei。
要安装最新发布的版本 -
pip install obsei[all]
从主分支安装(如果您想尝试最新功能)-
git clone https://github.com/obsei/obsei.git
cd obsei
pip install --editable .[all]
注意:all 选项会安装所有依赖项,而这些依赖项可能并非您的工作流所必需。作为替代方案,您可以根据需要安装以下最小依赖项:
pip install obsei[source]:安装与所有观察者相关的依赖项
pip install obsei[sink]:安装与所有通知器相关的依赖项
pip install obsei[analyzer]:安装与所有分析器相关的依赖项,同时会安装 PyTorch
pip install obsei[twitter-api]:安装与 Twitter 观察者相关的依赖项
pip install obsei[google-play-scraper]:安装与 Play 商店评论抓取器观察者相关的依赖项
pip install obsei[google-play-api]:安装与 Google 官方 Play 商店评论 API 基础的观察者相关的依赖项
pip install obsei[app-store-scraper]:安装与 Apple App Store 评论抓取器观察者相关的依赖项
pip install obsei[reddit-scraper]:安装与 Reddit 帖子和评论抓取器观察者相关的依赖项
pip install obsei[reddit-api]:安装与 Reddit 官方 API 基础的观察者相关的依赖项
pip install obsei[pandas]:安装与 TSV/CSV/Pandas 基础的观察者和通知器相关的依赖项
pip install obsei[google-news-scraper]:安装与 Google 新闻抓取器观察者相关的依赖项
pip install obsei[facebook-api]:安装与 Facebook 官方页面帖子和评论 API 基础的观察者相关的依赖项
pip install obsei[atlassian-api]:安装与 Jira 官方 API 基础的通知器相关的依赖项
pip install obsei[elasticsearch]:安装与 Elasticsearch 通知器相关的依赖项
pip install obsei[slack-api]:安装与 Slack 官方 API 基础的通知器相关的依赖项
您还可以在单个安装命令中混合使用多个依赖项。例如,要安装 Twitter 观察者、所有分析器和 Slack 通知器,请使用以下命令:
pip install obsei[twitter-api, analyzer, slack-api]
使用方法
展开以下步骤并创建一个工作流 -
步骤 1:配置源/观察者
|
Twitter
from obsei.source.twitter_source import TwitterCredentials, TwitterSource, TwitterSourceConfig
# 初始化 Twitter 源配置
source_config = TwitterSourceConfig(
keywords=["issue"], # 关键词、@用户或#话题标签
lookup_period="1h", # 从当前时间开始的查找周期,格式:<数字><d|h|m>(天|小时|分钟)
cred_info=TwitterCredentials(
# 输入您的 Twitter 消费者密钥和秘密。可在 https://developer.twitter.com/en/apply-for-access 获取
consumer_key="<twitter_consumer_key>",
consumer_secret="<twitter_consumer_secret>",
bearer_token='<请输入 Bearer Token>',
)
)
# 初始化推文检索器
source = TwitterSource()
|
YouTube 抓取器
from obsei.source.youtube_scrapper import YoutubeScrapperSource, YoutubeScrapperConfig
# 初始化 YouTube 源配置
source_config = YoutubeScrapperConfig(
video_url="https://www.youtube.com/watch?v=uZfns0JIlFk", # YouTube 视频 URL
fetch_replies=True, # 获取评论回复
max_comments=10, # 要获取的评论和回复总数
lookup_period="1Y", # 从当前时间开始的查找周期,格式:<数字><d|h|m|M|Y>(天|小时|分钟|月|年)
)
# 初始化 YouTube 评论检索器
source = YoutubeScrapperSource()
|
Facebook
from obsei.source.facebook_source import FacebookCredentials, FacebookSource, FacebookSourceConfig
# 初始化 Facebook 源配置
source_config = FacebookSourceConfig(
page_id="110844591144719", # Facebook 页面 ID,例如 Obsei 的这个页面
lookup_period="1h", # 从当前时间开始的查找周期,格式:<数字><d|h|m>(天|小时|分钟)
cred_info=FacebookCredentials(
# 输入您的 Facebook 应用 ID、应用秘密和长期令牌。可在 https://developers.facebook.com/apps/ 获取
app_id="<facebook_app_id>",
app_secret="<facebook_app_secret>",
long_term_token="<facebook_long_term_token>",
)
)
# 初始化 Facebook 帖子评论检索器
source = FacebookSource()
|
电子邮件
from obsei.source.email_source import EmailConfig, EmailCredInfo, EmailSource
# 初始化电子邮件源配置
source_config = EmailConfig(
# 最常用电子邮件提供商的 IMAP 服务器列表
# https://www.systoolsgroup.com/imap/
# 另外,如果您使用的是 Gmail 账户,请确保在您的账户中允许不太安全的应用程序 -
# https://myaccount.google.com/lesssecureapps?pli=1
# 同时启用 IMAP 访问 -
# https://mail.google.com/mail/u/0/#settings/fwdandpop
imap_server="imap.gmail.com", # 输入 IMAP 服务器
cred_info=EmailCredInfo(
# 输入您的电子邮件账户用户名和密码
username="<email_username>",
password="<email_password>"
),
lookup_period="1h" # 从当前时间开始的查找周期,格式:<数字><d|h|m>(天|小时|分钟)
)
# 初始化电子邮件检索器
source = EmailSource()
|
Google 地图评论抓取器
from obsei.source.google_maps_reviews import OSGoogleMapsReviewsSource, OSGoogleMapsReviewsConfig
# 初始化Outscrapper Maps评论源配置
source_config = OSGoogleMapsReviewsConfig(
# 从https://outscraper.com/获取API密钥
api_key="<输入您的API密钥>",
# 输入Google地图链接或地点ID
# 例如,以下为“泰姬陵”的链接
queries=["https://www.google.co.in/maps/place/Taj+Mahal/@27.1751496,78.0399535,17z/data=!4m5!3m4!1s0x39747121d702ff6d:0xdd2ae4803f767dde!8m2!3d27.1751448!4d78.0421422"],
number_of_reviews=10,
)
# 初始化Outscrapper Maps评论获取器
source = OSGoogleMapsReviewsSource()
|
AppStore评论抓取器
from obsei.source.appstore_scrapper import AppStoreScrapperConfig, AppStoreScrapperSource
# 初始化AppStore源配置
source_config = AppStoreScrapperConfig(
# 需要两个参数:app_id和country。
# `app_id`可在App Store应用URL的末尾找到。
# 例如 - https://apps.apple.com/us/app/xcode/id497799835
# `310633997`是Xcode的app_id,`us`是国家。
countries=["us"],
app_id="310633997",
lookup_period="1h" # 查找周期,从当前时间开始,格式:<数字><d|h|m>(天|小时|分钟)
)
# 初始化AppStore评论获取器
source = AppStoreScrapperSource()
|
Play Store评论抓取器
from obsei.source.playstore_scrapper import PlayStoreScrapperConfig, PlayStoreScrapperSource
# 初始化Play Store源配置
source_config = PlayStoreScrapperConfig(
# 需要两个参数:package_name和country。
# `package_name`可在Play Store应用URL的末尾找到。
# 例如 - https://play.google.com/store/apps/details?id=com.google.android.gm&hl=en&gl=US
# `com.google.android.gm`是Xcode的package_name,`us`是国家。
countries=["us"],
package_name="com.google.android.gm",
lookup_period="1h" # 查找周期,从当前时间开始,格式:<数字><d|h|m>(天|小时|分钟)
)
# 初始化Play Store评论获取器
source = PlayStoreScrapperSource()
|
Reddit
from obsei.source.reddit_source import RedditConfig, RedditSource, RedditCredInfo
# 初始化Reddit源配置
source_config = RedditConfig(
subreddits=["wallstreetbets"], # 子Reddit列表
# Reddit账号用户名和密码
# 也可以输入Reddit client_id、client_secret或refresh_token
# 在https://www.reddit.com/prefs/apps创建凭据
# 参考https://praw.readthedocs.io/en/latest/getting_started/authentication.html
# 目前支持密码流、只读模式和已保存刷新令牌模式
cred_info=RedditCredInfo(
username="<reddit_username>",
password="<reddit_password>"
),
lookup_period="1h" # 查找周期,从当前时间开始,格式:<数字><d|h|m>(天|小时|分钟)
)
# 初始化Reddit获取器
source = RedditSource()
|
Reddit抓取器
注意:Reddit对抓取器有严格的速率限制,因此请在长时间内使用它来获取少量数据
from obsei.source.reddit_scrapper import RedditScrapperConfig, RedditScrapperSource
# 初始化Reddit抓取器源配置
source_config = RedditScrapperConfig(
# Reddit子Reddit、搜索等RSS URL。如需正确URL,请参考以下链接:
# 参考https://www.reddit.com/r/pathogendavid/comments/tv8m9/pathogendavids_guide_to_rss_and_reddit/
url="https://www.reddit.com/r/wallstreetbets/comments/.rss?sort=new",
lookup_period="1h" # 查找周期,从当前时间开始,格式:<数字><d|h|m>(天|小时|分钟)
)
# 初始化Reddit获取器
source = RedditScrapperSource()
|
Google新闻
from obsei.source.google_news_source import GoogleNewsConfig, GoogleNewsSource
# 初始化Google新闻源配置
source_config = GoogleNewsConfig(
query='bitcoin',
max_results=5,
# 要获取全文,启用`fetch_article`标志
# 默认情况下,Google新闻提供标题和亮点
fetch_article=True,
# proxy='http://127.0.0.1:8080'
)
# 初始化Google新闻获取器
source = GoogleNewsSource()
|
网络爬虫
from obsei.source.website_crawler_source import TrafilaturaCrawlerConfig, TrafilaturaCrawlerSource
# 初始化网站爬虫源配置
source_config = TrafilaturaCrawlerConfig(
urls=['https://obsei.github.io/obsei/']
)
# 初始化网站文本获取器
source = TrafilaturaCrawlerSource()
|
Pandas数据框
import pandas as pd
from obsei.source.pandas_source import PandasSource, PandasSourceConfig
# 从CSV、Excel、SQL等来源初始化你的Pandas数据框
# 在以下示例中,我们读取包含两列的CSV文件:title和text
csv_file = "https://raw.githubusercontent.com/deepset-ai/haystack/master/tutorials/small_generator_dataset.csv"
dataframe = pd.read_csv(csv_file)
# 初始化Pandas数据源配置
sink_config = PandasSourceConfig(
dataframe=dataframe,
include_columns=["score"],
text_columns=["name", "degree"],
)
# 初始化 Pandas 接收器
sink = PandasSource()
|
步骤 2:配置分析器
注意:要在离线模式下运行转换器,请查看【转换器离线模式】(https://huggingface.co/transformers/installation.html#offline-mode)。
一些分析器支持 GPU,可以使用device参数。
device参数的可能值列表(默认值auto):
- auto:如果可用则使用 GPU (cuda:0),否则使用 CPU
- cpu:使用 CPU
- cuda:{id}:使用提供的 CUDA 设备 ID 的 GPU
|
文本分类
文本分类:将文本分类到用户提供的类别中。
from obsei.analyzer.classification_analyzer import ClassificationAnalyzerConfig, ZeroShotClassificationAnalyzer
# 初始化分类分析器配置
# 如果添加了“positive”和“negative”标签,它也可以检测情感。
analyzer_config=ClassificationAnalyzerConfig(
labels=["服务", "延误", "性能"],
)
# 初始化分类分析器
# 支持的模型请参考 https://huggingface.co/models?filter=zero-shot-classification
text_analyzer = ZeroShotClassificationAnalyzer(
model_name_or_path="typeform/mobilebert-uncased-mnli",
device="auto"
)
|
情感分析器
情感分析器:检测文本的情感。文本分类也可以进行情感分析,但如果您不想使用重型 NLP 模型,则可以使用资源消耗较少的基于词典的 Vader 情感检测器。
from obsei.analyzer.sentiment_analyzer import VaderSentimentAnalyzer
# Vader 不需要任何配置设置
analyzer_config=None
# 初始化 Vader 情感分析器
text_analyzer = VaderSentimentAnalyzer()
|
NER 分析器
NER(命名实体识别)分析器:从文本中提取信息,并将提到的命名实体分类到预定义的类别中,例如人名、组织、地点、医疗代码、时间表达式、数量、货币值、百分比等。
from obsei.analyzer.ner_analyzer import NERAnalyzer
# NER 分析器不需要配置设置
analyzer_config=None
# 初始化 NER 分析器
# 支持的模型请参考 https://huggingface.co/models?filter=token-classification
text_analyzer = NERAnalyzer(
model_name_or_path="elastic/distilbert-base-cased-finetuned-conll03-english",
device = "auto"
)
|
翻译器
from obsei.analyzer.translation_analyzer import TranslationAnalyzer
# 翻译器不需要分析器配置
analyzer_config = None
# 初始化翻译器
# 支持的模型请参考 https://huggingface.co/models?pipeline_tag=translation
analyzer = TranslationAnalyzer(
model_name_or_path="Helsinki-NLP/opus-mt-hi-en",
device = "auto"
)
|
PII 匿名化器
from obsei.analyzer.pii_analyzer import PresidioEngineConfig, PresidioModelConfig, \
PresidioPIIAnalyzer, PresidioPIIAnalyzerConfig
# 初始化 PII 分析器的配置
analyzer_config = PresidioPIIAnalyzerConfig(
# 是否仅返回 PII 分析结果或匿名化文本
analyze_only=False,
# 是否返回匿名化决策的详细信息
return_decision_process=True
)
# 初始化 PII 分析器
analyzer = PresidioPIIAnalyzer(
engine_config=PresidioEngineConfig(
# 支持 spacy 和 stanza NLP 引擎
# 更多信息请参考
# https://microsoft.github.io/presidio/analyzer/developing_recognizers/#utilize-spacy-or-stanza
nlp_engine_name="spacy",
# 更新所需的 spacy 模型和语言
models=[PresidioModelConfig(model_name="en_core_web_lg", lang_code="en")]
)
)
|
虚拟分析器
虚拟分析器:什么都不做。它只是用于将输入(TextPayload)转换为输出(TextPayload),并添加用户提供的虚拟数据。
from obsei.analyzer.dummy_analyzer import DummyAnalyzer, DummyAnalyzerConfig
# 初始化虚拟分析器的配置设置
analyzer_config = DummyAnalyzerConfig()
# 初始化虚拟分析器
analyzer = DummyAnalyzer()
|
步骤 3:配置接收器/通知器
|
Slack
from obsei.sink.slack_sink import SlackSink, SlackSinkConfig
# 初始化 Slack 接收器配置
sink_config = SlackSinkConfig(
# 提供 Slack 机器人/应用令牌
# 更多详情请参考 https://slack.com/intl/en-de/help/articles/215770388-Create-and-regenerate-API-tokens
slack_token="<Slack_app_token>",
# 获取频道 ID 请参考 https://stackoverflow.com/questions/40940327/what-is-the-simplest-way-to-find-a-slack-team-id-and-a-channel-id
channel_id="C01LRS6CT9Q"
)
# 初始化 Slack 接收器
sink = SlackSink()
|
Zendesk
from obsei.sink.zendesk_sink import ZendeskSink, ZendeskSinkConfig, ZendeskCredInfo
# 初始化 Zendesk 接收器配置
sink_config = ZendeskSinkConfig(
# 提供 Zendesk 域名
domain="zendesk.com",
# 如果您有子域名,请提供
subdomain=None,
# 输入 Zendesk 用户详细信息
cred_info=ZendeskCredInfo(
email="<zendesk_user_email>",
password="<zendesk_password>"
)
)
# 初始化 Zendesk 接收器
sink = ZendeskSink()
|
Jira
from obsei.sink.jira_sink import JiraSink, JiraSinkConfig
# 为了测试,您可以本地启动 Jira 服务器
# 参考 https://developer.atlassian.com/server/framework/atlassian-sdk/atlas-run-standalone/
# 初始化 Jira 接收器配置
sink_config = JiraSinkConfig(
url="http://localhost:2990/jira", # Jira 服务器 URL
# 具有创建问题权限的用户的用户名和密码
username="<username>",
password="<password>",
# 要创建的问题类型
# 更多信息请参考 https://support.atlassian.com/jira-cloud-administration/docs/what-are-issue-types/
issue_type={"name": "Task"},
# 在哪个项目下创建问题
# 更多信息请参考 https://support.atlassian.com/jira-software-cloud/docs/what-is-a-jira-software-project/
project={"key": "CUS"},
)
# 初始化 Jira 接收器
sink = JiraSink()
|
ElasticSearch
from obsei.sink.elasticsearch_sink import ElasticSearchSink, ElasticSearchSinkConfig
# 为了测试,您可以使用 Docker 本地启动 Elasticsearch 服务器
# `docker run -d --name elasticsearch -p 9200:9200 -e "discovery.type=single-node" elasticsearch:8.5.0`
# 初始化 Elasticsearch 接收器配置
sink_config = ElasticSearchSinkConfig(
# Elasticsearch 服务器
hosts="http://localhost:9200",
# 索引名称,如果不存在则会自动创建
index_name="test",
)
# 初始化 Elasticsearch 接收器
sink = ElasticSearchSink()
|
Http
from obsei.sink.http_sink import HttpSink, HttpSinkConfig
# 为了测试,您可以使用 Postman 创建一个模拟 HTTP 服务器
# 更多详情请参考 https://learning.postman.com/docs/designing-and-developing-your-api/mocking-data/setting-up-mock/
# 初始化 HTTP 接收器配置(目前仅支持 POST 请求)
sink_config = HttpSinkConfig(
# 提供 HTTP 服务器 URL
url="https://localhost:8080/api/path",
# 您可以在这里添加希望随请求一起发送的头部信息
headers={
"Content-type": "application/json"
}
)
# 如果需要修改或转换负载数据,可以创建转换器类
# 请参考 obsei.sink.dailyget_sink.PayloadConvertor 示例
# 初始化 HTTP 接收器
sink = HttpSink()
|
Pandas DataFrame
from pandas import DataFrame
from obsei.sink.pandas_sink import PandasSink, PandasSinkConfig
# 初始化 Pandas 接收器配置
sink_config = PandasSinkConfig(
dataframe=DataFrame()
)
# 初始化 Pandas 接收器
sink = PandasSink()
|
Logger
这在测试和流水线的干运行中非常有用。
from obsei.sink.logger_sink import LoggerSink, LoggerSinkConfig
import logging
import sys
logger = logging.getLogger("Obsei")
logging.basicConfig(stream=sys.stdout, level=logging.INFO)
# 初始化 logger 接收器配置
sink_config = LoggerSinkConfig(
logger=logger,
level=logging.INFO
)
# 初始化 logger 接收器
sink = LoggerSink()
|
步骤 4:连接并创建工作流
source 将从选定的来源获取数据,然后将其输入到 analyzer 进行处理,我们再将 analyzer 的输出输入到 sink,以便在该接收器处收到通知。
# 如果您想记录日志,请取消注释
# import logging
# import sys
# logger = logging.getLogger(__name__)
# logging.basicConfig(stream=sys.stdout, level=logging.INFO)
# 这将从配置的来源获取信息,例如 Twitter、应用商店等
source_response_list = source.lookup(source_config)
# 如果您想记录源响应,请取消注释
# for idx, source_response in enumerate(source_response_list):
# logger.info(f"source_response#{idx}='{source_response.__dict__}'")
# 这将使用提供的 analyzer_config 对源数据执行分析器(情感分析、分类等)
analyzer_response_list = text_analyzer.analyze_input(
source_response_list=source_response_list,
analyzer_config=analyzer_config
)
# 如果您想记录分析器响应,请取消注释
# for idx, an_response in enumerate(analyzer_response_list):
# logger.info(f"analyzer_response#{idx}='{an_response.__dict__}'")
# 分析器输出被添加到 segmented_data 中
# 如果您想记录它,请取消注释
# for idx, an_response in enumerate(analyzer_response_list):
# logger.info(f"analyzed_data#{idx}='{an_response.segmented_data.__dict__}'")
# 这将把分析后的输出发送到配置的接收器,例如 Slack、Zendesk 等
sink_response_list = sink.send_data(analyzer_response_list, sink_config)
# 如果您想记录接收器响应,请取消注释
# for sink_response in sink_response_list:
# if sink_response is not None:
# logger.info(f"sink_response='{sink_response}'")
步骤 5:执行工作流
将 步骤 1 至 4 中的代码片段复制到一个 Python 文件中,例如 example.py,然后执行以下命令:
python example.py
演示
我们提供了一个基于 Streamlit 的最小化 UI,您可以用来测试 Obsei。

观看UI演示视频

在
查看演示
(注意:有时由于速率限制,Streamlit演示可能无法正常运行,请在这种情况下使用本地Docker镜像。)
要在本地测试,只需运行:
docker run -d --name obesi-ui -p 8501:8501 obsei/obsei-ui-demo
# 您可以在 http://localhost:8501 找到UI
要通过GitHub Actions轻松运行Obsei工作流(无需注册和云托管),请参考此仓库。
使用Obsei的公司/项目
以下是一些使用Obsei的公司/项目(按字母顺序排列)。如需将您的公司/项目添加到列表,请提交PR或通过电子邮件联系我们。
文章
教程
| 1 |
观察Google Play商店的应用评论,通过文本分类进行分析,然后通过日志记录器在控制台中显示 |
| PlayStore评论 → 分类 → 日志记录器 |
|
|
| 2 |
观察Google Play商店的应用评论,通过多种文本清理函数预处理文本,通过文本分类进行分析,将结果存储到Pandas DataFrame中,并保存为CSV文件到Google Drive |
| PlayStore评论 → 预处理 → 分类 → Pandas DataFrame → Google Drive中的CSV |
|
|
| 3 |
观察Apple App Store的应用评论,通过多种文本清理函数预处理文本,通过文本分类进行分析,将结果存储到Pandas DataFrame中,并保存为CSV文件到Google Drive |
| AppStore评论 → 预处理 → 分类 → Pandas DataFrame → Google Drive中的CSV |
|
|
| 4 |
观察Google新闻中的新闻文章,通过多种文本清理函数预处理文本,通过文本分类进行分析,同时将文本分割成小块,再用给定公式计算最终推理结果 |
| Google新闻 → 文本清理器 → 文本分割器 → 分类 → 推理聚合器 |
|
|
💡提示:通过Obsei处理大型文本分类

文档
有关详细的安装说明、使用方法和示例,请参阅我们的文档。
支持与发布矩阵
| 测试 |
✅ |
✅ |
✅ |
覆盖率较低,因为难以测试第三方库 |
| PIP |
✅ |
✅ |
✅ |
完全支持 |
| Conda |
❌ |
❌ |
❌ |
不支持 |
讨论论坛
关于_Obsei_的讨论可在社区论坛上进行。
更改日志
请参阅发布以获取更改日志
安全问题
如有任何安全问题,请通过电子邮件联系我们
长期以来的观星者

维护者
本项目由Oraika Technologies维护。Lalit Pagaria和Girish Patel是本项目的维护者。
许可协议
- 版权持有者:Oraika Technologies
- 整体采用Apache 2.0许可,您可阅读许可证文件。
- 对于第三方组件,我们采用了多种其他次要的宽松许可或弱 copyleft 许可(如LGPL、MIT、BSD等),详情请参阅署名文件。
- 为使项目更符合商业需求,我们已将那些具有强 copyleft 许可(如GPL、AGPL等)的第三方组件排除在项目之外。
署名
没有这些开源软件,这一切都不可能实现。
贡献
首先,感谢您考虑为本软件包做出贡献,无论大小,每一份贡献都备受珍视。
请参阅我们的贡献指南和行为规范。
非常感谢所有贡献者!
Obsei 快速上手指南
Obsei 是一个开源、低代码的 AI 自动化工具,旨在帮助用户从各种来源收集非结构化数据(如社交媒体评论、应用商店评价等),利用 AI 进行分析(如情感分析、分类),并将结果推送到指定目的地(如工单系统、数据库)。
环境准备
在开始之前,请确保您的开发环境满足以下要求:
- 操作系统:Linux, macOS 或 Windows
- Python 版本:Python 3.7 或更高版本
- 包管理工具:pip (通常随 Python 安装)
注意:Obsei 目前处于 Alpha 阶段,生产环境使用需谨慎。建议始终使用已发布的稳定版本,避免直接使用 master 分支以防遇到破坏性变更。
安装步骤
您可以使用 pip 进行安装。为了加速下载,中国开发者推荐使用国内镜像源(如阿里云或清华大学源)。
1. 安装完整功能版
如果您希望一次性安装所有依赖项(包含所有数据源、分析器和接收器):
pip install obsei[all] -i https://pypi.tuna.tsinghua.edu.cn/simple
2. 按需最小化安装
all 选项会安装大量可能用不到的依赖(包括 PyTorch)。您可以根据实际需求组合安装特定模块:
- 仅安装数据源 (Observers):
pip install obsei[source]
- 仅安装分析器 (Analyzers):
pip install obsei[analyzer] (会自动安装 PyTorch)
- 仅安装接收器 (Informers):
pip install obsei[sink]
- 组合示例 (安装 Twitter 数据源 + 所有分析器 + Slack 接收器):
pip install obsei[twitter-api,analyzer,slack-api] -i https://pypi.tuna.tsinghua.edu.cn/simple
常用可选依赖标识:
twitter-api: Twitter 数据抓取
reddit-api / reddit-scraper: Reddit 数据抓取
google-play-api / google-play-scraper: Google Play 评论抓取
facebook-api: Facebook 页面评论抓取
atlassian-api: Jira 工单集成
slack-api: Slack 消息推送
基本使用
Obsei 的工作流由三个核心组件组成:Observer (数据源)、Analyzer (分析器) 和 Informer (数据目的地)。
以下是一个最简化的概念示例,展示如何配置一个工作流(以从 Twitter 抓取数据为例):
第一步:配置数据源 (Observer)
初始化配置对象并创建源实例。您需要替换为您的真实 API 凭证。
from obsei.source.twitter_source import TwitterCredentials, TwitterSource, TwitterSourceConfig
# 初始化 Twitter 源配置
source_config = TwitterSourceConfig(
keywords=["issue"], # 搜索关键词、@用户 或 #标签
lookup_period="1h", # 查找时间段,格式:<数字><d|h|m> (天|小时|分钟)
cred_info=TwitterCredentials(
# 请填写您的 Twitter Developer 凭证
consumer_key="<twitter_consumer_key>",
consumer_secret="<twitter_consumer_secret>",
bearer_token='<ENTER BEARER TOKEN>',
)
)
# 初始化数据获取器
source = TwitterSource()
第二步:配置分析器 (Analyzer)
Obsei 支持多种 AI 任务,如情感分析、文本分类等。这里以默认的情感分析为例:
from obsei.analyzer.text_analyzer import TextAnalyzer, TextAnalyzerConfig
# 初始化分析器配置
analyzer_config = TextAnalyzerConfig(
model_name_or_path="distilbert-base-uncased-finetuned-sst-2-english", # 使用 HuggingFace 模型
batch_size=10
)
# 初始化分析器
analyzer = TextAnalyzer()
第三步:配置目的地 (Informer) 并执行工作流
将分析后的数据发送到目的地(例如打印到控制台或存入 DataFrame),然后执行整个流程:
from obsei.sink.dataframe_sink import DataframeSink, DataframeSinkConfig
# 初始化接收器配置 (此处以输出到 Pandas DataFrame 为例)
sink_config = DataframeSinkConfig()
sink = DataframeSink()
# 执行工作流
# 1. 从源获取数据
source_response_list = source.lookup(source_config)
# 2. 进行分析
analyzer_response_list = analyzer.analyze_input(
source_response_list=source_response_list,
analyzer_config=analyzer_config
)
# 3. 发送结果到目的地
sink.send(analyzer_response_list, sink_config)
通过以上三个步骤,您即可构建一个完整的自动化数据处理闭环。您可以参考官方文档替换不同的 Source(如 YouTube, Email, Google Maps)和 Sink(如 Jira, Slack, Elasticsearch)以适应具体业务场景。