这就是使用 LLM 为怪物编程所教给我的关于编程的知识

原文:towardsdatascience.com/here-is-what-using-an-llm-for-monsters-taught-me-about-programming-4ce44f5f4f14

教程

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/4df824c4f285648a130029943e8aeaa1.png

图片由 DALLE 提供。

感觉在编程方面有些生疏

我最近决定重新熟悉编程 Web 应用程序,目标是保持实际操作和相关性——特别是在具有挑战性的技术工作环境中。

我经常通过创建相对基本的 Web 应用程序来教自己各种编程概念,这些应用程序使用 API、数据库、库,并将它们组合成一个应用程序。

我发现,以这种方式创建应用程序,而不是严格练习乏味的 HackerRank 问题,不仅让我了解了技术生态系统中最新的概念,而且还建立了一个全新的项目组合(你可以在面试中讨论!)。

今天,事情有些不同

人工智能正在迅速改变软件开发的方式。

当一些影响者和媒体来源声称编程工作正在消失时,我相信情况正好相反。

我坚信,尽管人工智能将绝对提高我们创建应用程序的速度和效率,但它仍然会被人类开发者作为一个极其强大的工具所使用。

我认为了解如何在你的编程项目中使用人工智能非常重要。这正是我在构建一个简单的教程 Web 应用程序时试图做到的。

一个怪物创建数据库

我的目的是创建一个简单的 Web 应用程序,它会显示一个怪物表格,包括它们的名称、描述、健康、攻击和防御点。

每个怪物都可以通过点击怪物的名称并在网页内更改相关数据来在线编辑。一个保存和一个删除按钮将更新怪物或将其从数据库中删除。

数据将存储在本地 Sqlite 数据库中,这使得它易于共享且自包含。这也消除了注册第三方服务以托管数据库的需求。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/5b1a707ddb0e9a14550244b6d9bd1ac8.png

怪物收集器是一个简单的 Web 应用程序,用于创建 AI 生成的怪物的数据库。来源:作者

需要一些更神奇的东西

到目前为止,所有这些都可能听起来很平凡(然而,对于潜在的雇主来说,这非常有价值)。尽管如此,我还需要一些更现代的东西来让教程体验更加生动。

这就是人工智能发挥作用的地方!

在过去的几年里,我通常会随机生成要存储在数据库中的每个数据点。这为显示的数据的初始种群播种。

Random rand = new Random();
for (int i = 0; i < 10; i++)
{
    // Generate a random number between 0 and 100.
    int number = rand.Next(0, 100);
}

然而,我们正处于一场人工智能革命中!

我们可以告别随机数生成器,转而使用大型语言模型(LLM)!

再见,随机数。你好,AI

我不想从头开始训练一个 LLM,甚至将整个模型导入我的应用中,而是想调用一个网络服务 API,比如 ChatGPT。

使用 LLM 网络 API 服务更现实,尤其是在商业领域。大多数企业不训练自己的模型,但仍然想利用 AI 技术。

这正是使 AI 网络服务如此受欢迎的原因。

我决定将 Cohere 集成到我的网络应用程序中,并使用其文本生成服务,这与 ChatGPT 非常相似,用于为数据库生成创意怪物。

为创建怪物进行提示词工程

将 LLM 整合的第一步是构思一个提示词

提示词只是一串文本,比如一个问题、陈述或任务,就像你会问 ChatGPT 一样。

“为地牢游戏中的恐怖怪物生成一个独特的创意怪物名称和描述。描述不应超过一句话。名称应包含三个或更少的单词,并且要具有创意和独特性。以以下格式输出结果:名称,描述。名称和描述必须由逗号分隔。

怪物的类型应该是 {monster.Name}。

{customPrompt}

怪物的名称不能包含以下任何名称。

我要求 LLM 生成一个创意怪物名称和描述。

提示词指定描述的长度应限制为一句话,这样更容易存储在数据库中并在 UI 中进行操作。

我还要求输出非常具体的名称,描述,用逗号分隔。这样,程序就可以解析 LLM 的输出并将其存储到我的应用程序和数据库表中的怪物对象中。

我们应该创建哪种类型的怪物?

虽然 LLM 会自己创建怪物,但我的应用程序指定的一部分是怪物的“类型”。

MonsterTypes = new() { "Dragon", "Goblin", "Troll", "Ogre", "Demon" }

以这种方式,我们为 LLM 提供了一种起点,以便从中生成怪物。提示词中有一个占位符,用于插入怪物的类型。

我还包含了一个已生成的怪物名称列表,这样 LLM 就可以避免创建我们已经见过的怪物。这些名称被附加到提示词的末尾。

最迷人的功能

我构思的提示词已经足够强大。

然而,我想知道如果我的应用程序的用户能够改变怪物的类型本身,那会多么有趣。为此,我可以在提示词中简单地包含一个“自定义”部分的占位符。

这就是应用程序中最迷人的功能之一被设计出来的地方。

随机数据的无限可能性

自定义提示词是网络应用程序的用户可以添加到提示词中的文本,以便进一步自定义创建的怪物类型。

例如,我们已经在指定怪物类型。然而,最终用户可以非常具有创意。他们可以包括诸如怪物应该像云一样覆盖着彩虹,并且吹奏美妙的音乐等细节!

有紫色绷带和脾气暴躁的哥布林,其留下的痕迹是压碎的骨头和破碎的梦想。

在为 LLM 制定详细的提示后,魔法就开始发挥作用。让我们把这些都结合起来。

初始化数据库

第一步是将初始怪物列表填充到数据库中。

每个怪物都由 LLM 创建。为此,我首先配置了一个依赖注入服务来调用Cohere AI服务并生成怪物。

new DatabaseInitializer(app.Services.GetRequiredService<LLM>(),
 app.Services.GetRequiredService<MonsterFactory>()).InitializeDatabase();

上述代码初始化了 MonsterFactory 类以及我们的 LLM,由 Cohere 提供支持。然后程序初始化数据库。

创建初始批次的怪物

使用.NET Entity Framework 中的数据库上下文和保存我们生成的每个怪物来初始化数据库中的起始怪物列表。

using var context = new DatabaseContext();

List<string> existingNames = [];

// Generate monsters.
var monsters = new List<Monster>();
for (int i=0; i<10; i++)
{
    var monster = monsterFactory.Create(existingNames);
    monsters.Add(monster);

    // Prevent duplicate names.
    existingNames.Add(monster.Name);
}

// Add the monsters to the database.
context.Monsters.AddRange(monsters);
context.SaveChanges();

使数据生动起来

当 LLM 被调用并使用我们的神奇提示生成每个创意怪物时,真正的魔法就开始了。

// Call the LLM.
output = Llm.GetTextAsync(prompt, ignoreNames).GetAwaiter().GetResult();

// Parse the output for "name, description".
if (output is not null)
{
    var parts = output.Split(",", 2);
    monster.Name = parts[0];
    monster.Description = parts[1];

    Console.WriteLine($"Created {monster.Name}, {monster.Description}");
}

我们设置了怪物的名称和描述属性,这些属性是从 LLM 的输出中解析出来的。然后,我们将这些数据保存到数据库中。

允许用户按需创建怪物

为了使程序对用户更加互动,以及为了在应用程序中提供更有趣的讨论内容,我在用户界面中包含了一个 Add按钮。

添加按钮允许用户按需生成新的怪物,这也会被保存到数据库中。

当然,这就是我们包含自定义提示的地方。

[HttpPost()]
public IActionResult CreateMonster(CreateModel model)
{
    // Load the exiting names of monsters.
    var names = MonsterManager.Names();

    // Generate a new monster with a user-specified prompt.
    var monster = monsterFactory.Create(names, model.Prompt);

    // Save the monster.
    MonsterManager.Update(monster);

    return new JsonResult(monster);
}

通过 MonsterController 实现用户创建新怪物的支持。这是一个网络服务方法,可以从 UI 中调用。

在生成新怪物后,我们将其保存到数据库中,就像我们在初始化初始数据时做的那样。

我学到了什么?

我已经编程很多年了。

我非常喜欢创建教程应用程序,这些应用程序展示了各种软件概念或以新颖的方式集成服务。这既让我对最新的软件概念有了更深入的了解,也提升了我的简历

在我的教程应用程序中使用 AI 教会了我如何利用简单的想法,如为数据库生成随机数据,来发挥乐趣和力量。

从随机数据转向 AI

与使用随机数字或一系列的if-then条件来创建数据相比,我发现 LLM 的力量让我能够描绘出一个更加富有创意的画面,使应用程序生动起来。

更重要的是,使用 LLM 网络 API 服务教会了我如何轻松地调用强大的 AI 服务并将其集成到我的程序中。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/2e90d0fddee72aa555ea27f6f1daead4.png

图片由Tima Miroshnichenko拍摄。

扩展求职面试的技能组合

作为了解新技术的一个额外奖励,这次经历也可以成为一次令人惊叹的谈话开场白,在技术工作面试中,甚至可以是一次完整的架构讨论。

没有比讨论你真正喜欢创建的项目更简单的面试类型了。我发现,在教程程序中集成先进的技术,如 AI 和 LLMs,是一个极好的学习机会。

让你的应用程序栩栩如生

当然,我学到的最重要的事情是与 AI 一起工作是多么有趣

将 AI 集成到我的应用程序中,即使是一个基本的教程,也像是从用灰度画图转变为使用纯粹的奇妙色彩

经验让我看到了使用 AI 的乐趣。它也表明,这不需要是一个复杂的任务,任何人都可以做到!所以,大胆地去画你的画吧。

我强烈推荐你尝试一下!

你可以从这里下载这个故事完整的源代码

关于作者

如果你喜欢这篇文章,请考虑关注我的MediumTwitter和我的网站,以便接收我的未来文章和研究工作的通知。

根据原作 https://pan.quark.cn/s/459657bcfd45 的源码改编 Classic-ML-Methods-Algo 引言 建立这个项目,是为了梳理和总结传统机器学习(Machine Learning)方法(methods)或者算法(algo),和各位同仁相互学习交流. 现在的深度学习本质上来自于传统的神经网络模型,很大程度上是传统机器学习的延续,同时也在不少时候需要结合传统方法来实现. 任何机器学习方法基本的流程结构都是通用的;使用的评价方法也基本通用;使用的一些数学知识也是通用的. 本文在梳理传统机器学习方法算法的同时也会顺便补充这些流程,数学上的知识以供参考. 机器学习 机器学习是人工智能(Artificial Intelligence)的一个分支,也是实现人工智能最重要的手段.区别于传统的基于规则(rule-based)的算法,机器学习可以从数据中获取知识,从而实现规定的任务[Ian Goodfellow and Yoshua Bengio and Aaron Courville的Deep Learning].这些知识可以分为四种: 总结(summarization) 预测(prediction) 估计(estimation) 假想验证(hypothesis testing) 机器学习主要关心的是预测[Varian在Big Data : New Tricks for Econometrics],预测的可以是连续性的输出变量,分类,聚类或者物品之间的有趣关联. 机器学习分类 根据数据配置(setting,是否有标签,可以是连续的也可以是离散的)和任务目标,我们可以将机器学习方法分为四种: 无监督(unsupervised) 训练数据没有给定...
本系统采用微信小程序作为前端交互界面,结合Spring Boot与Vue.js框架实现后端服务及管理后台的构建,形成一套完整的电子商务解决方案。该系统架构支持单一商户独立运营,亦兼容多商户入驻的平台模式,具备高度的灵活性与扩展性。 在技术实现上,后端以Java语言为核心,依托Spring Boot框架提供稳定的业务逻辑处理与数据接口服务;管理后台采用Vue.js进行开发,实现了直观高效的操作界面;前端微信小程序则为用户提供了便捷的移动端购物体验。整套系统各模块间紧密协作,功能链路完整闭环,已通过严格测试与优化,符合商业应用的标准要求。 系统设计注重业务场景的全面覆盖,不仅包含商品展示、交易流程、订单处理等核心电商功能,还集成了会员管理、营销工具、数据统计等辅助模块,能够满足不同规模商户的日常运营需求。其多店铺支持机制允许平台方对入驻商户进行统一管理,同时保障各店铺在品牌展示、商品销售及客户服务方面的独立运作空间。 该解决方案强调代码结构的规范性与可维护性,遵循企业级开发标准,确保了系统的长期稳定运行与后续功能迭代的可行性。整体而言,这是一套技术选型成熟、架构清晰、功能完备且可直接投入商用的电商平台系统。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值