diff --git a/README.md b/README.md index d447365..e670eff 100644 --- a/README.md +++ b/README.md @@ -1,220 +1,207 @@ -# WiseFlow +# 首席情报官(Wiseflow) -**[中文](README_CN.md) | [日本語](README_JP.md) | [Français](README_FR.md) | [Deutsch](README_DE.md)** +**[English](README_EN.md) | [日本語](README_JP.md) | [한국어](README_KR.md)** -**Wiseflow** is an agile information extraction tool that can refine information from various sources such as websites, WeChat Public Accounts, and social media platforms based on predefined focus points, automatically categorize tags, and upload to the database. +🚀 **首席情报官**(Wiseflow)是一个敏捷的信息挖掘工具,可以从网站、微信公众号、社交平台等各种信息源中按设定的关注点提炼讯息,自动做标签归类并上传数据库。 ---- +**我们缺的其实不是信息,我们需要的是从海量信息中过滤噪音,从而让有价值的信息显露出来** -SiliconFlow has officially announced that several LLM online inference services, such as Qwen2-7B-Instruct and glm-4-9b-chat, will be free starting from June 25, 2024. This means you can perform information mining with wiseflow at “zero cost”! +🌱看看首席情报官是如何帮您节省时间,过滤无关信息,并整理关注要点的吧!🌱 ---- - -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 WiseFlow helps you save time, filter out irrelevant information, and organize key points of interest! +- ✅ 通用网页内容解析器,综合使用统计学习(依赖开源项目GNE)和LLM,适配90%以上的新闻页面; +(**WiseFlow尤其擅长从微信公众号文章中提取信息**,为此我们配置了mp article专属解析器!) +- ✅ 异步任务架构; +- ✅ 使用LLM进行信息提取和标签分类(最低只需使用9B大小的LLM就可完美执行任务)! https://github.com/TeamWiseFlow/wiseflow/assets/96130569/bd4b2091-c02d-4457-9ec6-c072d8ddfb16 sample.png -## 🔥 Major Update V0.3.0 - -- ✅ 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; - - -- ✅ Brand new asynchronous task architecture; - - -- ✅ New information extraction and labeling strategy, more accurate, more refined, and can perform tasks perfectly with only a 9B LLM! - -## 🌟 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 Agent Project** - Can serve as a dynamic knowledge base for any Agent 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, SDK for Go/Javascript/Python languages are available. +## 🔥 V0.3.1 更新 - - 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, LLM-Agent Projects? - -| Feature | Wiseflow | Crawler / Scraper | LLM-Agent | -|-----------------|--------------------------------------|------------------------------------------|----------------------------------------------------| -| **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 +👏 虽然部分9b大小的LLM(THUDM/glm-4-9b-chat)已经可以实现稳定的信息提取输出,但是我们发现对于复杂含义的tag(比如“党建”)或者需要特指的tag(比如仅需采集“居民区活动”,而不希望包括诸如演唱会这样的大型活动信息), +使用目前的prompt还是不能进行准确的提取,因此我们在这一版本中为每个tag增加了explaination字段,可以通过输入该字段进行更加清晰的tag指定。 -WiseFlow has virtually no hardware requirements, with minimal system overhead, and does not need GPU or CUDA (when using online LLM services). + _注:复杂explaination需要更大规模的模型才能准确理解,具体见 [模型推荐 2024-09-03](###-4. 模型推荐 [2024-09-03])_ -1. **Clone the Repository** - - 😄 Starring and forking are good habits - - ```bash - git clone https://github.com/TeamWiseFlow/wiseflow.git - cd wiseflow - ``` +👏 另外针对上一版本prompt语言选择的问题(虽然这并不影响输出结果),我们在目前版本中进一步简化了方案,用户无需指定系统语言(这在docker中并不那么直观),系统会根据tag以及tag的explaination判断选择何种语言的 +prompt(也就决定了info的输出语言),这进一步简化了wiseflow的部署和使用。【不过目前wiseflow仅支持简体中文和英文两种语言,其他语言的需求可以通过更改 core/insights/get_info.py 中的prompt实现】 + +🌹另外本次更新合并了过去两个月的PR,本次新增contributor如下: -2. **Highly Recommended: Use Docker** +@wwz223 @madizm @GuanYixuan @xnp2020 @JimmyMa99 - **For users in China, please configure your network properly or specify a Docker Hub mirror** +🌹 感谢大家的贡献! - ```bash - docker compose up - ``` - You may modify `compose.yaml` as needed. +## 🌟 如何在您的应用中整合wiseflow - **Note:** - - Run the above command in the root directory of the wiseflow repository. - - Before running, create and edit a `.env` file in the same directory as the Dockerfile (root directory of the wiseflow repository). Refer to `env_sample` for the `.env` file. - - The first time you run the Docker container, an error might occur because you haven't created an admin account for the pb repository. +wiseflow 是一个原生的LLM应用,仅需7B~9B大小LLM就可以很好的执行信息挖掘、过滤与分类任务,且无需向量模型,系统开销很小,适合各种硬件环境下的本地化以及私有化部署。 - At this point, keep the container running, open `http://127.0.0.1:8090/_/` in your browser, and follow the instructions to create an admin account (make sure to use an email). Then enter the created admin email (again, make sure it's an email) and password into the `.env` file, and restart the container. +wiseflow 将挖掘出的信息存储于自带的Pocketbase数据库中,这意味着整合无需深入了解wiseflow的代码,只需要对数据库进行读取操作即可! - _If you want to change the container's timezone and language [which will determine the prompt language, but has little effect on the results], run the image with the following command_ +PocketBase作为流行的轻量级数据库,目前已有 Go/Javascript/Python 等语言的SDK。 + - Go : https://pocketbase.io/docs/go-overview/ + - Javascript : https://pocketbase.io/docs/js-overview/ + - python : https://github.com/vaphes/pocketbase - ```bash - docker run -e LANG=zh_CN.UTF-8 -e LC_CTYPE=zh_CN.UTF-8 your_image - ``` +## 🔄 wiseflow 与常见的爬虫工具、LLM-Agent类项目有何不同与关联? -3. **[Alternative] Run Directly with Python** +| 特点 | 首席情报官(Wiseflow) | Crawler / Scraper | LLM-Agent | +|-------------|-----------------|---------------------------------------|----------------------| +| **主要解决的问题** | 数据处理(筛选、提炼、贴标签) | 原始数据获取 | 下游应用 | +| **关联** | | 可以集成至WiseFlow,使wiseflow具有更强大的原始数据获取能力 | 可以集成WiseFlow,作为动态知识库 | - ```bash - conda create -n wiseflow python=3.10 - conda activate wiseflow - cd core - pip install -r requirements.txt - ``` +## 📥 安装与使用 - Afterward, you can refer to the scripts in core/scripts to start pb, task, and backend respectively (move the script files to the core directory). +### 1. 克隆代码仓库 - Note: - - Start pb first; task and backend are independent processes, and the order doesn't matter. You can start any one of them as needed. - - Download the pocketbase client suitable for your device from https://pocketbase.io/docs/ and place it in the /core/pb directory. - - For issues with pb (including first-run errors), refer to [core/pb/README.md](/core/pb/README.md). - - Before use, create and edit a `.env` file and place it in the root directory of the wiseflow repository (the directory above core). Refer to `env_sample` for the `.env` file, and see below for detailed configuration. +🌹 点赞、fork是好习惯 🌹 +```bash +git clone https://github.com/TeamWiseFlow/wiseflow.git +cd wiseflow +``` - 📚 For developers, see [/core/README.md](/core/README.md) for more information. +### 2. 推荐使用docker运行 - Access data via pocketbase: - - http://127.0.0.1:8090/_/ - Admin dashboard UI - - http://127.0.0.1:8090/api/ - REST API +**中国区用户使用前请合理配置网络,或者指定docker hub镜像** +```bash +docker compose up +``` -4. **Configuration** +**注意:** + - 在wiseflow代码仓根目录下运行上述命令; + - 运行前先创建并编辑.env文件放置在Dockerfile同级目录(wiseflow代码仓根目录),.env文件可以参考env_sample + - 第一次运行docker container时会遇到报错,这其实是正常现象,因为你尚未为pb仓库创建admin账号。 - Windows users can set the following items directly in "Start - Settings - System - About - Advanced System Settings - Environment Variables". After setting, a terminal restart is required for the changes to take effect. - - Copy `env_sample` from the directory and rename it to `.env`, then fill in your configuration information (such as LLM service tokens) as follows: +此时请保持container不关闭状态,浏览器打开`http://127.0.0.1:8090/_/ `,按提示创建admin账号(一定要使用邮箱),然后将创建的admin邮箱(再次强调,一定要用邮箱)和密码填入.env文件,重启container即可。 - - LLM_API_KEY # API key for large language model inference services - - LLM_API_BASE # This project relies on the OpenAI SDK. Configure this if your model service supports OpenAI's API. If using OpenAI's service, you can omit this. - - WS_LOG="verbose" # Set to enable debug observation. Delete if not needed. - - GET_INFO_MODEL # Model for information extraction and tag matching tasks, default is gpt-3.5-turbo - - REWRITE_MODEL # Model for approximate information merging and rewriting tasks, default is gpt-3.5-turbo - - HTML_PARSE_MODEL # Model for web page parsing (intelligently enabled if the GNE algorithm performs poorly), default is gpt-3.5-turbo - - PROJECT_DIR # Storage location for data, cache, and log files, relative to the repository. Default is within the repository. - - PB_API_AUTH='email|password' # Email and password for the pb database admin (must be an email, can be a fictitious one) - - PB_API_BASE # Typically unnecessary. Only configure if you're not using the default local pocketbase interface (8090). +_如您想更改container的时区和语言,请仿照如下命令运行image_ +```bash +docker run -e LANG=zh_CN.UTF-8 -e LC_CTYPE=zh_CN.UTF-8 your_image +``` -5. **Model Recommendations** +### 2.【备选】直接使用python运行 - Based on extensive testing (for both Chinese and English tasks), we recommend **"zhipuai/glm4-9B-chat"** for **GET_INFO_MODEL**, **"alibaba/Qwen2-7B-Instruct"** for **REWRITE_MODEL**, and **"alibaba/Qwen2-7B-Instruct"** for **HTML_PARSE_MODEL**. +```bash +conda create -n wiseflow python=3.10 +conda activate wiseflow +cd core +pip install -r requirements.txt +``` - These models are well-suited for this project, with stable adherence to instructions and excellent generation quality. The project's prompts have been optimized for these three models. (**HTML_PARSE_MODEL** can also use **"01-ai/Yi-1.5-9B-Chat"**, which has been tested to perform excellently.) +之后可以参考core/scripts 中的脚本分别启动pb、task和backend (将脚本文件移动到core目录下) + +**注意:** + - 一定要先启动pb,至于task和backend是独立进程,先后顺序无所谓,也可以按需求只启动其中一个; + - 需要先去这里 https://pocketbase.io/docs/ 下载对应自己设备的pocketbase客户端,并放置在 /core/pb 目录下 + - pb运行问题(包括首次运行报错等)参考 [core/pb/README.md](/core/pb/README.md) + - 使用前请创建并编辑.env文件,放置在wiseflow代码仓根目录(core目录的上级),.env文件可以参考env_sample,详细配置说明见下 + +📚 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 + - ⚠️ We highly recommend using **SiliconFlow**'s online inference service for lower costs, faster speeds, and higher free quotas! ⚠️ +### 3. 配置 - SiliconFlow's online inference service is compatible with the OpenAI SDK and provides open-source services for the above three models. Simply configure `LLM_API_BASE` to "https://api.siliconflow.cn/v1" and set `LLM_API_KEY` to use it. +复制目录下的env_sample,并改名为.env, 参考如下 填入你的配置信息(LLM服务token等) + +**windows用户如果选择直接运行python程序,可以直接在 “开始 - 设置 - 系统 - 关于 - 高级系统设置 - 环境变量“ 中设置如下项目,设置后需要重启终端生效** + + - LLM_API_KEY # 大模型推理服务API KEY + - LLM_API_BASE # 本项目依赖openai sdk,只要模型服务支持openai接口,就可以通过配置该项正常使用,如使用openai服务,删除这一项即可 + - WS_LOG="verbose" # 设定是否开始debug观察,如无需要,删除即可 + - GET_INFO_MODEL # 信息提炼与标签匹配任务模型,默认为 gpt-4o-mini-2024-07-18 + - REWRITE_MODEL # 近似信息合并改写任务模型,默认为 gpt-4o-mini-2024-07-18 + - HTML_PARSE_MODEL # 网页解析模型(GNE算法效果不佳时智能启用),默认为 gpt-4o-mini-2024-07-18 + - PROJECT_DIR # 数据、缓存以及日志文件存储位置,相对于代码仓的相对路径,默认不填就在代码仓 + - PB_API_AUTH='email|password' # pb数据库admin的邮箱和密码(注意一定是邮箱,可以是虚构的邮箱) + - PB_API_BASE # 正常使用无需这一项,只有当你不使用默认的pocketbase本地接口(8090)时才需要 + + +### 4. 模型推荐 [2024-09-03] - 😄 Alternatively, you can use my [invitation link](https://cloud.siliconflow.cn?referrer=clx6wrtca00045766ahvexw92), which also rewards me with more tokens 😄 +经过反复测试(中英文任务)**GET_INFO_MODEL**、**REWRITE_MODEL**、**HTML_PARSE_MODEL** 三项最小可用模型分别为:**"THUDM/glm-4-9b-chat"**、**"Qwen/Qwen2-7B-Instruct"**、**"Qwen/Qwen2-7B-Instruct"** + +目前,SiliconFlow已经官宣Qwen2-7B-Instruct、glm-4-9b-chat在线推理服务免费,这意味着您可以“零成本”使用wiseflow啦! + +😄 如果您愿意,可以使用我的[siliconflow邀请链接](https://cloud.siliconflow.cn?referrer=clx6wrtca00045766ahvexw92),这样我也可以获得更多token奖励 😄 +⚠️ **V0.3.1更新** + +如果您使用带explaination的复杂tag,那么glm-4-9b-chat规模的模型是无法保证准确理解的,目前测试下来针对该类型任务效果比较好的模型为 **Qwen/Qwen2-72B-Instruct** 和 **gpt-4o-mini-2024-07-18** 。 + +针对有需求使用 `gpt-4o-mini-2024-07-18` 的用户,可以尝试第三方代理 **AiHubMix**,支持国内网络环境直连、支付宝充值(实际费率相当于官网86折) -6. **Focus Points and Scheduled Source Scanning** +🌹 欢迎使用如下邀请链接 [AiHubMix邀请链接](https://aihubmix.com?aff=Gp54) 注册 🌹 - After starting the program, open the pocketbase Admin dashboard UI (http://127.0.0.1:8090/_/) +🌍 上述两个平台的在线推理服务均兼容openai SDK,配置`.env `的`LLM_API_BASE`和`LLM_API_KEY`后即可使用。 - 6.1 Open the **tags form** - Use this form to specify your focus points. The LLM will extract, filter, and classify information based on these. +### 5. **关注点和定时扫描信源添加** + +启动程序后,打开pocketbase Admin dashboard UI (http://127.0.0.1:8090/_/) + +#### 5.1 打开 tags表单 - Tags field description: +通过这个表单可以指定你的关注点,LLM会按此提炼、过滤并分类信息。 + +tags 字段说明: + - name, 关注点名称 + - explaination,关注点的详细解释或具体约定,如 “仅限上海市官方发布的初中升学信息”(tag name为 上海初中升学信息) + - activated, 是否激活。如果关闭则会忽略该关注点,关闭后可再次开启。开启和关闭无需重启docker容器,会在下一次定时任务时更新。 - - name, Description of the focus point. **Note: Be specific.** Good example: `Trends in US-China competition`. Bad example: `International situation`. - - activated, Whether activated. If deactivated, the focus point will be ignored. It can be reactivated later. Activation and deactivation don't require a Docker container restart and will update in the next scheduled task. +#### 5.2 打开 sites表单 - 6.2 Open the **sites form** +通过这个表单可以指定自定义信源,系统会启动后台定时任务,在本地执行信源扫描、解析和分析。 - Use this form to specify custom sources. The system will start background tasks to scan, parse, and analyze these sources locally. +sites 字段说明: + - url, 信源的url,信源无需给定具体文章页面,给文章列表页面即可。 + - per_hours, 扫描频率,单位为小时,类型为整数(1~24范围,我们建议扫描频次不要超过一天一次,即设定为24) + - activated, 是否激活。如果关闭则会忽略该信源,关闭后可再次开启。开启和关闭无需重启docker容器,会在下一次定时任务时更新。 - Sites field description: - - url, URL of the source. Provide a URL to the list page rather than a specific article page. - - per_hours, Scan frequency in hours, as an integer (range 1-24; we recommend no more than once a day, i.e., set to 24). - - activated, Whether activated. If deactivated, the source will be ignored. It can be reactivated later. Activation and deactivation don't require a Docker container restart and will update in the next scheduled task. +### 6. 本地部署 +如您所见,本项目最低仅需使用7b\9b大小的LLM,且无需任何向量模型,这就意味着仅仅需要一块3090RTX(24G显存)就可以完全的对本项目进行本地化部署。 + +请保证您的本地化部署LLM服务兼容openai SDK,并配置 LLM_API_BASE 即可。 -7. **Local Deployment** +注:若需让7b~9b规模的LLM可以实现对tag explaination的准确理解,推荐使用dspy进行prompt优化,但这需要累积约50条人工标记数据。详见 [DSPy](https://dspy-docs.vercel.app/) - As you can see, this project uses 7B/9B LLMs and does not require any vector models, which means you only need a single RTX 3090 (24GB VRAM) to fully deploy this project locally. - Ensure your local LLM service is compatible with the OpenAI SDK and configure `LLM_API_BASE` accordingly. +## 🛡️ 许可协议 +本项目基于 [Apache2.0](LICENSE) 开源。 -## 🛡️ License +商用以及定制合作,请联系 **Email:35252986@qq.com** -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: - - Dedicated crawler and parser for customer business scenario sources - - Customized information extraction and classification strategies - - Targeted LLM recommendations or even fine-tuning services - - Private deployment services - - UI interface customization +## 📬 联系方式 -## 📬 Contact Information +有任何问题或建议,欢迎通过 [issue](https://github.com/TeamWiseFlow/wiseflow/issues) 与我们联系。 -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 +- 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 +## Citation -If you refer to or cite part or all of this project in related work, please indicate the following information: +如果您在相关工作中参考或引用了本项目的部分或全部,请注明如下信息: ``` -Author: Wiseflow Team -https://openi.pcl.ac.cn/wiseflow/wiseflow +Author:Wiseflow Team https://github.com/TeamWiseFlow/wiseflow Licensed under Apache2.0 -``` \ No newline at end of file +``` diff --git a/README_CN.md b/README_CN.md deleted file mode 100644 index 97da14f..0000000 --- a/README_CN.md +++ /dev/null @@ -1,223 +0,0 @@ -# 首席情报官(Wiseflow) - -**[English](README.md) | [日本語](README_JP.md) | [Français](README_FR.md) | [Deutsch](README_DE.md)** - -**首席情报官**(Wiseflow)是一个敏捷的信息挖掘工具,可以从网站、微信公众号、社交平台等各种信息源中按设定的关注点提炼讯息,自动做标签归类并上传数据库。 - ---- - - SiliconFlow官宣Qwen2-7B-Instruct、glm-4-9b-chat等数款LLM在线推理服务即日起免费,这意味着您可以“零成本”使用首席情报官进行信息挖掘啦! - ---- - -我们缺的其实不是信息,我们需要的是从海量信息中过滤噪音,从而让有价值的信息显露出来! - -看看首席情报官是如何帮您节省时间,过滤无关信息,并整理关注要点的吧! - -https://github.com/TeamWiseFlow/wiseflow/assets/96130569/bd4b2091-c02d-4457-9ec6-c072d8ddfb16 - -sample.png - -## 🔥 V0.3.0 重大更新 - -- ✅ 全新改写的通用网页内容解析器,综合使用统计学习(依赖开源项目GNE)和LLM,适配90%以上的新闻页面; - -- ✅ 全新的异步任务架构; - -- ✅ 全新的信息提取和标签分类策略,更精准、更细腻,且只需使用9B大小的LLM就可完美执行任务! - -## 🌟 功能特色 - -- 🚀 **原生 LLM 应用** - 我们精心选择了最适合的 7B~9B 开源模型,最大化降低使用成本,且利于数据敏感用户随时完全切换至本地部署。 - - -- 🌱 **轻量化设计** - 不用任何向量模型,系统开销很小,无需 GPU,适合任何硬件环境。 - - -- 🗃️ **智能信息提取和分类** - 从各种信息源中自动提取信息,并根据用户关注点进行标签化和分类管理。 - - 😄 **WiseFlow尤其擅长从微信公众号文章中提取信息**,为此我们配置了mp article专属解析器! - - -- 🌍 **可以被整合至任意Agent项目** - 可以作为任意 Agent 项目的动态知识库,无需了解wiseflow的代码,只需要与数据库进行读取操作即可! - - -- 📦 **流行的 Pocketbase 数据库** - 数据库和界面使用 PocketBase,除了 Web 界面外,目前已有 Go/Javascript/Python 等语言的SDK。 - - - Go : https://pocketbase.io/docs/go-overview/ - - Javascript : https://pocketbase.io/docs/js-overview/ - - python : https://github.com/vaphes/pocketbase - -## 🔄 wiseflow 与常见的爬虫工具、LLM-Agent类项目有何不同与关联? - -| 特点 | 首席情报官(Wiseflow) | Crawler / Scraper | LLM-Agent | -|-------------|-----------------|---------------------------------------|----------------------| -| **主要解决的问题** | 数据处理(筛选、提炼、贴标签) | 原始数据获取 | 下游应用 | -| **关联** | | 可以集成至WiseFlow,使wiseflow具有更强大的原始数据获取能力 | 可以集成WiseFlow,作为动态知识库 | - -## 📥 安装与使用 - -首席情报官对于硬件基本无要求,系统开销很小,无需独立显卡和CUDA(使用在线LLM服务的情况下) - -1. **克隆代码仓库** - - 😄 点赞、fork是好习惯 - - ```bash - git clone https://github.com/TeamWiseFlow/wiseflow.git - cd wiseflow - ``` - -2. **强烈推荐使用docker 运行** - - **中国区用户使用前请合理配置网络,或者指定docker hub镜像** - - ```bash - docker compose up - ``` - 可按需修改`compose.yaml` - - **注意:** - - 在wiseflow代码仓根目录下运行上述命令; - - 运行前先创建并编辑.env文件放置在Dockerfile同级目录(wiseflow代码仓根目录),.env文件可以参考env_sample - - 第一次运行docker container时会遇到报错,这其实是正常现象,因为你尚未为pb仓库创建admin账号。 - - 此时请保持container不关闭状态,浏览器打开`http://127.0.0.1:8090/_/ `,按提示创建admin账号(一定要使用邮箱),然后将创建的admin邮箱(再次强调,一定要用邮箱)和密码填入.env文件,重启container即可。 - - _如您想更改container的时区和语言【会决定prompt语言选择,但实测对呈现结果影响不大】,使用如下命令运行image_ - - ```bash - docker run -e LANG=zh_CN.UTF-8 -e LC_CTYPE=zh_CN.UTF-8 your_image - ``` - - -3. **【备选】直接使用python运行** - - ```bash - conda create -n wiseflow python=3.10 - conda activate wiseflow - cd core - pip install -r requirements.txt - ``` - - 之后可以参考core/scripts 中的脚本分别启动pb、task和backend (将脚本文件移动到core目录下) - - 注意: - - 一定要先启动pb,task和backend是独立进程,先后顺序无所谓,也可以按需求只启动其中一个; - - 需要先去这里 https://pocketbase.io/docs/ 下载对应自己设备的pocketbase客户端,并放置在 /core/pb 目录下 - - pb运行问题(包括首次运行报错等)参考 [core/pb/README.md](/core/pb/README.md) - - 使用前请创建并编辑.env文件,放置在wiseflow代码仓根目录(core目录的上级),.env文件可以参考env_sample,详细配置说明见下 - - - 📚 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 - - -4. **配置** - - 复制目录下的env_sample,并改名为.env, 参考如下 填入你的配置信息(LLM服务token等) - - **windows用户可以直接在 “开始 - 设置 - 系统 - 关于 - 高级系统设置 - 环境变量“ 中设置如下项目,设置后需要重启终端生效** - - - LLM_API_KEY # 大模型推理服务API KEY - - 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的邮箱和密码(注意一定是邮箱,可以是虚构的邮箱) - - PB_API_BASE # 正常使用无需这一项,只有当你不使用默认的pocketbase本地接口(8090)时才需要 - - -5. **模型推荐** - - 经过反复测试(中英文任务),综合效果和价格,**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 即可使用。 - - 😄 或者您愿意使用我的[邀请链接](https://cloud.siliconflow.cn?referrer=clx6wrtca00045766ahvexw92),这样我也可以获得更多token奖励 😄 - - -6. **关注点和定时扫描信源添加** - - 启动程序后,打开pocketbase Admin dashboard UI (http://127.0.0.1:8090/_/) - - 6.1 打开 **tags表单** - - 通过这个表单可以指定你的关注点,LLM会按此提炼、过滤并分类信息。 - - tags 字段说明: - - - name, 关注点描述,**注意:要具体一些**,好的例子是:`中美竞争动向`,不好的例子是:`国际局势`。 - - activated, 是否激活。如果关闭则会忽略该关注点,关闭后可再次开启。开启和关闭无需重启docker容器,会在下一次定时任务时更新。 - - - 6.2 打开 **sites表单** - - 通过这个表单可以指定自定义信源,系统会启动后台定时任务,在本地执行信源扫描、解析和分析。 - - sites 字段说明: - - - url, 信源的url,信源无需给定具体文章页面,给文章列表页面即可。 - - per_hours, 扫描频率,单位为小时,类型为整数(1~24范围,我们建议扫描频次不要超过一天一次,即设定为24) - - activated, 是否激活。如果关闭则会忽略该信源,关闭后可再次开启。开启和关闭无需重启docker容器,会在下一次定时任务时更新。 - - -7. **本地部署** - - 如您所见,本项目使用7b\9b大小的LLM,且无需任何向量模型,这就意味着仅仅需要一块3090RTX(24G显存)就可以完全的对本项目进行本地化部署。 - - 请保证您的本地化部署LLM服务兼容openai SDK,并配置 LLM_API_BASE 即可 - - -## 🛡️ 许可协议 - -本项目基于 [Apache2.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 -``` diff --git a/README_DE.md b/README_DE.md deleted file mode 100644 index e9e1904..0000000 --- a/README_DE.md +++ /dev/null @@ -1,216 +0,0 @@ -# WiseFlow - -**[中文](README_CN.md) | [日本語](README_JP.md) | [Français](README_FR.md) | [English](README.md)** - -**Wiseflow** ist ein agiles Informationsgewinnungstool, das Informationen aus verschiedenen Quellen wie Websites, WeChat-Accounts und sozialen Medien basierend auf vordefinierten Fokusbereichen extrahieren, automatisch kategorisieren und in die Datenbank hochladen kann. - ---- - -SiliconFlow hat offiziell bekannt gegeben, dass mehrere LLM-Online-Inferenzdienste, wie Qwen2-7B-Instruct und glm-4-9b-chat, ab dem 25. Juni 2024 kostenlos sein werden. Das bedeutet, dass Sie Informationsgewinnung mit wiseflow zu „null Kosten“ durchführen können! - ---- - -Es mangelt uns nicht an Informationen, sondern wir müssen den Lärm herausfiltern, um wertvolle Informationen hervorzuheben! - -Sehen Siewie WiseFlow Ihnen hilft, Zeit zu sparen, irrelevante Informationen zu filtern und interessante Punkte zu organisieren! - -https://github.com/TeamWiseFlow/wiseflow/assets/96130569/bd4b2091-c02d-4457-9ec6-c072d8ddfb16 - -sample.png - -## 🔥 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 Agent-Projekt integriert werden** - Kann als dynamische Wissensdatenbank für jedes Agent-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 SDK 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 LLM-Agent Projekten - -| Merkmal | WiseFlow | Crawler / Scraper | LLM-Agent | -|------------------------|----------------------------------------------------|------------------------------------------|-----------------------------------------------------------| -| **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 GPU oder CUDA (bei Verwendung von Online-LLM-Diensten). - -1. **Repository klonen** - - 😄 Star und Forken sind gute Gewohnheiten - - ```bash - git clone https://github.com/TeamWiseFlow/wiseflow.git - cd wiseflow - ``` - -2. **Dringend empfohlen: Docker verwenden** - - ```bash - docker compose up - ``` - `compose.yaml` kann nach Bedarf angepasst werden. - - **Hinweis:** - - Führen Sie den obigen Befehl im Stammverzeichnis des wiseflow-Repositories aus. - - Erstellen und bearbeiten Sie vor dem Ausführen eine `.env`-Datei im gleichen Verzeichnis wie die Dockerfile (Stammverzeichnis des wiseflow-Repositories). Orientieren Sie sich an `env_sample` für die `.env`-Datei. - - Beim ersten Start des Docker-Containers kann ein Fehler auftreten, da Sie noch kein Admin-Konto für das pb-Repository erstellt haben. - - Halten Sie in diesem Fall den Container am Laufen, öffnen Sie `http://127.0.0.1:8090/_/` in Ihrem Browser und folgen Sie den Anweisungen, um ein Admin-Konto zu erstellen (stellen Sie sicher, dass Sie eine E-Mail verwenden). Geben Sie dann die erstellte Admin-E-Mail (nochmals, stellen Sie sicher, dass es sich um eine E-Mail handelt) und das Passwort in die `.env`-Datei ein und starten Sie den Container neu. - - _Falls Sie die Zeitzone und Sprache des Containers ändern möchten [was die Sprache der Prompts bestimmt, aber wenig Einfluss auf die Ergebnisse hat], führen Sie das Image mit folgendem Befehl aus_ - - ```bash - docker run -e LANG=de_DE.UTF-8 -e LC_CTYPE=de_DE.UTF-8 your_image - ``` - -3. **[Alternative] Direkt mit Python ausführen** - - ```bash - conda create -n wiseflow python=3.10 - conda activate wiseflow - cd core - pip install -r requirements.txt - ``` - - Danach können Sie die Skripte in core/scripts verwenden, um pb, task und backend jeweils zu starten (verschieben Sie die Skriptdateien in das Core-Verzeichnis). - - Hinweis: - - Starten Sie zuerst pb; task und backend sind unabhängige Prozesse und die Reihenfolge spielt keine Rolle. Sie können auch nur einen der beiden nach Bedarf starten. - - Laden Sie den passenden pocketbase-Client für Ihr Gerät von https://pocketbase.io/docs/ herunter und platzieren Sie ihn im Verzeichnis /core/pb. - - Bei Problemen mit pb (einschließlich Fehlern beim ersten Start) siehe [core/pb/README.md](/core/pb/README.md). - - Erstellen und bearbeiten Sie vor der Nutzung eine `.env`-Datei und platzieren Sie diese im Stammverzeichnis des wiseflow-Repositories (oberes Verzeichnis von core). Orientieren Sie sich an `env_sample` für die `.env`-Datei, und sehen Sie unten für detaillierte Konfigurationen. - - - 📚 Für Entwickler, siehe [/core/README.md](/core/README.md) für mehr Informationen. - - Zugriff auf Daten über pocketbase: - - http://127.0.0.1:8090/_/ - Admin-Dashboard-Oberfläche - - http://127.0.0.1:8090/api/ - REST API - - -4. **Konfiguration** - - Windows-Benutzer können die folgenden Elemente direkt unter "Start - Einstellungen - System - Über - Erweiterte Systemeinstellungen - Umgebungsvariablen" festlegen. Nach dem Festlegen ist ein Neustart des Terminals erforderlich, damit die Änderungen wirksam werden. - - Kopieren Sie `env_sample` aus dem Verzeichnis und benennen Sie es in `.env` um, füllen Sie dann Ihre Konfigurationsinformationen (wie LLM-Dienst-Token) wie folgt aus: - - - LLM_API_KEY # API-Schlüssel für Großes Sprachmodell-Inferenzdienst - - LLM_API_BASE # Dieses Projekt verwendet das OpenAI SDK. Konfigurieren Sie diese Option, wenn Ihr Modellsystem die OpenAI-API unterstützt. Falls Sie den OpenAI-Dienst nutzen, können Sie diese Option weglassen. - - WS_LOG="verbose" # Setzen, um Debug-Beobachtung zu aktivieren. Löschen, falls nicht erforderlich. - - GET_INFO_MODEL # Modell für Informationsentnahme und Tag-Matching-Aufgaben, standardmäßig gpt-3.5-turbo - - REWRITE_MODEL # Modell für annähernde Informationsfusion und Umschreibaufgaben, standardmäßig gpt-3.5-turbo - - HTML_PARSE_MODEL # Modell für Webseiten-Parsing (intelligent aktiviert, wenn der GNE-Algorithmus schlecht funktioniert), standardmäßig gpt-3.5-turbo - - PROJECT_DIR # Speicherort für Daten, Cache und Protokolldateien, relativ zum Repository. Standardmäßig im Repository. - - PB_API_AUTH='email|password' # E-Mail und Passwort für den pb-Datenbank-Admin (muss eine E-Mail sein, kann eine fiktive E-Mail sein) - - PB_API_BASE # Normalerweise nicht erforderlich. Nur konfigurieren, wenn Sie nicht die Standard-poketbase-Local-Schnittstelle (8090) verwenden. - - -5. **Modell-Empfehlungen** - - Basierend auf umfangreichen Tests (für chinesische und englische Aufgaben), empfehlen wir **"zhipuai/glm4-9B-chat"** für **GET_INFO_MODEL**, **"alibaba/Qwen2-7B-Instruct"** für **REWRITE_MODEL**, und **"alibaba/Qwen2-7B-Instruct"** für **HTML_PARSE_MODEL**. - - Diese Modelle sind gut für dieses Projekt geeignet, mit stabiler Einhaltung der Anweisungen und ausgezeichneter Generationsqualität. Die Prompts dieses Projekts wurden für diese drei Modelle optimiert. (**HTML_PARSE_MODEL** kann auch **"01-ai/Yi-1.5-9B-Chat"** verwenden, was ebenfalls hervorragende Ergebnisse zeigt.) - - - ⚠️ Wir empfehlen dringend die Nutzung des **SiliconFlow**-Online-Inferenzdienstes für geringere Kosten, schnellere Geschwindigkeit und höhere Freikontingente! ⚠️ - - Der Online-Inferenzdienst von SiliconFlow ist kompatibel mit dem OpenAI SDK und bietet Open-Source-Dienste für die oben genannten drei Modelle. Konfigurieren Sie einfach `LLM_API_BASE` auf "https://api.siliconflow.cn/v1" und setzen Sie `LLM_API_KEY`, um ihn zu nutzen. - - 😄 Alternativ können Sie meinen [Einladungslink](https://cloud.siliconflow.cn?referrer=clx6wrtca00045766ahvexw92) verwenden, wodurch ich auch mehr Token-Belohnungen erhalte 😄 - - -6. **Fokuspunkte und Hinzufügen von geplanten Quellenscans** - - Nach dem Start des Programms öffnen Sie die pocketbase Admin-Dashboard-Oberfläche (http://127.0.0.1:8090/_/) - - 6.1 Öffnen Sie das **tags-Formular** - - Verwenden Sie dieses Formular, um Ihre Fokuspunkte anzugeben. Das LLM wird Informationen basierend auf diesen extrahieren, filtern und klassifizieren. - - Beschreibung des tags-Felds: - - - name, Beschreibung des Fokuspunkts. **Hinweis: Seien Sie spezifisch.** Gutes Beispiel: `Trends im Wettbewerb zwischen den USA und China`. Schlechtes Beispiel: `Internationale Lage`. - - activated, Ob aktiviert. Wenn deaktiviert, wird der Fokuspunkt ignoriert. Er kann später wieder aktiviert werden. Aktivierung und Deaktivierung erfordern keinen Neustart des Docker-Containers und werden bei der nächsten geplanten Aufgabe aktualisiert. - - 6.2 Öffnen Sie das **sites-Formular** - - Verwenden Sie dieses Formular, um benutzerdefinierte Quellen anzugeben. Das System startet Hintergrundaufgaben, um diese Quellen lokal zu scannen, zu analysieren und auszuwerten. - - Beschreibung des sites-Felds: - - - url, URL der Quelle. Geben Sie eine URL zur Listen-Seite anstelle einer spezifischen Artikel-Seite an. - - per_hours, Scanhäufigkeit in Stunden, als Ganzzahl (Bereich 1-24; wir empfehlen nicht mehr als einmal täglich, d.h. auf 24 eingestellt). - - activated, Ob aktiviert. Wenn deaktiviert, wird die Quelle ignoriert. Sie kann später wieder aktiviert werden. Aktivierung und Deaktivierung erfordern keinen Neustart des Docker-Containers und werden bei der nächsten geplanten Aufgabe aktualisiert. - - -7. **Lokale Bereitstellung** - - Wie Sie sehen können, verwendet dieses Projekt 7B/9B LLMs und benötigt keine Vektormodelle, was bedeutet, dass Sie nur eine RTX 3090 (24 GB VRAM) benötigen, um dieses Projekt vollständig lokal bereitzustellen. - - Stellen Sie sicher, dass Ihr lokaler LLM-Dienst mit dem OpenAI SDK kompatibel ist und konfigurieren Sie `LLM_API_BASE` entsprechend. - - -## 🛡️ 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: - - Dedizierter Crawler und Parser für Kunden-Geschäftsszenario-Quellen - - 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 -``` diff --git a/README_EN.md b/README_EN.md new file mode 100644 index 0000000..97b1e8d --- /dev/null +++ b/README_EN.md @@ -0,0 +1,208 @@ +# Chief Intelligence Officer (Wiseflow) + +**[中文](README.md) | [日本語](README_JP.md) | [한국어](README_KR.md)** + +🚀 **Chief Intelligence Officer** (Wiseflow) is an agile information mining tool that can extract information from various sources such as websites, WeChat official accounts, social platforms, etc., based on set focus points, automatically categorize with labels, and upload to a database. + +**What we lack is not information, but the ability to filter out noise from the vast amount of information to reveal valuable information.** + +🌱 See how Chief Intelligence Officer helps you save time, filter out irrelevant information, and organize key points of interest! 🌱 + +- ✅ Universal web content parser, comprehensively using statistical learning (dependent on the open-source project GNE) and LLM, suitable for over 90% of news pages; + (**Wiseflow excels in extracting information from WeChat official account articles**, for which we have configured a dedicated mp article parser!) +- ✅ Asynchronous task architecture; +- ✅ Information extraction and label classification using LLM (only requires an LLM of 9B size to perfectly execute tasks)! + +https://github.com/TeamWiseFlow/wiseflow/assets/96130569/bd4b2091-c02d-4457-9ec6-c072d8ddfb16 + +sample.png + +## 🔥 V0.3.1 Update + +👏 Although some 9B-sized LLMs (THUDM/glm-4-9b-chat) can already achieve stable information extraction output, we found that for complex meaning tags (like "Party Building") or tags that require specific collection (like only collecting "community activities" without including large events like concerts), +the current prompts cannot perform accurate extraction. Therefore, in this version, we have added an explanation field for each tag, which allows for clearer tag specification through input. + + _Note: Complex explanations require a larger model to understand accurately, see [Model Recommendations 2024-09-03](###-4. Model Recommendations [2024-09-03])_ + +👏 Additionally, addressing the issue of prompt language selection in the previous version (which does not affect the output results), we have further simplified the solution in the current version. Users no longer need to specify the system language (which is not so intuitive in Docker), the system will determine the language of the prompt (and thus the output language of the info) based on the tag and its explanation, further simplifying the deployment and use of wiseflow. **However, currently wiseflow only supports Simplified Chinese and English, other language needs can be achieved by changing the prompt in core/insights/get_info.py** + +🌹 Also, this update merges PRs from the past two months, with the following new contributors: + +@wwz223 @madizm @GuanYixuan @xnp2020 @JimmyMa99 + +🌹 Thank you all for your contributions! + +## 🌟 How to Integrate wiseflow into Your Application + +wiseflow is a native LLM application, requiring only a 7B~9B size LLM to perform information mining, filtering, and classification tasks well, and does not require a vector model, making it suitable for various hardware environments for local and private deployment. + +wiseflow stores the mined information in its built-in Pocketbase database, meaning integration does not require in-depth understanding of wiseflow's code, just read operations on the database! + +PocketBase, as a popular lightweight database, currently has SDKs for Go/Javascript/Python languages. + - Go : https://pocketbase.io/docs/go-overview/ + - Javascript : https://pocketbase.io/docs/js-overview/ + - python : https://github.com/vaphes/pocketbase + +## 🔄 How is wiseflow Different and Related to Common Crawler Tools and LLM-Agent Projects? + +| Characteristic | Chief Intelligence Officer (Wiseflow) | Crawler / Scraper | LLM-Agent | +|----------------|--------------------------------------|-------------------|-----------| +| **Main Problem Solved** | Data Processing (Filtering, Refining, Tagging) | Raw Data Acquisition | Downstream Applications | +| **Relation** | | Can be integrated into WiseFlow, giving wiseflow stronger raw data acquisition capabilities | Can integrate WiseFlow as a dynamic knowledge base | + +## 📥 Installation and Usage + +### 1. Clone the Repository + +🌹 Starring and forking are good habits 🌹 + +```bash +git clone https://github.com/TeamWiseFlow/wiseflow.git +cd wiseflow +``` + +### 2. Recommended to Run Using Docker + +```bash +docker compose up +``` + +Note: + - Run the above command in the root directory of the wiseflow code repository; + - Create and edit the .env file before running, place it in the same directory as the Dockerfile (root directory of the wiseflow code repository), the .env file can refer to env_sample; + - The first time you run the docker container, you may encounter an error, which is normal because you have not yet created an admin account for the pb repository. + +At this point, keep the container running, open your browser to http://127.0.0.1:8090/_/, and follow the prompts to create an admin account (must use an email), then fill in the created admin email (again, must be an email) and password into the .env file, and restart the container. + +_If you want to change the container's timezone and language, run the image with the following command_ + +```bash +docker run -e LANG=zh_CN.UTF-8 -e LC_CTYPE=zh_CN.UTF-8 your_image +``` + +### 2. [Alternative] Run Directly Using Python + +```bash +conda create -n wiseflow python=3.10 +conda activate wiseflow +cd core +pip install -r requirements.txt +``` + +Then refer to the scripts in core/scripts to start pb, task, and backend separately (move the script files to the core directory) + +Note: +- Be sure to start pb first, task and backend are independent processes, the order of startup does not matter, you can also start only one of them as needed; +- Download the pocketbase client for your device from https://pocketbase.io/docs/ and place it in the /core/pb directory; +- For pb runtime issues (including first-time run errors), refer to core/pb/README.md; +- Create and edit the .env file before use, place it in the root directory of the wiseflow code repository (parent directory of the core directory), the .env file can refer to env_sample, detailed configuration instructions below; + +📚 For developers, see /core/README.md for more + +Access data through pocketbase: + +http://127.0.0.1:8090/_/ - Admin dashboard UI + +http://127.0.0.1:8090/api/ - REST API + +### 3. Configuration + +Copy the env_sample in the directory and rename it to .env, fill in your configuration information (such as LLM service token) as follows: + +Windows users who choose to run the python program directly can set the following items in "Start - Settings - System - About - Advanced System Settings - Environment Variables", and restart the terminal to take effect + +- LLM_API_KEY # API KEY for large model inference service + +- LLM_API_BASE # This project relies on the openai sdk, as long as the model service supports the openai interface, it can be used normally by configuring this item, if using openai service, delete this item + +- WS_LOG="verbose" # Set whether to start debug observation, if not needed, delete it + +- GET_INFO_MODEL # Model for information extraction and label matching tasks, default is gpt-4o-mini-2024-07-18 + +- REWRITE_MODEL # Model for merging and rewriting similar information tasks, default is gpt-4o-mini-2024-07-18 + +- HTML_PARSE_MODEL # Web page parsing model (smart enabled when GNE algorithm is not effective), default is gpt-4o-mini-2024-07-18 + +- PROJECT_DIR # Location for storing data, cache, and log files, relative path to the code repository, default is the code repository if not filled + +- PB_API_AUTH='email|password' # Email and password for pb database admin (note that it must be an email, can be a fictional email) + +- PB_API_BASE # This item is not needed for normal use, only when you do not use the default pocketbase local interface (8090) + +### 4. Model Recommendations [2024-09-03] + +After repeated testing (Chinese and English tasks), the minimum usable models for `GET_INFO_MODEL`, `REWRITE_MODEL`, and `HTML_PARSE_MODEL` are: `"THUDM/glm-4-9b-chat"`, `"Qwen/Qwen2-7B-Instruct"`, and `"Qwen/Qwen2-7B-Instruct"` + +Currently, SiliconFlow has officially announced that the `Qwen2-7B-Instruct` and `glm-4-9b-chat` online inference services are free, which means you can use wiseflow "at zero cost"! + +😄 If you are willing, you can use my [siliconflow invitation link](https://cloud.siliconflow.cn?referrer=clx6wrtca00045766ahvexw92), so I can also get more token rewards 😄 + +⚠️ V0.3.1 Update + +If you use complex tags with explanations, the glm-4-9b-chat model size cannot guarantee accurate understanding. The models that have been tested to perform well for this type of task are `Qwen/Qwen2-72B-Instruct` and `gpt-4o-mini-2024-07-18`. + +### 5. Adding Focus Points and Scheduled Scanning of Sources + +After starting the program, open the pocketbase Admin dashboard UI (http://127.0.0.1:8090/_/) + +#### 5.1 Open the tags Form + +Through this form, you can specify your focus points, and the LLM will refine, filter, and categorize information accordingly. + +tags Field Explanation: + +- name, Focus point name + +- explaination, Detailed explanation or specific agreement of the focus point, such as "Only official information released by Shanghai regarding junior high school enrollment" (tag name is Shanghai Junior High School Enrollment Information) + +- activated, Whether to activate. If turned off, this focus point will be ignored, and can be turned back on later. Activating and deactivating does not require restarting the Docker container, it will update at the next scheduled task. + +#### 5.2 Open the sites Form + +Through this form, you can specify custom sources, the system will start background scheduled tasks to perform source scanning, parsing, and analysis locally. + +sites Field Explanation: + +- url, URL of the source, the source does not need to be given a specific article page, just the article list page. + +- per_hours, Scan frequency, in hours, type is integer (1~24 range, we recommend not exceeding once a day, i.e., set to 24) + +- activated, Whether to activate. If turned off, this source will be ignored, and can be turned back on later. Activating and deactivating does not require restarting the Docker container, it will update at the next scheduled task. + +### 6. Local Deployment + +As you can see, this project only requires a 7B\9B size LLM and does not require any vector model, which means that just one 3090RTX (24G VRAM) is enough to fully deploy this project locally. + +Ensure that your local LLM service is compatible with the openai SDK and configure LLM_API_BASE. + +Note: To enable a 7B~9B size LLM to accurately understand tag explanations, it is recommended to use dspy for prompt optimization, but this requires about 50 manually labeled data. See [DSPy](https://dspy-docs.vercel.app/) for details. + +## 🛡️ License Agreement + +This project is open source under the Apache2.0. + +For commercial and custom cooperation, please contact Email: 35252986@qq.com + +Commercial customers, please contact us for registration, the product promises to be forever free. + +## 📬 Contact +For any questions or suggestions, feel free to contact us via issue. + +## 🤝 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 reference or cite part or all of this project in your related work, please cite as follows: + +``` +Author:Wiseflow Team +https://github.com/TeamWiseFlow/wiseflow +Licensed under Apache2.0 +``` + diff --git a/README_FR.md b/README_FR.md deleted file mode 100644 index d34d5de..0000000 --- a/README_FR.md +++ /dev/null @@ -1,216 +0,0 @@ -# WiseFlow - -**[中文](README_CN.md) | [日本語](README_JP.md) | [English](README.md) | [Deutsch](README_DE.md)** - -**Wiseflow** est un outil agile d'extraction d'informations qui peut extraire des informations à partir de diverses sources telles que des sites Web, des comptes officiels WeChat et des plateformes de médias sociaux, en fonction des points d'intérêt prédéfinis, catégoriser automatiquement les tags et les télécharger dans la base de données. - ---- - -SiliconFlow a officiellement annoncé que plusieurs services d'inférence en ligne de LLM, tels que Qwen2-7B-Instruct et glm-4-9b-chat, seront gratuits à partir du 25 juin 2024. Cela signifie que vous pouvez effectuer des recherches d'information avec wiseflow à "zéro coût" ! - ---- - -Nous ne manquons pas d'informations, mais nous avons besoin de filtrer le bruit pour faire ressortir les informations de valeur ! - -Voyez comment WiseFlow vous aide à gagner du temps, à filtrer les informations non pertinentes, et à organiser les points d'intérêt ! - -https://github.com/TeamWiseFlow/wiseflow/assets/96130569/bd4b2091-c02d-4457-9ec6-c072d8ddfb16 - -sample.png - -## 🔥 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 Agent** - Peut servir de base de connaissances dynamique pour tout projet Agent, 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 SDK 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 LLM-Agent Communs ? - -| Caractéristique | Wiseflow | Crawler / Scraper | LLM-Agent | -|-----------------------|-------------------------------------|-------------------------------------------|--------------------------------------------------------------| -| **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** - - 😄 Starring et forker sont de bonnes habitudes - - ```bash - git clone https://github.com/TeamWiseFlow/wiseflow.git - cd wiseflow - ``` - -2. **Fortement recommandé : Utiliser Docker** - - ```bash - docker compose up - ``` - Vous pouvez modifier `compose.yaml` selon vos besoins. - - **Remarque :** - - Exécutez la commande ci-dessus dans le répertoire racine du dépôt wiseflow. - - Avant d'exécuter, créez et éditez un fichier `.env` dans le même répertoire que le Dockerfile (répertoire racine du dépôt wiseflow). Référez-vous à `env_sample` pour le fichier `.env`. - - La première fois que vous exécutez le conteneur Docker, une erreur peut se produire car vous n'avez pas encore créé de compte administrateur pour le dépôt pb. - - À ce stade, gardez le conteneur en cours d'exécution, ouvrez `http://127.0.0.1:8090/_/` dans votre navigateur, et suivez les instructions pour créer un compte administrateur (assurez-vous d'utiliser un e-mail). Ensuite, entrez l'email administrateur créé (encore une fois, assurez-vous qu'il s'agit d'un e-mail) et le mot de passe dans le fichier `.env`, et redémarrez le conteneur. - - _Si vous souhaitez modifier le fuseau horaire et la langue du conteneur [ce qui déterminera la langue de l'invite, mais a peu d'effet sur les résultats], exécutez l'image avec la commande suivante_ - - ```bash - docker run -e LANG=fr_FR.UTF-8 -e LC_CTYPE=fr_FR.UTF-8 your_image - ``` - -3. **[Alternative] Exécuter directement avec Python** - - ```bash - conda create -n wiseflow python=3.10 - conda activate wiseflow - cd core - pip install -r requirements.txt - ``` - - Ensuite, vous pouvez vous référer aux scripts dans core/scripts pour démarrer pb, task et backend respectivement (déplacez les fichiers de script dans le répertoire core). - - Remarque : - - Commencez par démarrer pb ; task et backend sont des processus indépendants, et l'ordre n'a pas d'importance. Vous pouvez démarrer l'un d'entre eux selon vos besoins. - - Téléchargez le client pocketbase adapté à votre appareil depuis https://pocketbase.io/docs/ et placez-le dans le répertoire /core/pb. - - Pour les problèmes avec pb (y compris les erreurs au premier démarrage), référez-vous à [core/pb/README.md](/core/pb/README.md). - - Avant utilisation, créez et éditez un fichier `.env` et placez-le dans le répertoire racine du dépôt wiseflow (le répertoire supérieur à core). Référez-vous à `env_sample` pour le fichier `.env`, et consultez ci-dessous pour une configuration détaillée. - - 📚 Pour les développeurs, consultez [/core/README.md](/core/README.md) pour plus d'informations. - - Accédez aux données via pocketbase : - - http://127.0.0.1:8090/_/ - Interface de tableau de bord administrateur - - http://127.0.0.1:8090/api/ - REST API - - -4. **Configuration** - - Les utilisateurs de Windows peuvent définir les éléments suivants directement dans "Démarrer - Paramètres - Système - À propos de - Paramètres système avancés - Variables d'environnement". Après avoir effectué les réglages, un redémarrage du terminal est nécessaire pour que les modifications prennent effet. - - Copiez `env_sample` du répertoire et renommez-le en `.env`, puis remplissez vos informations de configuration (comme les tokens de service LLM) comme suit : - - - LLM_API_KEY # Clé API pour les services d'inférence de modèles de langue large - - LLM_API_BASE # Ce projet repose sur le SDK OpenAI. Configurez cette option si votre service de modèle prend en charge l'API OpenAI. Si vous utilisez le service OpenAI, vous pouvez omettre cette option. - - WS_LOG="verbose" # Définir pour activer l'observation du débogage. Supprimez si non nécessaire. - - GET_INFO_MODEL # Modèle pour les tâches d'extraction d'informations et de correspondance de tags, par défaut gpt-3.5-turbo - - REWRITE_MODEL # Modèle pour les tâches de fusion approximative et de réécriture d'informations, par défaut gpt-3.5-turbo - - HTML_PARSE_MODEL # Modèle pour l'analyse des pages Web (activé intelligemment si l'algorithme GNE fonctionne mal), par défaut gpt-3.5-turbo - - PROJECT_DIR # Emplacement de stockage pour les données, le cache et les fichiers journaux, par rapport au dépôt. Par défaut, dans le dépôt. - - PB_API_AUTH='email|password' # Email et mot de passe pour l'admin de la base de données pb (doit être un email, peut être fictif) - - PB_API_BASE # Normalement inutile. Configurez-le seulement si vous n'utilisez pas l'interface locale pocketbase par défaut (8090). - - -5. **Recommandations de Modèle** - - Basé sur des tests intensifs (pour les tâches en chinois et en anglais), nous recommandons **"zhipuai/glm4-9B-chat"** pour **GET_INFO_MODEL**, **"alibaba/Qwen2-7B-Instruct"** pour **REWRITE_MODEL**, et **"alibaba/Qwen2-7B-Instruct"** pour **HTML_PARSE_MODEL**. - - Ces modèles sont bien adaptés à ce projet, avec une adhérence stable aux instructions et une qualité de génération excellente. Les invites de ce projet ont été optimisées pour ces trois modèles. (**HTML_PARSE_MODEL** peut également utiliser **"01-ai/Yi-1.5-9B-Chat"**, qui a été testé et fonctionne très bien.) - - - ⚠️ Nous recommandons fortement d'utiliser le service d'inférence en ligne de **SiliconFlow** pour des coûts inférieurs, des vitesses plus rapides, et des quotas gratuits plus élevés ! ⚠️ - - Le service d'inférence en ligne de SiliconFlow est compatible avec le SDK OpenAI et fournit des services open-source pour les trois modèles ci-dessus. Configurez simplement `LLM_API_BASE` à "https://api.siliconflow.cn/v1" et définissez `LLM_API_KEY` pour l'utiliser. - - 😄 Alternativement, vous pouvez utiliser mon [lien d'invitation](https://cloud.siliconflow.cn?referrer=clx6wrtca00045766ahvexw92), ce qui me récompense également avec plus de tokens 😄 - - -6. **Points d'Intérêt et Ajout de Sources de Scannage Programmées** - - Après avoir démarré le programme, ouvrez l'interface de tableau de bord administrateur pocketbase (http://127.0.0.1:8090/_/) - - 6.1 Ouvrez le **formulaire tags** - - Utilisez ce formulaire pour spécifier vos points d'intérêt. Le LLM extraira, filtrera, et classera les informations en fonction de ces points. - - Description des champs tags : - - - name, Description du point d'intérêt. **Remarque : Soyez spécifique.** Bon exemple : `Tendances dans la compétition USA-Chine`. Mauvais exemple : `Situation internationale`. - - activated, Activé ou non. Si désactivé, le point d'intérêt sera ignoré. Il peut être réactivé plus tard. L'activation et la désactivation ne nécessitent pas de redémarrage du conteneur Docker et seront mises à jour lors de la prochaine tâche programmée. - - 6.2 Ouvrez le **formulaire sites** - - Utilisez ce formulaire pour spécifier des sources personnalisées. Le système démarrera des tâches en arrière-plan pour scanner, analyser et interpréter ces sources localement. - - Description des champs sites : - - - url, URL de la source. Fournissez une URL vers la page de liste plutôt qu'une page d'article spécifique. - - per_hours, Fréquence de scannage en heures, sous forme d'entier (intervalle 1-24 ; nous recommandons pas plus d'une fois par jour, c.-à-d. réglé sur 24). - - activated, Activé ou non. Si désactivé, la source sera ignorée. Elle peut être réactivée plus tard. L'activation et la désactivation ne nécessitent pas de redémarrage du conteneur Docker et seront mises à jour lors de la prochaine tâche programmée. - - -7. **Déploiement Local** - - Comme vous pouvez le voir, ce projet utilise des LLMs de taille 7B/9B et ne nécessite aucun modèle vectoriel, ce qui signifie que vous n'avez besoin que d'un seul RTX 3090 (24 Go de VRAM) pour déployer complètement ce projet localement. - - Assurez-vous que votre service LLM local est compatible avec le SDK OpenAI et configurez `LLM_API_BASE` en conséquence. - - -## 🛡️ 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 : - - Crawler et analyseur dédiés pour les sources de scénarios commerciaux des clients - - 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 -``` \ No newline at end of file diff --git a/README_JP.md b/README_JP.md index e016e84..4a1e50e 100644 --- a/README_JP.md +++ b/README_JP.md @@ -1,217 +1,205 @@ -# チーフインテリジェンスオフィサー (Wiseflow) +# 最高情報責任者(Wiseflow) -**[中文](README_CN.md) | [English](README.md) | [Français](README_FR.md) | [Deutsch](README_DE.md)** +**[English](README_EN.md) | [中文](README.md) | [한국어](README_KR.md)** -**チーフインテリジェンスオフィサー** (Wiseflow) は、ウェブサイト、WeChat公式アカウント、ソーシャルメディアなどのさまざまな情報源から、事前に設定された関心点に基づいて情報を抽出し、自動的にタグ付けしてデータベースにアップロードすることができるアジャイルな情報抽出ツールです。 +🚀 **最高情報責任者**(Wiseflow)は、ウェブサイト、WeChat公式アカウント、ソーシャルプラットフォームなど、さまざまな情報源から設定された焦点に基づいて情報を抽出し、自動的にラベル付けしてデータベースにアップロードするアジャイルな情報マイニングツールです。 ---- +**私たちが欠けているのは情報ではなく、大量の情報からノイズをフィルタリングして価値ある情報を明らかにする能力です。** -SiliconFlowは、Qwen2-7B-Instructやglm-4-9b-chatなどのいくつかのLLMオンライン推論サービスが2024年6月25日から無料で提供されることを正式に発表しました。これにより、「ゼロコスト」でwiseflowを使って情報発掘が可能になります! +🌱 最高情報責任者がどのようにあなたの時間を節約し、無関係な情報をフィルタリングし、注目すべきポイントを整理するかを見てみましょう! 🌱 ---- - -私たちが必要なのは情報ではなく、膨大な情報の中からノイズを取り除き、価値のある情報を浮き彫りにすることです! - -チーフインテリジェンスオフィサーがどのようにして時間を節約し、無関係な情報をフィルタリングし、注目すべきポイントを整理するのかをご覧ください! +- ✅ 汎用ウェブコンテンツパーサー、統計学習(オープンソースプロジェクトGNEに依存)とLLMを包括的に使用し、90%以上のニュースページに適合; + (**WiseflowはWeChat公式アカウントの記事から情報を抽出することに特に優れており**、専用のmp記事パーサーを設定しています!) +- ✅ 非同期タスクアーキテクチャ; +- ✅ LLMを使用した情報抽出とラベル分類(9BサイズのLLMで完璧にタスクを実行できます)! https://github.com/TeamWiseFlow/wiseflow/assets/96130569/bd4b2091-c02d-4457-9ec6-c072d8ddfb16 sample.png -## 🔥 V0.3.0 重要なアップデート +## 🔥 V0.3.1 アップデート -- ✅ GNE(オープンソースプロジェクト)とLLMを使用して再構築した新しい汎用ウェブページコンテンツパーサー。90%以上のニュースページに適応可能。 +👏 9BサイズのLLM(THUDM/glm-4-9b-chat)の一部は、安定した情報抽出出力を実現できますが、複雑な意味のタグ(「党建設」など)や特定の収集が必要なタグ(「コミュニティ活動」のみを収集し、コンサートなどの大規模なイベント情報は含まない)については、 +現在のプロンプトでは正確な抽出ができません。そこで、このバージョンでは各タグに説明フィールドを追加し、入力によってより明確なタグ指定ができるようにしました。 -- ✅ 新しい非同期タスクアーキテクチャ。 + _注:複雑な説明にはより大規模なモデルが必要です。詳細は [モデル推奨 2024-09-03](###-4. モデル推奨 [2024-09-03]) を参照してください_ -- ✅ 新しい情報抽出とタグ分類戦略。より正確で繊細な情報を提供し、9BサイズのLLMのみで完璧にタスクを実行します。 +👏 また、前バージョンのプロンプト言語選択の問題(出力結果には影響しません)に対処し、現在のバージョンではさらにシンプルなソリューションを採用しています。ユーザーはシステム言語を指定する必要がなくなりました(Dockerではそれほど直感的ではありません)、システムはタグとその説明に基づいてプロンプトの言語(つまり情報の出力言語)を判断し、wiseflowの展開と使用をさらに簡素化します。**ただし、現在wiseflowは簡体字中国語と英語のみをサポートしており、他の言語のニーズはcore/insights/get_info.pyのプロンプトを変更することで実現できます** -## 🌟 主な機能 +🌹 また、このアップデートでは過去2か月間のPRをマージし、以下の新しい貢献者が追加されました: -- 🚀 **ネイティブ LLM アプリケーション** - コストを最大限に抑え、データセンシティブなユーザーがいつでも完全にローカルデプロイに切り替えられるよう、最適な7B~9Bオープンソースモデルを慎重に選定しました。 +@wwz223 @madizm @GuanYixuan @xnp2020 @JimmyMa99 +🌹 皆さんの貢献に感謝します! -- 🌱 **軽量設計** - ベクトルモデルを使用せず、システム負荷が小さく、GPU不要であらゆるハードウェア環境に対応します。 +## 🌟 アプリケーションにwiseflowを統合する方法 +wiseflowはネイティブLLMアプリケーションで、7B〜9BサイズのLLMで情報マイニング、フィルタリング、分類タスクをうまく実行でき、ベクトルモデルを必要とせず、さまざまなハードウェア環境でのローカルおよびプライベート展開に適しています。 -- 🗃️ **インテリジェントな情報抽出と分類** - 様々な情報源から自動的に情報を抽出し、ユーザーの関心に基づいてタグ付けと分類を行います。 +wiseflowはマイニングされた情報を組み込みのPocketbaseデータベースに保存します。つまり、wiseflowのコードを深く理解する必要はなく、データベースの読み取り操作だけで統合が可能です! - 😄 **Wiseflowは特にWeChat公式アカウントの記事から情報を抽出するのが得意です**。そのため、mp記事専用パーサーを設定しました! +PocketBaseは人気のある軽量データベースで、現在Go/Javascript/Pythonなどの言語のSDKがあります。 + - Go : https://pocketbase.io/docs/go-overview/ + - Javascript : https://pocketbase.io/docs/js-overview/ + - python : https://github.com/vaphes/pocketbase +## 🔄 wiseflowと一般的なクローラーツール、LLM-Agentプロジェクトの違いと関連性 -- 🌍 **任意のAgentプロジェクトに統合可能** - 任意のAgentプロジェクトの動的ナレッジベースとして機能し、Wiseflowのコードを理解せずとも、データベースからの読み取り操作だけで利用できます! +| 特徴 | 最高情報責任者(Wiseflow) | クローラー / スクレイパー | LLM-Agent | +|----------------|--------------------------------------|-------------------|-----------| +| **主な解決課題** | データ処理(フィルタリング、精製、ラベリング) | 生データ取得 | 下流アプリケーション | +| **関連性** | | WiseFlowに統合可能、wiseflowにより強力な生データ取得能力を与える | WiseFlowを動的知識ベースとして統合可能 | +## 📥 インストールと使用方法 -- 📦 **人気のPocketBaseデータベース** - データベースとインターフェースにPocketBaseを使用。Webインターフェースに加え、Go/JavaScript/PythonなどのSDKもあります。 - - - Go: https://pocketbase.io/docs/go-overview/ - - JavaScript: https://pocketbase.io/docs/js-overview/ - - Python: https://github.com/vaphes/pocketbase +### 1. リポジトリのクローン -## 🔄 Wiseflowと一般的なクローラツール、LLM-Agentプロジェクトとの違いと関連性 +🌹 スターリングとフォークは良い習慣です 🌹 -| 特徴 | チーフインテリジェンスオフィサー (Wiseflow) | クローラ / スクレイパー | LLM-Agent | -|---------------|---------------------------------|------------------------------------------|---------------------------| -| **解決する主な問題** | データ処理(フィルタリング、抽出、タグ付け) | 生データの取得 | 下流アプリケーション | -| **関連性** | | Wiseflowに統合して、より強力な生データ取得能力を持たせる | 動的ナレッジベースとしてWiseflowを統合可能 | +```bash +git clone https://github.com/TeamWiseFlow/wiseflow.git +cd wiseflow +``` -## 📥 インストールと使用方法 +### 2. Dockerを使用して実行することを推奨 -チーフインテリジェンスオフィサーはハードウェアの要件がほとんどなく、システム負荷が小さく、GPUやCUDAを必要としません(オンラインLLMサービスを使用する場合)。 +```bash +docker compose up +``` -1. **リポジトリをクローン** +注意: - 😄 いいねやforkは良い習慣です +- wiseflowコードリポジトリのルートディレクトリで上記のコマンドを実行してください; - ```bash - git clone https://github.com/TeamWiseFlow/wiseflow.git - cd wiseflow - ``` +- 実行前に.envファイルを作成し、Dockerfileと同じディレクトリ(wiseflowコードリポジトリのルートディレクトリ)に配置してください。.envファイルはenv_sampleを参照できます; -2. **Dockerの使用を強く推奨** +- 初回のdockerコンテナ実行時にエラーが発生することがありますが、これはpbリポジトリの管理者アカウントがまだ作成されていないためです。 - ```bash - docker compose up - ``` - 必要に応じて`compose.yaml`を変更できます。 +- この時点でコンテナを実行したままにし、ブラウザを開いてhttp://127.0.0.1:8090/_/にアクセスし、プロンプトに従って管理者アカウントを作成してください(メールアドレスを使用する必要があります)。そして、作成した管理者のメールアドレス(再び、メールアドレスを使用する必要があります)とパスワードを.envファイルに入力し、コンテナを再起動してください。 - **注意:** - - 上記のコマンドはwiseflowリポジトリのルートディレクトリで実行してください。 - - 実行前に`.env`ファイルを作成し、Dockerfileと同じディレクトリ(wiseflowリポジトリのルートディレクトリ)に配置します。.envファイルの参考例は`env_sample`です。 - - 最初にDockerコンテナを実行するとエラーが発生する可能性があります。これは正常で、まだpbリポジトリにadminアカウントを作成していないためです。 +_コンテナのタイムゾーンと言語を変更したい場合は、以下のコマンドでイメージを実行してください_ - この場合、コンテナを閉じずに、ブラウザで`http://127.0.0.1:8090/_/`を開き、指示に従ってadminアカウント(必ずメールアドレスを使用してください)を作成し、作成したadminメールアドレス(再度、必ずメールアドレスを使用してください)とパスワードを.envファイルに記入してコンテナを再起動してください。 +```bash +docker run -e LANG=zh_CN.UTF-8 -e LC_CTYPE=zh_CN.UTF-8 your_image +``` - _コンテナのタイムゾーンと言語を変更したい場合 [プロンプトの言語を決定しますが、結果にはあまり影響しません] は、以下のコマンドでイメージを実行してください_ +### 2. [代替案] Pythonを直接使用して実行 - ```bash - docker run -e LANG=ja_JP.UTF-8 -e LC_CTYPE=ja_JP.UTF-8 your_image - ``` +```bash +conda create -n wiseflow python=3.10 +conda activate wiseflow +cd core +pip install -r requirements.txt +``` -3. **【代替】Pythonで直接実行** +その後、core/scriptsのスクリプトを参照してpb、task、backendを個別に起動してください(スクリプトファイルをcoreディレクトリに移動してください) - ```bash - conda create -n wiseflow python=3.10 - conda activate wiseflow - cd core - pip install -r requirements.txt - ``` +注意: - その後、core/scripts のスクリプトを参照して、pb、task、backend をそれぞれ起動することができます(スクリプトファイルを core ディレクトリに移動してください)。 +- pbを最初に起動する必要があります。taskとbackendは独立したプロセスで、起動順序は問いません。必要に応じてどちらか一方だけを起動することもできます; - 注意: - - pbを最初に起動してください。taskとbackendは独立したプロセスなので、順番は問いません。また、必要に応じてどれか一つだけを起動することもできます。 - - 自分のデバイスに適したpocketbaseクライアントをhttps://pocketbase.io/docs/ からダウンロードし、/core/pbディレクトリに配置してください。 - - pbに関する問題(初回実行時のエラーなど)は [core/pb/README.md](/core/pb/README.md) を参照してください。 - - 使用前に`.env`ファイルを作成して編集し、wiseflowリポジトリのルートディレクトリ(coreディレクトリの上位)に配置します。.envファイルの参考例は`env_sample`で、詳細な設定については以下を参照してください。 +- https://pocketbase.io/docs/からデバイスに合わせたpocketbaseクライアントをダウンロードし、/core/pbディレクトリに配置してください; +- pbの実行時の問題(初回実行時のエラーを含む)については、core/pb/README.mdを参照してください; - 📚 開発者向けには [/core/README.md](/core/README.md) を参照してください。 +- 使用前に.envファイルを作成し、wiseflowコードリポジトリのルートディレクトリ(coreディレクトリの親ディレクトリ)に配置してください。.envファイルはenv_sampleを参照できます。詳細な設定説明は以下を参照してください; - pocketbaseでデータにアクセス: - - http://127.0.0.1:8090/_/ - 管理ダッシュボードUI - - http://127.0.0.1:8090/api/ - REST API +📚 開発者向け、詳細は/core/README.mdを参照してください +pocketbaseを介して取得したデータ: -4. **設定** +http://127.0.0.1:8090/_/ - 管理者ダッシュボードUI - Windows ユーザーは、「スタート - 設定 - システム - バージョン情報 - システムの詳細設定 - 環境変数」で以下の項目を直接設定できます。設定後、変更を有効にするには端末を再起動する必要があります。 +http://127.0.0.1:8090/api/ - REST API - `env_sample`をコピーし、`.env`に名前を変更してから、以下のように設定情報(LLMサービスのトークンなど)を記入します。 +### 3. 設定 - - LLM_API_KEY # 大規模言語モデル推論サービスのAPIキー - - LLM_API_BASE # このプロジェクトはOpenAI SDKに依存しています。モデルサービスがOpenAI APIをサポートしている場合、この項目を設定することで正常に使用できます。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データベースのadminのメールアドレスとパスワード(必ずメールアドレスで、仮のメールアドレスでも可) - - PB_API_BASE # 通常は不要。この項目は、デフォルトのポケットベースローカルインターフェース(8090)を使用しない場合にのみ設定してください。 +ディレクトリ内のenv_sampleをコピーし、.envに名前を変更して、以下のように設定情報(LLMサービストークンなど)を入力してください: +WindowsユーザーがPythonプログラムを直接実行する場合、「スタート - 設定 - システム - バージョン情報 - 詳細システム設定 - 環境変数」で以下の項目を設定し、ターミナルを再起動して有効にしてください -5. **モデルの推奨** +- LLM_API_KEY # 大規模モデル推論サービスAPIキー - 多くのテスト(中国語と英語のタスク向け)に基づき、**GET_INFO_MODEL**、**REWRITE_MODEL**、**HTML_PARSE_MODEL** の3項目に対してそれぞれ **"zhipuai/glm4-9B-chat"**、**"alibaba/Qwen2-7B-Instruct"**、**"alibaba/Qwen2-7B-Instruct"** を推奨します。 +- LLM_API_BASE # このプロジェクトはopenai sdkに依存しており、モデルサービスがopenaiインターフェースをサポートしている場合、この項目を設定することで正常に使用できます。openaiサービスを使用する場合、この項目を削除してください - これらは本プロジェクトに非常に適しており、指示の遵守が安定していて、生成結果が優れています。本プロジェクトに関連するプロンプトもこれらの3つのモデルに最適化されています。(**HTML_PARSE_MODEL**は **"01-ai/Yi-1.5-9B-Chat"** も使用可能で、非常に良好な結果を示しています。) +- WS_LOG="verbose" # デバッグ観察を開始するかどうかを設定します。必要がない場合は削除してください +- GET_INFO_MODEL # 情報抽出とラベルマッチングタスクのモデル、デフォルトはgpt-4o-mini-2024-07-18 - ⚠️ **SiliconFlow**のオンライン推論サービスの使用も強くお勧めします。低価格、高速、無料枠が多い!⚠️ +- REWRITE_MODEL # 類似情報のマージと書き換えタスクのモデル、デフォルトはgpt-4o-mini-2024-07-18 - SiliconFlowのオンライン推論サービスはOpenAI SDKと互換性があり、上記3つのモデルのオープンソースサービスも提供しています。`LLM_API_BASE`を "https://api.siliconflow.cn/v1" に設定し、`LLM_API_KEY`を設定するだけで利用できます。 +- HTML_PARSE_MODEL # ウェブページ解析モデル(GNEアルゴリズムが効果的でない場合に自動的に有効になります)、デフォルト +- PROJECT_DIR # データ、キャッシュおよびログファイルの保存場所、コードリポジトリに対する相対パス、デフォルトでは空欄でコードリポジトリ内に保存 +- PB_API_AUTH='email|password' # pbデータベース管理者のメールアドレスとパスワード(必ずメールアドレスを使用してください、フィクションのメールアドレスでも可) +- PB_API_BASE # 通常の使用にはこの項目は必要ありません、デフォルトのpocketbaseローカルインターフェース(8090)を使用しない場合のみ指定します - 😄 または、私の[招待リンク](https://cloud.siliconflow.cn?referrer=clx6wrtca00045766ahvexw92)を使用して、私がより多くのトークンを得られるようにすることもできます 😄 +### 4. モデル推奨 [2024-09-03] +反復テストを経て(中国語・英語タスク)**GET_INFO_MODEL**、**REWRITE_MODEL**、**HTML_PARSE_MODEL** の最小利用可能なモデルはそれぞれ:**"THUDM/glm-4-9b-chat"**、**"Qwen/Qwen2-7B-Instruct"**、**"Qwen/Qwen2-7B-Instruct"** です。 -6. **注目点と定期スキャンソースの追加** +現在、SiliconFlowはQwen2-7B-Instruct、glm-4-9b-chatのオンライン推論サービスが無料であることを公式に発表しました。これは、あなたが「ゼロコスト」でwiseflowを利用できることを意味します! - プログラムを起動した後、pocketbaseの管理ダッシュボードUI (http://127.0.0.1:8090/_/) を開きます。 +😄 ご好意ある限り、私の[siliconflow招待リンク](https://cloud.siliconflow.cn?referrer=clx6wrtca00045766ahvexw92)を使用していただけると、私もより多くのトークン報酬を得ることができます 😄 - 6.1 **tagsフォーム**を開く +⚠️ **V0.3.1 更新** - このフォームで関心事項を指定できます。LLMはこれに基づいて情報を抽出、フィルタリング、分類します。 +説明付きの複雑なタグを使用している場合、glm-4-9b-chat規模のモデルでは正確な理解が保証できません。現時点でのテスト結果では、この種類のタスクに対して効果が高いモデルは **Qwen/Qwen2-72B-Instruct** と **gpt-4o-mini-2024-07-18** です。 - tagsフィールドの説明: +### 5. **関心事項と定期スキャン情報ソースの追加** - - name, 関心事項の説明。**注意: より具体的にしてください。** 良い例: `米中競争動向`。悪い例: `国際情勢`。 - - activated, アクティブかどうか。無効にするとその関心事項は無視されます。無効化後に再度有効化できます。有効化と無効化にはDockerコンテナの再起動は不要で、次回の定期タスク時に更新されます。 +プログラムを起動したら、pocketbase AdminダッシュボードUI (http://127.0.0.1:8090/_/) を開きます。 - 6.2 **sitesフォーム**を開く +#### 5.1 tagsフォームを開く - このフォームでカスタムソースを指定できます。システムはバックグラウンドで定期タスクを起動し、これらのソースをローカルでスキャン、解析、分析します。 +このフォームを通じてあなたの関心事項を指定することができます。LLMはこれに基づいて情報を抽出、フィルタリングし、分類します。 - sitesフィールドの説明: +tags のフィールド説明: + - name, 関心事項の名前 + - explaination, 関心事項の詳細な説明または具体的な規定、例えば「上海市の公的な中学校進学情報のみ」(タグ名は「上海中学校進学情報」) + - activated, 有効化されているかどうか。無効化するとその関心事項は無視されます。無効化後も再度有効化することができます。Dockerコンテナの再起動は必要ありません、次の定期タスク時に更新されます。 - - url, ソースのURL。特定の記事ページではなく、記事リストのページを指定してください。 - - per_hours, スキャン頻度。単位は時間。整数(1〜24範囲で、1日1回を超えない頻度(24を設定)を推奨)。 - - activated, アクティブかどうか。無効にするとそのソースは無視されます。無効化後に再度有効化できます。有効化と無効化にはDockerコンテナの再起動は不要で、次回の定期タスク時に更新されます。 +#### 5.2 sitesフォームを開く +このフォームを通じてカスタム情報ソースを指定できます。システムはバックグラウンドで定期タスクを開始し、情報ソースのスキャン、解析、分析を行います。 -7. **ローカルデプロイ** +sites のフィールド説明: + - url, 情報ソースのURL、具体的な記事ページではなくリストページを指定してください。 + - per_hours, スキャン頻度、時間単位、整数型(1~24の範囲、スキャン頻度は1日に1回を超えないように、つまり24と設定することを推奨します) + - activated, 有効化されているかどうか。無効化するとその情報ソースは無視されます。無効化後も再度有効化することができます。Dockerコンテナの再起動は必要ありません、次の定期タスク時に更新されます。 - ご覧の通り、本プロジェクトは7B/9BのLLMを使用しており、ベクトルモデルを必要としません。つまり、RTX 3090(24 GB VRAM)1台で完全にローカルデプロイできます。 +### 6. ローカル展開 - お使いのローカルLLMサービスがOpenAI SDKと互換性があることを確認し、`LLM_API_BASE`を適切に設定してください。 +ご覧の通り、本プロジェクトは最低でも7b/9bサイズのLLMを使用するだけでよく、任意のベクトルモデルは必要ありません。つまり、3090RTX(24GB VRAM)があれば本プロジェクトを完全にローカルで展開することが可能です。 +あなたのローカル展開LLMサービスがopenai SDKと互換性があることを確認し、LLM_API_BASE を設定してください。 +注:7b~9b規模のLLMがタグの説明を正確に理解できるようにするためには、dspyを使用したプロンプトの最適化が推奨されますが、これは約50件の手動ラベル付けデータの累積が必要となります。詳しくは [DSPy](https://dspy-docs.vercel.app/) をご覧ください。 ## 🛡️ ライセンス -このプロジェクトは [Apache 2.0](LICENSE) ライセンスの下でオープンソースです。 +本プロジェクトは [Apache2.0](LICENSE) ライセンスの元でオープンソースです。 -商用利用やカスタマイズの協力については、**メール: 35252986@qq.com** までご連絡ください。 +商用利用およびカスタマイズ協力については、**Email:35252986@qq.com** までお問い合わせください。 -- 商用顧客の方は、登録をお願いします。この製品は永久に無料であることをお約束します。 -- カスタマイズが必要な顧客のために、ソースとビジネスニーズに応じて以下のサービスを提供します: - - お客様のビジネスシーンソース用の専用クローラーとパーサー - - カスタマイズされた情報抽出と分類戦略 - - 特定の LLM 推奨または微調整サービス - - プライベートデプロイメントサービス - - UI インターフェースのカスタマイズ + - コマーシャル顧客は私たちに報告して登録してください、製品は永久に無料です。 -## 📬 お問い合わせ情報 +## 📬 連絡先 -ご質問やご提案がありましたら、[issue](https://github.com/TeamWiseFlow/wiseflow/issues) を通じてお気軽にお問い合わせください。 +何か質問や提案がありましたら、[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 +- 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 +Author:Wiseflow Team https://github.com/TeamWiseFlow/wiseflow Licensed under Apache2.0 -``` \ No newline at end of file +``` + diff --git a/README_KR.md b/README_KR.md new file mode 100644 index 0000000..46a8219 --- /dev/null +++ b/README_KR.md @@ -0,0 +1,199 @@ +# 수석 정보 책임자 (Wiseflow) + +**[English](README_EN.md) | [日本語](README_JP.md) | [中文](README.md)** + +🚀 **수석 정보 책임자** (Wiseflow)는 웹사이트, 위챗 공식 계정, 소셜 플랫폼 등 다양한 정보원에서 설정된 관심사를 기반으로 정보를 추출하고, 자동으로 라벨링하여 데이터베이스에 업로드하는 민첩한 정보 마이닝 도구입니다. + +**우리가 부족한 것은 정보가 아니라, 방대한 정보에서 노이즈를 필터링하여 가치 있는 정보를 드러내는 능력입니다.** + +🌱 수석 정보 책임자가 어떻게 당신의 시간을 절약하고, 관련 없는 정보를 필터링하며, 주목할 만한 요점을 정리하는지 살펴보세요! 🌱 + +- ✅ 범용 웹 콘텐츠 파서, 통계 학습(오픈 소스 프로젝트 GNE에 의존)과 LLM을 포괄적으로 사용하여 90% 이상의 뉴스 페이지에 적합; + (**Wiseflow는 위챗 공식 계정 기사에서 정보를 추출하는 데 특히 뛰어나며**, 이를 위해 전용 mp 기사 파서를 구성했습니다!) +- ✅ 비동기 작업 아키텍처; +- ✅ LLM을 사용한 정보 추출 및 라벨 분류 (9B 크기의 LLM으로 작업을 완벽하게 수행할 수 있습니다)! + +https://github.com/TeamWiseFlow/wiseflow/assets/96130569/bd4b2091-c02d-4457-9ec6-c072d8ddfb16 + +sample.png + +## 🔥 V0.3.1 업데이트 + +👏 일부 9B 크기의 LLM(THUDM/glm-4-9b-chat)은 이미 안정적인 정보 추출 출력을 달성할 수 있지만, 복잡한 의미의 태그(예: "당 건설") 또는 특정 수집이 필요한 태그(예: "커뮤니티 활동"만 수집하고 콘서트와 같은 대규모 이벤트 정보는 포함하지 않음)에 대해서는 +현재 프롬프트로는 정확한 추출을 수행할 수 없습니다. 따라서 이 버전에서는 각 태그에 설명 필드를 추가하여 입력을 통해 더 명확한 태그 지정이 가능하도록 했습니다. + + _참고: 복잡한 설명에는 더 큰 규모의 모델이 필요합니다. 자세한 내용은 [모델 추천 2024-09-03](###-4. 모델 추천 [2024-09-03])을 참조하십시오_ + +👏 또한, 이전 버전의 프롬프트 언어 선택 문제(출력 결과에는 영향을 주지 않음)에 대응하여, 현재 버전에서는 솔루션을 더욱 간소화했습니다. 사용자는 더 이상 시스템 언어를 지정할 필요가 없으며(Docker에서는 그다지 직관적이지 않습니다), 시스템은 태그와 그 설명을 기반으로 프롬프트 언어(즉, 정보의 출력 언어)를 판단하여 wiseflow의 배포 및 사용을 더욱 간소화합니다. **하지만 현재 wiseflow는 간체 중국어와 영어만 지원하며, 다른 언어의 요구 사항은 core/insights/get_info.py의 프롬프트를 변경하여 구현할 수 있습니다** + +🌹 또한, 이번 업데이트에서는 지난 2개월 동안의 PR을 병합하고, 다음과 같은 새로운 기여자를 추가했습니다: + +@wwz223 @madizm @GuanYixuan @xnp2020 @JimmyMa99 + +🌹 여러분의 기여에 감사드립니다! + +## 🌟 애플리케이션에 wiseflow를 통합하는 방법 + +wiseflow는 네이티브 LLM 애플리케이션으로, 7B~9B 크기의 LLM만으로 정보 마이닝, 필터링 및 분류 작업을 잘 수행할 수 있으며, 벡터 모델이 필요하지 않아 다양한 하드웨어 환경에서의 로컬 및 프라이빗 배포에 적합합니다. + +wiseflow는 마이닝된 정보를 내장된 Pocketbase 데이터베이스에 저장하므로, wiseflow의 코드를 깊이 이해할 필요 없이 데이터베이스 읽기 작업만으로 통합이 가능합니다! + +PocketBase는 인기 있는 경량 데이터베이스로, 현재 Go/Javascript/Python 등의 언어 SDK가 있습니다. + - Go : https://pocketbase.io/docs/go-overview/ + - Javascript : https://pocketbase.io/docs/js-overview/ + - python : https://github.com/vaphes/pocketbase + +## 🔄 wiseflow와 일반적인 크롤러 도구, LLM-Agent 프로젝트의 차이점과 연관성 + +| 특징 | 수석 정보 책임자 (Wiseflow) | 크롤러 / 스크래퍼 | LLM-Agent | +|----------------|--------------------------------------|-------------------|-----------| +| **주요 해결 문제** | 데이터 처리 (필터링, 정제, 라벨링) | 원시 데이터 획득 | 하류 애플리케이션 | +| **연관성** | | WiseFlow에 통합 가능, wiseflow에 더 강력한 원시 데이터 획득 능력을 부여 | WiseFlow를 동적 지식 기반으로 통합 가능 | + +## 📥 설치 및 사용 방법 + +### 1. 저장소 복제 + +🌹 스타링과 포크는 좋은 습관입니다 🌹 + +```bash +git clone https://github.com/TeamWiseFlow/wiseflow.git +cd wiseflow +``` + +### 2. Docker를 사용하여 실행하는 것을 권장 + +```bash +docker compose up +``` + +주의: + +- wiseflow 코드 저장소의 루트 디렉토리에서 위의 명령을 실행하십시오; + +- 실행 전에 .env 파일을 생성하고, Dockerfile과 동일한 디렉토리(wiseflow 코드 저장소의 루트 디렉토리)에 배치하십시오. .env 파일은 env_sample을 참조할 수 있습니다; + +- 처음 docker 컨테이너를 실행할 때 오류가 발생할 수 있습니다. 이는 pb 저장소의 관리자 계정이 아직 생성되지 않았기 때문입니다. + +- 이 시점에서 컨테이너를 실행한 상태로 두고, 브라우저를 열어 http://127.0.0.1:8090/_/에 접속하여 프롬프트에 따라 관리자 계정을 생성하십시오(반드시 이메일을 사용해야 합니다). 그런 다음, 생성한 관리자의 이메일 주소(다시 말하지만, 이메일을 사용해야 합니다)와 비밀번호를 .env 파일에 입력하고, 컨테이너를 다시 시작하십시오. + +_컨테이너의 시간대와 언어를 변경하려면 다음 명령으로 이미지를 실행하십시오_ + +```bash +docker run -e LANG=zh_CN.UTF-8 -e LC_CTYPE=zh_CN.UTF-8 your_image +``` + +### 2. [대안] Python을 직접 사용하여 실행 + +```bash +conda create -n wiseflow python=3.10 +conda activate wiseflow +cd core +pip install -r requirements.txt +``` + +이후 core/scripts 폴더에 있는 스크립트를 참조하여 각각 pb, task, backend를 시작할 수 있습니다 (스크립트 파일을 core 디렉토리로 이동하십시오). + +**주의:** + - 반드시 pb를 먼저 시작해야 하며, task와 backend는 독립적인 프로세스이므로 순서는 상관없고, 필요에 따라 하나만 시작해도 됩니다. + - 먼저 여기를 방문하여 https://pocketbase.io/docs/ 본인의 장치에 맞는 pocketbase 클라이언트를 다운로드하고 /core/pb 디렉토리에 배치해야 합니다. + - pb 실행 문제(처음 실행 시 오류 포함)에 대해서는 [core/pb/README.md](/core/pb/README.md)를 참조하십시오. + - 사용 전에 .env 파일을 생성하고 편집하여 wiseflow 코드 저장소의 루트 디렉토리(core 디렉토리의 상위)에 배치하십시오. .env 파일은 env_sample을 참고하고, 자세한 설정 설명은 아래를 참조하십시오. + +📚 개발자를 위한 더 많은 정보는 [/core/README.md](/core/README.md)를 참조하십시오. + +pocketbase를 통해 액세스한 데이터: + - http://127.0.0.1:8090/_/ - 관리자 대시보드 UI + - http://127.0.0.1:8090/api/ - REST API + +### 3. 설정 + +env_sample 파일을 복사하여 .env로 이름을 변경하고, 아래 내용을 참고하여 본인의 설정 정보를 입력하십시오 (예: LLM 서비스 토큰 등). + +**윈도우 사용자가 Python 프로그램을 직접 실행하려면, “시작 - 설정 - 시스템 - 정보 - 고급 시스템 설정 - 환경 변수”에서 아래 항목을 설정하십시오. 설정 후에는 터미널을 재시작해야 합니다.** + + - LLM_API_KEY # 대형 모델 추론 서비스 API 키 + - LLM_API_BASE # 이 프로젝트는 OpenAI SDK를 사용하며, 모델 서비스가 OpenAI 인터페이스를 지원하면 해당 항목을 설정하여 정상적으로 사용할 수 있습니다. OpenAI 서비스를 사용할 경우 이 항목을 삭제하면 됩니다. + - WS_LOG="verbose" # 디버그 모드를 시작할지 여부를 설정합니다. 필요 없으면 삭제하십시오. + - GET_INFO_MODEL # 정보 추출 및 태그 매칭 작업 모델, 기본값은 gpt-4o-mini-2024-07-18 + - REWRITE_MODEL # 유사 정보 병합 및 재작성 작업 모델, 기본값은 gpt-4o-mini-2024-07-18 + - HTML_PARSE_MODEL # 웹 페이지 파싱 모델 (GNE 알고리즘의 성능이 부족할 때 자동으로 활성화됨), 기본값은 gpt-4o-mini-2024-07-18 + - PROJECT_DIR # 데이터, 캐시 및 로그 파일의 저장 위치. 코드 저장소의 상대 경로로 설정되며, 기본값은 코드 저장소입니다. + - PB_API_AUTH='email|password' # pb 데이터베이스 관리자의 이메일과 비밀번호 (반드시 이메일이어야 하며, 가상의 이메일일 수도 있습니다). + - PB_API_BASE # 기본적으로 필요하지 않지만, 기본 pocketbase 로컬 인터페이스(8090)를 사용하지 않는 경우에만 설정해야 합니다. + +### 4. 모델 추천 [2024-09-03] + +반복적인 테스트(영어 및 중국어 작업)를 통해 **GET_INFO_MODEL**, **REWRITE_MODEL**, **HTML_PARSE_MODEL**의 최소 사용 가능한 모델은 각각 **"THUDM/glm-4-9b-chat"**, **"Qwen/Qwen2-7B-Instruct"**, **"Qwen/Qwen2-7B-Instruct"**입니다. + +현재, SiliconFlow는 Qwen2-7B-Instruct, glm-4-9b-chat 온라인 추론 서비스를 무료로 제공한다고 발표했습니다. 이로 인해 여러분은 wiseflow를 "제로 비용"으로 사용할 수 있습니다! + +😄 원하시면 저의 [siliconflow 초대 링크](https://cloud.siliconflow.cn?referrer=clx6wrtca00045766ahvexw92)를 사용하셔도 좋습니다. 이렇게 하면 저도 더 많은 토큰 보상을 받을 수 있습니다 😄 + +⚠️ **V0.3.1 업데이트** + +설명이 포함된 복잡한 태그를 사용하는 경우, glm-4-9b-chat 크기의 모델로는 정확한 이해를 보장할 수 없습니다. 현재 테스트 결과, 이 유형의 작업에 적합한 모델은 **Qwen/Qwen2-72B-Instruct**와 **gpt-4o-mini-2024-07-18**입니다. + +`gpt-4o-mini-2024-07-18` 모델 사용을 원하는 사용자들은 제3자 대리 서비스 **AiHubMix**를 시도해 볼 수 있습니다. 국내 네트워크 환경에서 직접 연결을 지원하며, 알리페이로 충전이 가능합니다 (실제 요율은 공식 웹사이트 요율의 약 14% 할인). + +🌹 다음 초대 링크 [AiHubMix 초대 링크](https://aihubmix.com?aff=Gp54)를 사용하여 등록하십시오 🌹 + +🌍 위 두 플랫폼의 온라인 추론 서비스는 모두 OpenAI SDK와 호환되며, `.env` 파일의 `LLM_API_BASE`와 `LLM_API_KEY`를 설정한 후 사용할 수 있습니다. + +### 5. **관심사와 정기 스캔 소스 추가** + +프로그램을 시작한 후 pocketbase 관리자 대시보드 UI(http://127.0.0.1:8090/_)를 엽니다. + +#### 5.1 tags 폼 열기 + +이 폼을 통해 관심사를 지정할 수 있으며, LLM은 이를 기준으로 정보를 추출하고 필터링하여 분류합니다. + +tags 필드 설명: + - name: 관심사 이름 + - explaination: 관심사의 상세 설명 또는 구체적인 정의, 예를 들어 "상하이시 공식 발표 중학교 진학 정보에 한정" (tag 이름: 상하이 중학교 진학 정보) + - activated: 활성화 여부. 비활성화하면 해당 관심사는 무시되며, 비활성화 후 다시 활성화할 수 있습니다. 활성화 및 비활성화는 Docker 컨테이너를 재시작하지 않고도 가능하며, 다음 정기 작업 시 업데이트됩니다. + +#### 5.2 sites 폼 열기 + +이 폼을 통해 사용자 정의 소스를 지정할 수 있으며, 시스템은 백그라운드에서 정기 작업을 시작하여 로컬에서 소스 스캔, 파싱 및 분석을 수행합니다. + +sites 필드 설명: + - url: 소스의 URL, 소스는 특정 기사 페이지가 아닌 기사 목록 페이지만 제공하면 됩니다. + - per_hours: 스캔 주기, 시간 단위, 정수 타입 (1~24 범위, 하루 한 번 이상 스캔하지 않는 것이 좋습니다. 즉, 24로 설정). + - activated: 활성화 여부. 비활성화하면 해당 소스는 무시되며, 비활성화 후 다시 활성화할 수 있습니다. 활성화 및 비활성화는 Docker 컨테이너를 재시작하지 않고도 가능하며, 다음 정기 작업 시 업데이트됩니다. + +### 6. 로컬 배포 + +보시다시피, 이 프로젝트는 최소한 7b\9b 크기의 LLM만 필요하며, 어떤 벡터 모델도 필요하지 않습니다. 이는 3090RTX (24G VRAM) 한 개만 있으면 이 프로젝트를 완전히 로컬에 배포할 수 있음을 의미합니다. + +로컬 배포 LLM 서비스가 OpenAI SDK와 호환되는지 확인하고, LLM_API_BASE를 설정하십시오. + +참고: 태그 설명에 대한 7b~9b 크기의 LLM이 정확히 이해하도록 하려면, 프롬프트 최적화를 위해 dspy를 사용하는 것이 좋지만, 이를 위해서는 약 50개의 수동 레이블 데이터가 필요합니다. 자세한 내용은 [DSPy](https://dspy-docs.vercel.app/)를 참조하십시오. + +## 🛡️ 라이선스 + +이 프로젝트는 [Apache2.0](LICENSE) 오픈소스로 제공됩니다. + +상업적 사용 및 맞춤형 협력을 원하시면 **Email: 35252986@qq.com**으로 연락해 주세요. + + - 상업적 고객은 저희에게 연락하여 등록해 주세요. 제품은 영원히 무료로 제공할 것을 약속합니다. + +## 📬 연락처 + +궁금한 점이나 제안 사항이 있으시면 [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://github.com/TeamWiseFlow/wiseflow +Licensed under Apache2.0 +``` diff --git a/compose.yaml b/compose.yaml index 2bb755d..5decf91 100755 --- a/compose.yaml +++ b/compose.yaml @@ -3,11 +3,6 @@ services: build: dockerfile: Dockerfile image: wiseflow:latest - # set following as you need - # environment: - # - TZ=Asia/Shanghai - # - LANG=zh_CN.UTF-8 - # - LC_ALL=zh_CN.UTF-8 tty: true stdin_open: true entrypoint: bash docker_entrypoint.sh diff --git a/core/backend.py b/core/backend.py index 59b7887..e424f39 100644 --- a/core/backend.py +++ b/core/backend.py @@ -35,7 +35,7 @@ class Request(BaseModel): @app.get("/") def read_root(): - msg = "Hello, this is Wise Union Backend, version 0.3.0" + msg = "Hello, this is Wise Union Backend, version 0.3.1" return {"msg": msg} diff --git a/core/insights/__init__.py b/core/insights/__init__.py index c13e35f..9da29ff 100644 --- a/core/insights/__init__.py +++ b/core/insights/__init__.py @@ -15,7 +15,10 @@ item_pattern = re.compile(r'(.*?)', re.DOTALL) url_pattern = re.compile(r'') summary_pattern = re.compile(r'', re.DOTALL) - +extensions = ('.pdf', '.docx', '.xlsx', '.doc', '.ppt', '.pptx', '.xls', '.txt', '.jpg', '.jpeg', '.png', '.gif', '.bmp', + '.tiff', '.mp4', '.avi', '.wmv', '.mkv', '.flv', '.wav', '.mp3', '.avi', '.mov', '.wmv', '.mpeg', '.mpg', + '.3gp', '.ogg', '.webm', '.m4a', '.aac', '.flac', '.wma', '.amr', '.ogg', '.m4v', '.m3u8', '.m3u', '.ts', + '.mts') expiration_days = 3 existing_urls = {url['url'] for url in pb.read(collection_name='articles', fields=['url']) if url['url']} @@ -25,6 +28,9 @@ async def pipeline(url: str, cache: Dict[str, str] = {}): while working_list: url = working_list.pop() existing_urls.add(url) + if any(url.endswith(ext) for ext in extensions): + logger.info(f"{url} is a file, skip") + continue logger.debug(f"start processing {url}") # get article process diff --git a/core/insights/get_info.py b/core/insights/get_info.py index 05f4456..e70b3aa 100644 --- a/core/insights/get_info.py +++ b/core/insights/get_info.py @@ -1,15 +1,14 @@ from llms.openai_wrapper import openai_llm # from llms.siliconflow_wrapper import sfa_llm import re -from utils.general_utils import get_logger_level +from utils.general_utils import get_logger_level, is_chinese from loguru import logger from utils.pb_api import PbTalker import os -import locale -get_info_model = os.environ.get("GET_INFO_MODEL", "gpt-3.5-turbo") -rewrite_model = os.environ.get("REWRITE_MODEL", "gpt-3.5-turbo") +get_info_model = os.environ.get("GET_INFO_MODEL", "gpt-4o-mini-2024-07-18") +rewrite_model = os.environ.get("REWRITE_MODEL", "gpt-4o-mini-2024-07-18") project_dir = os.environ.get("PROJECT_DIR", "") if project_dir: @@ -27,34 +26,58 @@ pb = PbTalker(logger) focus_data = pb.read(collection_name='tags', filter=f'activated=True') +if not focus_data: + logger.error('no activated tag found, please set at least one') + exit(1) + focus_list = [item["name"] for item in focus_data if item["name"]] focus_dict = {item["name"]: item["id"] for item in focus_data if item["name"]} +lang_term = ''.join([f'{item["name"]}{item["explaination"]}' for item in focus_data if item["name"]]) +focus_statement = '\n'.join([f'{item["name"]}{item["explaination"]}' for item in focus_data if item["name"] and item["explaination"]]) + +if is_chinese(lang_term): + if focus_statement: + system_prompt = f'''请仔细阅读用户输入的新闻内容,并根据所提供的类型标签列表进行分析。类型标签列表如下: +{focus_list} -sys_language, _ = locale.getdefaultlocale() +各标签的含义如下: +{focus_statement} -if sys_language == 'zh_CN': +如果新闻中包含上述任何类型的信息,请使用以下格式标记信息的类型标签,并提供仅包含时间、地点、人物和事件的一句话信息摘要: +类型名称仅包含时间、地点、人物和事件的一句话信息摘要 - system_prompt = f'''请仔细阅读用户输入的新闻内容,并根据所提供的类型列表进行分析。类型列表如下: +务必注意:1、严格忠于新闻原文,不得提供原文中不包含的信息;2、对于同一事件,仅选择一个最贴合的标签,不要重复输出;3、如果新闻中包含多个信息,请逐一分析并按一条一行的格式输出,如果新闻不涉及任何类型的信息,则直接输出:无。''' + else: + system_prompt = f'''请仔细阅读用户输入的新闻内容,并根据所提供的类型标签列表进行分析。类型标签列表如下: {focus_list} -如果新闻中包含上述任何类型的信息,请使用以下格式标记信息的类型,并提供仅包含时间、地点、人物和事件的一句话信息摘要: +如果新闻中包含上述任何类型的信息,请使用以下格式标记信息的类型标签,并提供仅包含时间、地点、人物和事件的一句话信息摘要: 类型名称仅包含时间、地点、人物和事件的一句话信息摘要 -如果新闻中包含多个信息,请逐一分析并按一条一行的格式输出,如果新闻不涉及任何类型的信息,则直接输出:无。 -务必注意:1、严格忠于新闻原文,不得提供原文中不包含的信息;2、对于同一事件,仅选择一个最贴合的tag,不要重复输出;3、仅用一句话做信息摘要,且仅包含时间、地点、人物和事件;4、严格遵循给定的格式输出。''' +务必注意:1、严格忠于新闻原文,不得提供原文中不包含的信息;2、对于同一事件,仅选择一个最贴合的标签,不要重复输出;3、如果新闻中包含多个信息,请逐一分析并按一条一行的格式输出,如果新闻不涉及任何类型的信息,则直接输出:无。''' rewrite_prompt = '''请综合给到的内容,提炼总结为一个新闻摘要。给到的内容会用XML标签分隔。请仅输出总结出的摘要,不要输出其他的信息。''' else: + if focus_statement: + system_prompt = f'''Please carefully read the news content provided by the user and analyze it according to the list of type labels given below: +{focus_list} + +The meanings of each label are as follows: +{focus_statement} + +If the news contains any information of the aforementioned types, please mark the type label of the information using the following format and provide a one-sentence summary containing only the time, location, people involved, and event: +TypeLabelA one-sentence summary containing only the time, location, people involved, and event - system_prompt = f'''Please carefully read the user-inputted news content and analyze it based on the provided list of categories: +Please be sure to: 1. Strictly adhere to the original text and do not provide information not contained in the original; 2. For the same event, choose only one most appropriate label and do not repeat the output; 3. If the news contains multiple pieces of information, analyze them one by one and output them in a one-line-per-item format. If the news does not involve any of the types of information, simply output: None.''' + else: + system_prompt = f'''Please carefully read the news content provided by the user and analyze it according to the list of type labels given below: {focus_list} -If the news contains any information related to the above categories, mark the type of information using the following format and provide a one-sentence summary containing only the time, location, who involved, and the event: -Category Name One-sentence summary including only time, location, who, and event. +If the news contains any information of the aforementioned types, please mark the type label of the information using the following format and provide a one-sentence summary containing only the time, location, people involved, and event: +TypeLabelA one-sentence summary containing only the time, location, people involved, and event -If the news includes multiple pieces of information, analyze each one separately and output them in a line-by-line format. If the news does not involve any of the listed categories, simply output: N/A. -Important guidelines to follow: 1) Adhere strictly to the original news content, do not provide information not contained in the original text; 2) For the same event, select only the most fitting tag, avoiding duplicate outputs; 3) Summarize using just one sentence, and limit it to time, location, who, and event only; 4) Strictly comply with the given output format.''' +Please be sure to: 1. Strictly adhere to the original text and do not provide information not contained in the original; 2. For the same event, choose only one most appropriate label and do not repeat the output; 3. If the news contains multiple pieces of information, analyze them one by one and output them in a one-line-per-item format. If the news does not involve any of the types of information, simply output: None.''' rewrite_prompt = "Please synthesize the content provided, which will be segmented by XML tags, into a news summary. Output only the summarized abstract without including any additional information." @@ -68,7 +91,7 @@ def get_info(article_content: str) -> list[dict]: texts = result.split('') texts = [_.strip() for _ in texts if '' in _.strip()] if not texts: - logger.info(f'can not find info, llm result:\n{result}') + logger.debug(f'can not find info, llm result:\n{result}') return [] cache = [] diff --git a/core/llms/openai_wrapper.py b/core/llms/openai_wrapper.py index b22481e..9dfb39b 100644 --- a/core/llms/openai_wrapper.py +++ b/core/llms/openai_wrapper.py @@ -1,18 +1,23 @@ import os from openai import OpenAI +from openai import RateLimitError +import time base_url = os.environ.get('LLM_API_BASE', "") token = os.environ.get('LLM_API_KEY', "") -if token: - client = OpenAI(api_key=token, base_url=base_url) -else: +if not base_url and not token: + raise ValueError("LLM_API_BASE or LLM_API_KEY must be set") +elif base_url and not token: client = OpenAI(base_url=base_url) +elif not base_url and token: + client = OpenAI(api_key=token) +else: + client = OpenAI(api_key=token, base_url=base_url) def openai_llm(messages: list, model: str, logger=None, **kwargs) -> str: - if logger: logger.debug(f'messages:\n {messages}') logger.debug(f'model: {model}') @@ -20,7 +25,13 @@ def openai_llm(messages: list, model: str, logger=None, **kwargs) -> str: try: response = client.chat.completions.create(messages=messages, model=model, **kwargs) - + except RateLimitError as e: + logger.warning(f'{e}\nRetrying in 60 second...') + time.sleep(60) + response = client.chat.completions.create(messages=messages, model=model, **kwargs) + if 'choices' not in response: + logger.warning(f'openai_llm warning: {response}') + return "" except Exception as e: if logger: logger.error(f'openai_llm error: {e}') diff --git a/core/pb/pb_migrations/1725263585_updated_tags.js b/core/pb/pb_migrations/1725263585_updated_tags.js new file mode 100644 index 0000000..fb293e2 --- /dev/null +++ b/core/pb/pb_migrations/1725263585_updated_tags.js @@ -0,0 +1,31 @@ +/// +migrate((db) => { + const dao = new Dao(db) + const collection = dao.findCollectionByNameOrId("nvf6k0yoiclmytu") + + // add + collection.schema.addField(new SchemaField({ + "system": false, + "id": "vkgtujiz", + "name": "explaination", + "type": "text", + "required": false, + "presentable": false, + "unique": false, + "options": { + "min": null, + "max": null, + "pattern": "" + } + })) + + return dao.saveCollection(collection) +}, (db) => { + const dao = new Dao(db) + const collection = dao.findCollectionByNameOrId("nvf6k0yoiclmytu") + + // remove + collection.schema.removeField("vkgtujiz") + + return dao.saveCollection(collection) +}) diff --git a/core/scrapers/general_crawler.py b/core/scrapers/general_crawler.py index b662db7..46766e8 100644 --- a/core/scrapers/general_crawler.py +++ b/core/scrapers/general_crawler.py @@ -23,7 +23,7 @@ from scrapers import scraper_map -model = os.environ.get('HTML_PARSE_MODEL', 'gpt-3.5-turbo') +model = os.environ.get('HTML_PARSE_MODEL', 'gpt-4o-mini-2024-07-18') header = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/604.1 Edg/112.0.100.0'} extractor = GeneralNewsExtractor() @@ -205,7 +205,7 @@ async def general_crawler(url: str, logger) -> tuple[int, Union[set, dict]]: result["author"] = "" # 5. post process - date_str = extract_and_convert_dates(result['publish_time']) + date_str = extract_and_convert_dates(result.get('publish_time', '')) if date_str: result['publish_time'] = date_str else: diff --git a/core/scrapers/mp_crawler.py b/core/scrapers/mp_crawler.py index c4b5b6c..f7d666c 100644 --- a/core/scrapers/mp_crawler.py +++ b/core/scrapers/mp_crawler.py @@ -38,7 +38,13 @@ async def mp_crawler(url: str, logger) -> tuple[int, Union[set, dict]]: if url.startswith('https://mp.weixin.qq.com/mp/appmsgalbum'): # 文章目录 urls = {li.attrs['data-link'].replace("http://", "https://", 1) for li in soup.find_all('li', class_='album__list-item')} - return 1, set(urls) + simple_urls = set() + for url in urls: + cut_off_point = url.find('chksm=') + if cut_off_point != -1: + url = url[:cut_off_point - 1] + simple_urls.add(url) + return 1, simple_urls # Get the original release date first pattern = r"var createTime = '(\d{4}-\d{2}-\d{2}) \d{2}:\d{2}'" diff --git a/env_sample b/env_sample index fba9471..db77214 100755 --- a/env_sample +++ b/env_sample @@ -1,9 +1,9 @@ export LLM_API_KEY="" export LLM_API_BASE="https://api.siliconflow.cn/v1" ##for local model services or calling non-OpenAI services with openai_wrapper ##strongly recommended to use the following model provided by siliconflow (consider both effect and price) -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 GET_INFO_MODEL="THUDM/glm-4-9b-chat" ## +export REWRITE_MODEL="Qwen/Qwen2-7B-Instruct" +export HTML_PARSE_MODEL="aQwen/Qwen2-7B-Instruct" export PROJECT_DIR="work_dir" export PB_API_AUTH="test@example.com|1234567890" # export "PB_API_BASE"="" ##only use if your pb not run on 127.0.0.1:8090 diff --git a/version b/version index 268b033..937cd78 100644 --- a/version +++ b/version @@ -1 +1 @@ -v0.3.0 +v0.3.1