出力問題
CrewAI のクルーは実際の仕事を生み出します。調査レポート、競合分析、技術ドキュメント、コンテンツの下書き。エージェントを定義し、タスクをつなぎ、crew.kickoff() を呼び出すと、返ってくるのは……文字列です。
result = crew.kickoff()
print(result) # 競合分析800語分をstdoutに吐き出す
さて、ここからどうしますか? Google ドキュメントにコピペする。あるいはノートPC上の markdown ファイルに書き込む。もしかすると Slack に流し込む。エージェントがトークンと時間を使って生み出した成果物が、ログ出力のように扱われてしまうのです——一時的で、非構造で、共有不能。
これはエージェント用ツール群のエコシステムにおけるギャップです。私たちは、エージェントに仕事をさせること——より良いプロンプト、ツール利用、マルチエージェントのオーケストレーション——に多大な投資をしてきました。しかし、出力に何が起きるかについてはほとんど考えてきませんでした。CrewAI のクルーを本番運用しているすべてのチームは、結局のところ何らかの特注ビューアを作るか、エージェントの出力を見栄えのする形に手作業で整形することになります。これはフレームワークレベルでは誰も解いていない「ラストマイル問題」です。
解決策:公開レイヤー
SurfaceDocs は、機械生成コンテンツのために作られたホステッド文書サービスです——AI パイプラインの出力レイヤー。pip install surfacedocs して、docs.save() を呼び出し、共有可能な URL を取得する。統合のインターフェースはそれだけです。
以下は、トピックを調査して結果を公開する、完全な CrewAI クルーの例です:
import os
from crewai import Agent, Task, Crew
from crewai.tools import BaseTool
from surfacedocs import SurfaceDocs, SYSTEM_PROMPT, OPENAI_DOCUMENT_SCHEMA
docs = SurfaceDocs(api_key=os.environ["SURFACEDOCS_API_KEY"])
class PublishTool(BaseTool):
name: str = "publish_document"
description: str = "構造化ドキュメントを公開し、共有可能なURLを返します。"
def _run(self, content: str) -> str:
result = docs.save(content, folder_id=os.environ.get("SURFACEDOCS_FOLDER_ID"))
return f"公開しました: {result.url}"
researcher = Agent(
role="シニア・リサーチアナリスト",
goal="包括的な市場調査レポートを作成する",
backstory="あなたは経験豊富なアナリストで、明快でデータドリブンなレポートを書きます。",
llm="gpt-4o",
)
publisher = Agent(
role="レポート発行担当",
goal="最終レポートを整形し、共有可能なドキュメントとして公開する",
backstory=f"""あなたは調査出力を受け取り、公開に適した構造に整えます。
{SYSTEM_PROMPT}""",
tools=[PublishTool()],
llm="gpt-4o",
)
research_task = Task(
description="AIエージェント・フレームワークの現状を調査してください。"
"CrewAI、LangGraph、AutoGen、Swarm を取り上げてください。"
"強み、弱み、導入トレンドを含めてください。",
expected_output="セクションと分析を備えた詳細な調査レポート。",
agent=researcher,
)
publish_task = Task(
description




