シュッと TypeChat を使ってみたのだ
ちゃっす(/・ω・)/
ちょっと気になるやつがでてたので遊んでみたのだ(/・ω・)/
その名も TypeChat !!
Microsoft さんのやつですね。はい。
リポジトリの説明を DeepL 先生に翻訳してポイッ。
Types are all you need!
はい。いいですね。
で、何ができますのん?
example とかを見てもらうのが早いと思うのですが
https://github.com/microsoft/TypeChat/tree/main/examples
自然言語での入力に対してどういったレスポンスを返すかの型(スキーマ)を定義しておいてそれに基づいて答えを返す感じ(/・ω・)/
examples の input/output をいくつかのせると
なのでまぁ ChatGPT Function Callings みたいな感じですな( ・ω・)
ただまぁちょいと違うのはスキーマとして値を事前定義することでカチッとした値が返答に入る感じですな。(プロンプトとかで指示しなくて済む)
// The following is a schema definition for determining the sentiment of a some user input.
export interface SentimentResponse {
sentiment: "negative" | "neutral" | "positive"; // The sentiment of the text
}
ガンダムのキャラ情報で試してみたぞ☆
というわけでガンダムキャラクターのスキーマを定義して遊んでみた
export interface GundamCharacter {
type: 'character',
name: string;
gundamSeries: string;
overview: string;
mainMobileSuit: string;
voiceActor: string;
affiliation: string;
humanType: 'ニュータイプ' | '超人' | '一般人' | 'コーディネーター' | 'Unknown';
}
> ガンダム作品に登場するアムロ・レイについて詳細に教えてください
{
"type": "character",
"name": "アムロ・レイ",
"gundamSeries": "ガンダム作品",
"overview": "詳細に教えてください",
"mainMobileSuit": "",
"voiceActor": "",
"affiliation": "",
"humanType": "Unknown"
}
Success!
> ガンダム作品に登場するシャア・アズナブルについて詳細に教えてください
{
"type": "character",
"name": "シャア・アズナブル",
"gundamSeries": "ガンダム作品",
"overview": "シャア・アズナブルはガンダムシリーズに登場するキャラクターです。",
"mainMobileSuit": "",
"voiceActor": "",
"affiliation": "",
"humanType": "Unknown"
}
Success!
> ガンダム作品に登場するガロード・ランについて教えてください
{
"type": "character",
"name": "ガロード・ラン",
"gundamSeries": "ガンダム作品",
"overview": "ガロード・ランについて教えてください",
"mainMobileSuit": "",
"voiceActor": "",
"affiliation": "",
"humanType": "Unknown"
}
Success!
> ガンダム作品に登場するヒイロ・ユイについて教えてください
{
"type": "character",
"name": "ヒイロ・ユイ",
"gundamSeries": "ガンダム作品",
"overview": "ヒイロ・ユイはガンダム作品に登場するキャラクターです。",
"mainMobileSuit": "",
"voiceActor": "",
"affiliation": "",
"humanType": "Unknown"
}
Success!
> ガンダム作品に登場するドモン・カッシュについて教えてください
{
"type": "character",
"name": "ドモン・カッシュ",
"gundamSeries": "ガンダム作品",
"overview": "ドモン・カッシュはガンダム作品に登場するキャラクターです。",
"mainMobileSuit": "",
"voiceActor": "",
"affiliation": "",
"humanType": "Unknown"
}
事前に定義しないとダメダメである 😇
全部定義すんのメンドイなーと思っていたワタクシ。
偶然いい感じになる方法を発見(/・ω・)/
スキーマにコメントで適当に情報を埋め込んでおくと、、、?
export interface GundamCharacter {
type: 'character',
name: string;
gundamSeries: string;
overview: string;
mainMobileSuit: string;
voiceActor: string;
affiliation: string;
humanType: 'ニュータイプ' | '超人' | '一般人' | 'コーディネーター' | 'Unknown';
// '機動戦士ガンダム' | '機動戦士Vガンダム' | '機動戦士ガンダムW' | '機動武闘伝Gガンダム' | '機動戦士ガンダム逆襲のシャア' | 'Unknown';
// 'RX-78-2 ガンダム' | 'νガンダム' | 'Zガンダム' | 'シャイニングガンダム' | 'ゴッドガンダム' | 'ヴィクトリーガンダム' | 'ウィングガンダム' | 'サザビー' | 'Unknown';
// '緑川光' | '古谷徹' | '阪口大助' | '関智一' | '池田秀一' | 'Unknown';
// '地球連邦軍' | 'ネオ・ジオン' | 'ジオン軍' | 'シャッフル同盟' | 'Unknown';
}
> ガンダム作品に登場するアムロ・レイについて詳細に教えてください
{
"type": "character",
"name": "アムロ・レイ",
"gundamSeries": "機動戦士ガンダム",
"overview": "ガンダムシリーズに登場する主人公の一人。地球連邦軍のパイロットであり、ニュータイプの能力を持つ。",
"mainMobileSuit": "RX-78-2 ガンダム",
"voiceActor": "古谷徹",
"affiliation": "地球連邦軍",
"humanType": "ニュータイプ"
}
Success!
> ガンダム作品に登場するシャア・アズナブルについて詳細に教えてください
{
"type": "character",
"name": "シャア・アズナブル",
"gundamSeries": "機動戦士ガンダム",
"overview": "シャア・アズナブルは、アニメ『機動戦士ガンダム』に登場するキャラクターです。彼はジオン公国のエースパイロットであり、赤い彗星として知られています。彼の目的は、ジオン公国の独立を実現することです。",
"mainMobileSuit": "ザクII",
"voiceActor": "古谷徹",
"affiliation": "ジオン軍",
"humanType": "ニュータイプ"
}
Success!
> ガンダム作品に登場するガロード・ランについて教えてください
{
"type": "character",
"name": "ガロード・ラン",
"gundamSeries": "機動武闘伝Gガンダム",
"overview": "",
"mainMobileSuit": "",
"voiceActor": "",
"affiliation": "",
"humanType": "一般人"
}
Success!
> ガンダム作品に登場するヒイロ・ユイについて教えてください
{
"type": "character",
"name": "ヒイロ・ユイ",
"gundamSeries": "機動戦士ガンダムW",
"overview": "",
"mainMobileSuit": "",
"voiceActor": "",
"affiliation": "",
"humanType": "Unknown"
}
Success!
> ガンダム作品に登場するドモン・カッシュについて教えてください
{
"type": "character",
"name": "ドモン・カッシュ",
"gundamSeries": "機動武闘伝Gガンダム",
"overview": "",
"mainMobileSuit": "ゴッドガンダム",
"voiceActor": "関智一",
"affiliation": "シャッフル同盟",
"humanType": "超人"
}
なんかいい感じに入れてくれる(/・ω・)/
(結構間違いあるけどねw)
型として指定している個所はその型にそった内容をいれて、型指定でふわっと文字列とかにしてるやつはいい感じに埋めてくれるの(/・ω・)/
内部実装見てないけど、まぁ、スキーマを読み込んでそれを基に ChatGPT とかに投げてるんでしょうなぁ。
それが図らずも Few-Shot 的になってるのかな?
という感じ。
しかしながら TypeChat は Python じゃないのと Function Callings で大体事足りるからどういう使い道があるんざんしょ?( ・ω・)
という疑問を残しておしまい。