首页  >  文章  >  后端开发  >  通过 Python 使用生成式 AI

通过 Python 使用生成式 AI

DDD
DDD原创
2024-11-11 08:28:02298浏览

人工智能是未来,作为软件工程师,这是最热门的领域。在代码中利用 LLM 使您能够构建更智能的应用程序来处理复杂的任务,例如实时情绪分析或解释用户生成的内容。集成法学硕士可以让您的软件响应更快、功能更强大,增强用户体验和自动化。

这篇文章介绍了如何使用 Python LLM 调用,以便您可以开始将这些强大的功能添加到您自己的代码中。

我们将从为您选择的任何角色制作一个聊天机器人开始。然后,您将学习如何总结较小的文本,甚至进一步总结整本书。最后,您将学习如何重新提示并分析法学硕士提供的结果。

提出我们的第一个 LLM 请求

对于 LLM 请求,我们将使用 Groq。如果您在那里创建帐户,您可以使用他们的 API 并免费提出 LLM 请求。

为了使用 Python 来处理这些请求,请通过运行 pip install groq 安装 Groq python 包。然后,我们将其导入到我们的代码中,如下所示:

import os
from groq import Groq

client = Groq(
    api_key=os.environ.get("GROQ_API_KEY"),
)

请务必将 api 密钥设置为环境变量。

可以通过添加以下内容来提出简单的 LLM 请求:

chat_completion = client.chat.completions.create(
    messages=[
        {
            "role": "user",
            "content": "Explain formula 1.",
        }
    ],
    model="llama3-8b-8192",
)
print(chat_completion.choices[0].message.content)

在这种情况下,我们请LLM解释一下公式1是什么。在控制台中运行程序后,应该打印 llama3-8b 的输出。您可以尝试一下并切换模型以及提示。

创建自定义聊天机器人

现在,让我们为您喜欢的任何角色(例如马里奥)创建一个聊天机器人。目前,法学硕士以中立/信息丰富的语气做出回应。然而,通过赋予法学硕士一个系统角色,我们可以确保它像马里奥一样做出反应,为对话增添个性和乐趣。这为互动奠定了基调,因此您会得到有趣且标志性的回应,例如“这是我,马里奥!”让事情保持吸引力。

让我们为我们的请求添加系统角色:

chat_completion = client.chat.completions.create(
    messages=[
        {
            "role": "system",
            "content": "You are a super mario chatbot. Always answer in his style, and create witty responses."
        },
        {
            "role": "user",
            "content": "Explain formula 1.",
        }
    ],
    model="llama3-8b-8192",
)
print(chat_completion.choices[0].message.content)

现在,法学硕士将用《马里奥赛车》来解释什么是一级方程式赛车!

Utilizing Generative AI with Python

系统角色也非常适合其他用例,例如虚拟客户支持代理、教育导师或创意写作助手,确保法学硕士以适合每个角色的特定氛围和需求的方式做出响应。

总结文本

现在我们已经了解了如何使用特定提示和系统角色发出 LLM 请求,让我们尝试创建一个摘要工具。

在同一目录中创建一个名为article.txt 的文本文件,然后粘贴到您选择的任何文章中。对于这一步,请确保文章不要太长。

在代码中,我们首先加载该文本。

import os
from groq import Groq

client = Groq(
    api_key=os.environ.get("GROQ_API_KEY"),
)

现在,让我们创建一个可以发送给 LLM 的提示,告诉它用要点总结文本。

chat_completion = client.chat.completions.create(
    messages=[
        {
            "role": "user",
            "content": "Explain formula 1.",
        }
    ],
    model="llama3-8b-8192",
)
print(chat_completion.choices[0].message.content)

我们首先写出提示,给LLM清晰简洁的指示。然后,我们提供应该总结的文本。

现在,我们所要做的就是使用我们刚刚创建的提示致电 LLM:

chat_completion = client.chat.completions.create(
    messages=[
        {
            "role": "system",
            "content": "You are a super mario chatbot. Always answer in his style, and create witty responses."
        },
        {
            "role": "user",
            "content": "Explain formula 1.",
        }
    ],
    model="llama3-8b-8192",
)
print(chat_completion.choices[0].message.content)

运行此命令,您应该会看到您授予法学硕士学位的文章的要点摘要!

现在,尝试粘贴一篇很长的文章,甚至可能是整本书——比如弗朗茨·卡夫卡的《变形记》。

请注意,LLM 返回错误。你给的太多了,无法一下子总结出来。

总结一本书

Utilizing Generative AI with Python

LLM 中的上下文窗口是指它在一次调用中可以处理和记住的文本量。这意味着虽然它非常适合一次性总结一篇文章,但它无法一次处理整本书,因为文本超出了其吸收和生成连贯响应的能力。

那么,我们该如何解决这个问题呢?我们可以通过“分块”这本书来做到这一点。我们将这本书分成了法学硕士可以管理的“块”,并告诉它总结这些内容。然后,一旦我们有了每个块的摘要,我们就可以将这些摘要总结为一个连贯的摘要。

您可以像这样将字符串分成块(请务必导入 textwrap):

with open('article.txt', 'r') as file:
    content = file.read()

您可以稍后更改宽度,看看您喜欢什么并给您最好的结果。

现在我们已经有了所有这些块,让我们总结一下它们,并将响应保存在名为answers的变量中。

prompt = f"""
Summarize the following text in bullet points for easy reading.

Text:
{content}
"""

如果您运行此代码并打印答案,您应该会看到一个长字符串,其中包含它创建的每个“块”/部分的项目符号点摘要。

现在,我们所要做的就是再次使用法学硕士,以便使用所有章节摘要创建一个连贯的摘要。

chat_completion = client.chat.completions.create(
    messages=[
        {
            "role": "user",
            "content": prompt,
        }
    ],
    model="llama3-8b-8192",
)
print(chat_completion.choices[0].message.content)

现在,当您运行代码时,您应该会看到整本书的摘要!很了不起,对吧?

注意:根据书的大小,您可能需要多次“分块”/告诉法学硕士提供较短的回复。如果“块”摘要太多,最终的摘要提示可能仍然太大。

重新提示

您可能已经注意到,即使我们告诉法学硕士用要点来回应,例如,它并不总是提供相同的回应。有时,它可能会添加标题或一些解释。有时,它可能只是提供要点。

作为一名程序员,这有时可能会导致处理结果变得困难。 我们如何确保法学硕士以特定格式提供更一致的答案?

让我们制作一个情感分析工具。我们将为 LLM 提供一个悲伤的故事,并让它得出从 -1 到 1 的情绪分数。

像这样:

import os
from groq import Groq

client = Groq(
    api_key=os.environ.get("GROQ_API_KEY"),
)

如果多次运行此命令,您会发现响应并不总是我们指定的格式。但是,如果我们想依赖该格式来提取数字并执行进一步的计算,那就令人沮丧了。处理不当可能会导致我们的程序崩溃。

重新提示是调整和完善提供给 LLM 的输入以引导其达到所需响应或格式的过程。为了验证需要输出为“情绪:0.5”的情绪工具的格式,您可以通过调整提示来重新提示 LLM,以明确指示模型仅返回该确切格式的情绪分数,从而确保结果的一致性回复。

我们可以创建一个函数来检查是否使用正则表达式提供了预期的格式(因此请务必导入正则表达式)。

chat_completion = client.chat.completions.create(
    messages=[
        {
            "role": "user",
            "content": "Explain formula 1.",
        }
    ],
    model="llama3-8b-8192",
)
print(chat_completion.choices[0].message.content)

现在,在我们收到 LLM 的响应后,我们可以调用该函数。如果函数返回 true,那么我们就知道格式正确。如果它返回 false,那么我们知道我们应该重新提示 LLM 并重试。

chat_completion = client.chat.completions.create(
    messages=[
        {
            "role": "system",
            "content": "You are a super mario chatbot. Always answer in his style, and create witty responses."
        },
        {
            "role": "user",
            "content": "Explain formula 1.",
        }
    ],
    model="llama3-8b-8192",
)
print(chat_completion.choices[0].message.content)

当然,这是非常基本的重新提示。在第二次 LLM 调用中,LLM 仍可能提供不正确的格式。但是,现在格式一致的响应的成功率应该更高。

借助这些工具和技术,您现在可以将 LLM 集成到您的 Python 代码中并有效地验证输出。有任何问题请随时评论!

如果您想查看完整代码,请访问 Github 存储库。

P.S:这是我为 SCU 的 ACM 分会举办的研讨会的博客文章版本。

以上是通过 Python 使用生成式 AI的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn