GMI Cloud で AI エージェントを構築する方法シリーズのパート 2
Aliquet morbi justo auctor cursus auctor aliquam. Neque elit blandit et quis tortor vel ut lectus morbi. Amet mus nunc rhoncus sit sagittis pellentesque eleifend lobortis commodo vestibulum hendrerit proin varius lorem ultrices quam velit sed consequat duis. Lectus condimentum maecenas adipiscing massa neque erat porttitor in adipiscing aliquam auctor aliquam eu phasellus egestas lectus hendrerit sit malesuada tincidunt quisque volutpat aliquet vitae lorem odio feugiat lectus sem purus.
Viverra mi ut nulla eu mattis in purus. Habitant donec mauris id consectetur. Tempus consequat ornare dui tortor feugiat cursus. Pellentesque massa molestie phasellus enim lobortis pellentesque sit ullamcorper purus. Elementum ante nunc quam pulvinar. Volutpat nibh dolor amet vitae feugiat varius augue justo elit. Vitae amet curabitur in sagittis arcu montes tortor. In enim pulvinar pharetra sagittis fermentum. Ultricies non eu faucibus praesent tristique dolor tellus bibendum. Cursus bibendum nunc enim.
Mattis quisque amet pharetra nisl congue nulla orci. Nibh commodo maecenas adipiscing adipiscing. Blandit ut odio urna arcu quam eleifend donec neque. Augue nisl arcu malesuada interdum risus lectus sed. Pulvinar aliquam morbi arcu commodo. Accumsan elementum elit vitae pellentesque sit. Nibh elementum morbi feugiat amet aliquet. Ultrices duis lobortis mauris nibh pellentesque mattis est maecenas. Tellus pellentesque vivamus massa purus arcu sagittis. Viverra consectetur praesent luctus faucibus phasellus integer fermentum mattis donec.
Commodo velit viverra neque aliquet tincidunt feugiat. Amet proin cras pharetra mauris leo. In vitae mattis sit fermentum. Maecenas nullam egestas lorem tincidunt eleifend est felis tincidunt. Etiam dictum consectetur blandit tortor vitae. Eget integer tortor in mattis velit ante purus ante.
“Lacus donec arcu amet diam vestibulum nunc nulla malesuada velit curabitur mauris tempus nunc curabitur dignig pharetra metus consequat.”
Commodo velit viverra neque aliquet tincidunt feugiat. Amet proin cras pharetra mauris leo. In vitae mattis sit fermentum. Maecenas nullam egestas lorem tincidunt eleifend est felis tincidunt. Etiam dictum consectetur blandit tortor vitae. Eget integer tortor in mattis velit ante purus ante.
で パート 1、ビジョン、ユースケース、成功基準を定義することで、AIエージェントの基礎を築きました。今こそ、そのビジョンを実現する時です。第 2 回目の記事では、関連性、コスト、潜在的な ROI に基づいてどの業界コンベンションに参加する価値があるかをユーザーが判断するのに役立つ Minimum Viable Product (MVP) AI エージェントを構築するプロセスを段階的に見ていきます。
さっそくビルドに入りましょう。
機能を構築する前に、開発のための強固な基盤が必要です。これには、適切なツールの選択、環境の構成、迅速な反復を可能にするワークフローの設定などが含まれます。
さて、デザインはどうですか?入力から期待される出力までの全体的なワークフローは次のとおりです。
何らかの理由で状況を変えたいと思った場合に備えて、各ステップを個別のモジュールに分割します。このフレームワークは柔軟性を実現し、コンテンツ検索や投資収益率 (ROI) のスコアリングなど、システムのさまざまな部分をシステムの他の部分を壊すことなく独立して進化させることができます。
そう願っています!
ここでは、OpenAI API と互換性のある GMI ホストの LLM エンドポイントを使用しますが、同様の構成であればどのエンドポイントでも使用できます。この場合は、「設定」→「モデルプロバイダー」を追加 →「OpenAI API 互換を追加」に進んでください。
に移動 https://cloud.dify.ai/apps、ログインしていることを確認してください。そうすれば、プロジェクトの作成を開始できます。ここでは Chatflow を使用します。
フローができたので、今度は個々のモジュールを組み立てます。まず、何が入力として扱われるのかを見てみましょう。すでにわかっているように、ゴミが入る = ゴミが出る!
AIエージェントは、どの業界イベントにチームを送る価値があるかを判断する必要があります。そこで、基盤となるLLMが処理できる形式で、その情報を検索、抽出、集計する方法を提供する必要があります。
構築する時が来ました。
入力パラメータを追加します。
API を使用して検索する
ソースコンテキストを理解するために、検索結果にイテレータを追加します。検索エンジンは多くの結果を関連度順に並べ替えて表示するので、このステップは重要です。イベントウェブサイトやアグリゲーターが上位の結果になる傾向があり、イテレーターの仕事はこれらのイベントに関する詳細情報を抽出することです。
ここでファイヤークロールがスクレイピングに役立ちます。
GMI 合同会社を追加
ユーザープロンプト:
**Instructions:**
You are provided with Markdown content containing information about one or more events. Your task is to extract the event details and return them in a list of JSON objects. Each JSON object should represent a single event and conform to the following schema:
```json
{
"title": "string",
"start_date": "string",
"location": "string",
"topic/focus": "string",
"audience": "string",
"summary": "string"
}
```
Important Considerations:
Strict Adherence to Schema: Ensure that the output is a valid JSON array containing JSON objects that strictly adhere to the provided schema. Do not include any extra text or explanations outside the JSON array.
Handle Missing Information: If the Markdown content does not provide information for a particular field in the JSON schema, set the value of that field to "N/A".
Multiple Events: If the Markdown describes multiple events, return a JSON array containing one JSON object for each event.
Markdown Variations: Be prepared to handle variations in how event information might be presented in the Markdown. Look for keywords like "Date:", "Time:", "Location:", "Topic:", "Audience:", "Summary:", etc., but also be able to infer information from surrounding text.
Data Extraction: Extract the most relevant information for each field. For example, for the "time" field, extract the start date of the event in format of YYYY-MM-DD. For the "summary" field, provide a concise summary of the event.
JSON Output Only: The only output you should provide is the JSON array. Do not include any introductory or concluding remarks.
Markdown Content:
<Scrape text>
この時点で、LLM 出力を JSON 形式に解析する必要があります。 JSON (構造化された形式) に変換することで、下流のステップで結果を簡単かつ正確に処理できるようになります。
使用したコードは次のとおりです。
import json
import re
def main(arg1: str) -> dict:
json_blocks = re.findall(r'(\[\s*\{.*?\}\s*\])', arg1, re.DOTALL)
all_events: List[dict] = []
for block in json_blocks:
try:
parsed_str = block.encode('utf-8').decode('unicode_escape')
parsed_json = json.loads(parsed_str)
# If the parsed JSON is a list, extend the result
if isinstance(parsed_json, list):
all_events.extend(parsed_json)
# If it's a single object, append it
elif isinstance(parsed_json, dict):
all_events.append(parsed_json)
except json.JSONDecodeError:
continue
return {
"events": all_events
}
次は何?さて、これで入力データは用意できましたが、AI エージェントが処理を開始する前にデータをクリーンアップしてソートする必要があります。それでは、さまざまな検索結果から構造化されたイベントを集約し、重複を排除し、日付順に並べ替えるときです。
使用したコードは次のとおりです。
import json
from datetime import datetime
def main(arg1: list) -> dict:
unique_events = {event["title"]: event for event in arg1}.values()
def sort_key(event):
try:
return datetime.strptime(event["start_date"], "%Y-%m-%d")
except ValueError:
return datetime.max # Assign max date to push invalid dates to the end
sorted_events = sorted(unique_events, key=sort_key)
sorted_events = sorted_events
return {
"events": sorted_events,
}
これがデータ入力ステップです!ここまでで、ワークフローパターンを作成しました。
次に、エージェントにこのデータを検索して、やりたいことを探すように教えます。
これで、単純なパターン (Web クエリの作成 → Web 検索 → LLM による出力の解析) を構築できました。このパターンは、ROI を決定する際に次の 2 つの重要な要素を検索する際に活用できます。 チケット価格とホテル価格
注:より正確で詳細な検索(割引付きのティッカー価格など)をご希望の場合は、このステップを拡張して、この目的のために特別に構築された別のエージェントに問い合わせることもできます。
次に、結果と出力を集計します。
検証なしでは MVP は完成しません。エージェントが価値を提供することを確認するために、複数回のテストを実施しました。
以下を確認しました。
早期のフィードバックを集めるために、MVP を社内の利害関係者と共有しました。これに基づいて、当社は以下のことを行いました。
また、次のことも行います。
最終段階は、MVPを幅広いテストに使用できる状態にすることでした。
次の 2 つの導入戦略をテストしました。
コアが機能すれば、今後のイテレーションでは次のことが可能になります。
将来を見据えて、次の機能として考えられるものは次のとおりです。
この AI エージェントは、忙しいプロフェッショナルがどのイベントに参加する価値があるかを判断できるようにするというシンプルなアイデアから始まりました。系統的な開発、反復テスト、適切なツールを通じて、無駄のない柔軟な MVP によってそのアイデアを実現しました。
パート3では、このMVPを本番環境に対応したシステムに進化させ、パフォーマンスを最適化し、ビジネス上の意思決定ワークフローにさらに深く統合する方法を探ります。
それまでは、迅速に構築し、好奇心を持ち続け、面倒な作業は AI に任せてください。
ところで、私たちのものを見たことがありますか AI を活用した音声翻訳ガイドの作成?オープンソースのツールのみを使用しています!
制限なく AI を構築!