1. 首页 > 快讯

6个可立即运行的生成式 AI Python 项目


通过使用 OpenAI、LangChain、Matplotlib、SQLAlchemy、Gradio、Streamlit 等的这些基于 Python 的编码项目获得生成式 AI 的实践介绍。

当然,您可以使用 LLM 支持的网站来聊天机器人、查询文档或将文本转换为 SQL。但没有什么比访问底层代码更好了。除了启动和运行应用程序的满足感之外,直接使用 Python 文件还可以让您有机会调整事物的外观和工作方式。

这里有六个编码项目可以帮助您开始使用 Python 中的生成式 AI。

使用 Llama 2、Streamlit 和 Replicate 构建聊天机器人

如果您想运行由 OpenAI 的 GPT-3.5 或GPT-4以外的其他技术驱动的聊天机器人,一个简单的选择是在 Streamlit Web 框架中运行 Meta 的 Llama 2 模型。Streamlit 的高级开发倡导者 Chanin Nantasenamat 有一个GitHub 存储库、YouTube 视频和博客文章 向您展示如何操作。

您需要一个Replicate帐户和 API 令牌。您可以通过使用 GitHub 帐户登录来开始使用。偶尔轻度使用 Replicate 不需要信用卡或付款。如果您计划使用更大的模型或进行大量查询,则需要开始付费。

您的免费 Replicate 帐户应该带有一个默认的 API 令牌,或者您可以生成一个新的。

设置项目

首先,我使用 Git 将代码下载到本地:

git clone https://github.com/dataprofessor/llama2.git

如果您不使用 Git,您也可以访问https://github.com/dataprofessor/llama2,单击“代码”下拉菜单,选择“下载 ZIP”,然后在本地机器上解压文件。

接下来,将我的工作目录设置为项目文件夹后,我创建了一个 Python 虚拟环境venv(您可以使用任何您喜欢的虚拟环境工具):

python -m venv env

我使用以下方式激活了环境

source env/bin/activate

这是我的 Mac 上的命令;在 Windows 上,它是envScriptsactivate。

接下来,我安装了我需要的软件包

pip install -r requirements.txt

为了使用 API 密钥在本地运行 Streamlit 文件,文档建议将它们存储在主项目目录下的目录secrets.toml中的文件中。如果您使用,请确保将其添加到您的文件中。

.streamlitgit.streamlit/secrets.toml.gitignore

该secrets.toml文件应具有如下格式:

REPLICATE_API_TOKEN = "your_replicate_token"

如果用户使用您的令牌发出请求,则此方法有效。您可能想尝试在本地运行应用程序,以查看如果要求用户输入自己的密钥会发生什么情况。如果没有,该应用程序无法在我的 Mac 上运行secrets.toml。为了解决这个问题,我只需将以下内容添加到secrets.toml,并且不设置REPLICATE_API_TOKEN值:

FAKE_TOKEN="some fake token"

您现在应该能够使用终端命令在本地运行 Streamlit 应用程序

streamlitrunstreamlit_app_v2.py

请注意左侧的选项,这些选项允许您设置各种模型参数。我建议增加输出长度(默认)。如果不这样做,您的答案可能会在您了解响应的含义之前被中途截断。

截图由 Sharon Machlis 提供。

使用运行 Llama 2 的 Streamlit 创建的聊天机器人。

如果您想部署应用程序以便它在网络上可用,最简单的方法之一是在Streamlit Community Cloud上创建一个免费帐户。您可以从您的 GitHub 帐户直接在那里部署应用程序。使用设置 和部署说明。

除非您通过将 GitHub 存储库设为私有来使应用程序私有化(这样每个帐户都会获得一个私有应用程序),否则您需要要求用户提供自己的 API 密钥。否则,您可能会产生巨额的 Replicate API 费用。

共享 Streamlit 应用程序的另一个相当简单的选项是在Hugging Face Streamlit Space上部署。如果您是 Docker 用户,则可以使用Snowflake 的 Brian Hess 提供的此工具将您的 Streamlit 应用程序 Docker 化。

使用Matplotlib、Streamlit 和 OpenAI 可视化数据

此应用可让您上传 CSV 文件、提出问题并获得 Matplotlib 生成的图表。它需要 OpenAI 密钥,您可以在https://platform.openai.com上注册。

使用 Git 克隆仓库

git clone https://github.com/michaelweiss/chat-with-your-data.git

然后切换到项目目录并创建并激活 Python 虚拟环境,就像我们在之前的项目设置中所做的那样。

如果你在本地运行该应用程序,请使用终端命令设置你的 OpenAI 密钥

export OPENAI_API_KEY="your_open_ai_key"

接下来,安装所需的软件包(我发现在撰写本文时项目的 README中缺少这一部分):

pip install openai pandas streamlit matplotlib

现在运行应用程序

streamlit run chat_data.py

截图由 Sharon Machlis 提供。

由 Chat With Your Data LLM 应用程序生成的图表。

如果 LLM 可以根据您的查询生成可用的 Python 代码,您应该会看到一个响应图表。与所有 LLM 支持的应用程序一样,您有时需要调整问题以使代码正常工作。

我喜欢这个应用程序的一点是它的Python 代码易于阅读和理解。而且由于作者Michael Weiss在宽松的 MIT 开源许可下发布了该 repo ,因此您可以自由地出于任何目的使用和修改它。

使用 OpenAI、LangChain 和 Chainlit 查询文本文档

该项目创建了一个简单的应用程序,您可以在其中上传一个.txt文档并询问有关其内容的问题。该文件未保存,因此如果您刚刚收到一份文档并想获取摘要或提出一些初步问题,或者您想向其他用户提供此功能,这将非常有用。此应用程序使用Chainlit,这是一个相对较新的框架,专为 LLM 支持的聊天应用程序设计。

每次您将文档上传到应用程序时,该文档都会由 LLM 处理以创建文本嵌入,将文档转换为旨在表示其“含义”的数字字符串。如果您将来想要多次查询此文件(例如软件文档),则每次上传并生成嵌入的效率并不高。对于这种情况,请查看下一节中的项目,该项目存储文件及其嵌入以供将来使用。

要运行此项目,您将再次创建并激活 Python 虚拟环境。除非您更改代码以使用另一个 LLM,否则您将需要一个 OpenAI API 密钥。

接下来,安装所需的软件包:

pip install python-dotenv langchain chromadb tiktoken chainlit openai

复制 Chainlit 的示例代码
(网址:https://docs.chainlit.io/examples/qa ) 。

在文件顶部,更改

os.environ["OPENAI_API_KEY"] = "OPENAI_API_KEY"

到您的 OpenAI 密钥。(或者,使用另一种更安全的密钥加载方式更新该代码,例如使用库python-dotenv和.env文件。)

Chainlit 附带一些开箱即用的特定功能。默认的 Web 应用程序将显示 LLM 回答用户问题所采取的步骤以及最终答复(如果您愿意,可以关闭默认显示)。Chainlit 还附带以聊天机器人为中心的装饰器。装饰器@cl.on_message用于指定用户输入问题时应运行的所有内容,以及@cl.on_chat_start应用程序启动时应执行的任何代码。(请注意,您需要导入chainlitascl才能使用@cl.on_message。)

您可以使用终端命令运行该应用程序

chainlit run -w qa.py

应用程序应在本地主机的浏览器中打开。-w每次app.py更新和保存底层文件时,该参数都会自动重新加载应用程序。

chainlit.md如果尚不存在文件,Chainlit 会在您运行应用时在项目目录中生成一个新文件。该文件会显示在应用的Readme选项卡中;您可以根据需要对其进行编辑。

该应用程序还包含 LLM 回复中相关源文档块的链接,以便您可以检查原文以查看回复是否准确。

截图由 Sharon Machlis 提供。

Chainlit 应用程序查询文档。

如果您熟悉 LangChain,则可以更新应用程序代码以使用一些额外的LangChain 文档加载器添加更多文件类型选项,例如用于PDF或用于处理多种文件类型的 UnstructuredFileLoader 。

我暂时不会建议将 Chainlit 用于大量使用的外部生产应用程序,因为它仍然比较新。但如果您不需要进行大量自定义,而只是想要快速编写基本的聊天界面,这是一个不错的选择。除了这个应用程序之外, Chainlit 的 Cookbook 存储库中还有几十个其他应用程序可供您尝试。

Chainlit 的网站文档称,用于共享 Chainlit 应用程序的云服务即将推出。目前,官方部署建议仅限于少数操作方法,包括有关 Fly.io、Google Cloud Run、Google App Engine上的 Docker 和 Replit 的文章链接。我还看到了关于在 Hugging Face Spaces 上运行 Dockerized Chainlit 应用程序的解释器。您可以在 Beyond -ChatGPT GitHub 存储库 和 Beyond ChatGPT:构建您的第一个 LLM 应用程序YouTube 视频中找到详细信息。

使用 LangChain、OpenAI 和 Gradio 查询已保存的文档集

此应用程序允许您处理和存储多个文档,以便 LLM 可以仅根据这些文件回答用户的问题(该领域称为 RAG 或检索增强生成)。它包括一个聊天机器人界面。

该代码来自LangChain创建者 Harrison Chase 的 GitHub,默认查询包含 2022 年美国国情咨文演讲的文本文件。

首先,从https://github.com/hwchase17/chat-your-data克隆或下载代码,按照前面部分所示设置 Python 虚拟环境,然后按照项目README文件中的设置步骤 0、1 和 2 进行操作。

然后,你应该能够通过运行以下命令在本地启动 Gradio Web 应用,并使用默认文本:

python app.py

并在指定的 URL 处打开浏览器。您仍需粘贴 OpenAI 密钥(导出的值供命令行使用)。

Gradio 是一个专为数据科学设计的 Web 框架,它包含用于流式聊天机器人的内置功能。它在易用性和定制性之间取得了良好的平衡,并且文档非常详尽且易于理解。

除了 Gradio UI 之外,如果您更喜欢在终端窗口而不是浏览器中运行应用程序,该应用程序还有一个用于查询文档的命令行应用程序:

python cli_app.py

运行默认应用后,下一步就是使用您选择的文档对其进行自定义。一种方法是进行以下更改:

1.删除vectorstore.pkl和state_of_the_union.txt文件。

2. 创建一个 docs 文件夹,将一个或多个要查询的文档放入其中。我尝试使用 PDF 文件《Samuel Bowman 撰写的《关于大型语言模型的八件事》和《Nvidia 的大型语言模型初学者指南》来做到这一点。

3. 在 中ingest_data_.py,更改以下几行( 之后的第 9 行和第 10 行print("Loading data....")):

loader = UnstructuredFileLoader("state_of_the_union.txt")raw_documents = loader.load()

raw_documents = []for file in os.listdir('docs'):if file.endswith('.pdf'):pdf_path = './docs/' + fileloader = PyPDFLoader(pdf_path)raw_documents.extend(loader.load())elif file.endswith('.docx') or file.endswith('.doc'):doc_path = './docs/' + fileloader = Docx2txtLoader(doc_path)raw_documents.extend(loader.load())elif file.endswith('.txt'):doc_path = './docs/' + fileloader = TextLoader(doc_path)raw_documents.extend(loader.load())

另外,将以下内容添加到文件顶部:

import osfrom langchain.document_loaders import PyPDFLoader, Docx2txtLoaderfrom langchain.document_loaders import TextLoader

4. 在 中query_data.py,将短语“the most recent state of the union address”或“the most recent state of the union”更改为您的文档涵盖的任何主题。其中一个短语出现了四次。

5. 在 中app.py,更改第 57 行的标题

"<h3><center>Chat-Your-Data (State-of-the-Union)</center></h3>"

更改为适合您的应用程序的内容。还请更改第 71 行的占位符文本和从第 78 行开始的示例。

如果您还使用 PDF 文件,则需要安装pypdf库:

pip install pypdf

现在重新运行python ingest_data.py,然后使用 启动该应用程序

python app.py

Gradio 的新聊天界面

此应用程序不使用 Gradio 的新聊天界面,该界面只需很少的代码即可提供流式响应。查看Gradio 文档中的“快速创建聊天机器人”以了解有关新功能的更多信息。

例如,此示例代码来自Gradio 文档,是一个直接使用 OpenAI API 的基本聊天机器人应用程序:

import openaiimport gradio as gr# Replace with your keyopenai.api_key = "sk-your-openai-api-key"def predict(message, history):history_openai_format = []for human, assistant in history:history_openai_format.append({"role": "user", "content": human})history_openai_format.append({"role": "assistant", "content": assistant})history_openai_format.append({"role": "user", "content": message})response = openai.ChatCompletion.create(model='gpt-3.5-turbo',messages=history_openai_format,temperature=1.0,stream=True)partial_message = ""for chunk in response:if len(chunk['choices'][0]['delta']) != 0:partial_message = partial_message +chunk['choices'][0]['delta']['content']yield partial_messagegr.ChatInterface(predict).queue().launch()

您可以将 OpenAI 模型更改为,gpt-4并拥有按使用付费 API 访问 GPT-4 的权利,而无需每月支付 20 美元的订阅费。Gradio 文档还包含使用本地 LLM 而不是 OpenAI 模型的通用聊天机器人的代码。

部署 Gradio 应用程序

将gradio 应用程序部署到 Hugging Face Spaces非常容易。您可能不希望将包含 API 密钥的应用程序放在公共网站上供任何人使用。一种解决方案是添加基本的密码保护,您可以通过替换以下代码来实现

gr.ChatInterface(predict).queue().launch()

有了这个

gr.ChatInterface(predict).queue().launch(auth=("theUserName", "thePassword"))

如果您不希望您的应用具有明显的 Hugging Face 品牌,还有其他部署替代方案,例如在云服务上的 Docker 容器中运行该应用程序。

使用 LangChain、OpenAI 和 FastAPI 进行 LLM 支持的网络研究

GPT Researcher 项目由特拉维夫 Wix 研发主管 Assaf Elovic 发起,其README 文件中提供了详细的分步安装说明。还有一个安装视频。不要跳过安装介绍,其中提到你需要在系统上安装 Python 3.11 或更高版本。

如果您还有其他版本的 Python,请确保使用正确的 Python 版本创建虚拟环境,然后激活它。

使用以下命令安装所需的软件包

pip install -r requirements.txt

创建一个.env文件并添加你的 OpenAI API 密钥作为

OPENAI_API_KEY="your-key-here"

该项目使用 Tavily 搜索引擎,该引擎专为 LLM 项目设计。目前它是免费的,但请注意,输入的问题将用于“学习和改进我们的算法和模型”,正如网站所解释的那样。我读到的意思是查询将用于帮助训练其模型,因此请相应地输入它们。

使用以下命令运行应用程序

uvicorn main:app --reload

然后在浏览器中转到http://localhost:8000,您将看到如下所示的开始屏幕:

截图由 Sharon Machlis 提供。

GPT 研究员的开场屏幕。

单击“开始”并输入查询后,代理将查找多个来源。编写报告需要一些时间。这意味着 LLM 通话的费用可能比其他选项高一些,但优点是您可以以带有来源链接的报告格式获得报告。

我尝试问它如何阻止啄木鸟啄食我们房子上的木头——不幸的是,这不是一个理论性的问题。以下是返回的结果:

截图由 Sharon Machlis 提供。

GPT 研究员正在回答查询。

结果包括摘要、介绍、几个部分(“无害威慑方法”和“避免啄食的主动措施”)以及结论和参考文献。

奇怪的是,生成报告时,复制到剪贴板选项在我的 Mac 上不起作用,尽管我可以将其下载为 PDF(或以传统方式选择并复制它)。

本报告中的信息与我从Phind.com等网站获得的信息类似,但格式更正式,对资源的看法可能也更偏向于主观意见。此外,除了回答问题的研究报告外,您还可以索取“资源报告”,它会返回关于每种顶级资源的大量详细信息。

您可以更改 GPT Researcher 使用的 LLM,尽管不建议这样做。目前,OpenAI 的模型被认为最适合该任务。

除了在本地运行 GPT Researcher 之外,该项目还包括在 Docker 容器中运行它的说明。

使用 LlamaIndex、SQLAlchemy 和 OpenAI 将自然语言转换为 SQL

有几种方法可以将文本转换为 SQL — 事实上,我已经写过关于使用 R 和 SQL 查询引擎的一般概念。但是,我想尝试使用 SQLalchemy 的 Llamaindex 示例项目。LlamaIndex 旨在提供“使用数据扩充 LLM 应用程序的工具”,这是我最感兴趣的生成式 AI 任务之一。SQLAlchemy 是一个 Python 数据库工具包。

该项目不包含 Web 前端,而是从命令行运行。对于 Python,我主要使用Llamaindex 示例笔记本中的代码。

项目设置

与以前的项目一样,我首先创建一个新的项目目录,将工作目录更改为项目目录,创建并激活 Python 虚拟环境,然后安装必要的软件包。在本例中,安装代码为:

pip install openai sqlalchemy llama-index

如果您不想使用 OpenAI,LlamaIndex 还提供其他 LLM API 选项。或者,您可以使用提供的本地 LLM 设置说明,在本地运行默认 LLM 。

示例笔记本将您的 OpenAI API 密钥明确存储在主文件中,您可能不想将其作为 git 存储库的一部分,因为您最终可能会在 GitHub 上共享您的密钥。相反,您可以pip安装python-dotenv:

pip install python-dotenv

并创建一个.env文件

OPENAI_API_KEY="my_api_key"

然后,将以下内容添加到新app.py脚本中:

import osimport openaifrom dotenv import load_dotenvload_dotenv()openai.api_key = os.getenv("OPENAI_API_KEY")

接下来,我将一些示例代码剪切并粘贴到app.py脚本中:

from llama_index.indices.struct_store.sql_query import NLSQLTableQueryEnginefrom sqlalchemy import textfrom sqlalchemy importinsertfromllama_index.llmsimportOpenAIfromllama_indeximportSQLDatabase, ServiceContextfromsqlalchemyimport(create_engine,MetaData,Table,Column,String,Integer,select,)# Create a sample database and tableengine= create_engine("sqlite:///:memory:")metadata_obj = MetaData()table_name ="city_stats"city_stats_table =Table(table_name,metadata_obj,Column("city_name",String(16), primary_key=True),Column("population",Integer),Column("country",String(16), nullable=False),)metadata_obj.create_all(engine)# Set up an LLMllm = OpenAI(temperature=0.1,model="gpt-3.5-turbo")service_context = ServiceContext.from_defaults(llm=llm)# Create a database object from that table that sqlalchemy can usesql_database = SQLDatabase(engine, include_tables=["city_stats"])# Add some sample data to the tablesql_database = SQLDatabase(engine, include_tables=["city_stats"])rows= [{"city_name":"Toronto","population":2930000,"country":"Canada"},{"city_name":"Tokyo","population":13960000,"country":"Japan"},{"city_name":"Chicago","population":2679000,"country":"United States"},{"city_name":"Seoul","population":9776000,"country":"South Korea"},]forrowinrows:stmt =insert(city_stats_table).values(**row)withengine.begin()asconnection:cursor= connection.execute(stmt)# Check to see if the table exists and is usablestmt =select(city_stats_table.c.city_name,city_stats_table.c.population,city_stats_table.c.country,).select_from(city_stats_table)withengine.connect()asconnection:results = connection.execute(stmt).fetchall()print(results)# Try running a basic SQL query on this table  using sqlalchemywithengine.connect()ascon:rows= con.execute(text("SELECT city_name, country from city_stats"))forrowinrows:print(row)# At last! Time to try a natural language queryquery_engine = NLSQLTableQueryEngine(sql_database=sql_database,tables=["city_stats"],)query_str ="Which city has the largest population, and what is that population??"response = query_engine.query(query_str)print(f"Answer: {response}")# You can also see the query in the sqlalchemy metadataprint("Generated from the following SQL:")print(response.metadata["sql_query"])
pythonapp.py

根据需要调整查询和数据后,您可以使用简单的终端命令运行该应用程序。

更多 Python 生成式 AI 项目

如果您想找到更多 Python 生成式 AI 项目,这里有一些有用的在线资源。

Shiny 用于 Python 聊天流

如果您想尝试另一个相对较新的 LLM Python 前端,请查看 Shiny for Python 的 chatstream 模块。它也仍处于早期阶段,文档警告说“这项工作仍在进行中,API 可能会发生变化。”目前,它只能直接与 OpenAI API 配合使用。

GitHub存储库提供了几个示例,包括一些在线烹饪博客的格式化和保存食谱。请务必阅读 存储库使用说明。

Streamlit 项目

Streamlit 网站上的生成式 AI 部分提供了几个 LLM 示例项目,包括使用 Anthropic API 进行文件问答(如果您有权访问)以及使用 LangChain 进行搜索。

您还可以在Streamlit 博客上找到更多项目,例如 如何构建没有矢量数据库的实时 LLM 应用程序、 使用 LLM 与 pandas DataFrames 聊天以及 构建自己的 Notion 聊天机器人。

WASM聊天机器人

在浏览器中完全在客户端运行由 LLM 驱动的聊天机器人的想法听起来有点疯狂。但如果你想尝试一下,请查看 LangChain 博客文章 使用客户端技术构建由 LLM 驱动的 Web 应用程序。请注意,这需要在本地安装 Ollama 来处理本地 LLM。该项目目前仅在 macOS 或 Linux 上运行。

LangChain 项目

LangChain 主站点的用例部分有几个带有代码的项目构想,包括文本到 SQL、摘要和文本分类,尽管其中一些可能不是完整的从头到尾的应用程序。

此外,你可以看到 LangChain 的Chat LangChain 聊天机器人的代码。请注意,如果不进行修改,该项目需要一个 Weaviate 帐户(每月最低 25 美元,否则你的数据库将在 14 天后消失),以及在前端安装 Next.js。不过,这是一款不错的应用程序。

由 Chat With Your Data LLM 应用程序生成的图表。

更加复杂的 LangChain 应用程序提供 AI 增强的通用网络搜索,能够同时选择搜索 API 和 LLM 模型。代码位于 GitHub 上。

Chainlit 项目

如果 Chainlit 引起了你的兴趣,你还可以查看其他一些项目及其代码。此外,还有一个GitHub cookbook 存储库,其中包含十几个其他项目。


本文采摘于网络,不代表本站立场,转载联系作者并注明出处:https://www.iotsj.com//kuaixun/3779.html

联系我们

在线咨询:点击这里给我发消息

微信号:666666