で パート 1、ビジョン、ユースケース、成功基準を定義することで、AIエージェントの基礎を築きました。今こそ、そのビジョンを実現する時です。第 2 回目の記事では、関連性、コスト、潜在的な ROI に基づいてどの業界コンベンションに参加する価値があるかをユーザーが判断するのに役立つ Minimum Viable Product (MVP) AI エージェントを構築するプロセスを段階的に見ていきます。
さっそくビルドに入りましょう。
1。どのように機能するのでしょうか?
機能を構築する前に、開発のための強固な基盤が必要です。これには、適切なツールの選択、環境の構成、迅速な反復を可能にするワークフローの設定などが含まれます。
さて、デザインはどうですか?入力から期待される出力までの全体的なワークフローは次のとおりです。

何らかの理由で状況を変えたいと思った場合に備えて、各ステップを個別のモジュールに分割します。このフレームワークは柔軟性を実現し、コンテンツ検索や投資収益率 (ROI) のスコアリングなど、システムのさまざまな部分をシステムの他の部分を壊すことなく独立して進化させることができます。
そう願っています!
必要なもの:
- 大規模言語モデル (LLM) エンドポイント
- Dify.ai アカウント (無料ですのでご安心ください!)AI ワークフローの管理用
- ファイアクロール —WebサイトをLLM対応のデータにスクレイピングするためのものです。無料プランを使用します。
エンドポイントを取得
ここでは、OpenAI API と互換性のある GMI ホストの LLM エンドポイントを使用しますが、同様の構成であればどのエンドポイントでも使用できます。この場合は、「設定」→「モデルプロバイダー」を追加 →「OpenAI API 互換を追加」に進んでください。

チャットフローで Dify プロジェクトを作成する
に移動 https://cloud.dify.ai/apps、ログインしていることを確認してください。そうすれば、プロジェクトの作成を開始できます。ここでは Chatflow を使用します。

2。データ入力
フローができたので、今度は個々のモジュールを組み立てます。まず、何が入力として扱われるのかを見てみましょう。すでにわかっているように、ゴミが入る = ゴミが出る!
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,
}
これがデータ入力ステップです!ここまでで、ワークフローパターンを作成しました。
- ファイヤークロールを使用して収集したデータ
- 上記のデータにコンテキストを追加しました
- データを使用可能な形式に解析しました
- 解析された最終データを集約、重複排除、ソートしました
次に、エージェントにこのデータを検索して、やりたいことを探すように教えます。
3。データの検索と使用
これで、単純なパターン (Web クエリの作成 → Web 検索 → LLM による出力の解析) を構築できました。このパターンは、ROI を決定する際に次の 2 つの重要な要素を検索する際に活用できます。 チケット価格とホテル価格
注:より正確で詳細な検索(割引付きのティッカー価格など)をご希望の場合は、このステップを拡張して、この目的のために特別に構築された別のエージェントに問い合わせることもできます。

次に、結果と出力を集計します。

4。テストと反復
検証なしでは MVP は完成しません。エージェントが価値を提供することを確認するために、複数回のテストを実施しました。
データ精度の検証
以下を確認しました。
- 正しいイベントがプルされていますか?
- コストデータは正確で妥当ですか?
- 無関係なイベントは除外されていますか?
ユーザーフィードバックと改良
早期のフィードバックを集めるために、MVP を社内の利害関係者と共有しました。これに基づいて、当社は以下のことを行いました。
- 要約の明瞭さが向上しました
- ROI スコアリングフォーミュラを微調整
- ニッチなトピックのフィルタリングの強化
パフォーマンス最適化
また、次のことも行います。
- 結果をキャッシュすることでスクレイピングの待ち時間を短縮
- プロンプトの改善による LLM 解析の信頼性の向上
- 誤検出を最小限に抑えるための閾値を追加
5。導入と次のステップ
最終段階は、MVPを幅広いテストに使用できる状態にすることでした。
ホスティングに関する考慮事項
次の 2 つの導入戦略をテストしました。
- ローカル Docker デプロイメント 迅速なイテレーションと分離テスト用
- クラウドデプロイ スケーラビリティとリモートアクセスを実現するGMIクラウドインフラストラクチャ上
MVP のスケーリング
コアが機能すれば、今後のイテレーションでは次のことが可能になります。
- イベントデータソース (RSS フィード、厳選されたニュースレター、LinkedIn イベント) の追加
- 微調整された ML モデルまたは埋め込みを使用して ROI モデルを改善する
- リアルタイムのフライトAPIとホテルAPIを統合してコスト見積もりを拡大
今後の機能強化
将来を見据えて、次の機能として考えられるものは次のとおりです。
- 個々の目標や好みに基づいてパーソナライズされたイベントスコアリング
- チームベースの推奨事項(例:「これはBDチームを送る価値があるか?」)
- 新製品発表会やネットワーキングミートアップなど、他のドメインへの拡大
最終思考
この AI エージェントは、忙しいプロフェッショナルがどのイベントに参加する価値があるかを判断できるようにするというシンプルなアイデアから始まりました。系統的な開発、反復テスト、適切なツールを通じて、無駄のない柔軟な MVP によってそのアイデアを実現しました。
パート3では、このMVPを本番環境に対応したシステムに進化させ、パフォーマンスを最適化し、ビジネス上の意思決定ワークフローにさらに深く統合する方法を探ります。
それまでは、迅速に構築し、好奇心を持ち続け、面倒な作業は AI に任せてください。
ところで、私たちのものを見たことがありますか AI を活用した音声翻訳ガイドの作成?オープンソースのツールのみを使用しています!
制限なく AI を構築!


