🤖
GraphAI - AgentFilter
GraphAIは、各Agentを実行するときに、その前後に処理を挟むAgentFilterという機能があります。
イメージとしては、expressのmiddle wareや昔のRailsのaround filterのような機能です。
const agentFilters = [
{
name: "streamAgentFilter",
agent: streamAgentFilter,
},
];
とfilter名とfilterの関数をarray内にいれて
const graphai = new GraphAI(graphData, agents, { agentFilters });
と、GraphAIのコンストラクタの3つ目の引数に渡して使います。
AgentFilterの型定義はこちら。contextはAgentでも使っているGraphAIのcontext情報です。
export type AgentFilterFunction<ParamsType = DefaultParamsType, ResultType = DefaultResultData, NamedInputDataType = DefaultInputData> = (
context: AgentFunctionContext<ParamsType, NamedInputDataType>,
agent: AgentFunction,
) => Promise<ResultData<ResultType>>;
前処理をする場合
export const streamAgentFilter: AgentFilterFunction = async (context, next) => {
const { params, debugInfo, filterParams, namedInputs } = context;
// some streaming process....
next(context)
};
後処理をする場合
export const dataFilterAgentFilter: AgentFilterFunction = async (context, next) => {
const { params, debugInfo, filterParams, namedInputs } = context;
const result = await next(context);
// some filter process
return data;
};
途中で処理を止める. cacheにヒットしたら、agent filter内で処理を完了してagentは呼ばない。
export const cacheFilter: AgentFilterFunction = async (context, next) => {
const { params, debugInfo, filterParams, namedInputs } = context;
if (cached) {
return cacheData;
}
next(context);
};
Agent Filterは特にagent/nodeを指定しない場合は、全てのAgentに適用されます
nodeIds, agentIdsを指定することで、適用されるAgentを制限することは可能です。両方同時に指定可能です。
const agentFilters = [
{
name: "FooAgentFilter",
agent: booAgentFilter,
nodeIds: ["node1", "node12"],
},
{
name: "BarAgentFilter",
agent: barAgentFilter,
nodeIds: ["node1", "node12"],
agentIds: ["aliceAgent", "bobAgent"],
},
];
AgentFilterを複数指定した場合は、arrayの前のものから順に実行されます。
公式のAgentFilterはソース/npmでいくつか提供されています。こちらを参照してください
demo webでもhttp client/stream のAgentFilterを使っています。
人工知能を活用したアプリケーションやサービスを活用し、内発的動機付けで行動するエンジニア、起業家、社会起業家をサポートするコミュニティーです。 singularitysociety.org
Discussion