AICI
https://scrapbox.io/files/665ea92223a9b5001d11307d.png
大規模言語モデル(LLM)の出力を制御しやすくする「AI Controller Interface(AICI)」を発表した。
LLMの生成コンテンツを制御することで、正確さやプライバシーの問題を解消し、情報の機密性や信頼性が重要な分野でのLLM活用の実現にもつながるとする。
生成するコンテンツの正確性を確保したり、JSON やその他のコンピューター プログラミング言語などの特定の形式に厳密に準拠したりする点で限界があります。さらに、複数のソースからの情報を処理する LLM は、機密性とセキュリティの維持において大きな課題に直面しています。情報の機密性と信頼性が極めて重要な医療、金融、科学などの分野では、LLM の成功は厳格なプライバシーと正確性の基準を満たすことに大きく依存しています。
つまり上の図にもあるように、プロンプトの入出力を制御するためのモノ。
Wasmで実装できるのでいろんな言語で書ける。
このインターフェイスの上には、軽量の仮想マシン (VM) である AI コントローラーが配置されています。
PyCtrlの例。メチャクチャ入出力に関わっているのが分かる。
https://scrapbox.io/files/665eac86e3c296001cdbca3c.png
READMEにあるこの例も非常に分かりやすくて、普通ならプロンプトエンジニアリングで5個の popular types of vehicles 吐いてねって書くところを、トークン単位で介入できるので、まずはFixedTokens(指定したトークン、人間が指定したトークンの意味)としてWhat are the most popular types of vehicles?\nを埋め込み、合わせて1.と書き込んだ上でその状態でモデルにまず改行まで生成させる。するとそこでまた介入して2.と書き込んで、その上でモデルに介入させる...を繰り返す。文字列を相互的に生成していく。
結果としてコードで入出力を制御することが可能になる。
code:python
import pyaici.server as aici
# Force the model to generate a well formatted list of 5 items, e.g.
# 1. name 1
# 2. name 2
# 3. name 3
# 4. name 4
# 5. name 5
async def main():
# This is the prompt we want to run.
# Note how the prompt doesn't mention a number of vehicles or how to format the result.
prompt = "What are the most popular types of vehicles?\n"
# Tell the model to generate the prompt string, ie. let's start with the prompt "to complete"
await aici.FixedTokens(prompt)
# Store the current position in the token generation process
marker = aici.Label()
for i in range(1,6):
# Tell the model to generate the list number
await aici.FixedTokens(f"{i}.")
# Wait for the model to generate a vehicle name and end with a new line
await aici.gen_text(stop_at = "\n")
await aici.FixedTokens("\n")
# Store the tokens generated in a result variable
aici.set_var("result", marker.text_since())
aici.start(main())
Wasmで載せられるのでいろんな言語のコントローラありますよ〜って感じかな。