Skip to content

短いコードで試す ​

検索する。好みを直す。条件ごと覚える。どれも、同じ memory から始められます。

以下の例はそれぞれ独立して動きます。クイックスタートの memory.mjs と同じフォルダーに保存し、node ファイル名.mjs で実行してください。

覚えたことを探す ​

旅行のメモも保存してから、コーヒーの話だけを検索します。

mjs
import { memory } from './memory.mjs';
(
  await memory.write({
    changes: [
      {
        id: 'atom',
        op: 'create',
        content: {
          text: 'コーヒーはブラックが好き。',
          links: [],
        },
        sources: [],
      },
    ],
  })
).changes.atom;
(
  await memory.write({
    changes: [
      {
        id: 'atom',
        op: 'create',
        content: {
          text: '旅行には小さなカメラを持っていく。',
          links: [],
        },
        sources: [],
      },
    ],
  })
).changes.atom;
const found = await memory.search('コーヒー');
console.log(found.items.map((item) => item.text).join('\n'));
text
コーヒーはブラックが好き。

search は候補を返します。各候補の ref を inspect に渡せば、本文だけでなく出典やつながりも調べられます。検索のオプション →

好みが変わったら ​

今度はミルク入りが好きになったとします。保存時の参照を使って改訂します。

mjs
import { memory } from './memory.mjs';
const first = await memory.write({
  changes: [
    {
      id: 'note',
      op: 'create',
      content: { text: 'コーヒーはブラックが好き。', links: [] },
      sources: [],
    },
  ],
});
const note = first.changes.note;
const edited = await memory.write({
  changes: [
    {
      id: 'note',
      op: 'revise',
      target: note.ref,
      content: { text: 'コーヒーはミルク入りが好き。', links: [] },
      sources: [],
    },
  ],
});
console.log((await memory.inspect(edited.changes.note.ref, { limit: 0 })).atom.text);
console.log((await memory.inspect(note.ref, { limit: 0 })).atom.text);
text
コーヒーはミルク入りが好き。
コーヒーはブラックが好き。

新しい参照では訂正後の内容を、元の参照ではそのときの内容を確認できます。次の read は更新後の記憶から選びます。writeのオプション →

条件も、一緒に思い出す ​

「招待できる」とだけ覚えると、「承認が必要」という条件を落とすかもしれません。条件を別のメモにする場合は、必須の参照で結び付けます。

mjs
import { memory } from './memory.mjs';
const condition = (
  await memory.write({
    changes: [
      {
        id: 'atom',
        op: 'create',
        content: {
          text: '招待には管理者の承認が必要です。',
          links: [],
        },
        sources: [],
      },
    ],
  })
).changes.atom;
(
  await memory.write({
    changes: [
      {
        id: 'atom',
        op: 'create',
        content: {
          text: '外部のメンバーを招待できます。',
          links: { 条件: { ref: condition.ref, required: true } },
        },
        sources: [],
      },
    ],
  })
).changes.atom;
const recalled = await memory.read({ context: '外部のメンバーを招待したい。' });
console.log(
  recalled.items
    .map((item) => item.text)
    .sort()
    .join('\n'),
);
text
外部のメンバーを招待できます。
招待には管理者の承認が必要です。

required: true の参照先は、主張と一緒に本文を含めます。両方が予算に入らなければ、主張を省きます。関係の使い方 →

自分のアプリへ ​

ここまでの例は、外部モデルを呼ばずに記憶を扱っています。次は エージェントにつなぐで、モデル呼出し前の自動取得を試してみましょう。

MIT License · TypeScript / Node.js