成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何用ChatGPT把控應用程序生命周期

譯文 精選
人工智能
本文將專注于評估LLM是否適合作為代碼生成型開發(fā)的基礎(chǔ)架構(gòu),并得出結(jié)論:可以使用像ChatGPT這樣的大型語言模型來供應、配置和部署現(xiàn)代應用程序,進而用于把控應用程序的生命周期。

譯者 | 朱先忠

審校 | 重樓

簡介

在本文中,我們將從基礎(chǔ)設(shè)施供應到配置管理和部署等各個環(huán)節(jié)來全方位探討大型語言模型(LLM)是否適合應用于實際應用程序的生命周期開發(fā)。這項工作產(chǎn)生的源代碼工程已經(jīng)在GitHub上公開([參考資料11])。基礎(chǔ)設(shè)施即代碼(IaC:Infrastructure as Code)解決方案通過代碼而不是手動流程來促進應用程序基礎(chǔ)設(shè)施的管理和供應([參考資料1])。

當下,這種技術(shù)的應用越來越普遍,一些主流的云提供商已經(jīng)實現(xiàn)了他們自己風格的IaC解決方案,用于與他們所提供的服務進行交互。在這方面,亞馬遜CloudFormation、谷歌的云部署管理器和微軟的Azure資源管理器模板都成功簡化了云服務端的供應,消除了IT運營人員手動啟動服務器、數(shù)據(jù)庫和網(wǎng)絡的需要。然而,這許多的可能性也導致了供應商鎖定的風險,因為給定云提供商所需IaC的定義是不可移植的,并且如果需要不同的云提供商的話,則需要在它們之間進行轉(zhuǎn)換。

值得欣慰的是,在這方面,像Terraform([參考資料2])或Pulumi([參考資料3])這樣的工具提供了對不同云提供商的各種實現(xiàn)的抽象,并促進了便攜式部署的開發(fā)。通過這種方式,供應商鎖定的風險大大降低,應用機構(gòu)就可以對其需求做出動態(tài)反應,而不會產(chǎn)生顯著的實施成本。除此之外,IaC技術(shù)還帶來了許多好處([參考資料4]):

  • 一致性:通過實現(xiàn)可重復的部署,實現(xiàn)了基礎(chǔ)設(shè)施供應的自動化。
  • 降低風險:促進了對基礎(chǔ)設(shè)施管理的不易出錯的近似,因為手動干預被最小化。
  • 成本優(yōu)化:可以更容易地識別不必要的資源,有利于在云提供商之間更快地遷移以應對計費變化。
  • 改進的協(xié)作:可以把腳本集成到版本控制工具中,從而促進個人和團隊之間的協(xié)作。但是,這樣一來,應用程序的生命周期超出了基礎(chǔ)架構(gòu)資源調(diào)配的范圍。下圖顯示了使用不同IaC技術(shù)支持的應用程序生命周期([參考資料5])。

“基礎(chǔ)結(jié)構(gòu)即代碼(IaC)”技術(shù)支持的應用程序生命周期。|資料來源:Josu Diaz de Arcaya等人([參考資料5])。

在這種情況下,IaC技術(shù)的目標不僅僅是提供基礎(chǔ)設(shè)施資源。在啟動必要的基礎(chǔ)設(shè)施之后,配置管理階段可確保所有需求都得到適當?shù)陌惭b。此階段通常使用Ansible([參考資料6])、Chef([參考資料7])、Puppet([參考資料8])等工具來完成。最后,應用程序部署通過各種基礎(chǔ)設(shè)施設(shè)備來監(jiān)督應用程序的協(xié)調(diào)性。

認識LLM

大型語言模型(LLM)是指一類人工智能模型,旨在根據(jù)提供給它們的輸入來理解和生成類似人類的文本。這些模型以其大量的參數(shù)而聞名,這些參數(shù)使它們能夠捕捉語言中的復雜模式和細微差別([參考資料9])。

  • 文本生成:LLM創(chuàng)建的文本可以具有凝聚力,并與其周圍環(huán)境相關(guān)。這些技術(shù)可以用來完成文本、制作材料,甚至進行創(chuàng)造性寫作等活動。
  • 自然語言理解:LLM能夠理解和提取文本中的信息。它們能夠進行態(tài)度分析、文本分類和信息檢索。
  • 翻譯:LLM可以將文本從一種語言翻譯成另一種語言。這對機器翻譯應用非常有益。
  • 回答問題:LLM可以根據(jù)給定的上下文回答問題。它們經(jīng)常被應用于聊天機器人和虛擬助理,以回答用戶的查詢。
  • 文本摘要:LLM可以將長段落的文本總結(jié)為更短、更連貫的摘要。這對于濃縮信息以便快速利用的領(lǐng)域需求非常有用。在上述諸多功能中,我們將專注于文本生成方面的討論。特別是,在基于輸入提示生成正確的IaC代碼的能力方面,大型語言模型(LLM)在自然語言處理領(lǐng)域取得了重大進展,但也提出了一些挑戰(zhàn)和令人擔憂的問題。目前情況下,與LLM相關(guān)的一些關(guān)鍵問題和關(guān)注點包括:
  • 偏見和公平性:LLM可以學習它們所訓練的數(shù)據(jù)中存在的偏見信息,由此可能導致存在偏見或不公平的結(jié)果。
  • 錯誤信息和虛假信息:LLM可能產(chǎn)生虛假或誤導性信息,這可能會導致錯誤信息在網(wǎng)上的傳播。這些模型有可能創(chuàng)造出看似可信但事實上不正確的內(nèi)容。
  • 安全和隱私:LLM可能被濫用來生成惡意內(nèi)容,如深度偽造文本、假新聞或釣魚性質(zhì)的電子郵件等。

下表展示了各種LLM之間的比較情況。

使用大型語言模型生成IaC

為了測試當前LLM工具在IaC領(lǐng)域的性能,我們設(shè)計了一個測試性質(zhì)的應用程序。此案例的最終目標是使用基于Python的服務器端FastAPI框架在虛擬機中構(gòu)建一個API,該框架允許客戶端使用HTTP方法在Elasticsearch集群中執(zhí)行搜索和刪除任務。

此集群將由三個節(jié)點組成,每個節(jié)點都位于自己的虛擬機中;在另一臺機器中安裝Kibana,這是一個支持可視化的集群管理工具。當然,此實驗案例設(shè)計的一切都必須安裝在AWS云環(huán)境中。下圖顯示了此案例的體系結(jié)構(gòu):

設(shè)計用于測試LLM生成IaC的可行性的應用案例設(shè)計用于測試LLM生成IaC的可行性的應用案例

開發(fā)過程中,具有挑戰(zhàn)性的任務在于使用LLM工具成功完成以下三項任務。在本文中,我們使用了OpenAI公司的ChatGPT模型。

  1. 編寫Terraform聲明式編碼,以便在AWS云平臺中使用五個虛擬機構(gòu)建基礎(chǔ)設(shè)施。
  2. 編寫FastAPI應用程序的源代碼,通過基于API的HTTP方法執(zhí)行文檔搜索和刪除操作。
  3. 編寫Ansible自動化管理代碼,用于在三個節(jié)點上部署和安裝Elasticsearch集群、在另一個節(jié)點上安裝Kibana以及在其余節(jié)點上安裝FastAPI應用程序的可靠代碼。

挑戰(zhàn)任務#1

對于上面的挑戰(zhàn)1,我們針對ChatGPT模型使用了英文提示,翻譯成中文后大致意思是:

“我需要通過Terraform在您想使用的公共云提供商處創(chuàng)建五個虛擬機。這些虛擬機的用途如下:其中三個用于部署Elasticsearch集群,該集群每天將接收2G的數(shù)據(jù);另一個是Kibana;最后一個是部署FastAPI應用程序。您應該為每個虛擬機選擇硬件,并為每個虛擬機器選擇云提供商。對于您不知道的變量,使用變量作為占位符即可。最后,請推薦使用廉價的應用實例。”

ChatGPT模型最初的響應很好,但是我們需要不斷迭代。例如,我們希望在一個單獨的文件中定義所有變量,這導致了下面的配置代碼。

variable "region" {
 description = "Region where the resources will be provisioned"
 default = "us-west-1"
}

variable "instance_type_elasticsearch" {
 description = "Instance type for Elasticsearch nodes"
 default = "t2.micro"
}

variable "instance_type_kibana" {
 description = "Instance type for Kibana"
 default = "t2.micro"
}

variable "instance_type_fastapi" {
 description = "Instance type for FastAPI application"
 default = "t2.micro"
}

variable "ami" {
 description = "AMI ID for the virtual machines"
 default = "ami-0f8e81a3da6e2510a" 
}

variable "my_ip" {
 description = "Your public IP address"
 default = "0.0.0.0/0"
}

variable "ssh_port" {
 description = "Port for SSH access"
 default = 22
}

variable "http_port" {
 description = "Port for HTTP access"
 default = 80
}

variable "https_port" {
 description = "Port for HTTPS access"
 default = 443
}

variable "key_name" {
 description = "Name of the SSH key pair"
 default = "my-key-pair"
}

文件variables.tf的部分代碼摘錄,其中包含要配置的變量

同樣,我們希望知道部署的IP地址,并且我們希望此配置位于一個單獨的文件中。

output "elasticsearch_ips" {
 value = aws_instance.elasticsearch.*.public_ip
}

output "kibana_ip" {
 value = aws_instance.kibana.*.public_ip
}

output "fastapi_ip" {
 value = aws_instance.fastapi.*.public_ip
}

文件output.tf的代碼摘錄,包含新提供的虛擬機的IP地址

人工智能在描述我們想要的實例方面做得很好,并為每個實例配置了所需的安全組。

resource "aws_instance" "elasticsearch" {
 count = 3
 ami = var.ami
 instance_type = var.instance_type_elasticsearch
 security_groups = [aws_security_group.ssh_sg.name]
 key_name = aws_key_pair.ssh_key.key_name
}

resource "aws_instance" "kibana" {
 count = 1
 ami = var.ami
 instance_type = var.instance_type_kibana
 security_groups = [aws_security_group.ssh_sg.name]
 key_name = aws_key_pair.ssh_key.key_name
}

resource "aws_instance" "fastapi" {
 count = 1
 ami = var.ami
 instance_type = var.instance_type_fastapi
 security_groups = [aws_security_group.ssh_sg.name]
 key_name = aws_key_pair.ssh_key.key_name
}

resource "aws_security_group" "ssh_sg" {
 ingress {
 from_port = var.ssh_port
 to_port = var.ssh_port
 protocol = "tcp"
 cidr_blocks = [var.my_ip]
 }
}

resource "aws_security_group" "http_sg" {
 ingress {
 from_port = var.http_port
 to_port = var.https_port
 protocol = "tcp"
 cidr_blocks = [var.my_ip]
 }
}

resource "aws_key_pair" "ssh_key" {
 key_name = var.key_name
 public_key = file("~/.ssh/id_rsa.pub") # Provide the path to your public key file
}

文件main.tf的代碼摘錄,其中包含要配置的虛擬機

它還為我們想要的安全組創(chuàng)建了必要的資源,并在將各種端口定義為變量時使用占位符。請參考前面文件main.tf中與使用的安全組部分相關(guān)的代碼。

總的來說,ChatGPT在完成這項任務方面做得很好。然而,我們花了一段時間才獲得可行的配置,并保證網(wǎng)絡配置是正確的。例如,我們希望連接到每個已配置的虛擬機,并通過進一步的提示詞來提出對這方面的要求,翻譯成中文的大致意思是:

我希望通過ssh從我的筆記本電腦訪問所有這些實例,而且,Kibana實例需要從我的手提電腦上以http和https兩種方式進行訪問。

上面的提示產(chǎn)生了一個幾乎正確的代碼,出現(xiàn)小問題的原因是AI與入口和出口策略混淆了。然而,這很容易發(fā)現(xiàn)并修復。

在能夠訪問虛擬機之后,由于缺乏權(quán)限,我們遇到了無法連接到它們的問題。這導致了與ChatGPT更長的對話,最終我們自己也通過很容易地添加少量修改內(nèi)容解決了問題。

挑戰(zhàn)任務#2

對于上面的挑戰(zhàn)2,我們針對ChatGPT使用了以下提示,翻譯成中文后的大致意思是:

“我需要創(chuàng)建一個FastAPI應用程序。這些API的目的是提供在Elasticsearch集群中存儲單個Json文檔、存儲多個文檔并刪除它們的方法。Elasticsearch集群部署在3個節(jié)點中,具有用戶“tecnalia”和密碼“iac-llm”的基本身份驗證。”

這一提示的結(jié)果非常成功。該應用程序使用Elasticsearch Python包,與Elasticsearch集群進行交互,而且經(jīng)測試是完全有效的。只是我們必須記住,我們需要更改部署集群的節(jié)點的IP地址。在下圖中,創(chuàng)建了第一個方法,用于在Elasticsearch中插入單個文檔。

from fastapi import FastAPI, HTTPException
from elasticsearch import Elasticsearch

app = FastAPI()

# 使用集群節(jié)點初始化Elasticsearch客戶端
es = Elasticsearch(
 ['node1:9200', 'node2:9200', 'node3:9200'],
 http_auth=('tecnalia', 'iac-llm'))


@app.post("/store-single-document/")
async def store_single_document(document: dict):
 try:
 # Index a single document into Elasticsearch
 response = es.index(index='your_index_name', body=document)
 return response
 except Exception as e:
 raise HTTPException(status_code=500, detail=str(e))

存儲單個文檔方法的代碼摘錄

然后,第二個方法用于在單個調(diào)用中創(chuàng)建各種文檔的大容量插入。

@app.post("/store-multiple-documents/")
async def store_multiple_documents(documents: list):
 try:
 #將多個文檔批量插入Elasticsearch
 actions = [{"_op_type": "index", "_index": 'your_index_name', "_source": doc} for doc in documents]
 response = es.bulk(actions)
 return response
 except Exception as e:
 raise HTTPException(status_code=500, detail=str(e))

存儲多個文檔方法的代碼摘錄

最后的一種方法可以用于從Elasticsearch集群中刪除單個文檔。

@app.delete("/delete-document/{document_id}")
async def delete_document(document_id: str):
 try:
 #按文檔ID刪除文檔
 response = es.delete(index='your_index_name', id=document_id)
 return response
 except Exception as e:
 raise HTTPException(status_code=500, detail=str(e))

刪除文檔方法的代碼摘錄

我們認為這個實驗非常成功,因為它正確地選擇了一個合適的庫來完成任務。然而,要將這些代碼轉(zhuǎn)化為可用于生產(chǎn)環(huán)境的軟件的話,還需要進一步的手動改進。

挑戰(zhàn)任務#3

對于上面的挑戰(zhàn)3,我們使用了以下提示,翻譯成中文后的大致意思是:

“生成Ansible配置代碼,用于在三個節(jié)點上安裝Elasticsearch集群。還請?zhí)砑右粋€連接到集群的Kibana節(jié)點。”

這個提示在生成所需的Ansible腳本方面做得很好。它在將源代碼組織成各種文件方面做得很好。首先,包含所有節(jié)點詳細信息的清單。請記住,此文件需要使用任務#1中生成的正確IP地址進行調(diào)整。

[elasticsearch]
node1 ansible_host=192.168.56.101
node2 ansible_host=192.168.56.102
node3 ansible_host=192.168.56.103

[elasticsearch:vars]
ansible_user=vagrant

文件inventory.ini的代碼摘錄

然后,下面顯示了安裝Elasticsearch的主要腳本。這是它的摘錄,完整的示例可以在Github存儲庫([參考資料11])中找到。

---
- name: Install Elasticsearch Cluster
 hosts: elasticsearch
 become: yes

 tasks:
 - name: Add Elasticsearch GPG Key
 apt_key:
 url: https://artifacts.elastic.co/GPG-KEY-elasticsearch
 state: present

 - name: Add Elasticsearch APT Repository
 apt_repository:
 repo: "deb https://artifacts.elastic.co/packages/7.x/apt stable main"
 state: present
 filename: "elastic-7.x"

 - name: Update apt cache
 apt:
 update_cache: yes

 - name: Install OpenJDK
 apt:
 name: openjdk-11-jdk
 state: present

 - name: Install Elasticsearch
 apt:
 name: elasticsearch
 state: present

 - name: Configure Elasticsearch Cluster
 template:
 src: elasticsearch.yml.j2
 dest: /etc/elasticsearch/elasticsearch.yml
 notify:
 - Restart Elasticsearch

 handlers:
 - name: Restart Elasticsearch
 systemd:
 name: elasticsearch
 enabled: yes
 state: restarted

Elasticsearch_playbook.yml的代碼摘錄

另一方面,每個Elasticsearch節(jié)點的必要配置已方便地生成為Jinja文件。在這種情況下,我們不得不手動添加path.logs和path.data配置,因為Elasticsearch由于權(quán)限問題無法啟動。

cluster.name: your_cluster_name
node.name: "{{ ansible_hostname }}"
network.host: 0.0.0.0
discovery.seed_hosts:
 - 192.168.56.101
 - 192.168.56.102
 - 192.168.56.103
cluster.initial_master_nodes:
 - 192.168.56.101
path.logs: /var/log/elasticsearch
path.data: /var/lib/elasticsearch

elasticsearch.yml.j2的代碼摘錄

類似地,ChatGPT能夠為Kibana實例生成類似的配置。但是,在這種情況下,為了方便起見,我們手動將配置分離到一個單獨的.yml文件中。

類似地,引用Kibana實例的Jinja文件看起來也非常不錯,盡管IP地址最好參數(shù)化。

總的來說,我們發(fā)現(xiàn)ChatGPT非常擅長制作項目的框架。然而,要將該框架轉(zhuǎn)化為生產(chǎn)級應用程序,仍然需要執(zhí)行大量操作。在這方面,需要對所使用的技術(shù)有深入的專業(yè)知識,以便更好地細化項目。

結(jié)論

本文介紹了使用ChatGPT這種大型語言模型來監(jiān)督應用程序的生命周期的完整過程。接下來,簡要討論一下這種工作方式的利弊。

優(yōu)點

  • 使用LLM來支持應用程序生命周期的各個階段對啟動項目特別有益,尤其是在眾所周知的技術(shù)中。
  • 最初的框架結(jié)構(gòu)良好,這種技術(shù)提供了開發(fā)團隊原本可能不會使用的結(jié)構(gòu)和方法。

不足

  • LLM存在與人工智能解決方案的使用相關(guān)的偏見風險;在本文實例中,ChatGPT選擇了AWS云平臺,而不是類似的方案選項。
  • 將項目打磨為真正可用的生產(chǎn)環(huán)境項目可能會很麻煩,而且有時手動調(diào)整代碼更容易,這需要對所使用的技術(shù)有廣泛的了解。

鳴謝

這項工作由巴斯克政府的SIIRSE Elkartek項目資助(適用于Industry 5.0的穩(wěn)健、安全和合乎道德的智能工業(yè)系統(tǒng):一個規(guī)范、設(shè)計、評估和監(jiān)控的先進范例,Elkartek 2022 KK-2022/00007)。

作者貢獻

本文概念化、分析、調(diào)查和最終成稿是Juan Lopez de Armentia、Ana Torre和Gorka Zárate三人共同努力的結(jié)果。

參考資料

  1. What is Infrastructure as Code (IaC)? (2022). https://www.redhat.com/en/topics/automation/what-is-infrastructure-as-code-iac
  2. Terraform by HashiCorp. (n.d.). Retrieved October 5, 2023, from https://www.terraform.io
  3. Pulumi — Universal Infrastructure as Code. (n.d.). Retrieved October 5, 2023, from https://www.pulumi.com/
  4. The 7 Biggest Benefits of Infrastructure as Code — DevOps. (n.d.). Retrieved October 5, 2023, from https://duplocloud.com/blog/infrastructure-as-code-benefits/
  5. Diaz-De-Arcaya, J., Lobo, J. L., Alonso, J., Almeida, A., Osaba, E., Benguria, G., Etxaniz, I., & Torre-Bastida, A. I. (2023). IEM: A Unified Lifecycle Orchestrator for Multilingual IaC Deployments ACM Reference Format. https://doi.org/10.1145/3578245.3584938
  6. Ansible is Simple IT Automation. (n.d.). Retrieved October 5, 2023, from https://www.ansible.com/
  7. Chef Software DevOps Automation Solutions | Chef. (n.d.). Retrieved October 5, 2023, from https://www.chef.io/
  8. Puppet Infrastructure & IT Automation at Scale | Puppet by Perforce. (n.d.). Retrieved October 5, 2023, from https://www.puppet.com/
  9. Kerner, S. M. (n.d.). What are Large Language Models? | Definition from TechTarget. Retrieved October 5, 2023, from https://www.techtarget.com/whatis/definition/large-language-model-LLM
  10. Sha, A. (2023). 12 Best Large Language Models (LLMs) in 2023 | Beebom. https://beebom.com/best-large-language-models-llms/
  11. Diaz-de-Arcaya, J., Lopez de Armentia, J., & Zarate, G. (n.d.). iac-llms GitHub. Retrieved October 5, 2023, from https://github.com/josu-arcaya/iac-llms
  12. Elastic Client Library Maintainers. (2023). elasticsearch · PyPI. https://pypi.org/project/elasticsearch/

譯者介紹

朱先忠,51CTO社區(qū)編輯,51CTO專家博客、講師,濰坊一所高校計算機教師,自由編程界老兵一枚。

原文標題:Mastering the Future: Evaluating LLM-Generated Data Architectures leveraging IaC technologies,作者:Josu Diaz de Arcaya

責任編輯:華軒 來源: 51CTO
相關(guān)推薦

2009-06-24 10:34:39

JSF生命周期JSF應用程序

2011-07-20 15:58:58

iPhone 應用程序 生命周期

2015-07-09 15:42:48

ios應用生命周期

2013-07-31 14:50:32

Windows PhoWP應用程序生命周期

2014-02-24 10:50:32

DevOps云應用

2013-09-26 11:20:34

Informatica

2012-05-28 15:37:20

WP程序生命周期

2011-08-10 16:50:10

iPhone生命周期

2014-07-11 11:09:10

App應用程序生命周期

2010-08-01 15:29:04

AndroidDalvik

2012-08-16 09:38:38

ASP.NET

2014-09-28 11:28:02

Android應用程序生命周期

2025-04-28 01:22:00

2010-04-02 09:02:02

ASP.NET MVC

2012-06-20 10:29:16

敏捷開發(fā)

2014-07-16 13:39:30

Windows Pho

2015-07-08 16:28:23

weak生命周期

2012-12-04 10:02:03

2022-04-19 07:20:24

軟件開發(fā)安全生命周期SSDLC應用安全

2023-04-19 07:50:59

?云原生生命周期管理
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 黄色电影在线免费观看 | 成人精品在线观看 | 天天干亚洲| 国产精品色 | 黑人巨大精品欧美一区二区免费 | 国产成人一区在线 | 亚洲电影第1页 | 国产精品久久久久久久免费大片 | 亚洲女人天堂网 | 91中文在线观看 | 久久久www成人免费无遮挡大片 | 中文字幕日韩一区 | 欧美在线视频网站 | 日韩视频在线免费观看 | 国产精品视频免费观看 | 日韩精品视频在线 | 国产乱码精品1区2区3区 | 伊人二区 | a级大片免费观看 | 国产在线麻豆精品入口 | 亚洲精品视频免费看 | 久久精品无码一区二区三区 | 欧美电影一区 | 天天久 | 久草免费在线视频 | 97超碰人人 | 亚洲网址 | aacc678成免费人电影网站 | 91精品国产色综合久久不卡98 | 亚洲成人一区二区三区 | 国产一区二区三区免费观看视频 | 欧美一区二区三区在线观看 | 亚洲天堂中文字幕 | 欧美成年黄网站色视频 | 精品一区二区三区入口 | 久久久国产精品网站 | 欧美视频 | 在线观看黄视频 | 91免费看片 | 国产夜恋视频在线观看 | 日韩久久精品 |