エージェントラグシステムはどのようにテクノロジーを変換しますか?
導入
人工知能は新しい時代に入りました。モデルが事前定義されたルールに基づいて単に情報を出力する時代は終わりました。今日のAIの最先端のアプローチは、RAG(検索された生成)システム、より具体的には、情報をインテリジェントに取得、分析、検証するエージェントの使用を中心に展開します。これは、インテリジェントデータ検索の未来です。これにより、機械学習モデルは質問に答えるだけでなく、前例のない精度と深さでそうします。
このブログでは、AIとの対話方法に革命をもたらしている2つの最も強力なツールであるCrewaiとLangchainを使用して、独自のエージェント駆動のRAGシステムを構築する方法を説明します。しかし、コードに飛び込む前に、これらのゲームを変えるテクノロジーに精通してみましょう。
学習成果
- RAGの基礎と、リアルタイムデータ取得を通じてAIの精度を改善する上でのその役割を学びます。
- Crewaiの機能と、その専門的なエージェントがAIシステムの効率的なタスクオートメーションにどのように貢献するかを調査しました。
- Langchainがタスクチェーンをどのように可能にするかを理解し、AI駆動型プロセスを強化する論理的なワークフローを作成しました。
- 信頼できるインテリジェントな情報検索のために、Llama 3、GROQ API、Crewai、Langchainなどのツールを使用してエージェントRAGシステムを構築する方法を発見しました。
この記事は、データサイエンスブログソンの一部として公開されました。
目次
- 導入
- 検索された高級世代とは何ですか?
- クルワイとは何ですか?
- Langchainとは何ですか?
- Crewai Langchain:Ragの夢のチーム
- 独自のエージェントラグシステムを構築します
- ステップ1:環境のセットアップ
- ステップ2:GROQ APIキーの追加
- ステップ3:LLMのセットアップ
- ステップ3:PDFからデータを取得します
- ステップ4:PDFに合格するRAGツールを作成します
- ステップ5:TavilyでWeb検索の追加
- ステップ6:ルーターツールの定義
- ステップ7:エージェントの作成
- ステップ8:タスクの定義
- ステップ9:乗組員の構築
- ステップ10:パイプラインの実行
- 結論
- よくある質問
検索された高級世代とは何ですか?
RAGは、現代のAIのハイブリッドアプローチを表しています。既存の知識のみに依存している従来のモデルとは異なり、Rag Systemsは外部のデータソース(データベース、ドキュメント、Webなど)からリアルタイム情報を引き出して応答を増強します。
簡単に言えば、RAGシステムは、それが「知っている」ことを推測または依存するだけではなく、関連する最新の情報を積極的に取得し、それに基づいてコヒーレントな応答を生成します。これにより、AIの回答は正確であるだけでなく、実際の、検証可能な事実にも基づいていることが保証されます。
なぜぼろきれが重要なのですか?
- 動的情報: RAGを使用すると、AIは外部ソースから電流のリアルタイムデータを取得できるようになり、応答性が高く最新のものになります。
- 精度の向上:外部ドキュメントを取得して参照することにより、RAGはモデルが幻覚または不正確な答えを生成する可能性を減らします。
- 理解の強化:関連する背景情報の検索により、詳細な情報に基づいた回答を提供するAIの能力が向上します。
Ragが何であるかを理解したので、エージェントとともにそれを過充電していることを想像してください。データの取得、その関連性の評価、またはその精度の検証などの特定のタスクを処理するAIエンティティです。これは、CrewaiとLangchainが登場する場所であり、プロセスがさらに合理化され、強力になっています。
クルワイとは何ですか?
クルワイは、エージェントのチームを調整するインテリジェントマネージャーと考えてください。各エージェントは、情報の取得、関連性の採点、エラーの除外など、特定のタスクを専門としています。魔法は、これらのエージェントが協力するときに起こります。協力して複雑なクエリを処理し、正確で正確な答えを提供します。
なぜクルワイは革命的なのですか?
- エージェントインテリジェンス: Crewaiは、タスクを特殊なサブタスクに分解し、それぞれを一意のAIエージェントに割り当てます。
- 共同AI:これらのエージェントは相互作用し、情報とタスクを互いに渡し、最終結果が堅牢で信頼できることを確認します。
- カスタマイズ可能でスケーラブル: Crewaiは非常にモジュール式であり、単純な質問に答えたり、詳細な研究を実行したりするかどうかにかかわらず、幅広いタスクに適応できるシステムを構築できます。
Langchainとは何ですか?
Crewaiはエージェントの知性をもたらしますが、Langchainを使用すると、複雑なAIタスクを結びつけるワークフローを構築できます。エージェントが適切な順序でタスクを実行し、シームレスで高度に組織化されたAIプロセスを作成することが保証されます。
なぜラングチェーンが不可欠なのですか?
LLMオーケストレーション:Langchainは、OpenaiからFaceの抱きしめまで、さまざまな大規模な言語モデル(LLMS)で動作し、複雑な自然言語処理を可能にします。
- データの柔軟性: LangchainをPDFからデータベースやWeb検索まで、さまざまなデータソースに接続し、AIが最も関連性の高い情報にアクセスできるようにすることができます。
- スケーラビリティ: Langchainを使用すると、各タスクが次のタスクにつながるパイプラインを構築できます。マルチステップ質問の回答や研究など、洗練されたAI操作に最適です。
Crewai Langchain:Ragの夢のチーム
CrewaiのエージェントベースのフレームワークとLangchainのタスクオーケストレーションを組み合わせることにより、堅牢なエージェントRAGシステムを作成できます。このシステムでは、各エージェントが役割を果たします。関連するドキュメントを取得したり、取得した情報の品質を検証したり、正確性を評価したりします。この階層化されたアプローチにより、応答は正確であるだけでなく、最も関連性の高い最近の情報に基づいていることが保証されます。
前進して、AIエージェントのパイプラインを使用して複雑な質問に答えるエージェント駆動のRAGシステムを構築しましょう。
独自のエージェントラグシステムを構築します
次に、独自のエージェントRAGシステムの構築を段階的に開始します。
コードに飛び込む前に、必要なライブラリをインストールしましょう。
!PIPインストールCREWAI == 0.28.8 CREWAI_TOOLS == 0.1.6 LANGCHAIN_COMMUNITY == 0.0.29 SENTE-TRANSFORMERS LANGCHAIN-GROQ-QUIET !pip install langchain_huggingface -quiet !PIPインストール - Crewai Langchain Langchain_Communityのアップグレード
ステップ1:環境のセットアップ
必要なライブラリをインポートすることから始めます。
langchain_openaiからChatopenaiをインポートします OSをインポートします CREWAI_TOOLSインポートPDFSearchToolから langchain_community.tools.tools.tavily_search Import tavilysearchresultsから CREWAI_TOOLSインポートツールから クルワイ輸入クルーから CREWAIインポートタスクから CREWAI輸入エージェントから
このステップでは、インポートしました。
- Chatopenai: Llamaのような大規模な言語モデルと対話するためのインターフェイス。
- PDFSearchTool: PDFSから情報を検索および取得するツール。
- TavilySearchResults: Webベースの検索結果を取得するため。
- 乗組員、タスク、エージェント:エージェントやタスクを調整できるクルワイのコアコンポーネント。
ステップ2:GROQ APIキーの追加
GROQ APIにアクセスするには、通常、APIキーを生成して認証する必要があります。 GROQコンソールにログインすることで、このキーを生成できます。プロセスの一般的な概要は次のとおりです。
- 資格情報を使用してGROQコンソールにログインします。
- APIキーに移動します:APIキーを管理できるセクションに移動します。
- 新しいキーを生成する:新しいAPIキーを作成または生成するオプションを選択します。
- APIキーを保存:生成したら、APIリクエストを認証するために必要になるため、キーをコピーして安全に保存してください。
このAPIキーは、GROQシステムを認証および対話するために、APIリクエストのHTTPヘッダーで使用されます。
特定の詳細またはAPIへのアクセスに関連する追加の手順については、必ず公式のGROQドキュメントを参照してください。
OSをインポートします OS.ENVIRON ['GROQ_API_KEY'] = 'GROQ APIキーを追加'
ステップ3:LLMのセットアップ
LLM = Chatopenai( openai_api_base = "https://api.groq.com/openai/v1"、 openai_api_key = os.environ ['groq_api_key']、 model_name = "llama3-8b-8192"、 温度= 0.1、 max_tokens = 1000、 ))
ここでは、システムで使用される言語モデルを定義します。
- llama3-8b-8192: 80億パラメーターを備えた大規模な言語モデルであり、複雑なクエリを処理するのに十分強力になります。
- 温度:モデルの出力が非常に決定的で正確であることを確認するために0.1に設定します。
- Max Tokens: 1000トークンに制限されており、応答が簡潔で関連性のあるままであることを保証します。
ステップ3:PDFからデータを取得します
RAGの仕組みを示すために、PDFをダウンロードして検索します。
リクエストをインポートします pdf_url = 'https://proceedings.neurips.cc/paper_files/paper/2017/file/3f5ee243547dee91fbd053c1c4a845aa-paper.pdf' ' 応答= requests.get(pdf_url) with open( 'attenstion_is_all_you_need.pdf'、 'wb')として: file.write(respons.content)
これにより、有名な「注意が必要です」という紙がダウンロードされ、ローカルに保存されます。このPDFは、検索のために次のステップで使用します。
ステップ4:PDFに合格するRAGツールを作成します
このセクションでは、言語モデルを使用してPDFを検索し、セマンティック理解のために埋め込みを検索するRAGツールを作成します。
- PDF統合: PDFSearchToolは、クエリのためにPDF(TentuneS_IS_ALL_YOU_NEED.PDF)をロードし、システムがドキュメントから情報を抽出できるようにします。
- LLM構成: LLAMA3-8B(GROQのAPI経由)を言語モデルとして使用して、ユーザークエリを処理し、PDFコンテンツに基づいて詳細な回答を提供します。
- 埋め込みセットアップ: HuggingfaceのBAAI/BGE-SMALL-EN-V1.5モデルは埋め込みに使用され、ツールがPDFの最も関連性の高いセクションとクエリを一致させることができます。
最後に、rag_tool.run()関数は、「自己触たちのメカニズムは大規模な言語モデルでどのように進化したのですか?」などのクエリで実行されます。情報を取得します。
rag_tool = pdfsearchtool(pdf = '/content/attenstion_is_alle_you_need.pdf'、 config = dict( llm = dict( Provider = "Groq"、#またはGoogle、Openai、Anthropic、llama2、... config = dict( Model = "llama3-8b-8192"、 #温度= 0.5、 #TOP_P = 1、 #stream = true、 )、、 )、、 Embedder = dict( プロバイダー= "huggingface"、#or openai、ollama、... config = dict( Model = "Baai/bge-small-en-v1.5"、 #task_type = "retireval_document"、 #title = "Embeddings"、 )、、 )、、 )) )) rag_tool.run(「自己関節メカニズムはどのようにして大規模な言語モデルで進化しましたか?」)
ステップ5:TavilyでWeb検索の追加
Web検索機能を有効にするために、Tavily APIキーを順番にセットアップします。
OSをインポートします #Tavily APIキーを設定します os.environ ['tavily_api_key'] = "TavilyAPIキーを追加" web_search_tool = tavilysearchresults(k = 3) web_search_tool.run( "大規模な言語モデルの自己触媒メカニズムとは何ですか?")
このツールを使用すると、Web検索を実行して、最大3つの結果を取得できます。
ステップ6:ルーターツールの定義
@道具 def router_tool(質問): "" router function "" " 問題の「自己関節」の場合: 「vectorStore」を返す それ以外: 「web_search」を返す
ルーターツールは、クエリをベクターストア(高度に技術的な質問用)またはWeb検索のいずれかに向けます。クエリのコンテンツをチェックし、適切な決定を下します。
ステップ7:エージェントの作成
一連のエージェントを定義して、クエリ回答パイプラインのさまざまな部分を処理します。
ルーターエージェント:
質問を適切な検索ツール(PDFまたはWeb検索)にルーティングします。
router_agent = agent( 役割= 'router'、 目標= 'vectorStoreまたはWeb検索へのルートユーザーの質問'、 backstory =( 「あなたは、ユーザーの質問をVectorStoreまたはWeb検索にルーティングする専門家です。」 「検索された世代に関連する概念に関する質問には、VectorStoreを使用してください。」 「これらのトピックに関連する質問のキーワードを厳しくする必要はありません。それ以外の場合は、Web-Searchを使用してください。」 )、、 verbose = true、 Allow_delegation = false、 LLM = LLM、 ))
レトリバーエージェント:
選択したソース(PDFまたはWeb検索)から情報を取得します。
retriever_agent = agent( 役割= "Retriver"、 目標= "VectorStoreから取得した情報を使用して質問に答える」、 backstory =( 「あなたは質問をするタスクのアシスタントです。」 「検索されたコンテキストに存在する情報を使用して、質問に答えます。」 「あなたは明確な簡潔な答えを提供する必要があります。」 )、、 verbose = true、 Allow_delegation = false、 LLM = LLM、 ))
グレーダーエージェント:
取得された情報が関連することを保証します。
grader_agent = agent( 役割= '回答グレーダー'、 目標= '誤った検索を除去する'、 backstory =( 「あなたは、検索されたドキュメントとユーザーの質問への関連性を評価するグレーダーです。」 「ドキュメントにユーザーの質問に関連するキーワードが含まれている場合は、関連性があると評価してください。」 「厳しいテストである必要はありません。答えが質問に関連していることを確認する必要があります。」 )、、 verbose = true、 Allow_delegation = false、 LLM = LLM、 ))
幻覚のグレーダー:
幻覚を除去します(正しく答え)。
hallucination_grader = agent( 役割= "幻覚級"、 目標= "幻覚を除外する"、 backstory =( 「あなたは、答えが一連の事実に基づいている /サポートされているかどうかを評価する幻覚のグレーダーです。」 「回答を細心の注意を払って確認し、提供された回答が質問された質問があるかどうかを確認してください」 )、、 verbose = true、 Allow_delegation = false、 LLM = LLM、 ))
回答グレーダー:
最終的な答えを評価し、それが有用であることを保証します。
Answer_Grader = Agent( 役割= "nessn grader"、 目標= "答えから幻覚を除外します。"、 backstory =( 「あなたは、答えが質問を解決するのに役立つかどうかを評価するグレーダーです。」 「答えを細心の注意を払って確認し、質問が尋ねられたことが理にかなっているかどうかを確認してください」 「答えが関連する場合、明確で簡潔な応答を生成します。」 「gneratedが関連性がない場合は、「web_search_tool」を使用してWebSearchを実行します」 )、、 verbose = true、 Allow_delegation = false、 LLM = LLM、 ))
ステップ8:タスクの定義
各タスクは、特定の役割をエージェントに割り当てるために定義されます。
ルータータスク:
クエリがPDF検索またはWeb検索に移動するかどうかを判断します。
router_task = task( 説明=( "質問のキーワードを分析{質問}" 「キーワードに基づいて、VectorStore検索またはWeb検索の資格があるかどうかを決定します。」 「VectorStore検索の資格がある場合は、「VectorStore」を1つの単語に返してください。」 「Web検索の資格がある場合は、「WebSearch」を1つの単語に返してください。」 「他の前提または説明を提供しないでください。」 )、、 expects_output =( "質問に基づいてバイナリ選択「webearch 'または' vectorstore 'を与える" 「他の前提または説明を提供しないでください。」)、 エージェント= router_agent、 ツール= [router_tool]、 ))
レトリバータスク:
必要な情報を取得します。
retriever_task = task( 説明=( "ルータータスクからの回答に基づいて、それぞれのツールの助けを借りて質問のために{質問}の情報を抽出します。」 「Routerタスクの出力が「WebSearch」である場合に備えて、Web_Serach_Toolを使用してWebから情報を取得します。」 「RAG_TOOLを使用して、Routerタスクの出力が「VectorStore」である場合に備えて、VectorStoreから情報を取得します。」 )、、 expects_output =( "'router_task'の出力を分析する必要があります 「応答が「Webearch」の場合、Web_search_toolを使用してWebから情報を取得します。」 「応答が「VectorStore」の場合、RAG_TOOLを使用してVectorStoreから情報を取得します。」 「クレアを返し、テキストを応答として考慮してください。」)、 agent = retriever_agent、 コンテキスト= [router_task]、 #Tools = [Retriever_Tool]、 ))
グレーダータスク:
検索された情報を評価します。
grader_task = task( 説明=( "quetion {質問}の回収タスクからの回答に基づいて、取得したコンテンツが質問に関連しているかどうかを評価します。」 )、、 expection_output =( "バイナリスコア 'yes'または 'no'スコアは、ドキュメントが質問に関連しているかどうかを示します」 「「retriver_task」からの応答が質問に沿っている場合、「はい」と答えなければなりません。」 「「retriver_task」からの回答が質問に沿っていない場合、「いいえ」と答えなければなりません。」 「「はい」または「いいえ」を除く前文や説明を提供しないでください。」)、 agent = grader_agent、 Context = [Retriver_Task]、 ))
幻覚タスク:
答えが事実に基づいていることを保証します。
hallucination_task = task( 説明=( "quetion {quution}のグレーダータスクからの回答に基づいて、答えが事実に基づいている /サポートされているかどうかを評価します。")、 expection_output =( "バイナリスコア 'yes'または 'no'スコアは、答えが質問と同期しているかどうかを示します」 「答えが有用であり、質問に関する事実が含まれている場合、「はい」。」 答えが役に立たず、質問に関する事実が含まれていない場合、「いいえ」。」 「「はい」または「いいえ」を除く前文や説明を提供しないでください。」)、 エージェント= hallucination_grader、 Context = [Grader_Task]、 ))
回答タスク:
最終的な回答を提供するか、必要に応じてWeb検索を実行します。
Answer_task = task( 説明=( "Quetion {Question}の幻覚タスクからの回答に基づいて、答えが質問を解決するのに役立つかどうかを評価します。」 「答えが「はい」の場合、明確で簡潔な答えを返してください。」 「答えが「いいえ」の場合、「webearch」を実行して応答を返します」)、 expected_output =( "hallucination_task 'が「はい」である場合、明確で簡潔な応答を返します。" 「「web_search_tool」を使用してWeb検索を実行し、「hallucination_task」からの応答が「no」である場合にのみ、クリアおよび簡潔な応答を返します。」 「それ以外の場合は、「ごめんなさい!有効な応答を見つけることができない」として応答します。」)、 Context = [hallucination_task]、 Agent = Answer_Grader、 #ツール= [Answer_Grader_Tool]、 ))
ステップ9:乗組員の構築
エージェントとタスクを、全体的なパイプラインを管理する乗組員にグループ化します。
rag_crew =クルー( Agents = [router_agent、retriever_agent、grader_agent、hallucination_grader、Answer_grader]、 tasks = [router_task、retriever_task、grader_task、hallucination_task、answer_task]、 verbose = true、 ))
ステップ10:パイプラインの実行
最後に、質問をして、ぼろきれシステムを開始します。
inputs = {"question": "自己関節メカニズムは大規模な言語モデルにどのように役立ちますか?"} result = rag_crew.kickoff(inputs = inputs) 印刷(結果)
このパイプラインは、エージェントを通じて質問を処理し、関連する情報を取得し、幻覚を除去し、簡潔で関連する答えを提供します。
結論
Rag、Crewai、Langchainの組み合わせは、AIの未来を垣間見ることができます。エージェントのインテリジェンスとタスクチェーンを活用することにより、よりスマートで、より速く、より正確なシステムを構築できます。これらのシステムは、情報を生成するだけではありません。彼らはそれを積極的に取得、検証、およびフィルタリングして、最高品質の応答を確保します。
CrewaiやLangchainなどのツールが自由に使えるため、インテリジェントでエージェント主導のAIシステムを構築する可能性は無限です。 AIの研究、自動化されたカスタマーサポート、またはその他のデータ集約型フィールドで作業している場合でも、エージェントRAGシステムは、新しいレベルの効率と精度を解き放つための鍵です。
ここをクリックしてリンクにアクセスできます。
キーテイクアウト
- RAGシステムは、自然言語生成とリアルタイムデータの検索を組み合わせて、AIがより信頼できる応答のために外部ソースから正確で最新の情報を引き出すことができるようにします。
- CREWAIは、データの検索、評価、検証などのさまざまなタスクを担当する専門のAIエージェントのチームを採用しており、非常に効率的なエージェントシステムになります。
- Langchainは、さまざまなタスクを接続するマルチステップワークフローの作成を可能にし、AIシステムが大規模な言語モデル(LLM)の論理シーケンスとオーケストレーションを通じて情報をより効果的に処理できるようにします。
- CrewaiのエージェントフレームワークとLangchainのタスクチェーンを組み合わせることにより、情報をリアルタイムで取得および検証するインテリジェントAIシステムを構築し、応答の精度と信頼性を大幅に向上させることができます。
- このブログは、Llama 3、Groq API、Crewai、Langchainなどの高度なツールを使用して独自のエージェントRAGシステムを作成するプロセスを進め、これらのテクノロジーがAI駆動型ソリューションを自動化および強化する方法を明確にしました。
よくある質問
Q1。 Crewaiは、エージェントシステムの構築にどのように貢献していますか?A. CREWAIは、複数のAIエージェントを調整します。各AIエージェントは、情報の取得、関連性の確認、精度の確保などのタスクに特化しています。
Q2。ラグシステムで使用されるラングチェーンは何ですか?A. LangChainは、AIタスクを統合するワークフローを作成し、データ処理と検索の各ステップが正しい順序で発生するようにします。
Q3。 RAGシステムにおけるエージェントの役割は何ですか?A.エージェントは、データの取得、その精度の検証、およびグレーディング応答などの特定のタスクを処理し、システムをより信頼性と正確にします。
Q4。 RAGシステムでGROQ APIを使用する必要があるのはなぜですか?A. GROQ APIは、Llama 3のような強力な言語モデルへのアクセスを提供し、複雑なタスクの高性能AIを可能にします。
この記事に示されているメディアは、Analytics Vidhyaが所有しておらず、著者の裁量で使用されています。
以上がエージェントラグシステムはどのようにテクノロジーを変換しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











エージェントAIに取り組んでいる間、開発者は速度、柔軟性、リソース効率の間のトレードオフをナビゲートすることがよくあります。私はエージェントAIフレームワークを探索していて、Agnoに出会いました(以前はPhi-でした。

このリリースには、GPT-4.1、GPT-4.1 MINI、およびGPT-4.1 NANOの3つの異なるモデルが含まれており、大規模な言語モデルのランドスケープ内のタスク固有の最適化への動きを示しています。これらのモデルは、ようなユーザー向けインターフェイスをすぐに置き換えません

SQLの変更テーブルステートメント:データベースに列を動的に追加する データ管理では、SQLの適応性が重要です。 その場でデータベース構造を調整する必要がありますか? Alter Tableステートメントはあなたの解決策です。このガイドの詳細は、コルを追加します

Rocketpy:A包括的なガイドでロケット発売をシミュレートします この記事では、強力なPythonライブラリであるRocketpyを使用して、高出力ロケット発売をシミュレートすることをガイドします。 ロケットコンポーネントの定義からシミュラの分析まで、すべてをカバーします

AIコミュニティの重要な開発において、Agenticaと一緒にAIは、DeepCoder-14Bという名前のオープンソースAIコーディングモデルをリリースしました。 Openaiのようなクローズドソースの競合他社と同等のコード生成機能を提供する

Chip Giant Nvidiaは、月曜日に、AI Supercomputersの製造を開始すると述べました。これは、大量のデータを処理して複雑なアルゴリズムを実行できるマシンを初めて初めて米国内で実行します。発表は、トランプSI大統領の後に行われます

HiddenLayerの画期的な研究は、主要な大規模な言語モデル(LLMS)における重大な脆弱性を明らかにしています。 彼らの発見は、ほぼすべての主要なLLMSを回避できる「政策の人形劇」と呼ばれる普遍的なバイパス技術を明らかにしています

Guy Periは、McCormickの最高情報およびデジタルオフィサーです。彼の役割からわずか7か月後ですが、ペリは同社のデジタル能力の包括的な変革を急速に進めています。データと分析に焦点を当てている彼のキャリアに焦点が当てられています
