mirror of
https://github.com/TeamWiseFlow/wiseflow.git
synced 2025-01-23 02:20:20 +08:00
mulity-language readme
This commit is contained in:
parent
06a6ac19e3
commit
e8db4fac87
207
README.md
207
README.md
@ -1,121 +1,162 @@
|
||||
# 📈 首席情报官(Wiseflow)
|
||||
# WiseFlow
|
||||
|
||||
**首席情报官**(Wiseflow)是一个敏捷的信息挖掘工具,可以从社交平台消息、微信公众号、群聊等各种信息源中提炼简洁的讯息,自动做标签归类并上传数据库。让你轻松应对信息过载,精准掌握你最关心的内容。
|
||||
**[中文](README_CN.md) | [日本語](README_JP.md) | [Français](README_FR.md) | [Deutsch](README_DE.md)**
|
||||
|
||||
## 🌟 功能特色
|
||||
**Wiseflow** is an agile information mining tool that extracts concise messages from various sources such as websites, WeChat official accounts, social platforms, etc. It automatically categorizes and uploads them to the database.
|
||||
|
||||
- 🚀 **原生 LLM 应用**
|
||||
我们精心选择了最适合的 7B~9B 开源模型,最大化降低使用成本,且利于数据敏感用户随时切换到本地部署模式。
|
||||
We are not short of information; what we need is to filter out the noise from the vast amount of information so that valuable information stands out! See how Chief Intelligence Officer helps you save time, filter out irrelevant information, and organize key points of interest!
|
||||
|
||||
- 🌱 **轻量化设计**
|
||||
没有使用任何向量模型,系统开销很小,无需 GPU,适合任何硬件环境。
|
||||
<img alt="sample.png" src="asset/sample.png" width="1024"/>
|
||||
|
||||
- 🗃️ **智能信息提取和分类**
|
||||
从各种信息源中自动提取信息,并根据用户关注点进行标签化和分类管理。
|
||||
## 🔥 Major Update V0.3.0
|
||||
|
||||
- 🌍 **实时动态知识库**
|
||||
能够与现有的 RAG 类项目整合,作为动态知识库提升知识管理效率。
|
||||
- ✅ Completely rewritten general web content parser, using a combination of statistical learning (relying on the open-source project GNE) and LLM, adapted to over 90% of news pages;
|
||||
|
||||
- 📦 **流行的 Pocketbase 数据库**
|
||||
数据库和界面使用 Pocketbase,不管是直接用 Web 阅读,还是通过 Go 工具读取,都很方便。
|
||||
|
||||
## 🔄 对比分析
|
||||
- ✅ Brand new asynchronous task architecture;
|
||||
|
||||
| 特点 | 首席情报官(Wiseflow) | Markdown_crawler | firecrawler | RAG 类项目 |
|
||||
| -------------- | ----------------------- | ----------------- | ----------- | ---------------- |
|
||||
| **信息提取** | ✅ 高效 | ❌ 限制于 Markdown | ❌ 仅网页 | ⚠️ 提取后处理 |
|
||||
| **信息分类** | ✅ 自动 | ❌ 手动 | ❌ 手动 | ⚠️ 依赖外部工具 |
|
||||
| **模型依赖** | ✅ 7B~9B 开源模型 | ❌ 无模型 | ❌ 无模型 | ✅ 向量模型 |
|
||||
| **硬件需求** | ✅ 无需 GPU | ✅ 无需 GPU | ✅ 无需 GPU | ⚠️ 视具体实现而定 |
|
||||
| **可整合性** | ✅ 动态知识库 | ❌ 低 | ❌ 低 | ✅ 高 |
|
||||
|
||||
## 📥 安装与使用
|
||||
- ✅ New information extraction and labeling strategy, more accurate, more refined, and can perform tasks perfectly with only a 9B LLM!
|
||||
|
||||
1. **克隆代码仓库**
|
||||
## 🌟 Key Features
|
||||
|
||||
- 🚀 **Native LLM Application**
|
||||
We carefully selected the most suitable 7B~9B open-source models to minimize usage costs and allow data-sensitive users to switch to local deployment at any time.
|
||||
|
||||
|
||||
- 🌱 **Lightweight Design**
|
||||
Without using any vector models, the system has minimal overhead and does not require a GPU, making it suitable for any hardware environment.
|
||||
|
||||
|
||||
- 🗃️ **Intelligent Information Extraction and Classification**
|
||||
Automatically extracts information from various sources and tags and classifies it according to user interests.
|
||||
|
||||
😄 **Wiseflow is particularly good at extracting information from WeChat official account articles**; for this, we have configured a dedicated mp article parser!
|
||||
|
||||
|
||||
- 🌍 **Can be Integrated into Any RAG Project**
|
||||
Can serve as a dynamic knowledge base for any RAG project, without needing to understand the code of Wiseflow, just operate through database reads!
|
||||
|
||||
|
||||
- 📦 **Popular Pocketbase Database**
|
||||
The database and interface use PocketBase. Besides the web interface, APIs for Go/Javascript/Python languages are available.
|
||||
|
||||
- Go: https://pocketbase.io/docs/go-overview/
|
||||
- Javascript: https://pocketbase.io/docs/js-overview/
|
||||
- Python: https://github.com/vaphes/pocketbase
|
||||
|
||||
## 🔄 What are the Differences and Connections between Wiseflow and Common Crawlers, RAG Projects?
|
||||
|
||||
| Feature | Wiseflow | Crawler / Scraper | RAG Projects |
|
||||
|-----------------|--------------------------------------|------------------------------------------|--------------------------|
|
||||
| **Main Problem Solved** | Data processing (filtering, extraction, labeling) | Raw data acquisition | Downstream applications |
|
||||
| **Connection** | | Can be integrated into Wiseflow for more powerful raw data acquisition | Can integrate Wiseflow as a dynamic knowledge base |
|
||||
|
||||
## 📥 Installation and Usage
|
||||
|
||||
WiseFlow has virtually no hardware requirements, with minimal system overhead, and does not need a discrete GPU or CUDA (when using online LLM services).
|
||||
|
||||
1. **Clone the Code Repository**
|
||||
|
||||
😄 Liking and forking is a good habit
|
||||
|
||||
```bash
|
||||
git clone https://github.com/your-username/wiseflow.git
|
||||
git clone https://github.com/TeamWiseFlow/wiseflow.git
|
||||
cd wiseflow
|
||||
```
|
||||
|
||||
2. **安装依赖**
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
2. **Configuration**
|
||||
|
||||
3. **配置**
|
||||
Copy `env_sample` in the directory and rename it to `.env`, then fill in your configuration information (such as LLM service tokens) as follows:
|
||||
|
||||
在 `config.yaml` 中配置你的信息源和关注点。
|
||||
|
||||
4. **启动服务**
|
||||
|
||||
```bash
|
||||
python main.py
|
||||
```
|
||||
|
||||
5. **访问 Web 界面**
|
||||
|
||||
打开浏览器,访问 `http://localhost:8000`。
|
||||
|
||||
## 📚 文档与支持
|
||||
|
||||
- [使用文档](docs/usage.md)
|
||||
- [开发者指南](docs/developer.md)
|
||||
- [常见问题](docs/faq.md)
|
||||
|
||||
## 🤝 贡献指南
|
||||
|
||||
欢迎对项目进行贡献!请阅读 [贡献指南](CONTRIBUTING.md) 以了解详细信息。
|
||||
|
||||
## 🛡️ 许可协议
|
||||
|
||||
本项目基于 [Apach2.0](LICENSE) 开源。
|
||||
|
||||
商用以及定制合作,请联系 Email:35252986@qq.com
|
||||
|
||||
(商用客户请联系我们报备登记,产品承诺永远免费。)
|
||||
|
||||
(对于定制客户,我们会针对您的信源和数据情况,提供专有解析器开发、信息提取和分类策略优化、llm模型微调以及私有化部署服务)
|
||||
|
||||
## 📬 联系方式
|
||||
|
||||
有任何问题或建议,欢迎通过 [issue](https://github.com/your-username/wiseflow/issues) 与我们联系。
|
||||
- LLM_API_KEY # API key for large model inference service (if using OpenAI service, you can omit this by deleting this entry)
|
||||
- LLM_API_BASE # Base URL for the OpenAI-compatible model service (omit this if using OpenAI service)
|
||||
- WS_LOG="verbose" # Enable debug logging, delete if not needed
|
||||
- GET_INFO_MODEL # Model for information extraction and tagging tasks, default is gpt-3.5-turbo
|
||||
- REWRITE_MODEL # Model for near-duplicate information merging and rewriting tasks, default is gpt-3.5-turbo
|
||||
- HTML_PARSE_MODEL # Web page parsing model (smartly enabled when GNE algorithm performs poorly), default is gpt-3.5-turbo
|
||||
- PROJECT_DIR # Location for storing cache and log files, relative to the code repository; default is the code repository itself if not specified
|
||||
- PB_API_AUTH='email|password' # Admin email and password for the pb database (use a valid email for the first use, it can be a fictitious one but must be an email)
|
||||
- PB_API_BASE # Not required for normal use, only needed if not using the default local PocketBase interface (port 8090)
|
||||
|
||||
|
||||
## change log
|
||||
3. **Model Recommendation**
|
||||
|
||||
【2024.5.8】增加对openai SDK的支持,现在可以通过调用llms.openai_wrapper使用所有兼容openai SDK的大模型服务,具体见 [client/backend/llms/README.md](client/backend/llms/README.md)
|
||||
After extensive testing (in both Chinese and English tasks), for comprehensive effect and cost, we recommend the following for **GET_INFO_MODEL**, **REWRITE_MODEL**, and **HTML_PARSE_MODEL**: **"zhipuai/glm4-9B-chat"**, **"alibaba/Qwen2-7B-Instruct"**, **"alibaba/Qwen2-7B-Instruct"**.
|
||||
|
||||
These models fit the project well, with stable command adherence and excellent generation effects. The related prompts for this project are also optimized for these three models. (**HTML_PARSE_MODEL** can also use **"01-ai/Yi-1.5-9B-Chat"**, which also performs excellently in tests)
|
||||
|
||||
⚠️ We strongly recommend using **SiliconFlow**'s online inference service for lower costs, faster speeds, and higher free quotas! ⚠️
|
||||
|
||||
SiliconFlow online inference service is compatible with the OpenAI SDK and provides open-source services for the above three models. Just configure LLM_API_BASE as "https://api.siliconflow.cn/v1" and set up LLM_API_KEY to use it.
|
||||
|
||||
|
||||
## getting started
|
||||
4. **Local Deployment**
|
||||
|
||||
首席情报官提供了开箱即用的本地客户端,对于没有二次开发需求的用户可以通过如下简单五个步骤即刻起飞!
|
||||
As you can see, this project uses 7B/9B LLMs and does not require any vector models, which means you can fully deploy this project locally with just an RTX 3090 (24GB VRAM).
|
||||
|
||||
1、克隆代码仓
|
||||
Ensure your local LLM service is compatible with the OpenAI SDK, and configure LLM_API_BASE accordingly.
|
||||
|
||||
```commandline
|
||||
git clone git@github.com:TeamWiseFlow/wiseflow.git
|
||||
cd wiseflow/client
|
||||
```
|
||||
|
||||
4、参考 /client/env_sample 编辑.env文件;
|
||||
5. **Run the Program**
|
||||
|
||||
5、运行 `docker compose up -d` 启动(第一次需要build image,时间较长)
|
||||
**For regular users, it is strongly recommended to use Docker to run the Chief Intelligence Officer.**
|
||||
|
||||
📚 For developers, see [/core/README.md](/core/README.md) for more.
|
||||
|
||||
Access data obtained via PocketBase:
|
||||
|
||||
- http://127.0.0.1:8090/_/ - Admin dashboard UI
|
||||
- http://127.0.0.1:8090/api/ - REST API
|
||||
- https://pocketbase.io/docs/ check more
|
||||
|
||||
|
||||
6. **Adding Scheduled Source Scanning**
|
||||
|
||||
After starting the program, open the PocketBase Admin dashboard UI (http://127.0.0.1:8090/_/)
|
||||
|
||||
Open the **sites** form.
|
||||
|
||||
Through this form, you can specify custom sources, and the system will start background tasks to scan, parse, and analyze the sources locally.
|
||||
|
||||
Description of the sites fields:
|
||||
|
||||
- url: The URL of the source. The source does not need to specify the specific article page, just the article list page. Wiseflow client includes two general page parsers that can effectively acquire and parse over 90% of news-type static web pages.
|
||||
- per_hours: Scanning frequency, in hours, integer type (range 1~24; we recommend a scanning frequency of no more than once per day, i.e., set to 24).
|
||||
- activated: Whether to activate. If turned off, the source will be ignored; it can be turned on again later. Turning on and off does not require restarting the Docker container and will be updated at the next scheduled task.
|
||||
|
||||
## 🛡️ License
|
||||
|
||||
This project is open-source under the [Apache 2.0](LICENSE) license.
|
||||
|
||||
For commercial use and customization cooperation, please contact **Email: 35252986@qq.com**.
|
||||
|
||||
- Commercial customers, please register with us. The product promises to be free forever.
|
||||
- For customized customers, we provide the following services according to your sources and business needs:
|
||||
- Custom proprietary parsers
|
||||
- Customized information extraction and classification strategies
|
||||
- Targeted LLM recommendations or even fine-tuning services
|
||||
- Private deployment services
|
||||
- UI interface customization
|
||||
|
||||
## 📬 Contact Information
|
||||
|
||||
If you have any questions or suggestions, feel free to contact us through [issue](https://github.com/TeamWiseFlow/wiseflow/issues).
|
||||
|
||||
## 🤝 This Project is Based on the Following Excellent Open-source Projects:
|
||||
|
||||
- GeneralNewsExtractor (General Extractor of News Web Page Body Based on Statistical Learning) https://github.com/GeneralNewsExtractor/GeneralNewsExtractor
|
||||
- json_repair (Repair invalid JSON documents) https://github.com/josdejong/jsonrepair/tree/main
|
||||
- python-pocketbase (PocketBase client SDK for Python) https://github.com/vaphes/pocketbase
|
||||
|
||||
# Citation
|
||||
|
||||
如果您在相关工作中参考或引用了本项目的部分或全部,请注明如下信息:
|
||||
If you refer to or cite part or all of this project in related work, please indicate the following information:
|
||||
|
||||
```
|
||||
Author:Wiseflow Team
|
||||
Author: Wiseflow Team
|
||||
https://openi.pcl.ac.cn/wiseflow/wiseflow
|
||||
https://github.com/TeamWiseFlow/wiseflow
|
||||
Licensed under Apache2.0
|
||||
```
|
||||
# After many comparisons, we recommend the following model for the two tasks of this project (combining effectiveness, speed, and cost performance).
|
||||
# At the same time, we recommend the siliconflow platform, which can provide online reasoning services for the following two models at a more favorable price
|
||||
# The siliconflow platform is compatible with openai sdk, which makes the program simple
|
||||
# Therefore, unless you have experimented and found that there are better options for your data, it is not recommended to change the following two parameters
|
||||
# (although you have the right to make any changes at any time).
|
||||
```
|
166
README_CN.md
Normal file
166
README_CN.md
Normal file
@ -0,0 +1,166 @@
|
||||
# 首席情报官(Wiseflow)
|
||||
|
||||
**[English](README.md) | [日本語](README_JP.md) | [Français](README_FR.md) | [Deutsch](README_DE.md)**
|
||||
|
||||
**首席情报官**(Wiseflow)是一个敏捷的信息挖掘工具,可以从网站、微信公众号、社交平台等各种信息源中提炼简洁的讯息,自动做标签归类并上传数据库。
|
||||
|
||||
我们缺的其实不是信息,我们需要的是从海量信息中过滤噪音,从而让有价值的信息显露出来!看看首席情报官是如何帮您节省时间,过滤无关信息,并整理关注要点的吧!
|
||||
|
||||
<img alt="sample.png" src="asset/sample.png" width="1024"/>
|
||||
|
||||
## 🔥 V0.3.0 重大更新
|
||||
|
||||
- ✅ 全新改写的通用网页内容解析器,综合使用统计学习(依赖开源项目GNE)和LLM,适配90%以上的新闻页面;
|
||||
|
||||
|
||||
- ✅ 全新的异步任务架构;
|
||||
|
||||
|
||||
- ✅ 全新的信息提取和标签分类策略,更精准、更细腻,且只需使用9B大小的LLM就可完美执行任务!
|
||||
|
||||
## 🌟 功能特色
|
||||
|
||||
- 🚀 **原生 LLM 应用**
|
||||
我们精心选择了最适合的 7B~9B 开源模型,最大化降低使用成本,且利于数据敏感用户随时完全切换至本地部署。
|
||||
|
||||
|
||||
- 🌱 **轻量化设计**
|
||||
不用任何向量模型,系统开销很小,无需 GPU,适合任何硬件环境。
|
||||
|
||||
|
||||
- 🗃️ **智能信息提取和分类**
|
||||
从各种信息源中自动提取信息,并根据用户关注点进行标签化和分类管理。
|
||||
|
||||
😄 **WiseFlow尤其擅长从微信公众号文章中提取信息**,为此我们配置了mp article专属解析器!
|
||||
|
||||
|
||||
- 🌍 **可以被整合至任意RAG项目**
|
||||
可以作为任意 RAG 类项目的动态知识库,无需了解wiseflow的代码,只需要与数据库进行读取操作即可!
|
||||
|
||||
|
||||
- 📦 **流行的 Pocketbase 数据库**
|
||||
数据库和界面使用 PocketBase,除了 Web 界面外,目前已有 Go/Javascript/Python 等语言的API。
|
||||
|
||||
- Go : https://pocketbase.io/docs/go-overview/
|
||||
- Javascript : https://pocketbase.io/docs/js-overview/
|
||||
- python : https://github.com/vaphes/pocketbase
|
||||
|
||||
## 🔄 wiseflow 与常见的爬虫工具、RAG类项目有何不同与关联?
|
||||
|
||||
| 特点 | 首席情报官(Wiseflow) | Crawler / Scraper | RAG 类项目 |
|
||||
|-------------|-----------------|---------------------------------------|----------------------|
|
||||
| **主要解决的问题** | 数据处理(筛选、提炼、贴标签) | 原始数据获取 | 下游应用 |
|
||||
| **关联** | | 可以集成至WiseFlow,使wiseflow具有更强大的原始数据获取能力 | 可以集成WiseFlow,作为动态知识库 |
|
||||
|
||||
## 📥 安装与使用
|
||||
|
||||
首席情报官对于硬件基本无任何要求,系统开销很小,无需独立显卡和CUDA(使用在线LLM服务的情况下)
|
||||
|
||||
1. **克隆代码仓库**
|
||||
|
||||
😄 点赞、fork是好习惯
|
||||
|
||||
```bash
|
||||
git clone https://github.com/TeamWiseFlow/wiseflow.git
|
||||
cd wiseflow
|
||||
```
|
||||
|
||||
|
||||
2. **配置**
|
||||
|
||||
复制目录下的env_sample,并改名为.env, 参考如下 填入你的配置信息(LLM服务token等)
|
||||
|
||||
- LLM_API_KEY # 大模型推理服务API KEY(如使用openai服务,也可以不在这里配置,删除这一项即可)
|
||||
- LLM_API_BASE # 本项目依赖openai sdk,只要模型服务支持openai接口,就可以通过配置该项正常使用,如使用openai服务,删除这一项即可
|
||||
- WS_LOG="verbose" # 设定是否开始debug观察,如无需要,删除即可
|
||||
- GET_INFO_MODEL # 信息提炼与标签匹配任务模型,默认为 gpt-3.5-turbo
|
||||
- REWRITE_MODEL # 近似信息合并改写任务模型,默认为 gpt-3.5-turbo
|
||||
- HTML_PARSE_MODEL # 网页解析模型(GNE算法效果不佳时智能启用),默认为 gpt-3.5-turbo
|
||||
- PROJECT_DIR # 缓存以及日志文件存储位置,相对于代码仓的相对路径,默认不填就在代码仓
|
||||
- PB_API_AUTH='email|password' # pb数据库admin的邮箱和密码(<span style="color: red; font-weight: bold;">首次使用,先想好邮箱和密码,提前填入这里,注意一定是邮箱,可以是虚构的邮箱</span>)
|
||||
- PB_API_BASE # 正常使用无需这一项,只有当你不使用默认的pocketbase本地接口(8090)时才需要
|
||||
|
||||
|
||||
3. **模型推荐**
|
||||
|
||||
经过反复测试(中英文任务),综合效果和价格,**GET_INFO_MODEL**、**REWRITE_MODEL**、**HTML_PARSE_MODEL** 三项我们分别推荐 **"zhipuai/glm4-9B-chat"**、**"alibaba/Qwen2-7B-Instruct"**、**"alibaba/Qwen2-7B-Instruct"**
|
||||
|
||||
它们可以非常好的适配本项目,指令遵循稳定且生成效果优秀,本项目相关的prompt也是针对这三个模型进行的优化。(**HTML_PARSE_MODEL** 也可以使用 **"01-ai/Yi-1.5-9B-Chat"**,实测效果也非常棒)
|
||||
|
||||
|
||||
⚠️ 同时强烈推荐使用 **SiliconFlow** 的在线推理服务,更低的价格、更快的速度、更高的免费额度!⚠️
|
||||
|
||||
SiliconFlow 在线推理服务兼容openai SDK,并同时提供上述三个模型的开源服务,仅需配置 LLM_API_BASE 为 "https://api.siliconflow.cn/v1" , 并配置 LLM_API_KEY 即可使用。
|
||||
|
||||
|
||||
4. **本地部署**
|
||||
|
||||
如您所见,本项目使用7b\9b大小的LLM,且无需任何向量模型,这就意味着仅仅需要一块3090RTX(24G显存)就可以完全的对本项目进行本地化部署。
|
||||
|
||||
请保证您的本地化部署LLM服务兼容openai SDK,并配置 LLM_API_BASE 即可
|
||||
|
||||
|
||||
5. **启动程序**
|
||||
|
||||
**对于普通用户,强烈推荐使用Docker运行首席情报官。**
|
||||
|
||||
📚 for developer, see [/core/README.md](/core/README.md) for more
|
||||
|
||||
通过 pocketbase 访问获取的数据:
|
||||
|
||||
- http://127.0.0.1:8090/_/ - Admin dashboard UI
|
||||
- http://127.0.0.1:8090/api/ - REST API
|
||||
- https://pocketbase.io/docs/ check more
|
||||
|
||||
|
||||
6. **定时扫描信源添加**
|
||||
|
||||
启动程序后,打开pocketbase Admin dashboard UI (http://127.0.0.1:8090/_/)
|
||||
|
||||
打开 **sites表单**
|
||||
|
||||
通过这个表单可以指定自定义信源,系统会启动后台定时任务,在本地执行信源扫描、解析和分析。
|
||||
|
||||
sites 字段说明:
|
||||
|
||||
- url, 信源的url,信源无需给定具体文章页面,给文章列表页面即可,wiseflow client中包含两个通用页面解析器,90%以上的新闻类静态网页都可以很好的获取和解析。
|
||||
- per_hours, 扫描频率,单位为小时,类型为整数(1~24范围,我们建议扫描频次不要超过一天一次,即设定为24)
|
||||
- activated, 是否激活。如果关闭则会忽略该信源,关闭后可再次开启。开启和关闭无需重启docker容器,会在下一次定时任务时更新。
|
||||
|
||||
|
||||
## 🛡️ 许可协议
|
||||
|
||||
本项目基于 [Apach2.0](LICENSE) 开源。
|
||||
|
||||
商用以及定制合作,请联系 **Email:35252986@qq.com**
|
||||
|
||||
|
||||
- 商用客户请联系我们报备登记,产品承诺永远免费。)
|
||||
- 对于定制客户,我们会针对您的信源和业务需求提供如下服务:
|
||||
- 定制专有解析器
|
||||
- 定制信息提取和分类策略
|
||||
- 针对性llm推荐甚至微调服务
|
||||
- 私有化部署服务
|
||||
- UI界面定制
|
||||
|
||||
## 📬 联系方式
|
||||
|
||||
有任何问题或建议,欢迎通过 [issue](https://github.com/TeamWiseFlow/wiseflow/issues) 与我们联系。
|
||||
|
||||
|
||||
## 🤝 本项目基于如下优秀的开源项目:
|
||||
|
||||
- GeneralNewsExtractor ( General Extractor of News Web Page Body Based on Statistical Learning) https://github.com/GeneralNewsExtractor/GeneralNewsExtractor
|
||||
- json_repair(Repair invalid JSON documents ) https://github.com/josdejong/jsonrepair/tree/main
|
||||
- python-pocketbase (pocketBase client SDK for python) https://github.com/vaphes/pocketbase
|
||||
|
||||
# Citation
|
||||
|
||||
如果您在相关工作中参考或引用了本项目的部分或全部,请注明如下信息:
|
||||
|
||||
```
|
||||
Author:Wiseflow Team
|
||||
https://openi.pcl.ac.cn/wiseflow/wiseflow
|
||||
https://github.com/TeamWiseFlow/wiseflow
|
||||
Licensed under Apache2.0
|
||||
```
|
160
README_DE.md
Normal file
160
README_DE.md
Normal file
@ -0,0 +1,160 @@
|
||||
# WiseFlow
|
||||
|
||||
**[中文](README_CN.md) | [日本語](README_JP.md) | [Français](README_FR.md) | [English](README.md)**
|
||||
|
||||
**Wiseflow** ist ein agiles Information-Mining-Tool, das in der Lage ist, prägnante Nachrichten aus verschiedenen Quellen wie Webseiten, offiziellen WeChat-Konten, sozialen Plattformen usw. zu extrahieren. Es kategorisiert die Informationen automatisch mit Tags und lädt sie in eine Datenbank hoch.
|
||||
|
||||
Es mangelt uns nicht an Informationen, sondern wir müssen den Lärm herausfiltern, um wertvolle Informationen hervorzuheben! Sehen Sie, wie Chief Intelligence Officer Ihnen hilft, Zeit zu sparen, irrelevante Informationen zu filtern und interessante Punkte zu organisieren!
|
||||
|
||||
<img alt="sample.png" src="asset/sample.png" width="1024"/>
|
||||
|
||||
## 🔥 Wichtige Updates in V0.3.0
|
||||
|
||||
- ✅ Neuer universeller Web-Content-Parser, der auf GNE (ein Open-Source-Projekt) und LLM basiert und mehr als 90% der Nachrichtenseiten unterstützt.
|
||||
|
||||
- ✅ Neue asynchrone Aufgabenarchitektur.
|
||||
|
||||
- ✅ Neue Strategie zur Informationsextraktion und Tag-Klassifizierung, die präziser und feiner ist und Aufgaben mit nur einem 9B LLM perfekt ausführt.
|
||||
|
||||
## 🌟 Hauptfunktionen
|
||||
|
||||
- 🚀 **Native LLM-Anwendung**
|
||||
Wir haben die am besten geeigneten Open-Source-Modelle von 7B~9B sorgfältig ausgewählt, um die Nutzungskosten zu minimieren und es datensensiblen Benutzern zu ermöglichen, jederzeit vollständig auf eine lokale Bereitstellung umzuschalten.
|
||||
|
||||
|
||||
- 🌱 **Leichtes Design**
|
||||
Ohne Vektormodelle ist das System minimal invasiv und benötigt keine GPUs, was es für jede Hardwareumgebung geeignet macht.
|
||||
|
||||
|
||||
- 🗃️ **Intelligente Informationsextraktion und -klassifizierung**
|
||||
Extrahiert automatisch Informationen aus verschiedenen Quellen und markiert und klassifiziert sie basierend auf den Interessen der Benutzer.
|
||||
|
||||
😄 **Wiseflow ist besonders gut darin, Informationen aus WeChat-Official-Account-Artikeln zu extrahieren**; hierfür haben wir einen dedizierten Parser für mp-Artikel eingerichtet!
|
||||
|
||||
|
||||
- 🌍 **Kann in jedes RAG-Projekt integriert werden**
|
||||
Kann als dynamische Wissensdatenbank für jedes RAG-Projekt dienen, ohne dass der Code von Wiseflow verstanden werden muss. Es reicht, die Datenbank zu lesen!
|
||||
|
||||
|
||||
- 📦 **Beliebte PocketBase-Datenbank**
|
||||
Die Datenbank und das Interface nutzen PocketBase. Zusätzlich zur Webschnittstelle sind APIs für Go/JavaScript/Python verfügbar.
|
||||
|
||||
- Go: https://pocketbase.io/docs/go-overview/
|
||||
- JavaScript: https://pocketbase.io/docs/js-overview/
|
||||
- Python: https://github.com/vaphes/pocketbase
|
||||
|
||||
## 🔄 Unterschiede und Zusammenhänge zwischen Wiseflow und allgemeinen Crawler-Tools und RAG-Projekten
|
||||
|
||||
| Merkmal | WiseFlow | Crawler / Scraper | RAG-Projekte |
|
||||
|------------------------|----------------------------------------------------|------------------------------------------|----------------------------|
|
||||
| **Hauptproblem gelöst** | Datenverarbeitung (Filterung, Extraktion, Tagging) | Rohdaten-Erfassung | Downstream-Anwendungen |
|
||||
| **Zusammenhang** | | Kann in Wiseflow integriert werden, um leistungsfähigere Rohdaten-Erfassung zu ermöglichen | Kann Wiseflow als dynamische Wissensdatenbank integrieren |
|
||||
|
||||
## 📥 Installation und Verwendung
|
||||
|
||||
WiseFlow hat fast keine Hardwareanforderungen, minimale Systemlast und benötigt keine dedizierte GPU oder CUDA (bei Verwendung von Online-LLM-Diensten).
|
||||
|
||||
1. **Code-Repository klonen**
|
||||
|
||||
😄 Liken und Forken ist eine gute Angewohnheit
|
||||
|
||||
```bash
|
||||
git clone https://github.com/TeamWiseFlow/wiseflow.git
|
||||
cd wiseflow
|
||||
```
|
||||
|
||||
|
||||
2. **Konfiguration**
|
||||
|
||||
Kopiere `env_sample` im Verzeichnis und benenne es in `.env` um, und fülle deine Konfigurationsinformationen (wie LLM-Service-Tokens) wie folgt aus:
|
||||
|
||||
- LLM_API_KEY # API-Schlüssel für den Large-Model-Inference-Service (falls du den OpenAI-Dienst nutzt, kannst du diesen Eintrag löschen)
|
||||
- LLM_API_BASE # URL-Basis für den Modellservice, der OpenAI-kompatibel ist (falls du den OpenAI-Dienst nutzt, kannst du diesen Eintrag löschen)
|
||||
- WS_LOG="verbose" # Debug-Logging aktivieren, wenn nicht benötigt, löschen
|
||||
- GET_INFO_MODEL # Modell für Informations-Extraktions- und Tagging-Aufgaben, standardmäßig gpt-3.5-turbo
|
||||
- REWRITE_MODEL # Modell für Aufgaben der Konsolidierung und Umschreibung von nahegelegenen Informationen, standardmäßig gpt-3.5-turbo
|
||||
- HTML_PARSE_MODEL # Modell für Web-Parsing (intelligent aktiviert, wenn der GNE-Algorithmus unzureichend ist), standardmäßig gpt-3.5-turbo
|
||||
- PROJECT_DIR # Speicherort für Cache- und Log-Dateien, relativ zum Code-Repository; standardmäßig das Code-Repository selbst, wenn nicht angegeben
|
||||
- PB_API_AUTH='email|password' # Admin-E-Mail und Passwort für die pb-Datenbank (verwende eine gültige E-Mail-Adresse für die erste Verwendung, sie kann fiktiv sein, muss aber eine E-Mail-Adresse sein)
|
||||
- PB_API_BASE # Nicht erforderlich für den normalen Gebrauch, nur notwendig, wenn du nicht die standardmäßige PocketBase-Local-Interface (Port 8090) verwendest.
|
||||
|
||||
|
||||
3. **Modell-Empfehlung**
|
||||
|
||||
Nach wiederholten Tests (auf chinesischen und englischen Aufgaben) empfehlen wir für **GET_INFO_MODEL**, **REWRITE_MODEL**, und **HTML_PARSE_MODEL** die folgenden Modelle für optimale Gesamteffekt und Kosten: **"zhipuai/glm4-9B-chat"**, **"alibaba/Qwen2-7B-Instruct"**, **"alibaba/Qwen2-7B-Instruct"**.
|
||||
|
||||
Diese Modelle passen gut zum Projekt, sind in der Befolgung von Anweisungen stabil und haben hervorragende Generierungseffekte. Die zugehörigen Prompts für dieses Projekt sind ebenfalls für diese drei Modelle optimiert. (**HTML_PARSE_MODEL** kann auch **"01-ai/Yi-1.5-9B-Chat"** verwenden, das in den Tests ebenfalls sehr gut abgeschnitten hat)
|
||||
|
||||
⚠️ Wir empfehlen dringend, den **SiliconFlow** Online-Inference-Service für niedrigere Kosten, schnellere Geschwindigkeiten und höhere kostenlose Quoten zu verwenden! ⚠️
|
||||
|
||||
Der SiliconFlow Online-Inference-Service ist mit dem OpenAI SDK kompatibel und bietet Open-Service für die oben genannten drei Modelle. Konfiguriere LLM_API_BASE als "https://api.siliconflow.cn/v1" und LLM_API_KEY, um es zu verwenden.
|
||||
|
||||
|
||||
4. **Lokale Bereitstellung**
|
||||
|
||||
Wie du sehen kannst, verwendet dieses Projekt 7B/9B-LLMs und benötigt keine Vektormodelle, was bedeutet, dass du dieses Projekt vollständig lokal mit nur einer RTX 3090 (24 GB VRAM) bereitstellen kannst.
|
||||
|
||||
Stelle sicher, dass dein lokaler LLM-Dienst mit dem OpenAI SDK kompatibel ist und konfiguriere LLM_API_BASE entsprechend.
|
||||
|
||||
|
||||
5. **Programm ausführen**
|
||||
|
||||
**Für reguläre Benutzer wird dringend empfohlen, Docker zu verwenden, um Chief Intelligence Officer auszuführen.**
|
||||
|
||||
📚 Für Entwickler siehe [/core/README.md](/core/README.md) für weitere Informationen.
|
||||
|
||||
Zugriff auf die erfassten Daten über PocketBase:
|
||||
|
||||
- http://127.0.0.1:8090/_/ - Admin-Dashboard-Interface
|
||||
- http://127.0.0.1:8090/api/ - REST-API
|
||||
- https://pocketbase.io/docs/ für mehr Informationen
|
||||
|
||||
|
||||
6. **Geplanten Quellen-Scan hinzufügen**
|
||||
|
||||
Nachdem das Programm gestartet wurde, öffne das Admin-Dashboard-Interface von PocketBase (http://127.0.0.1:8090/_/)
|
||||
|
||||
Öffne das Formular **sites**.
|
||||
|
||||
Über dieses Formular kannst du benutzerdefinierte Quellen angeben, und das System wird Hintergrundaufgaben starten, um die Quellen lokal zu scannen, zu parsen und zu analysieren.
|
||||
|
||||
Felderbeschreibung des Formulars sites:
|
||||
|
||||
- url: Die URL der Quelle. Die Quelle muss nicht die spezifische Artikelseite angeben, nur die Artikelliste-Seite. Der Wiseflow-Client enthält zwei allgemeine Seitenparser, die effizient mehr als 90% der statischen Nachrichtenwebseiten erfassen und parsen können.
|
||||
- per_hours: Häufigkeit des Scannens, in Stunden, ganzzahlig (Bereich 1~24; wir empfehlen eine Scanfrequenz von einmal pro Tag, also auf 24 eingestellt).
|
||||
- activated: Ob aktiviert. Wenn deaktiviert, wird die Quelle ignoriert; sie kann später wieder aktiviert werden.
|
||||
|
||||
## 🛡️ Lizenz
|
||||
|
||||
Dieses Projekt ist unter der [Apache 2.0](LICENSE) Lizenz als Open-Source verfügbar.
|
||||
|
||||
Für kommerzielle Nutzung und maßgeschneiderte Kooperationen kontaktieren Sie uns bitte unter **E-Mail: 35252986@qq.com**.
|
||||
|
||||
- Kommerzielle Kunden, bitte registrieren Sie sich bei uns. Das Produkt verspricht für immer kostenlos zu sein.
|
||||
- Für maßgeschneiderte Kunden bieten wir folgende Dienstleistungen basierend auf Ihren Quellen und geschäftlichen Anforderungen:
|
||||
- Benutzerdefinierte proprietäre Parser
|
||||
- Angepasste Strategien zur Informationsextraktion und -klassifizierung
|
||||
- Zielgerichtete LLM-Empfehlungen oder sogar Feinabstimmungsdienste
|
||||
- Dienstleistungen für private Bereitstellungen
|
||||
- Anpassung der Benutzeroberfläche
|
||||
|
||||
## 📬 Kontaktinformationen
|
||||
|
||||
Wenn Sie Fragen oder Anregungen haben, können Sie uns gerne über [Issue](https://github.com/TeamWiseFlow/wiseflow/issues) kontaktieren.
|
||||
|
||||
## 🤝 Dieses Projekt basiert auf den folgenden ausgezeichneten Open-Source-Projekten:
|
||||
|
||||
- GeneralNewsExtractor (General Extractor of News Web Page Body Based on Statistical Learning) https://github.com/GeneralNewsExtractor/GeneralNewsExtractor
|
||||
- json_repair (Reparatur ungültiger JSON-Dokumente) https://github.com/josdejong/jsonrepair/tree/main
|
||||
- python-pocketbase (PocketBase Client SDK für Python) https://github.com/vaphes/pocketbase
|
||||
|
||||
# Zitierung
|
||||
|
||||
Wenn Sie Teile oder das gesamte Projekt in Ihrer Arbeit verwenden oder zitieren, geben Sie bitte die folgenden Informationen an:
|
||||
|
||||
```
|
||||
Author: Wiseflow Team
|
||||
https://openi.pcl.ac.cn/wiseflow/wiseflow
|
||||
https://github.com/TeamWiseFlow/wiseflow
|
||||
Licensed under Apache2.0
|
||||
```
|
162
README_FR.md
Normal file
162
README_FR.md
Normal file
@ -0,0 +1,162 @@
|
||||
# WiseFlow
|
||||
|
||||
**[中文](README_CN.md) | [日本語](README_JP.md) | [English](README.md) | [Deutsch](README_DE.md)**
|
||||
|
||||
**Wiseflow** est un outil agile de fouille d'informations capable d'extraire des messages concis à partir de diverses sources telles que des sites web, des comptes officiels WeChat, des plateformes sociales, etc. Il classe automatiquement les informations par étiquettes et les télécharge dans une base de données.
|
||||
|
||||
Nous ne manquons pas d'informations, mais nous avons besoin de filtrer le bruit pour faire ressortir les informations de valeur ! Voyez comment Chef Intelligence Officer vous aide à gagner du temps, à filtrer les informations non pertinentes, et à organiser les points d'intérêt !
|
||||
|
||||
<img alt="sample.png" src="asset/sample.png" width="1024"/>
|
||||
|
||||
## 🔥 Mise à Jour Majeure V0.3.0
|
||||
|
||||
- ✅ Nouveau parseur de contenu web réécrit, utilisant une combinaison de l'apprentissage statistique (en se basant sur le projet open-source GNE) et de LLM, adapté à plus de 90% des pages de nouvelles ;
|
||||
|
||||
|
||||
- ✅ Nouvelle architecture de tâches asynchrones ;
|
||||
|
||||
|
||||
- ✅ Nouvelle stratégie d'extraction d'informations et de classification par étiquettes, plus précise, plus fine, et qui exécute les tâches parfaitement avec seulement un LLM de 9B !
|
||||
|
||||
## 🌟 Fonctionnalités Clés
|
||||
|
||||
- 🚀 **Application LLM Native**
|
||||
Nous avons soigneusement sélectionné les modèles open-source les plus adaptés de 7B~9B pour minimiser les coûts d'utilisation et permettre aux utilisateurs sensibles aux données de basculer à tout moment vers un déploiement local.
|
||||
|
||||
|
||||
- 🌱 **Conception Légère**
|
||||
Sans utiliser de modèles vectoriels, le système a une empreinte minimale et ne nécessite pas de GPU, ce qui le rend adapté à n'importe quel environnement matériel.
|
||||
|
||||
|
||||
- 🗃️ **Extraction Intelligente d'Informations et Classification**
|
||||
Extrait automatiquement les informations de diverses sources et les étiquette et les classe selon les intérêts des utilisateurs.
|
||||
|
||||
|
||||
😄 **Wiseflow est particulièrement bon pour extraire des informations à partir des articles de comptes officiels WeChat**; pour cela, nous avons configuré un parseur dédié aux articles mp !
|
||||
|
||||
|
||||
- 🌍 **Peut Être Intégré dans Tout Projet RAG**
|
||||
Peut servir de base de connaissances dynamique pour tout projet RAG, sans besoin de comprendre le code de Wiseflow, il suffit de lire via la base de données !
|
||||
|
||||
|
||||
- 📦 **Base de Données Populaire Pocketbase**
|
||||
La base de données et l'interface utilisent PocketBase. Outre l'interface web, des API pour les langages Go/Javascript/Python sont disponibles.
|
||||
|
||||
- Go : https://pocketbase.io/docs/go-overview/
|
||||
- Javascript : https://pocketbase.io/docs/js-overview/
|
||||
- Python : https://github.com/vaphes/pocketbase
|
||||
|
||||
## 🔄 Quelles Sont les Différences et Connexions entre Wiseflow et les Outils de Crawling, les Projets RAG Communs ?
|
||||
|
||||
| Caractéristique | Wiseflow | Crawler / Scraper | Projets RAG |
|
||||
|-----------------------|-------------------------------------|-------------------------------------------|--------------------------|
|
||||
| **Problème Principal Résolu** | Traitement des données (filtrage, extraction, étiquetage) | Acquisition de données brutes | Applications en aval |
|
||||
| **Connexion** | | Peut être intégré dans Wiseflow pour une acquisition de données brutes plus puissante | Peut intégrer Wiseflow comme base de connaissances dynamique |
|
||||
|
||||
## 📥 Installation et Utilisation
|
||||
|
||||
WiseFlow n'a pratiquement aucune exigence matérielle, avec une empreinte système minimale, et ne nécessite pas de GPU dédié ni CUDA (en utilisant des services LLM en ligne).
|
||||
|
||||
1. **Cloner le Dépôt de Code**
|
||||
|
||||
😄 Liker et forker est une bonne habitude
|
||||
|
||||
```bash
|
||||
git clone https://github.com/TeamWiseFlow/wiseflow.git
|
||||
cd wiseflow
|
||||
```
|
||||
|
||||
|
||||
2. **Configuration**
|
||||
|
||||
Copier `env_sample` dans le répertoire et le renommer `.env`, puis remplir vos informations de configuration (comme les tokens de service LLM) comme suit :
|
||||
|
||||
- LLM_API_KEY # Clé API pour le service d'inférence de grand modèle (si vous utilisez le service OpenAI, vous pouvez omettre cela en supprimant cette entrée)
|
||||
- LLM_API_BASE # URL de base pour le service de modèle compatible avec OpenAI (à omettre si vous utilisez le service OpenAI)
|
||||
- WS_LOG="verbose" # Activer la journalisation de débogage, à supprimer si non nécessaire
|
||||
- GET_INFO_MODEL # Modèle pour les tâches d'extraction d'informations et d'étiquetage, par défaut gpt-3.5-turbo
|
||||
- REWRITE_MODEL # Modèle pour les tâches de fusion et de réécriture d'informations proches, par défaut gpt-3.5-turbo
|
||||
- HTML_PARSE_MODEL # Modèle de parsing de page web (activé intelligemment lorsque l'algorithme GNE est insuffisant), par défaut gpt-3.5-turbo
|
||||
- PROJECT_DIR # Emplacement pour stocker le cache et les fichiers journaux, relatif au dépôt de code ; par défaut, le dépôt de code lui-même si non spécifié
|
||||
- PB_API_AUTH='email|password' # E-mail et mot de passe admin pour la base de données pb (utilisez un e-mail valide pour la première utilisation, il peut être fictif mais doit être un e-mail)
|
||||
- PB_API_BASE # Non requis pour une utilisation normale, seulement nécessaire si vous n'utilisez pas l'interface PocketBase locale par défaut (port 8090)
|
||||
|
||||
|
||||
3. **Recommandation de Modèle**
|
||||
|
||||
Après des tests approfondis (sur des tâches en chinois et en anglais), pour un effet global et un coût optimaux, nous recommandons les suivants pour **GET_INFO_MODEL**, **REWRITE_MODEL**, et **HTML_PARSE_MODEL** : **"zhipuai/glm4-9B-chat"**, **"alibaba/Qwen2-7B-Instruct"**, **"alibaba/Qwen2-7B-Instruct"**.
|
||||
|
||||
Ces modèles s'adaptent bien au projet, avec une adhésion stable aux commandes et d'excellents effets de génération. Les prompts liés à ce projet sont également optimisés pour ces trois modèles. (**HTML_PARSE_MODEL** peut également utiliser **"01-ai/Yi-1.5-9B-Chat"**, qui performe également très bien dans les tests)
|
||||
|
||||
⚠️ Nous recommandons vivement d'utiliser le service d'inférence en ligne **SiliconFlow** pour des coûts plus bas, des vitesses plus rapides, et des quotas gratuits plus élevés ! ⚠️
|
||||
|
||||
Le service d'inférence en ligne SiliconFlow est compatible avec le SDK OpenAI et fournit des services open-source pour les trois modèles ci-dessus. Il suffit de configurer LLM_API_BASE comme "https://api.siliconflow.cn/v1" et de configurer LLM_API_KEY pour l'utiliser.
|
||||
|
||||
|
||||
4. **Déploiement Local**
|
||||
|
||||
Comme vous pouvez le voir, ce projet utilise des LLM de 7B/9B et ne nécessite pas de modèles vectoriels, ce qui signifie que vous pouvez déployer complètement ce projet en local avec juste un RTX 3090 (24GB VRAM).
|
||||
|
||||
Assurez-vous que votre service LLM local est compatible avec le SDK OpenAI et configurez LLM_API_BASE en conséquence.
|
||||
|
||||
|
||||
5. **Exécuter le Programme**
|
||||
|
||||
**Pour les utilisateurs réguliers, il est fortement recommandé d'utiliser Docker pour exécuter Chef Intelligence Officer.**
|
||||
|
||||
📚 Pour les développeurs, voir [/core/README.md](/core/README.md) pour plus d'informations.
|
||||
|
||||
Accéder aux données obtenues via PocketBase :
|
||||
|
||||
- http://127.0.0.1:8090/_/ - Interface du tableau de bord admin
|
||||
- http://127.0.0.1:8090/api/ - API REST
|
||||
- https://pocketbase.io/docs/ pour en savoir plus
|
||||
|
||||
|
||||
6. **Ajouter un Scanning de Source Programmé**
|
||||
|
||||
Après avoir démarré le programme, ouvrez l'interface du tableau de bord admin de PocketBase (http://127.0.0.1:8090/_/)
|
||||
|
||||
Ouvrez le formulaire **sites**.
|
||||
|
||||
À travers ce formulaire, vous pouvez spécifier des sources personnalisées, et le système démarrera des tâches en arrière-plan pour scanner, parser et analyser les sources localement.
|
||||
|
||||
Description des champs du formulaire sites :
|
||||
|
||||
- url : L'URL de la source. La source n'a pas besoin de spécifier la page de l'article spécifique, juste la page de la liste des articles. Le client Wiseflow inclut deux parseurs de pages généraux qui peuvent acquérir et parser efficacement plus de 90% des pages web de type nouvelles statiques.
|
||||
- per_hours : Fréquence de scanning, en heures, type entier (intervalle 1~24 ; nous recommandons une fréquence de scanning d'une fois par jour, soit réglée à 24).
|
||||
- activated : Si activé. Si désactivé, la source sera ignorée ; elle peut être réactivée plus tard
|
||||
|
||||
## 🛡️ Licence
|
||||
|
||||
Ce projet est open-source sous la licence [Apache 2.0](LICENSE).
|
||||
|
||||
Pour une utilisation commerciale et des coopérations de personnalisation, veuillez contacter **Email : 35252986@qq.com**.
|
||||
|
||||
- Clients commerciaux, veuillez vous inscrire auprès de nous. Le produit promet d'être gratuit pour toujours.
|
||||
- Pour les clients ayant des besoins spécifiques, nous offrons les services suivants en fonction de vos sources et besoins commerciaux :
|
||||
- Parseurs propriétaires personnalisés
|
||||
- Stratégies d'extraction et de classification de l'information sur mesure
|
||||
- Recommandations LLM ciblées ou même services de fine-tuning
|
||||
- Services de déploiement privé
|
||||
- Personnalisation de l'interface utilisateur
|
||||
|
||||
## 📬 Informations de Contact
|
||||
|
||||
Si vous avez des questions ou des suggestions, n'hésitez pas à nous contacter via [issue](https://github.com/TeamWiseFlow/wiseflow/issues).
|
||||
|
||||
## 🤝 Ce Projet est Basé sur les Excellents Projets Open-source Suivants :
|
||||
|
||||
- GeneralNewsExtractor (Extracteur général du corps de la page Web de nouvelles basé sur l'apprentissage statistique) https://github.com/GeneralNewsExtractor/GeneralNewsExtractor
|
||||
- json_repair (Réparation de documents JSON invalides) https://github.com/josdejong/jsonrepair/tree/main
|
||||
- python-pocketbase (SDK client PocketBase pour Python) https://github.com/vaphes/pocketbase
|
||||
|
||||
# Citation
|
||||
|
||||
Si vous référez à ou citez tout ou partie de ce projet dans des travaux connexes, veuillez indiquer les informations suivantes :
|
||||
```
|
||||
Author: Wiseflow Team
|
||||
https://openi.pcl.ac.cn/wiseflow/wiseflow
|
||||
https://github.com/TeamWiseFlow/wiseflow
|
||||
Licensed under Apache2.0
|
||||
```
|
160
README_JP.md
Normal file
160
README_JP.md
Normal file
@ -0,0 +1,160 @@
|
||||
# チーフインテリジェンスオフィサー (Wiseflow)
|
||||
|
||||
**[中文](README_CN.md) | [English](README.md) | [Français](README_FR.md) | [Deutsch](README_DE.md)**
|
||||
|
||||
**チーフインテリジェンスオフィサー** (Wiseflow) は、ウェブサイト、WeChat公式アカウント、ソーシャルプラットフォームなどのさまざまな情報源から簡潔なメッセージを抽出し、タグ付けしてデータベースに自動的にアップロードするためのアジャイルな情報マイニングツールです。
|
||||
|
||||
私たちが必要なのは情報ではなく、膨大な情報の中からノイズを取り除き、価値のある情報を浮き彫りにすることです! チーフインテリジェンスオフィサーがどのようにして時間を節約し、無関係な情報をフィルタリングし、注目すべきポイントを整理するのかをご覧ください!
|
||||
|
||||
<img alt="sample.png" src="asset/sample.png" width="1024"/>
|
||||
|
||||
## 🔥 V0.3.0 重要なアップデート
|
||||
|
||||
- ✅ GNE(オープンソースプロジェクト)とLLMを使用して再構築した新しい汎用ウェブページコンテンツパーサー。90%以上のニュースページに適応可能。
|
||||
|
||||
- ✅ 新しい非同期タスクアーキテクチャ。
|
||||
|
||||
- ✅ 新しい情報抽出とタグ分類戦略。より正確で繊細な情報を提供し、9BサイズのLLMのみで完璧にタスクを実行します。
|
||||
|
||||
## 🌟 主な機能
|
||||
|
||||
- 🚀 **ネイティブ LLM アプリケーション**
|
||||
コストを最大限に抑え、データセンシティブなユーザーがいつでも完全にローカルデプロイに切り替えられるよう、最適な7B~9Bオープンソースモデルを慎重に選定しました。
|
||||
|
||||
|
||||
- 🌱 **軽量設計**
|
||||
ベクトルモデルを使用せず、システム負荷が小さく、GPU不要であらゆるハードウェア環境に対応します。
|
||||
|
||||
|
||||
- 🗃️ **インテリジェントな情報抽出と分類**
|
||||
様々な情報源から自動的に情報を抽出し、ユーザーの関心に基づいてタグ付けと分類を行います。
|
||||
|
||||
😄 **Wiseflowは特にWeChat公式アカウントの記事から情報を抽出するのが得意です**。そのため、mp記事専用パーサーを設定しました!
|
||||
|
||||
|
||||
- 🌍 **任意のRAGプロジェクトに統合可能**
|
||||
任意のRAGプロジェクトの動的ナレッジベースとして機能し、Wiseflowのコードを理解せずとも、データベースからの読み取り操作だけで利用できます!
|
||||
|
||||
|
||||
- 📦 **人気のPocketBaseデータベース**
|
||||
データベースとインターフェースにPocketBaseを使用。Webインターフェースに加え、Go/JavaScript/PythonなどのAPIもあります。
|
||||
|
||||
- Go: https://pocketbase.io/docs/go-overview/
|
||||
- JavaScript: https://pocketbase.io/docs/js-overview/
|
||||
- Python: https://github.com/vaphes/pocketbase
|
||||
|
||||
## 🔄 Wiseflowと一般的なクローラツール、RAGプロジェクトとの違いと関連性
|
||||
|
||||
| 特徴 | チーフインテリジェンスオフィサー (Wiseflow) | クローラ / スクレイパー | RAGプロジェクト |
|
||||
|---------------|---------------------------------|------------------------------------------|--------------------------|
|
||||
| **解決する主な問題** | データ処理(フィルタリング、抽出、タグ付け) | 生データの取得 | 下流アプリケーション |
|
||||
| **関連性** | | Wiseflowに統合して、より強力な生データ取得能力を持たせる | 動的ナレッジベースとしてWiseflowを統合可能 |
|
||||
|
||||
## 📥 インストールと使用方法
|
||||
|
||||
チーフインテリジェンスオフィサーはハードウェアの要件がほとんどなく、システム負荷が小さく、専用GPUやCUDAを必要としません(オンラインLLMサービスを使用する場合)。
|
||||
|
||||
1. **コードリポジトリをクローン**
|
||||
|
||||
😄 いいねやフォークは良い習慣です
|
||||
|
||||
```bash
|
||||
git clone https://github.com/TeamWiseFlow/wiseflow.git
|
||||
cd wiseflow
|
||||
```
|
||||
|
||||
|
||||
2. **設定**
|
||||
|
||||
ディレクトリ内の `env_sample` をコピーして `.env` に名前を変更し、以下に従って設定情報(LLMサービスのトークンなど)を入力します。
|
||||
|
||||
- LLM_API_KEY # 大規模モデル推論サービスのAPIキー(OpenAIサービスを使用する場合は、この項目を削除しても問題ありません)
|
||||
- LLM_API_BASE # 本プロジェクトはOpenAI SDKに依存しているため、モデルサービスがOpenAIインターフェースをサポートしていれば、この項目を設定することで正常に使用できます(OpenAIサービスを使用する場合は、この項目を削除しても問題ありません)
|
||||
- WS_LOG="verbose" # デバッグ観察を有効にするかどうかを設定(必要がなければ削除してください)
|
||||
- GET_INFO_MODEL # 情報抽出とタグ付けタスクのモデル(デフォルトは gpt-3.5-turbo)
|
||||
- REWRITE_MODEL # 類似情報の統合と再書きタスクのモデル(デフォルトは gpt-3.5-turbo)
|
||||
- HTML_PARSE_MODEL # ウェブ解析モデル(GNEアルゴリズムの効果が不十分な場合に自動で有効化)(デフォルトは gpt-3.5-turbo)
|
||||
- PROJECT_DIR # キャッシュおよびログファイルの保存場所(コードリポジトリからの相対パス)。デフォルトではコードリポジトリ。
|
||||
- PB_API_AUTH='email|password' # pbデータベースの管理者のメールアドレスとパスワード(<span style="color: red; font-weight: bold;">最初に使用する際は、メールアドレスとパスワードを考えて、ここに事前に入力しておいてください。注意:メールアドレスは必須で、架空のメールアドレスでも構いません</span>)
|
||||
- PB_API_BASE # 通常の使用ではこの項目は不要です。PocketBaseのデフォルトのローカルインターフェース(8090)を使用しない場合にのみ必要です。
|
||||
|
||||
|
||||
3. **モデルの推奨**
|
||||
|
||||
何度もテストを行った結果(中国語と英語のタスク)、総合的な効果と価格の面で、**GET_INFO_MODEL**、**REWRITE_MODEL**、**HTML_PARSE_MODEL** の三つについては、 **"zhipuai/glm4-9B-chat"**、**"alibaba/Qwen2-7B-Instruct"**、**"alibaba/Qwen2-7B-Instruct"** をそれぞれ推奨します。
|
||||
|
||||
これらのモデルは本プロジェクトに非常に適合し、指示の遵守性が安定しており、生成効果も優れています。本プロジェクトに関連するプロンプトもこれら三つのモデルに対して最適化されています。(**HTML_PARSE_MODEL** には **"01-ai/Yi-1.5-9B-Chat"** も使用可能で、実際にテストしたところ非常に良好な結果が得られました)
|
||||
|
||||
⚠️ また、より低価格でより速い速度とより高い無料クオータを提供する **SiliconFlow** のオンライン推論サービスを強く推奨します!⚠️
|
||||
|
||||
SiliconFlow のオンライン推論サービスはOpenAI SDKと互換性があり、上記の三つのモデルのオープンサービスも提供しています。LLM_API_BASE を "https://api.siliconflow.cn/v1" に設定し、LLM_API_KEY を設定するだけで使用できます。
|
||||
|
||||
|
||||
4. **ローカルデプロイメント**
|
||||
|
||||
ご覧の通り、このプロジェクトは 7B/9B LLM を使用しており、ベクトルモデルを必要としません。つまり、RTX 3090 (24GB VRAM) を使用するだけで、このプロジェクトを完全にローカルにデプロイできます。
|
||||
|
||||
ローカルの LLM サービスが OpenAI SDK と互換性があることを確認し、LLM_API_BASE を適切に設定してください。
|
||||
|
||||
|
||||
5. **プログラムの実行**
|
||||
|
||||
**通常のユーザーには、Docker を使用して首席情報官(Chief Intelligence Officer)を実行することを強くお勧めします。**
|
||||
|
||||
📚 開発者向けの詳細については、[/core/README.md](/core/README.md) を参照してください。
|
||||
|
||||
PocketBase を通じて取得したデータにアクセスするには:
|
||||
|
||||
- http://127.0.0.1:8090/_/ - 管理者ダッシュボード UI
|
||||
- http://127.0.0.1:8090/api/ - REST API
|
||||
- https://pocketbase.io/docs/ その他の情報を確認
|
||||
|
||||
|
||||
6. **スケジュールされたソーススキャンの追加**
|
||||
|
||||
プログラムを開始した後、PocketBase 管理者ダッシュボード UI (http://127.0.0.1:8090/_/) を開きます。
|
||||
|
||||
**sites** フォームを開きます。
|
||||
|
||||
このフォームを通じてカスタムソースを指定でき、システムはバックグラウンドタスクを開始し、ローカルでソースのスキャン、解析、分析を行います。
|
||||
|
||||
sites フィールドの説明:
|
||||
|
||||
- url: ソースの URL。特定の記事ページを指定する必要はなく、記事リストページを指定するだけで構いません。Wiseflow クライアントには 2 つの一般的なページパーサーが含まれており、ニュースタイプの静的ウェブページの 90% 以上を効果的に取得し、解析できます。
|
||||
- per_hours: スキャン頻度、単位は時間、整数型(範囲 1~24;1日1回以上のスキャン頻度は推奨しないため、24に設定してください)。
|
||||
- activated: 有効化するかどうか。オフにするとソースが無視され、後で再びオンにできます。オンとオフの切り替えには Docker コンテナの再起動は不要で、次のスケジュールタスク時に更新されます。
|
||||
|
||||
## 🛡️ ライセンス
|
||||
|
||||
このプロジェクトは [Apache 2.0](LICENSE) ライセンスの下でオープンソースです。
|
||||
|
||||
商用利用やカスタマイズの協力については、**メール: 35252986@qq.com** までご連絡ください。
|
||||
|
||||
- 商用顧客の方は、登録をお願いします。この製品は永久に無料であることをお約束します。
|
||||
- カスタマイズが必要な顧客のために、ソースとビジネスニーズに応じて以下のサービスを提供します:
|
||||
- カスタム専用パーサー
|
||||
- カスタマイズされた情報抽出と分類戦略
|
||||
- 特定の LLM 推奨または微調整サービス
|
||||
- プライベートデプロイメントサービス
|
||||
- UI インターフェースのカスタマイズ
|
||||
|
||||
## 📬 お問い合わせ情報
|
||||
|
||||
ご質問やご提案がありましたら、[issue](https://github.com/TeamWiseFlow/wiseflow/issues) を通じてお気軽にお問い合わせください。
|
||||
|
||||
## 🤝 このプロジェクトは以下の優れたオープンソースプロジェクトに基づいています:
|
||||
|
||||
- GeneralNewsExtractor (統計学習に基づくニュースウェブページ本文の一般抽出器) https://github.com/GeneralNewsExtractor/GeneralNewsExtractor
|
||||
- json_repair (無効な JSON ドキュメントの修復) https://github.com/josdejong/jsonrepair/tree/main
|
||||
- python-pocketbase (Python 用 PocketBase クライアント SDK) https://github.com/vaphes/pocketbase
|
||||
|
||||
# 引用
|
||||
|
||||
このプロジェクトの一部または全部を関連する作業で参照または引用する場合は、以下の情報を明記してください:
|
||||
|
||||
```
|
||||
Author: Wiseflow Team
|
||||
https://openi.pcl.ac.cn/wiseflow/wiseflow
|
||||
https://github.com/TeamWiseFlow/wiseflow
|
||||
Licensed under Apache2.0
|
||||
```
|
BIN
asset/sample.png
Normal file
BIN
asset/sample.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 533 KiB |
196
core/README.md
196
core/README.md
@ -1,151 +1,53 @@
|
||||
# WiseFlow Client 用户手册
|
||||
|
||||
对于没有二次开发需求的用户而言,使用WiseFlow客户端非常简便。**如果您是开发者,有二次开发的需要,请进入backend目录、web目录分别查看后端和前端的源代码。也可以联系我们洽谈定制版本合作(35252986@qq.com)**
|
||||
|
||||
## 本地客户端使用
|
||||
|
||||
### 1、参考如下内容创建 `.env `文件 (可以直接编辑 env_sample后再改名)
|
||||
|
||||
- PROJECT_DIR="xxxx" #项目缓存文件夹(相对于client文件夹的路径),如果不设定就直接放在repo下面了
|
||||
- WS_LOG="verbose" #设定是否开始debug观察,调试阶段建议开始,尤其可以观察到每一步接口调用的原始请求和返回
|
||||
- LLM_API_BASE: #使用兼容openaiSDK的LLM服务或者本地大模型推理使用(不配置默认走http://localhost:8000)
|
||||
- LLM_API_KEY="YOUR_DASHSCOPE_API_KEY" #大模型推理服务API KEY(注册参考最下)
|
||||
- ZHIPUAI_API_KEY= #使用智谱大模型接口使用(目前只会调用glm4,model参数没有意义)
|
||||
- VOLC_KEY='AK|SK' #使用火山云翻译api使用,格式为AK|SK
|
||||
- EMBEDDING_MODEL_PATH='' #embedding模型的地址,注意需要填写完整的绝对路径
|
||||
- RERANKER_MODEL_PATH='' #rerank模型地址,注意需要填写完整的绝对路径
|
||||
- DEVICE="cuda:0" #配置的话使用GPU,不配置使用CPU。
|
||||
- PB_API_AUTH='email|password' #pb数据库admin的邮箱和密码(<span style="color: red; font-weight: bold;">首次使用,先想好邮箱和密码,提前填入这里,注意一定是邮箱,可以是虚构的邮箱</span>)
|
||||
- PB_API_BASE="web:8090" #docker配置需要,参考https://stackoverflow.com/questions/70151702/how-to-network-2-separate-docker-containers-to-communicate-with-eachother
|
||||
|
||||
**注:上述各服务的申请与开通请参考页面最下方**
|
||||
|
||||
### 2、使用docker build image并启动(强烈推荐!)
|
||||
|
||||
```commandline
|
||||
git clone git@github.com:TeamWiseFlow/wiseflow.git
|
||||
cd wiseflow/client
|
||||
# 创建.env后
|
||||
# 首次使用,先想好邮箱和密码,提前填入PB_API_AUTH,注意一定是邮箱,可以是虚构的邮箱
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
首次使用build docker image需要大约20~40min,请耐心等待,之后正常使用启动无需等待。
|
||||
|
||||
首次使用docker启动后,需要先去管理后台进行配置,此时如果终端出现报错等信息可以先忽略。
|
||||
|
||||
**管理配置页面**
|
||||
|
||||
浏览器(推荐Chrome)打开 http://127.0.0.1:8090/_/
|
||||
|
||||
首次使用会在这里提示Admin注册,填入之前写入.env的邮箱和密码。 <span style="color: red; font-weight: bold;">一定要与env一致</span>
|
||||
|
||||
打开管理后台的roleplays表单,在这里可以配置llm的身份信息和关注点,这将影响信息发掘和整理的效果,同时也影响report的生成风格。
|
||||
|
||||
roleplays可以配置多个,但每次只会选择更改时间最新且activated为true的。
|
||||
|
||||
**roleplay 字段说明:**
|
||||
|
||||
- character 以什么身份挖掘线索(这决定了llm的关注点和立场)
|
||||
- focus 关注什么方面的线索
|
||||
- focus_type 线索类型
|
||||
- good_samples1 你希望llm给出的线索描述模式(给两个sample)
|
||||
- good_samples2 你希望llm给出的线索描述模式(给两个sample)
|
||||
- bad_samples 规避的线索描述模式
|
||||
- report_type 报告类型
|
||||
|
||||
填好之后保证activated为true,如果你使用docker desktop或者类似有界面的工具,这个时候可以在container中找到 wiseflow/api, 手动运行它就可以了。
|
||||
|
||||
或者在命令行中依次执行
|
||||
|
||||
```commandline
|
||||
docker compose down
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
**最后,浏览器打开 http://127.0.0.1:8090 起飞!**
|
||||
|
||||
关闭客户端可以通过desktop的界面,也可以在命令行中 执行 `docker compose down`
|
||||
|
||||
再次启动项目可以在desktop中运行container,也可以在命令行中执行
|
||||
|
||||
```commandline
|
||||
cd wiseflow/client
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
如果希望能够看到终端里面的动态可以执行 `docker compose up` , 注意,如果需要观察详细的程序执行,记得在.env中开启WS_LOG=verbose
|
||||
|
||||
### 3、配置本地定时扫描信息源
|
||||
|
||||
wiseflow client内置了通用页面解析器,对于大多数新闻类静态页面可以实现较好的信息解析和提取,如果您有复杂信源扫描需求(比如社交网络信息监控等),可以邮件联系我们开通信息订阅服务(35252986@qq.com)。
|
||||
|
||||
本地配置信源请首先打开管理后台:http://127.0.0.1:8090/_/ (也可以通过web页面 http://127.0.0.1:8090 下方的 *数据库管理* 链接进入)
|
||||
|
||||
打开 **sites表单**
|
||||
|
||||
通过这个表单可以指定自定义信源,系统会启动后台定时任务,在本地执行信源扫描、解析和分析。
|
||||
|
||||
sites 字段说明:
|
||||
|
||||
- url, 信源的url,信源无需给定具体文章页面,给文章列表页面即可,wiseflow client中包含两个通用页面解析器,90%以上的新闻类静态网页都可以很好的获取和解析。
|
||||
- per_hours, 扫描频率,单位为小时,类型为整数(1~24范围,我们建议扫描频次不要超过一天一次,即设定为24)
|
||||
- activated, 是否激活。如果关闭则会忽略该信源,关闭后可再次开启。开启和关闭无需重启docker容器,会在下一次定时任务时更新。
|
||||
|
||||
wiseflow client自定义信源的扫描调度策略是:每小时启动一次,会先看是否有满足频率要求的指定信源,如果没有的话,会看是否集成了专有爬虫,如果有的话,每24小时会运行一遍专有爬虫。
|
||||
|
||||
注意:如果使用sites指定信源,专有爬虫也需要配置在这里。
|
||||
|
||||
----------
|
||||
虽然wiseflow client中包含的两个通用页面解析器可以适用于绝大多数静态页面的解析,但对于实际业务,我们还是建议客户订阅我们的专业信息服务(支持指定信源),或者自写专有爬虫。wiseflow client支持客户自定义专有爬虫的集成。
|
||||
|
||||
专有爬虫的集成说明见 backend/scrapers/README.md
|
||||
|
||||
配置专有爬虫后,请重新进行docker build。
|
||||
|
||||
## 参考:不使用docker启动(适用于开发者)
|
||||
|
||||
首先我们依然强烈建议至少使用docker启动前端和pb(数据库),这个build仅需几分钟,image仅74M。
|
||||
|
||||
单独build web(含pb)无需编辑.env,直接执行
|
||||
|
||||
```commandline
|
||||
cd wiseflow/client
|
||||
docker compose up web
|
||||
```
|
||||
|
||||
之后编辑.env,然后执行
|
||||
|
||||
```commandline
|
||||
cd backend
|
||||
pip install -U -r requirements.txt
|
||||
```
|
||||
|
||||
我们建议使用python3.10版本,并使用虚拟环境或者conda创建虚拟环境
|
||||
|
||||
backend中提供两个脚本
|
||||
|
||||
- backend.sh 启动backend后端服务
|
||||
- tasks.sh 启动信源扫描定时任务
|
||||
|
||||
backend.sh 启动后可以通过 http://127.0.0.1:7777/docs 查看API详情,并基于此定制开发
|
||||
|
||||
## 参考:各服务注册地址
|
||||
|
||||
- 阿里灵积大模型接口:https://dashscope.aliyun.com/
|
||||
- 火山翻译引擎:https://translate.volcengine.com/api
|
||||
- embedding模型:https://github.com/netease-youdao/BCEmbedding
|
||||
|
||||
(模型下载方案:https://hf-mirror.com/ )
|
||||
# For Developer Only
|
||||
|
||||
```bash
|
||||
pip install -U huggingface_hub
|
||||
export HF_ENDPOINT=https://hf-mirror.com
|
||||
# for non-gate model
|
||||
huggingface-cli download --resume-download --local-dir-use-symlinks False bigscience/bloom-560m --local-dir bloom-560m
|
||||
# for gate model
|
||||
huggingface-cli download --token hf_*** --resume-download --local-dir-use-symlinks False meta-llama/Llama-2-7b-hf --local-dir Llama-2-7b-hf
|
||||
conda create -n wiseflow python=3.10
|
||||
conda activate wiseflow
|
||||
cd core
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
使用url直接下载时,将 huggingface.co 直接替换为本站域名hf-mirror.com。使用浏览器或者 wget -c、curl -L、aria2c 等命令行方式即可。
|
||||
下载需登录的模型需命令行添加 --header hf_*** 参数,token 获取具体参见上文。
|
||||
- tasks.py background task circle process
|
||||
- backend.py main process pipeline service (based on fastapi)
|
||||
|
||||
### WiseFlow fastapi detail
|
||||
|
||||
- api address http://127.0.0.1:8077/feed
|
||||
- request method : post
|
||||
- body :
|
||||
|
||||
```python
|
||||
{'user_id': str, 'type': str, 'content':str, 'addition': Optional[str]}
|
||||
# Type is one of "text", "publicMsg", "site" and "url";
|
||||
# user_id: str
|
||||
type: Literal["text", "publicMsg", "file", "image", "video", "location", "chathistory", "site", "attachment", "url"]
|
||||
content: str
|
||||
addition: Optional[str] = None`
|
||||
```
|
||||
|
||||
see more (when backend started) http://127.0.0.1:7777/docs
|
||||
|
||||
### WiseFlow Repo File Structure
|
||||
|
||||
```
|
||||
wiseflow
|
||||
|- dockerfiles
|
||||
|- tasks.py
|
||||
|- backend.py
|
||||
|- core
|
||||
|- insights
|
||||
|- __init__.py # main process
|
||||
|- get_info.py # module use llm to get a summary of information and match tags
|
||||
|- llms # llm service wrapper
|
||||
|- pb # pocketbase filefolder
|
||||
|- scrapers
|
||||
|- __init__.py # You can register a proprietary site scraper here
|
||||
|- general_scraper.py # module to get all possible article urls for general site
|
||||
|- general_crawler.py # module for general article sites
|
||||
|- mp_crawler.py # module for mp article (weixin public account) sites
|
||||
|- utils # tools
|
||||
```
|
||||
|
||||
Although the two general-purpose page parsers included in wiseflow can be applied to the parsing of most static pages, for actual business, we still recommend that customers subscribe to our professional information service (supporting designated sources), or write their own proprietary crawlers.
|
||||
|
||||
See core/scrapers/README.md for integration instructions for proprietary crawlers
|
||||
|
@ -118,16 +118,20 @@ async def pipeline(_input: dict):
|
||||
for article in articles:
|
||||
logger.debug(f"article: {article['title']}")
|
||||
insights = get_info(f"title: {article['title']}\n\ncontent: {article['content']}")
|
||||
try:
|
||||
|
||||
article_id = pb.add(collection_name='articles', body=article)
|
||||
if not article_id:
|
||||
# do again
|
||||
article_id = pb.add(collection_name='articles', body=article)
|
||||
except Exception as e:
|
||||
logger.error(f'add article failed, writing to cache_file - {e}')
|
||||
with open(os.path.join(project_dir, 'cache_articles.json'), 'a', encoding='utf-8') as f:
|
||||
json.dump(article, f, ensure_ascii=False, indent=4)
|
||||
continue
|
||||
if not article_id:
|
||||
logger.error('add article failed, writing to cache_file')
|
||||
with open(os.path.join(project_dir, 'cache_articles.json'), 'a', encoding='utf-8') as f:
|
||||
json.dump(article, f, ensure_ascii=False, indent=4)
|
||||
continue
|
||||
|
||||
if not insights:
|
||||
continue
|
||||
|
||||
article_tags = set()
|
||||
old_insights = pb.read(collection_name='insights', filter=f"updated>'{expiration_date}'", fields=['id', 'tag', 'content', 'articles'])
|
||||
for insight in insights:
|
||||
@ -149,21 +153,27 @@ async def pipeline(_input: dict):
|
||||
# Merge related articles and delete old insights
|
||||
for old_insight in similar_insights:
|
||||
insight['articles'].extend(old_insight_dict[old_insight]['articles'])
|
||||
pb.delete(collection_name='insights', id=old_insight_dict[old_insight]['id'])
|
||||
if not pb.delete(collection_name='insights', id=old_insight_dict[old_insight]['id']):
|
||||
# do again
|
||||
if not pb.delete(collection_name='insights', id=old_insight_dict[old_insight]['id']):
|
||||
logger.error('delete insight failed')
|
||||
old_insights.remove(old_insight_dict[old_insight])
|
||||
|
||||
try:
|
||||
insight['id'] = pb.add(collection_name='insights', body=insight)
|
||||
if not insight['id']:
|
||||
# do again
|
||||
insight['id'] = pb.add(collection_name='insights', body=insight)
|
||||
# old_insights.append(insight)
|
||||
except Exception as e:
|
||||
logger.error(f'add insight failed, writing to cache_file - {e}')
|
||||
with open(os.path.join(project_dir, 'cache_insights.json'), 'a', encoding='utf-8') as f:
|
||||
json.dump(insight, f, ensure_ascii=False, indent=4)
|
||||
if not insight['id']:
|
||||
logger.error('add insight failed, writing to cache_file')
|
||||
with open(os.path.join(project_dir, 'cache_insights.json'), 'a', encoding='utf-8') as f:
|
||||
json.dump(insight, f, ensure_ascii=False, indent=4)
|
||||
|
||||
try:
|
||||
pb.update(collection_name='articles', id=article_id, body={'tag': list(article_tags)})
|
||||
except Exception as e:
|
||||
logger.error(f'update article failed - article_id: {article_id}\n{e}')
|
||||
article['tag'] = list(article_tags)
|
||||
with open(os.path.join(project_dir, 'cache_articles.json'), 'a', encoding='utf-8') as f:
|
||||
json.dump(article, f, ensure_ascii=False, indent=4)
|
||||
_ = pb.update(collection_name='articles', id=article_id, body={'tag': list(article_tags)})
|
||||
if not _:
|
||||
# do again
|
||||
_ = pb.update(collection_name='articles', id=article_id, body={'tag': list(article_tags)})
|
||||
if not _:
|
||||
logger.error(f'update article failed - article_id: {article_id}')
|
||||
article['tag'] = list(article_tags)
|
||||
with open(os.path.join(project_dir, 'cache_articles.json'), 'a', encoding='utf-8') as f:
|
||||
json.dump(article, f, ensure_ascii=False, indent=4)
|
||||
|
@ -62,15 +62,15 @@ class PbTalker:
|
||||
return ''
|
||||
return res.id
|
||||
|
||||
def delete(self, collection_name: str, id: str) -> str:
|
||||
def delete(self, collection_name: str, id: str) -> bool:
|
||||
try:
|
||||
res = self.client.collection(collection_name).delete(id)
|
||||
except Exception as e:
|
||||
self.logger.error(f"pocketbase update failed: {e}")
|
||||
return 'failed'
|
||||
return False
|
||||
if res:
|
||||
return 'success'
|
||||
return 'failed'
|
||||
return True
|
||||
return False
|
||||
|
||||
def upload(self, collection_name: str, id: str, key: str, file_name: str, file: BinaryIO) -> str:
|
||||
try:
|
||||
|
@ -4,7 +4,7 @@ export LLM_API_BASE="https://api.siliconflow.cn/v1" ##for local model services o
|
||||
export GET_INFO_MODEL="zhipuai/glm4-9B-chat"
|
||||
export REWRITE_MODEL="alibaba/Qwen2-7B-Instruct"
|
||||
export HTML_PARSE_MODEL="alibaba/Qwen2-7B-Instruct" ##or"01-ai/Yi-1.5-9B-Chat"
|
||||
export PROJECT_DIR="work_dir
|
||||
export PROJECT_DIR="work_dir"
|
||||
export PB_API_AUTH="test@example.com|123467890"
|
||||
export "PB_API_BASE"="" ##only use if your pb not run on 127.0.0.1:8090
|
||||
export WS_LOG="verbose" ##for detail log info. If not need, just delete this item.
|
Loading…
Reference in New Issue
Block a user