号称史上最强AI的Google Gemini,通过大语言模型的帮助如何实现智能交互?

导读:

本文旨在探索一条创新的路径,即通过利用Google的Gemini Flash而非广为人知的LangChain,来实现与CSV文件的智能交互。本文将构建一个简单的CSV解释器,利用大型语言模型(LLM)来生成代码并解析数据,并通过Streamlit打造直观的用户界面。这一实践不仅展示了技术的灵活应用,还强调了简化开发流程的重要性。©️【深蓝AI】

在当今AI工具日新月异的环境中,LangChain(LLM编程框架)、LangGraph、LlamaIndex和CrewAI等工具层出不穷。尽管这些工具各有千秋,但对于开发者而言,学习曲线往往陡峭,尤其是当真正想要构建项目而非仅仅跟风学习这些库时。LangChain固然强大,但其复杂的文档可能会让使用者感到困惑。对于简单的项目而言,LangChain或许并非首选,保持“KISS”(Keep it simple stupid)原则显得尤为重要。

虽然这些工具可能并不如描述中那般难以驾驭,但建议先尝试实现一些基础功能,再根据需求转向更高级的工具。

自2022年11月以来,AI领域的发展日新月异,尤其是GPT-4o和Gemini更新的接连推出。

在这里插入图片描述

GPT-4o的“Sky”语音在演示中引发了巨大反响,掀起了AI行业的新一轮热潮,甚至在一定程度上掩盖了Google I/O大会上Gemini的光芒。诚然,GPT始终走在其他LLM的前列,但对于构建最小可行产品(MVP)和个人项目而言,Gemini为开发者带来了福音,其免费层级允许访问API和最新模型,且每分钟请求限制为15次,相当友好。

ChatGPT的免费版本虽已允许用户上传文件,但仍无法在没有代码解释器的情况下直接解析CSV或Excel数据。因此,为了测试Gemini Flash的功能,本项目构建了一个CSV解释器。市面上不乏使用Langchain创建CSV解释器的教程,但本项目将从头开始构建,以更易于理解的方式呈现,尤其适合初学者。

1. Pipeline设计

图|CSV解释器pipeline©️【深蓝AI】

本项目的核心在于利用LLM的能力自动生成代码。首先为LLM提供数据集的关键信息,如通过head(), describe(), columns(), 和 dtypes等方法获取的基本描述,以此作为生成代码的基础。随后,将生成的代码与用户的具体查询相结合,旨在提升用户与系统的交互体验,使结果更加贴近用户的实际需求。

本项目分为两大阶段:

  • 代码生成阶段:此阶段聚焦于利用LLM的生成能力,基于数据集的元数据信息,自动生成相应的pandas命令或代码片段。
    加粗样式
  • 结果整合与对话优化阶段:在代码生成后,将这些代码的输出与用户的具体查询紧密结合,通过转换代码输出为自然语言的方式,改善用户与系统之间的对话体验,使结果更加直观易懂。

在设计prompt时,需要注意以下几点:

清晰明确: 确保prompt中的指令或问题表述清晰、准确,避免产生歧义。

简洁直接: 尽量用简短的语言传达核心信息,避免冗长和复杂的描述。

避免指令过载: 不要在同一prompt中堆砌过多的指令或问题,以免LLM无法理解或执行。

同时,可以借鉴zero-shot、chain-of-thought、few-shot等prompt技巧,以及基于角色的prompt设计方法,来更好地引导LLM,提高其生成代码的质量和准确性。

总共需要四个prompt:两个系统prompt和两个主要prompt(每个阶段的系统prompt + 主要prompt)。系统prompt作为一个框架,为人工智能在特定参数范围内运行并生成连贯、相关且与预期结果一致的回复创造条件。

阶段系统prompt主要prompt
第一阶段你是使用 pandas 的 Python 开发专家。您必须为用户查询生成 JSON 格式的简单 pandas “命令”。无需添加 "打印 "函数。在生成命令前分析列的数据类型。如果不可行,则返回 “无”。数据帧名称为 “df”。df 的列数为 {cols},数据类型为 {dtype}:{desc}。df 的标题为:{head}。不能使用 df.info() 或任何不能打印的命令。在数据帧 df 上为该查询编写一条 pandas 命令:{user_query}
第二阶段你的任务是理解。您必须分析用户查询和响应数据,生成自然语言响应数据。用户查询为 {final_query}。命令输出为 {str(data)}。如果数据为 “无”,则可以说 “请提出查询以开始”。不要提及使用的命令。用自然语言生成输出响应。

通过将把元数据动态注入这个提示符,以生成pandas命令。

2. 整合所有内容

数据帧元数据

df = pd.read_csv(uploaded_file)
head = str(df.head().to_dict())
desc = str(df.describe().to_dict())
cols = str(df.columns.to_list())
dtype = str(df.dtypes.to_dict())

系统prompt

model_pandas = genai.GenerativeModel('gemini-1.5-flash-latest', system_instruction="You are an expert python developer who works with pandas. You make sure to generate simple pandas 'command' for the user queries in JSON format. No need to add 'print' function. Analyse the datatypes of the columns before generating the command. If unfeasible, return 'None'. ")model_response = genai.GenerativeModel('gemini-1.5-flash-latest', system_instruction="Your task is to comprehend. You must analyse the user query and response data to generate a response data in natural language.")

主要prompt

final_query = f"The dataframe name is 'df'. df has the columns {cols} and their datatypes are {dtype}. df is in the following format: {desc}. The head of df is: {head}. You cannot use df.info() or any command that cannot be printed. Write a pandas command for this query on the dataframe df: {user_query}"natural_response = f"The user query is {final_query}. The output of the command is {str(data)}. If the data is 'None', you can say 'Please ask a query to get started'. Do not mention the command used. Generate a response in natural language for the output."

响应生成

# Stage 1
response = model_pandas.generate_content(final_query,generation_config=genai.GenerationConfig(response_mime_type="application/json",response_schema=Command,temperature=0.3))# Stage 2
bot_response = model_response.generate_content(natural_response,generation_config=genai.GenerationConfig(temperature=0.7))

Temperature参数控制回复的随机性。高temperature增加创意和多样性,但可能偏离查询;低temperature则保证回复一致和集中,但创意较少。因此,项目在第一阶段使用低temperature确保准确命令,第二阶段使用高temperature避免单调。

执行pandas命令时,使用Python的exec()函数,尽管存在安全风险,但它是实现动态代码执行的必要工具。未来计划优化架构和增加验证以提高安全性。

3. 用户界面

用户界面构建参考:https://omkamath.medium.com/how-i-built-a-beautiful-web-app-purely-in-python-with-zero-experience-874731df6bc1

在这里插入图片描述
在这里插入图片描述
图|记录命令以验证响应©️【深蓝AI】

3. 结论

通过精心设计的prompt,LLM能够轻松转型,胜任各类任务,这无疑是未来项目创新的核心驱动力。诚然,本项目并未追求突破性的技术革新,其架构与ChatGPT中的代码解释器理念不谋而合,均展现了高度的灵活性与通用性。在我看来,这种高度抽象化的设计理念,尤为适合初学者入门,为他们开启了一扇通往广阔技术世界的大门。

*有关Streamlit UI的全部代码,请查看gist。

©️【深蓝AI】

Ref:
https://gist.github.com/Om-Kamath/90f1ae351bea470e72d0e6a567527eea
https://medium.com/google-cloud/did-google-just-kill-streamlit-76f719d9e275
https://levelup.gitconnected.com/chat-with-csv-files-using-googles-gemini-flash-no-langchain-0e8f79d63348
https://omkamath.medium.com/how-i-built-a-beautiful-web-app-purely-in-python-with-zero-experience-874731df6bc1
撰稿|Sienna
审核|Los

本文首发于微信公众号【深蓝AI】,移步公众号【深蓝AI】,第一时间获取自动驾驶、人工智能与机器人行业最新最前沿论文和科技动态👇
深蓝AI·赋能自动驾驶+机器人+AI

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年互联网公司时薪排行榜大曝光!看完我酸了,第一竟是他…

大家好呀,我是胡广,今天看到千峰教育公众号分享一个对于选择公司非常有用的参考:“互联网时薪”。特地分享给各位看看 很多小伙伴在选择一家公司的时候更关注总收入package (除了基本的月薪,加上其他的所有的收入,包括…

惊喜!万博智云亮相2024数博会和第三届828 B2B企业节

摘要 万博智云作为2024 828 B2B企业节铂金合作伙伴,在2024中国国际大数据产业博览会的828 B2B企业节开幕式上亮相,并参加了本次828企业节的一系列活动,包括在华为展台现场开展的“‘云上大咖团’直面数博会现场”的直播上发表了主题分享。 8…

华为OD机试 - 最大报酬 - 0/1 背包问题,动态规划(Java 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(E卷D卷A卷B卷C卷)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加…

借老系统重构机会我写了个groovy规则引擎

公司老系统的重构计划早就有了,为了对Java硬编码的各种校验规则进行重构,特地参考了相关技术,最终选择了groovy进行了系统的学习,并编写了一个即插即用的轻量级规则引擎。 文章目录 项目背景技术选型groovy的性能groovy脚本执行线…

数据结构---双向链表---循环链表---栈

目录 一、双向链表 1.1.创建双向链表 1.2.头插法 1.3.尾插法 1.4.查询节点 1.5.修改节点 1.6.删除节点 1.7.打印节点 1.8.销毁链表 二、循环链表 2.1.单循环链表 2.2.双循环链表 三、栈 3.1.顺序栈 1.创建栈 2.判断栈是否满 3.判断栈是否为空 4.进栈 5.出栈…

安全升级:Docker部署Redis,启用密码验证

1.在自己选定的目录中创建文件夹 在redis文件夹里面创建:data文件夹和conf文件夹(文件夹名称随意) 2.在conf文件夹中创建redis.conf文件: vim redis.conf 2.1.redis.conf里面编写内容可以根据官网(Index of /releases…

CNN中的注意力机制综合指南:从理论到Pytorch代码实现

注意力机制已经成为深度学习模型,尤其是卷积神经网络(CNN)中不可或缺的组成部分。通过使模型能够选择性地关注输入数据中最相关的部分,注意力机制显著提升了CNN在图像分类、目标检测和语义分割等复杂任务中的性能。本文将全面介绍…

uniapp video标签无法播放视频

当video标签路径含有中文以及特殊字符视频就会无法播放 解决方法使用encodeURIComponent对路径进行加密处理 videoSrc data.coursewareFile? ${appConfig.apiUrl encodeURIComponent(data.coursewareFile)}: "";最后效果

(go)线性表的顺序存储

闲来无事,更新一下,线性表的顺序存储,go语言版本,效果都已经测试过,下面给出各部分细节 文章目录 1、生成一个线性表2、查找3、插入4、求长度5、改值6、删除7、遍历8、测试程序9、完整代码总结 package mainimport &q…

HashMap相关面试题(哈希表、HashMap的实现原理、HashMap的put方法的具体流程、HashMap的扩容机制、HashMap的寻址算法)

文章目录 1. 散列表(哈希表)1.1 散列表的概念1.2 散列函数1.3 散列冲突1.4 散列冲突-链表法(拉链法)1.4.1 插入操作1.4.2 查找和删除操作 2. HashMap的实现原理3. HashMap 的 put 方法的具体流程4. HashMap 的扩容机制5. HashMap …

Prometheus监控Kubernetes ETCD

文章目录 一、kubeadm方式部署etcd1.修改etcd指标接口监听地址2.prometheus中添加etcd的服务发现配置3.创建etcd的service4.grafana添加etcd监控模版 二、二进制方式部署k8s etcd1.将etcd服务代理到k8s集群2.创建etcd证书的secrets3.prometheus挂载etcd证书的secrets4.promethe…

【c++】常量周边:常量概念及定义

目录 前言 1.常量是什么? 2.常量的的类型 本质区别: 1)文字常量(无法取地址) 🌷什么是字面值?? 字面值后缀 🌷文字(字面)常量的基本类型 …

双指针--优选算法

个人主页:敲上瘾-CSDN博客 个人专栏:游戏、数据结构、c语言基础、c学习、OJ题 前言: 该篇文章我们主要来学习的是双指针算法,对于该类算法我们可以直接来做题,从题中去感知该算法的魅力,最后再从题中做总…

Elasticsearch Suggesters API详解与联想词自动补全应用

Elasticsearch Suggesters API详解与联想词自动补全应用 引言Elasticsearch Suggesters1. Term Suggester实现步骤示例 2. Phrase Suggester示例 3. Completion Suggester创建映射和插入数据查询示例 4. Context Suggester示例 Completion Suggester1. 工作原理2. 使用流程3. 使…

东软 在大健康路上“笨鸟先飞”

若不是东软医疗引入“国家队”通用技术集团作为其最重要的战略投资人,恐怕很多人并不会留意东软“蛰伏”在大健康的赛道上,已有30年。 1997年的一天,沈阳高新技术产业开发区的东大软件园里,创立东软不过6年时间的刘积仁思量着眼前…

并发性服务器

同一时刻能处理多个客户端 多进程: int init_tcp_ser(const char *ip,unsigned short port) {int sockfd socket(AF_INET,SOCK_STREAM,0);if(-1 sockfd){perror("fail socket");return -1;}struct sockaddr_in ser;ser.sin_family AF_INET;ser.sin_por…

tomcat在eclipse中起动成功,无法访问tomcat主页

最近通过geoserver的war包将,geoserver服务部署到了tomcat,发现在eclipse中启动服务后,无法访问localhost:8080主页,geoserver主页:localhost:8080/geoserver/web同样也无法访问。 只需要双击下面的server…

【生成模型系列(初级)】自编码器——深度学习的数据压缩与重构

【通俗理解】自编码器——深度学习的数据压缩与重构 第一节:自编码器的类比与核心概念 1.1 自编码器的类比 你可以把自编码器想象成一个“智能压缩机”,它能够把输入的数据(比如图片)压缩成一个更小的表示(编码&#…

MacOS使用FileZilla通过ssh密钥文件连接远程服务器(已解决)

需求描述 mac电脑,使用filezilla通过FTP连接远程服务器,使用ssh密钥文件代替密码。 版本信息 MacOS:Sonoma 14.5 M3芯片 FileZilla:3.66.5 在这里插入图片描述 连接 1. 创建站点 打开filezilla工具,右上角选择“文件 -> 站点管理器”,打开站点管理器弹窗。 2.…

仿华为车机功能之--修改Launcher3,实现横向滑动桌面空白处切换壁纸

本功能基于Android13 Launcher3 需求:模仿华为问界车机,实现横向滑动桌面空白处,切换壁纸功能(本质只是切换背景,没有切换壁纸)。 实现效果: 实现思路: 第一步首先得增加手势识别 第二步切换底图,不切换壁纸是因为切换壁纸动作太大,需要调用到WallpaperManager,耗…