数据分析的痛点与解决方案 在当今数据驱动的企业环境中,一个常见场景是:业务分析师急需某项数据分析,但必须等待懂SQL的技术团队成员提供支持。根据McKinsey的一项研究,分析师平均花费30-40%的时间仅用于数据准备和查询构建。这种依赖不仅延迟决策过程,还增加了技术团队的工作负担。 这就是为什么我开发了CAMEL DatabaseAgent — 一个革命性的开源工具,它能够让任何人通过自然语言与数据库对话,就像与同事交流一样简单。无需编写一行SQL代码,分析师可以直接获取他们需要的数据洞察。 CAMEL DatabaseAgent的核心优势 相比市场上其他文本到SQL工具,CAMEL DatabaseAgent具有以下显著优势: 完全开源:透明的代码和社区驱动的开发确保了持续改进和定制灵活性 多语言支持:能够理解和响应包括中文、英文、韩文在内的多种语言查询 自动数据库理解:分析数据库结构并生成适当的少样本学习示例 只读模式:默认安全操作,保护数据库不被意外修改 简单集成:易于与现有系统和工作流程集成 技术架构:它是如何工作的 CAMEL DatabaseAgent建立在CAMEL-AI之上,由三个核心组件构成: DataQueryInferencePipeline:这个智能组件分析你的数据库结构并自动生成训练示例,包括问题和对应的SQL查询。它使用了先进的推理技术来理解表之间的关系和数据的语义。 DatabaseKnowledge:一个专门设计的向量数据库,用于高效存储和检索数据库模式、样本数据和查询模式。这个组件使系统能够快速"回忆"相关的数据库知识来回答用户问题。 DatabaseAgent:基于大语言模型(LLM)的智能代理,它接收自然语言问题,利用DatabaseKnowledge生成精确的SQL查询,执行查询,并以用户友好的格式返回结果。 支持的数据库系统包括: SQLite MySQL PostgreSQL 所有操作默认在只读模式下进行,确保数据安全。 实际应用案例:从简单到复杂 我在一个音乐分发平台的真实数据库上测试了这个工具,结果令人印象深刻。以下是按复杂度递增的几个应用场景: 基础查询 当我问"查找包含超过10首曲目的播放列表名称"时,系统立即生成了正确的SQL: 系统能够理解简单的筛选和计数需求 中等复杂度查询 场景一: 统计特定时间段内的销售数据 系统成功处理了多表连接和时间范围筛选 场景二: 按类别分组的财务分析 系统能够理解分组、聚合和复杂的表关系 高级分析查询 场景三: 性能排名分析 系统处理了多表连接、排序和限制条件 场景四: 条件筛选和计数 系统能够使用子查询和复杂条件 场景五: 百分比计算 系统能够执行数学计算和条件计数 场景六: 复杂关联分析 系统能处理左连接和空值情况 突破语言障碍:多语言支持 在全球化团队环境中,语言障碍常常是数据协作的瓶颈。CAMEL DatabaseAgent支持多语言交互,让来自不同语言背景的团队成员都能使用自己的母语训练知识并进行数据查询。 使用中文训练知识并提问 系统同样支持韩文等其他语言,而你要做的只是在连接数据库的时候指定语言 入门指南:5分钟上手 想要尝试CAMEL DatabaseAgent?只需几个简单步骤: # 1. 克隆仓库 git clone git@github.com:coolbeevip/camel-database-agent.git cd camel-database-agent # 2. 设置环境 pip install uv ruff mypy uv venv .
Read moreTypes Zero-Shot Learning One-Shot Learning Few-Shot Learning Chain-of-Thought Prompting Iterative Prompting Negative Prompting Hybrid Prompting Prompt Chaining Consistency Prompting Knowledge Prompting Tree of Thoughts(ToT) ReAct Prompting Directional Stimulus Prompting Zero-Show Learning 在没有任何示例的情况下给人工智能一个任务。假设人工智能事先不知道任务,你可以详细描述你想要什么。 Prompt: “请解释什么是大语言模型” GPT 3.5 Response: 大语言模型是一种基于深度学习技术的人工智能模型,旨在生成自然语言文本。这类模型通常具有非常大的神经网络结构和参数数量,可以对大规模的语料库进行训练,并尝试预测下一个单词或句子的可能性。大语言模型已经被广泛应用于自然语言处理、机器翻译、自动文摘、语音识别等领域,在提高计算机语言理解和生成能力方面起到了重要的作用。常见的大语言模型包括BERT、GPT-2、ELMo等 One-Shot Learning 您随提示提供了一个示例。这有助于人工智能理解您期望的上下文或格式。 Prompt: “人工智能中的基础模型是指像 GPT-3 这样的模型、 这样的模型,它在大型数据集上经过训练,可适用于各种任务。 在这种情况下,请解释什么是 BERT” GPT 3.5 Response: BERT(Bidirectional Encoder Representations from Transformers)是一种基于变形器(Transformer)结构的自然语言处理(NLP)模型,它是由Google开发的,可以进行预训练和微调。BERT的主要功能是用来处理自然语言理解任务,例如问答、语义理解、文本分类等。不同于传统的自然语言处理模型,BERT采用了双向的上下文理解技术,可以更好地理解和适应语言上下文。BERT在大型数据集上进行预训练,可以得到更为优秀的模型表现,在各种自然语言处理任务上具有很高的精度和普适性。 Few-Shot Learning 提供一些示例(通常是 2-5 个)来帮助 AI 理解您正在寻找的响应的模式或风格。 Prompt: “GPT-3 等基础模型用于自然语言处理,而 DALL-E 等模型用于图像生成。基础模型如何应用于机器人领域?” GPT 3.5 Response:
Read more1. Requirements python >= 3.9 pip install beautifulsoup4 2. Create a python script get_latest_info_from_github_repos.py import requests from bs4 import BeautifulSoup urls = [ "https://github.com/geoserver/geoserver", "https://github.com/Leaflet/Leaflet", "https://github.com/Turfjs/turf/" ] def get_latest_version(url) -> tuple: url = url + "/releases/latest" response = requests.get(url) if response.status_code != 200: raise Exception(f'Request failed with status {response.status_code}') soup = BeautifulSoup(response.text, 'html.parser') version = soup.find('span', {'class': 'css-truncate-target'}).get_text(strip=True) datetime = soup.find('relative-time').get("datetime") return version, datetime for url in urls: version = "UNKNOWN" datetime = "UNKNOWN" try: version, datetime = get_latest_version(url) except Exception as e: pass print(f'{url},{version},{datetime[0:10]}') 3.
Read more使用 git filter-branch –commit-filter 重写历史记录可能会导致数据丢失。这个命令允许你在Git存储库的历史记录中进行修改,应用一个自定义的 commit 过滤器。当你使用这个命令时,请务必小心操作,因为它会改变存储库的历史记录。 在执行前,建议先进行备份,以确保你有一个完好的历史记录备份。另外,这个命令可能会导致一些副作用,如更改提交哈希值、移除或合并提交、删除部分文件等。 因此,在执行 git filter-branch 之前,请确保你已经理解了它的工作原理,并且在执行前考虑了潜在的风险。如果你不确定自己在做什么,建议先创建一个分支进行实验,以避免意外破坏存储库的历史记录。 删除 README.md 和 docs/docker_build.md 两个文件,并清理所有产生的提交 git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch README.md docs/docker_build.md' --prune-empty --tag-name-filter cat -- --all 删除指定编号的提交信息 使用 git log --oneline 命令查询到要删除提交 git log --oneline | grep Update ed2e2a7 [feat]:[][Update docs/场景梳理.xlsx] 2a919eb [feat]:[][Update docs/场景梳理.xlsx] 记录要删除的提交短 ID 到以下脚本的 DEL_COMMIT_IDS=['ed2e2a7','a919eb'] 位置 git filter-branch --force --commit-filter 'DEL_COMMIT_IDS=['ed2e2a7','a919eb']; if [[ $DEL_COMMIT_IDS =~ ${GIT_COMMIT:0:7} ]]; then skip_commit "$@"; else git commit-tree "$@"; fi' HEAD 执行后可以看到 Ref 'refs/heads/master' was rewritten 表示已经重写了历史记录,然后再用 git log --oneline 查看可以看到已经删除
Apache NiFi Schema Apache NiFi是一个易于使用、功能强大且可靠的数据处理和分发系统。它采用基于组件的方式设计数据流。 在NiFi终端界面,用户通过界面拖动组件建立和维护数据流。 术语 Processor 处理器是NiFi的基本组件,负责创建、发送、接收、转换、过滤、分割和处理数据。NiFi的数据流是由处理器连接起来的。处理器有一组属性,可以根据需要进行配置。 Name: Processor 的名称,用于在数据流图中识别 Processor。 Scheduling Strategy: 确定 Processor 是应根据时间间隔(Timer Driven)运行,还是应根据事件触发(Event Driven)运行。 Concurrent tasks: 这是可以同时执行的任务数。这允许并行处理,可以提高处理效能。 Comments: 可以在此处添加任何有关 Processor 的额外信息或注释。 Yield Duration: 当 Processor 无法进行处理时(例如,输出连接的队列已满),它将“退避(Yield)”,过一段时间再试。该属性定义了退避的持续时间。 Penalization Duration: 如果 Processor出现错误,将对其进行“惩罚”,使其在一段时间内无法处理任何FlowFile。这项属性决定了这段时间的长度。 Connection 在 Apache NiFi 中,connection 是流程图中两个处理器或者一个处理器与一个转换器之间传递数据的关键部分。以下是 connection 的一些典型属性(schema): Name: 连接的名称,便于在数据流图中明确识别连接。 Source: 连接的源处理器。连接从此处开始,将源处理器的输出数据传递到目标处理器。 Destination: 连接的目标处理器,它接收源处理器的输出数据。 Back Pressure Object Threshold: 这是队列中元素的数量,一旦超过该数量,源处理器将停止生产数据。 Back Pressure Data Size Threshold: 这是队列容量,一旦超过这个容量,源处理器将停止生产数据。 Prioritizers: 如果队列中包含多个元素,优先级器确定应首先处理哪一项。 Expiration: FlowFile在队列中能存活的最长时间。 FlowFile Apache NiFi 中的 FlowFile 是一个数据记录或对象,它包含两部分,数据内容和属性。以下是一些 FlowFile 相关的重要概念和可能的 Schema :
Read more官方网站 https://github.com/nvm-sh/nvm/ 安装 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.4/install.sh | bash 使用 查看远程可用版本 nvm ls-remote 安装 nvm install 14.21.3 切换 nvm use 14.21.3
AWS Lightsail 配合 Cloudflare WARP,使 Griseo 在远程主机通过命令行使用 ChatGPT 背景 你可以使用 curl ipinfo.io 命令查看你的 IP 地址,通常 AWS 服务器的 org 会显示 Amazon.com, 此时你是无法访问 chat.openai.com 的。我们需要使用 Cloudflare 让被访问网站认为访问来自于“原生IP” curl ipinfo.io { "ip": "xxxx", "hostname": "xxxx", "city": "Tokyo", "region": "Tokyo", "country": "JP", "loc": "xxx", "org": "XXXX Amazon.com, Inc.", "postal": "xxx-xxxx", "timezone": "Asia/Tokyo", "readme": "https://ipinfo.io/missingauth" } Cloudflare Warp 代理模式 通过在服务器本机启动一个 SOCKS5 代理,然后把需要的流量转发到这个代理上 安装软件包 以 Debian 举例,添加安装源 sudo apt install curl curl https://pkg.cloudflareclient.com/pubkey.gpg | gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.
Read more下载安装程序脚本 curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh chmod +x openvpn-install.sh 执行安装 执行安装脚本,端口建议改为 443(你所在的局域网客户端通常不会阻止 443 出口) $ ./openvpn-install.sh Welcome to the OpenVPN installer! The git repository is available at: https://github.com/angristan/openvpn-install I need to ask you a few questions before starting the setup. You can leave the default options and just press enter if you are ok with them. I need to know the IPv4 address of the network interface you want OpenVPN listening to. Unless your server is behind NAT, it should be your public IPv4 address.
Read moreLinux CRON 命令 CREATE A CRON SCRIPT TO CLEAN Edit the /opt/daily-clean.sh file #!/bin/bash # docker docker system prune -f docker builder prune -f docker volume prune -f # /home/puaiuc/ find /home/puaiuc/ -maxdepth 1 -type f \( -iname "*" ! -iname ".*" \) -delete Now give the file executable permission chmod a+x /opt/daily-clean.sh Edit the crontab file to schedule it crontab -e In our case, we have scheduled it to every day at the start of the day
Read more使用 pyenv 可以很灵活的配置版本环境 环境说明 我的 macbook 上默认已经安装了 python3,但是我还需要一个 python2 环境编译一些老的项目 python3 --version Python 3.11.2 安装 安装 pyenv $ brew install pyenv 允许在 bash 中启用 pyenv $ eval "$(pyenv init -)" 使用 一旦你安装了pyenv并激活了它,你可以安装不同版本的python并选择你可以使用的版本。 $ pyenv install 2.7.18 你可以用以下命令检查安装的版本 $ pyenv versions 你可以使用如下命令切换全局版本 $ pyenv global 3.3.1 你可以使用如下命令在当前目录设置版本 $ pyenv local 3.5.2 你能够运行以下命令检查版本 $ python --version Python 2.7.18