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

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

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

譯者 | 朱先忠

審校 | 重樓

簡介

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

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

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

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

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

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

認識LLM

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

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

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

使用大型語言模型生成IaC

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

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

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

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

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

挑戰任務#1

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

“我需要通過Terraform在您想使用的公共云提供商處創建五個虛擬機。這些虛擬機的用途如下:其中三個用于部署Elasticsearch集群,該集群每天將接收2G的數據;另一個是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的代碼摘錄,其中包含要配置的虛擬機

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

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

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

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

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

挑戰任務#2

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

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

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

from fastapi import FastAPI, HTTPException
from elasticsearch import Elasticsearch

app = FastAPI()

# 使用集群節點初始化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))

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

然后,第二個方法用于在單個調用中創建各種文檔的大容量插入。

@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))

刪除文檔方法的代碼摘錄

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

挑戰任務#3

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

“生成Ansible配置代碼,用于在三個節點上安裝Elasticsearch集群。還請添加一個連接到集群的Kibana節點。”

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

[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節點的必要配置已方便地生成為Jinja文件。在這種情況下,我們不得不手動添加path.logs和path.data配置,因為Elasticsearch由于權限問題無法啟動。

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地址最好參數化。

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

結論

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

優點

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

不足

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

鳴謝

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

作者貢獻

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

參考資料

  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社區編輯,51CTO專家博客、講師,濰坊一所高校計算機教師,自由編程界老兵一枚。

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

責任編輯:華軒 來源: 51CTO
相關推薦

2015-07-09 15:42:48

ios應用生命周期

2013-07-31 14:50:32

Windows PhoWP應用程序生命周期

2009-06-24 10:34:39

JSF生命周期JSF應用程序

2011-07-20 15:58:58

iPhone 應用程序 生命周期

2014-02-24 10:50:32

DevOps云應用

2011-08-10 16:50:10

iPhone生命周期

2014-07-11 11:09:10

App應用程序生命周期

2013-09-26 11:20:34

Informatica

2012-05-28 15:37:20

WP程序生命周期

2010-08-01 15:29:04

AndroidDalvik

2014-09-28 11:28:02

Android應用程序生命周期

2025-04-28 01:22:00

2012-08-16 09:38:38

ASP.NET

2010-04-02 09:02:02

ASP.NET MVC

2012-06-20 10:29:16

敏捷開發

2014-07-16 13:39:30

Windows Pho

2015-07-08 16:28:23

weak生命周期

2023-04-19 07:50:59

?云原生生命周期管理

2012-12-04 10:02:03

2022-04-19 07:20:24

軟件開發安全生命周期SSDLC應用安全
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久久久久久久久成人 | 欧美在线a | 日韩成人在线免费观看 | 国产精品日韩欧美一区二区三区 | 亚洲欧美日韩网站 | 国产一级片在线播放 | 亚洲日本一区二区三区四区 | 日韩中文字幕 | 亚洲视频精品 | 在线看黄免费 | 玖玖免费 | 欧美一级片 | 亚洲欧美在线观看 | 一区二区在线 | 欧美日韩不卡合集视频 | 在线观看视频91 | h视频免费看 | 日本黄色大片免费 | 欧美不卡一区 | 久久国产精品视频 | 成人免费在线播放视频 | 免费的网站www | 久久久久久91香蕉国产 | 欧美视频免费在线 | 国产婷婷在线视频 | www四虎影视 | 亚洲国产精品一区二区第一页 | 国产小视频在线 | 免费在线观看成人 | 91欧美激情一区二区三区成人 | 亚洲少妇综合网 | 日韩久久精品 | 欧美亚洲国产日韩 | 欧美色a v| 日本在线一区二区三区 | 国产精品久久久久久久久久久久 | 蜜桃免费一区二区三区 | 午夜精品一区二区三区在线播放 | 国产一区二区三区四区五区加勒比 | 免费h视频 | 欧美一区二区三区在线观看视频 |