Toughtworks Technology Radarで、2024年の生成AI関連技術35連発をざっくり紹介

Toughtworks社のTechnology Radarでは、毎回注目すべき様々な技術が紹介されています。最近の生成AIの発展を受けて、2024年10月のToughtworks Radarの紹介技術は約3分の1もが生成AI関連技術になりました。

https://www.thoughtworks.com/radar

Radarの総評（？）部分で、生成AIのカンブリア爆発（The Cambrian explosion of generative AI tools）とか言われています。

本稿ではToughtworks Radarの2024年10月分のうち、生成AIに関連する技術項目を一気に紹介します。このTechnology RadarはあくまでThoughtworks社の見解でありすべてを鵜呑みにするのが正しいわけではありませんが、技術選定やトレンドを知るための材料のひとつとしては有用だと思います。

私自身も良く使っている物から初めて知った技術まで色々あるので、紹介の内容にむらがありますがご了承ください。

## Adopt（ぜひ採用すべき）
>Adopt. Blips that we think you should seriously consider using.

### [4. Retrieval\-augmented generation \(RAG\)](https://www.thoughtworks.com/radar/techniques/retrieval-augmented-generation-rag)
日本語では検索拡張生成とも呼ばれます。生成AIを使う上で、誤った情報の出力（Hallucination）は課題のひとつとされていますが、RAGはその対策のひとつになる技術です。

LlamaIndexやKotaemonなど、RAGを実装する技術も後に取り上げられており、重要な技術として捉えられていることがわかります。

## Trial（試用すべき）
>Trial. Things we think are ready for use, but not as completely proven as those in the Adopt ring. 


### [6. Fine-tuning embedding models](https://www.thoughtworks.com/radar/techniques/fine-tuning-embedding-models)
RAGをするうえで、ベクトル化するのに用いる埋め込みモデルのファインチューニングです。もともとRAGというのは埋め込みモデルをEnd-to-Endでファインチューニングする手法を指す[^rag-meta-paper]と思うので、学習済みの埋め込みモデルをファインチューニングせずに使うほうが特殊なのかもしれませんね？

[^rag-meta-paper]: https://dl.acm.org/doi/abs/10.5555/3495724.3496517

このRadarでも、埋込モデルのファインチューニングについては関連技術が紹介されています。

### [7. Function calling with LLMs](https://www.thoughtworks.com/radar/techniques/function-calling-with-llms)
LLMの機能のひとつであるFunction callingです。この技術によって先述のRAGはそうですし、さまざまな外部のプログラムを呼び出したり、ワークフローを自動化したりと、ただLLMとチャットするだけに留まらない使い方ができるようになった技術でもあります。

### [8. LLM as a judge](https://www.thoughtworks.com/radar/techniques/llm-as-a-judge)
生成AIを用いた開発をするうえで、その性能の評価をどのように行うかは難しい課題のひとつです。LLM as a judgeは、LLMの評価にLLMを用いるというアプローチです。簡単な例でいうと「100点満点で評価してください」みたいなプロンプトを投げる感じですね。

### [10. Small language models](https://www.thoughtworks.com/radar/techniques/small-language-models)
大規模言語モデル（Large Language Model、LLM）とは対象に、比較的小規模なモデルであるSmall Language Model（SLM）です。LLMの何がLargeなのか、何がSmallなのかは諸説ありますが、このTech Raderでは3.5b〜10b程度のパラメータ数と言われています。

このような小さなモデルは、LLMに比べてコストや速度の面で優位性があり、またモバイルデバイスなど様々な環境で動作させられる可能性もあります。

### [12. Using GenAI to understand legacy codebases](https://www.thoughtworks.com/radar/techniques/using-genai-to-understand-legacy-codebases)
生成AIの用途のひとつとして、レガシーなコードベースをうまく扱うために使えるのではないか、という話のようです。Tech RaderではコードベースをナレッジグラフにしたGraphRAGが特に有望とされており、[martinfowler.comにも事例](https://martinfowler.com/articles/legacy-modernization-gen-ai.html)があります。


### [25. FastChat](https://www.thoughtworks.com/radar/platforms/fastchat)

https://github.com/lm-sys/FastChat

LLMの学習や評価のためのフレームワークです。さまざまなモデルに対応しており、またOpenAI APIと互換性がある形式でのAPIの提供もサポートしているそうです。

### [26. GCP Vertex AI Agent Builder](https://www.thoughtworks.com/radar/platforms/gcp-vertex-ai-agent-builder)

https://cloud.google.com/products/agent-builder?hl=ja

Google Cloudの生成AIプラットフォームVertex AIのいち機能である、Agent Builderです。生成AIを使ったエージェントをノーコードで構築できます。

### [27. Langfuse](https://www.thoughtworks.com/radar/platforms/langfuse)

https://github.com/langfuse/langfuse

LangfuseはオープンソースのLLM開発プラットフォーム、いわゆるLLMOpsをサポートします。LLMの監視・評価や、プロンプトの管理などが行えます。

類似製品に[LangSmith](https://www.langchain.com/langsmith)があり、私も使っています。LangChainを使っているならばLangSmithのほうが相性が良いのではないかと思います。

### [80. Instructor](https://www.thoughtworks.com/radar/languages-and-frameworks/instructor)

https://github.com/instructor-ai/instructor

後に紹介するStructured outputを、LLMに強制するためのツールのようです。OpenAIなど一部のLLMはStructured outputの機能を標準で搭載していますが、このツールを使うと様々なモデルでStructured outputを利用できるようです。

内部ではPydanticを使って出力のスキーマを検証するという仕組みのようです。

### [82. LiteLLM](https://www.thoughtworks.com/radar/languages-and-frameworks/litellm)

https://github.com/BerriAI/litellm

OpenAI APIと互換性のある形式でLLMを提供するプロキシサーバーです。さまざまなモデルを一貫したインターフェースで呼び出せるようになります。また、再実行や予算管理などの仕組みも搭載しているようです。

### [83. LlamaIndex](https://www.thoughtworks.com/radar/languages-and-frameworks/llamaindex)
https://github.com/run-llama/llama_index

RAGを利用したLLMアプリケーションを構築するためのフレームワークです。特に、既存のデータソースと接続してRAGを構築する機能を豊富に持っています。

### [84. LLM Guardrails](https://www.thoughtworks.com/radar/languages-and-frameworks/llm-guardrails)
LLMが良くない回答を生成しないようにするための技術のことです。責任あるAIの実現のために、エンタープライズなアプリケーションを構築する際には避けて通れない所だと思います。

### [89. SetFit](https://www.thoughtworks.com/radar/languages-and-frameworks/setfit)
https://github.com/huggingface/setfit

Sentence Transformersによるテキスト分類において、数個のデータでファインチューニングできるフレームワークのようです。

### [90. vLLM](https://www.thoughtworks.com/radar/languages-and-frameworks/vllm)

https://github.com/vllm-project/vllm

高速なLLM推論エンジンです。複数のモデルアーキテクチャをサポートしており、量子化など高速に推論する仕組みが搭載されています。


## Assess（検討すべき）
>Assess. Things to look at closely, but not necessarily trial yet — unless you think they would be a particularly good fit for you.

### [13. AI team assistants](https://www.thoughtworks.com/radar/techniques/ai-team-assistants)
AIにコード作成支援するだけでなく、様々なナレッジにアクセスしてチームワークを支援するアシスタントの構築です。
Thoughtworks社では[haivenをオープンソース化した](https://github.com/tw-haiven/haiven)と述べられています。

### [14. Dynamic few-shot prompting](https://www.thoughtworks.com/radar/techniques/dynamic-few-shot-prompting)
数個の入出力の例を含めることで性能を向上させるFew-shot promptingというテクニックの発展形で、LLMを用いてFew-shotの例を動的に選択する手法のようです。[scikit\-llm](https://github.com/iryna-kondr/scikit-llm)というライブラリで実装できるそうです。

### [16. LLM-powered autonomous agents](https://www.thoughtworks.com/radar/techniques/llm-powered-autonomous-agents)
LLMを用いて、多数のツールを使いながら自律的に目標達成を目指すエージェントです。フレームワークとして[microsoft/autogen](https://github.com/microsoft/autogen)が紹介されています。[AutoGPT](https://github.com/Significant-Gravitas/AutoGPT)や[babyagi](https://github.com/yoheinakajima/babyagi)も登場時に話題になりましたね。

### [18. On-device LLM inference](https://www.thoughtworks.com/radar/techniques/on-device-llm-inference)
ブラウザ上やモバイルデバイスなどでLLMを動作させる技術です。代表的な実装方法として[huggingface/transformers\.js](https://github.com/huggingface/transformers.js)がありますね。

個人的には、一部のAndroidスマートフォンで利用できるGemini nanoも気になります。

### [19. Structured output from LLMs](https://www.thoughtworks.com/radar/techniques/structured-output-from-llms)
LLMの出力を特定の形式にフィットさせる手法です。これによって、JSONを出力させて他のプログラムから扱いやすくなったりします。RAGやFunction callingを支える技術でもあります。

OpenAIなどのモデルはStructured outputを機能として持っています。

### [30. Azure AI Search](https://www.thoughtworks.com/radar/platforms/azure-ai-search)
https://azure.microsoft.com/en-us/products/ai-services/ai-search

Microsoft Azureの機能で、以前はAI系のサービスであるCognitive Servicesの中のCognitive Searchと呼ばれていました。RAGを用いたアプリケーションを開発できるクラウドサービスのようです。

### [37. Large vision model (LVM) platforms](https://www.thoughtworks.com/radar/platforms/large-vision-model-lvm-platforms)
大規模言語モデル（LLM）ではなく、Vision Model（LVM）の話です。画像や動画を扱うモデルを開発するうえで、データをどう集め、ラベリングするのか、など課題が多くあります。

### [60. Cursor](https://www.thoughtworks.com/radar/tools/cursor)

https://www.cursor.com/

VS Codeをフォークして作られたAIコードエディターです。

### [63. JetBrains AI Assistant](https://www.thoughtworks.com/radar/tools/jetbrains-ai-assistant)
JetBraind IDEに統合されているAIアシスタントです。

### [69. Semantic Router](https://www.thoughtworks.com/radar/tools/semantic-router)
https://github.com/aurelio-labs/semantic-router

LLMを呼び出す前に、低コストなベクトル検索を用いてどのモデルにルーティングするべきかを判断するルーターのようです。

### [70. Software engineering agents](https://www.thoughtworks.com/radar/tools/software-engineering-agents)
GitHubのIssueを受け取って、コードを書いて、プルリクエストをレビューしてマージするソフトウェアエンジニアエージェントです。[GitHub Copilot Workspace](https://githubnext.com/projects/copilot-workspace)が、いまはテクニカルプレビューを行っていますね。

### [93. DeepEval](https://www.thoughtworks.com/radar/languages-and-frameworks/deepeval)
https://github.com/confident-ai/deepeval

LLMを評価するためのフレームワークです。たとえば[G\-Eval](https://docs.confident-ai.com/docs/metrics-llm-evals)という、LLMを用いてLLMを評価する手法が搭載されていたりします。

### [94. DSPy](https://www.thoughtworks.com/radar/languages-and-frameworks/dspy)
https://github.com/stanfordnlp/dspy

スタンフォード大学で開発された、プロンプトを最適化するプラットフォームのようです。

### [96. kotaemon](https://www.thoughtworks.com/radar/languages-and-frameworks/kotaemon)
https://github.com/Cinnamon/kotaemon

RAGベースのアプリケーションを構築するオープンソースのフレームワークです。Gradioで構築されたGUIを搭載しています。

なお、日本の会社である[株式会社シナモン](https://cinnamon.ai/)が開発しています。

### [98. LLMLingua](https://www.thoughtworks.com/radar/languages-and-frameworks/llmlingua)
https://github.com/microsoft/LLMLingua

LLMを用いてプロンプトを圧縮するライブラリです。LLMを呼び出す前に小さなモデルを使ってプロンプトの意味を保ちながら短縮することで、高速化やコストの削減に役立つようです。

### [99. Microsoft Autogen](https://www.thoughtworks.com/radar/languages-and-frameworks/microsoft-autogen)
https://github.com/microsoft/autogen

[16. LLM-powered autonomous agents](https://www.thoughtworks.com/radar/techniques/llm-powered-autonomous-agents)で紹介された、エージェントを開発するためのフレームワークです。

### [101. Ragas](https://www.thoughtworks.com/radar/languages-and-frameworks/ragas)
https://docs.ragas.io/en/stable/

Ragasは、RAGの性能を評価するためのフレームワークです。

## Hold（保留）
>Hold. Proceed with caution.

これまでと異なり、否定的意見を述べられている項目なので注意しましょう。

### [20. Complacency with AI-generated code](https://www.thoughtworks.com/radar/techniques/complacency-with-ai-generated-code)
GitHub Copilotによるコード生成は話題ですが、このようなAIで生成したコードだけで満足することのないように注意が必要とされています。

たくさんコードが生成されてPull Requestをたくさん作られる事が本当に良いことなのか、中長期的に見てコードの品質に与える影響がどうなるのかは、確かに慎重な判断が必要だなと思いました。

### [22. LLM ban](https://www.thoughtworks.com/radar/techniques/llm-bans)
職場でLLMを禁止すべきではない、という事みたいです。ここまでこれだけLLMについて触れているので、それはそうだと思います。

### [23. Replacing pair programming with AI](https://www.thoughtworks.com/radar/techniques/replacing-pair-programming-with-ai)
AIはペアプログラミングの一部の機能を担うことはできますが、ペアプログラミングを完全にAIに置き換えるのはおすすめしないそうです。

## まとめ
全105項目中35項目が生成AI関連であり、とにかく生成AIに関連する技術の紹介が多かったと分かります。
Structured outputはTrialなのにそれを実現する手法の一つであるInstructorはAssessにいたりと、項目間の序列についてはちょっと疑問もありますが、2024年時点で注目されている生成AI・LLM関連を代表する技術がたくさん集まっていることは感じられます。

2025年はどんな技術が登場するのか、楽しみです

## おまけ
2024年10月にはRadarにはLLM関連の技術がたくさん登場しましたが、中にはRadarから姿を消した技術もあります。

### [LangChain](https://www.thoughtworks.com/radar/languages-and-frameworks/langchain)
LLMを用いた開発するためのフレームワークです。2024年4月にHold、10月のRadarには掲載されませんでした。

4月時点では設計に一貫性がなく冗長とった理由でHoldとされていますが、LangChainはその後も積極的にアップデートされ設計も改善されています。LangSmithなどの周辺ツールも便利であり、有用な技術のひとつといえるのではないかと個人的には思います。

### [Dify](https://www.thoughtworks.com/radar/platforms/dify)
LLMを用いたアプリケーション開発のプラットフォーム、いわゆるノーコードツールです。2024年4月ではAssessでした。Thoughtworks社の見解としては、2024年10月でTrialになったVertex AI Agent Builderのほうを検討するべき、という感じなのかもしれません。