从ai产品推荐到利用cursor快速掌握一个开源项目再到langchain手搓一个Text2Sql agent

目录

0. 经验分享:产品推荐

1. 经验分享:提示词优化

2. 经验分享:使用cursor 阅读一篇文章 

3. 经验分享:使用cursor 阅读一个完全陌生的开源项目

4. 经验分享:手搓一个text2sql agent (使用langchain langgraph)


0. 经验分享:产品推荐

ai 产品

360ai 浏览器

https://www.perplexity.ai/onboarding?redirect=https%3A%2F%2Fwww.perplexity.ai%2F%3Flogin-source%3DoneTapHome

秘塔AI搜索

ima.copilot-腾讯智能工作台

https://deepseek.com      -→ 揭秘DeepSeek:一个更极致的中国技术理想主义故事

ai 导航站

极客时间 AI 指南

ai 学习材料

https://github.com/anthropics
大语言模型(LLM)学习路径和资料汇总 · Issue #97 · ninehills/blog · GitHub

Docs

动手实战人工智能 AI By Doing — 动手实战人工智能 AI By Doing

agent平台

code

dify

fastgpt

发展趋势:

pc-agent

GLM-PC

mobile-agent

Mobile-Agent-E: Self-Evolving Mobile Assistant for Complex Tasks

检测论文是否由ai 生成: GitHub - Jiaqi-Chen-00/ImBD: [AAAI 2025] Official repository of Imitate Before Detect: Aligning Machine Stylistic Preference for Machine-Revised Text Detection

写小说   GitHub - nicekate/Al-StoryLab: AI-StoryLab 是一款基于 Next.js 的智能故事创作平台,集成音频制作与 AI 绘图提示词生成功能。  

             GitHub - Aria-Zhangjl/StoryWeaver: [AAAI 2025] StoryWeaver: A Unified World Model for Knowledge-Enhanced Story Character Customization

漫画生成: GitHub - jianzongwu/DiffSensei: Implementation of "DiffSensei: Bridging Multi-Modal LLMs and Diffusion Models for Customized Manga Generation"

社交: GitHub - langchain-ai/social-media-agent: 📲 An agent for sourcing, curating, and scheduling social media posts with human-in-the-loop.

            https://github.com/whotto/Video_note_generator

电影视频:  https://github.com/linyqh/NarratoAI
 

                   https://github.com/Huanshere/VideoLingo/blob/main/i18n/README.zh.md

数字人: https://github.com/modstart-lib/aigcpanel

教育方向: GitHub - taoofagi/easegen-front: Easegen is an open-source digital human course creation platform offering comprehensive solutions from course production and video management to intelligent quiz generation.Easegen 是一个开源的数字人课程制作平台,提供从课程制作、视频管理到智能出题的全方位解决方案。


1. 经验分享:提示词优化

a.search in english, reponse use chinese ;

b.思维链 )

李继刚:Prompt的道与术

总结:没什么用


2. 经验分享:使用cursor 阅读一篇文章 

1.安装markmap插件

2.提示词: @http://xxx 阅读文章帮我,使用md 格式生产思维导图

效果如下:


3. 经验分享:使用cursor 阅读一个完全陌生的开源项目

1.安装plantUml 插件

2. 提示词:

     @codebase 使用plantUml格式,帮我生成这个项目的架构图

     @codebase 帮我生成xxx 的流程图

     @codebase 帮我写一篇关于roo  Cline 系统提示词分析

     

以roo-code插件项目为例  为例: GitHub - RooVetGit/Roo-Code: Roo Code (prev. Roo Cline) is a VS Code plugin that enhances coding with AI-powered automation, multi-model support, and experimental features


4. 经验分享:手搓一个text2sql agent (使用langchain langgraph)

import os
from typing import Dict, Any, List
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
from langchain_community.utilities import SQLDatabase
from dotenv import load_dotenv
import pymysql
from sqlalchemy import create_engine, text

# 加载环境变量
load_dotenv()

class MySQLChainDemo:
    """MySQL Chain 演示类"""

    def __init__(self, database: str = None):
        """
        初始化 MySQL Chain 演示实例
        
        Args:
            database: 数据库名称,如果不指定则使用环境变量中的配置
        """
        self.llm = ChatOpenAI(
            model="deepseek-chat",
            openai_api_key=os.getenv("LLM_API_KEY"),
            base_url=os.getenv("LLM_BASE_URL")
        )
        
        # 使用传入的数据库名或环境变量中的配置
        self.database = database or os.getenv("MYSQL_DATABASE", "stock")
        
        # 创建数据库连接
        db_url = (f"mysql+pymysql://{os.getenv('MYSQL_USER')}:{os.getenv('MYSQL_PASSWORD')}"
                 f"@{os.getenv('MYSQL_HOST')}:{os.getenv('MYSQL_PORT')}/{self.database}")
        
        self.engine = create_engine(db_url)
        self.db = SQLDatabase(engine=self.engine)

    def get_tables_info(self) -> str:
        """获取所有表的信息"""
        try:
            with self.engine.connect() as conn:
                # 获取所有表名
                tables = conn.execute(text("SHOW TABLES")).fetchall()
                tables = [table[0] for table in tables]
                
                tables_info = [f"当前数据库: {self.database}"]
                for table in tables:
                    # 获取表结构
                    columns = conn.execute(text(f"DESCRIBE `{table}`")).fetchall()
                    columns_info = [f"{col[0]} ({col[1]})" for col in columns]
                    
                    tables_info.append(f"\n表名: {table}")
                    tables_info.append("列: " + ", ".join(columns_info))
                
                return "\n".join(tables_info)
        except Exception as e:
            return f"获取表信息失败: {str(e)}"

    def execute_query(self, question: str) -> str:
        """执行自然语言查询"""
        try:
            # 创建提示模板
            prompt = ChatPromptTemplate.from_messages([
                ("system", """你是一个MySQL专家,请将用户的自然语言问题转换为可执行的MySQL查询语句。

当前数据库环境:
数据库名称: {database}

数据库表结构如下:
{tables_info}

规则:
1. 只返回一个MySQL查询语句
2. 不要包含任何注释或额外说明
3. 不要使用markdown格式
4. 使用反引号(`)包裹表名和列名
5. 确保SQL语法正确
6. 查询information_schema时使用当前数据库名称

示例:
问题:数据库中有哪些表?
返回:SELECT TABLE_NAME as table_name FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '{database}';

问题:查询用户表有多少条记录?
返回:SELECT COUNT(*) as total FROM `users`;
"""),
                ("human", "{question}")
            ])
            
            # 获取表信息
            tables_info = self.get_tables_info()
            
            # 生成SQL
            chain = prompt | self.llm | StrOutputParser()
            sql = chain.invoke({
                "question": question,
                "tables_info": tables_info,
                "database": self.database
            }).strip()
            
            # 执行SQL
            with self.engine.connect() as conn:
                result = conn.execute(text(sql))
                rows = result.fetchall()
                
                if not rows:
                    return f"SQL查询: {sql}\n\n查询结果: 无数据"
                
                # 格式化结果
                columns = result.keys()
                results = []
                for row in rows:
                    result_dict = dict(zip(columns, row))
                    results.append(str(result_dict))
                
                return f"SQL查询: {sql}\n\n查询结果:\n" + "\n".join(results)
                
        except Exception as e:
            return f"查询执行失败: {str(e)}\nSQL: {sql if 'sql' in locals() else '未生成'}"

def main():
    """主函数"""
    # 可以指定数据库名称,或使用默认值
    demo = MySQLChainDemo()  # 使用默认的 stock 数据库
    # demo = MySQLChainDemo(database="other_db")  # 使用指定的数据库
    
    # 测试查询
    test_queries = [
        "数据库中有哪些表?",
        "查询t_stock_min_trade表中最新的交易时间",
        "查询t_stock_min_trade表中股票代码为000001的最近3条记录",
        "统计t_stock_min_trade表中有多少个不同的股票代码"
    ]
    
    for query in test_queries:
        print(f"\n问题: {query}")
        result = demo.execute_query(query)
        print(result)
        print("-" * 50)

if __name__ == "__main__":
    main() 


涉及到到细节的代码和roo code 源码分析见github:
https://github.com/caicongyang/ai-agent-demo.git
https://github.com/caicongyang/mini-cline.git

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/959981.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《STL基础之hashtable》

【hashtable导读】STL为大家提供了丰富的容器,hashtable也是值得大家学习和掌握的基础容器,而且面试官经常会把它和hashmap混在一起,让同学们做下区分。因此关于hashtable的一些特性,比如:底层的数据结构、插入、查找元…

本地大模型编程实战(02)语义检索(2)

文章目录 准备按批次嵌入加载csv文件,分割文档并嵌入测试嵌入效果总结代码 上一篇文章: 本地大模型编程实战(02)语义检索(1) 详细介绍了如何使用 langchain 实现语义检索,为了演示方便,使用的是 langchain 提供的内存数据库。 在实…

猿人学第一题 js混淆源码乱码

首先检查刷新网络可知,m参数被加密,这是一个ajax请求 那么我们直接去定位该路径 定位成功 观察堆栈之后可以分析出来这应该是一个混淆,我们放到解码平台去还原一下 window["url"] "/api/match/1";request function…

Dev-C++分辨率低-解决办法

目录 【工具】Dev-C分辨率低-解决办法问题背景完整操作指南第一步:打开属性设置 【工具】Dev-C分辨率低-解决办法 问题背景 Dev-C因版本老旧(长期未更新),在高分辨率显示器上存在界面模糊问题。通过修改Windows兼容性设置可优化…

Linux 小火车

1.添加epel软件源 2.安装sl 3. 安装完成后输入: sl

iic、spi以及uart

何为总线? 连接多个部件的信息传输线,是部件共享的传输介质 总线的作用? 实现数据传输,即模块之间的通信 总线如何分类? 根据总线连接的外设属于内部外设还是外部外设将总线可以分为片内总线和片外总线 可分为数…

Linux_线程控制

线程控制的相关接口 进程创建相关 之前我们已经认识到了pthread_create函数用来创建线程&#xff0c;这里不再赘述。 pthread_self函数 void* routine(void* args) {std::cout << "我是新线程..." << pthread_self() << std::endl;return null…

利用双指针一次遍历实现”找到“并”删除“单链表倒数第K个节点(力扣题目为例)

Problem: 19. 删除链表的倒数第 N 个结点 文章目录 题目描述思路复杂度Code 题目描述 思路 1.欲找到倒数第k个节点&#xff0c;即是找到正数的第n-k1、其中n为单链表中节点的个数个节点。 2.为实现只遍历一次单链表&#xff0c;我们先可以使一个指针p1指向链表头部再让其先走k步…

Ubuntu-手动安装 SBT

文章目录 前言Ubuntu-手动安装 SBT1. SBT是什么?1.1. SBT 的特点1.2. SBT 的基本功能1.3. SBT 的常用命令 2. 安装2.1. 下载2.2. 解压 sbt 二进制包2.3. 确认 sbt 可执行文件的位置2.4. 设置执行权限2.5. 创建符号链接2.6. 更新 PATH 环境变量2.7. 验证 sbt 安装 前言 如果您觉…

【ProtoBuf 安装】ProtoBuf在window/Linux下的安装 创建/删除swap分区

文章目录 1.ProtoBuf在window下的安装2.ProtoBuf在Linux下的安装创建swap分区命令解析关闭swap分区删除swap分区的影响 1.ProtoBuf在window下的安装 1、下载ProtoBuf编译器 下载地址&#xff1a;https://github.com/protocolbuffers/protobuf/releases 如果要在 C 下使用 Pro…

BAHD酰基转移酶对紫草素的手性催化-文献精读105

Two BAHD Acyltransferases Catalyze the Last Step in the Shikonin/Alkannin Biosynthetic Pathway 两个BAHD酰基转移酶催化了紫草素/左旋紫草素生物合成途径中的最后一步 一个BAHD酰基转移酶专门催化紫草素的酰基化&#xff0c;而另一个BAHD酰基转移酶则仅催化紫草素的对映…

C语言初阶力扣刷题——349. 两个数组的交集【难度:简单】

1. 题目描述 力扣在线OJ题目 给定两个数组&#xff0c;编写一个函数来计算它们的交集。 示例&#xff1a; 输入&#xff1a;nums1 [1,2,2,1], nums2 [2,2] 输出&#xff1a;[2] 输入&#xff1a;nums1 [4,9,5], nums2 [9,4,9,8,4] 输出&#xff1a;[9,4] 2. 思路 直接暴力…

在Docker 容器中安装 Oracle 19c

在 Docker 容器中安装 Oracle 19c 是可行的&#xff0c;但它相较于其他数据库&#xff08;如 MySQL、PostgreSQL 等&#xff09;会复杂一些&#xff0c;因为 Oracle 数据库有一些特定的要求&#xff0c;如操作系统和库的依赖&#xff0c;以及许可证问题。 不过&#xff0c;Ora…

WGCLOUD使用介绍 - 如何监控ActiveMQ和RabbitMQ

根据WGCLOUD官网的信息&#xff0c;目前没有针对ActiveMQ和RabbitMQ这两个组件专门做适配 不过可以使用WGCLOUD已经具备的通用监测模块&#xff1a;进程监测、端口监测或者日志监测、接口监测 来对这两个组件进行监控

初学stm32 --- FreeRTOS移植

目录 移植前准备 1. 基础工程 2. FreeRTOS 源码 添加 FreeRTOS 文件 1. 添加 FreeRTOS 源码 2. 将文件添加到工程 3. 添加头文件路径 4. 添加 FreeRTOSConfig.h 文件 (1) FreeRTOSConfig.h 获取途径一 (2) FreeRTOSConfig.h 获取途径二 (3) FreeRTOSConfig.h 获取途径…

ThreadLocal概述、解决SimpleDateFormat出现的异常、内存泄漏、弱引用、remove方法

①. ThreadLocal简介 ①. ThreadLocal是什么 ①. ThreadLocal本地线程变量,线程自带的变量副本(实现了每一个线程副本都有一个专属的本地变量,主要解决的就是让每一个线程绑定自己的值,自己用自己的,不跟别人争抢。通过使用get()和set()方法,获取默认值或将其值更改为当前线程…

【2024年 CSDN博客之星】我的2024年创作之旅:从C语言到人工智能,个人成长与突破的全景回顾

我的2024年创作之旅&#xff1a;从C语言到人工智能&#xff0c;个人成长与突破的全景回顾 引言 回望2024年&#xff0c;我不仅收获了技术上的成长&#xff0c;更收获了来自CSDN平台上无数粉丝、朋友以及网友们的支持与鼓励。在这条创作之路上&#xff0c;CSDN不仅是我展示技术成…

Windows11恢复传统右键菜单

Windows11恢复传统右键菜单 执行下面的命令(管理员下) reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /vetaskkill /f /im explorer.exestart explorer.exe或者 reg add "HKCU\Software\Classes\CLSID\{8…

PCIE模式配置

对于VU系列FPGA&#xff0c;当DMA/Bridge Subsystem for PCI Express IP配置为Bridge模式时&#xff0c;等同于K7系列中的AXI Memory Mapped To PCI Express IP。

WPS数据分析000008

目录 一、替换 通配符 求出橙色底纹单元格的和 二、定位 拆分并填充内容 删除空行 一、替换 快捷键ctrlh 注意&#xff1a;限制数据区域。 若为单元格&#xff0c;表示选择整个工作表。 通配符 求出橙色底纹单元格的和 第一步&#xff1a;查找出橙色单元格&#xff0c;c…