person-research
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChinesePerson research
人物调研
Three lenses on one person id. gives attention and the shows that mention them most. rows with are episodes they were on. with returns their own words; returns what others said about them.
momentummentionsis_appearancesearchspeakerIdsaboutRun each program with ; has the method reference.
arcmira_execute_readarcmira_describe围绕同一个人物 ID 的三个观察视角。 给出关注度以及提及他们最多的节目。 中带有 的记录是其参加过的节目。 配合 返回他们自己的言论; 返回别人对他们的评价。
momentummentionsis_appearancesearchspeakerIdsabout将每个程序传给 运行; 提供方法参考。
arcmira_execute_readarcmira_describeWhen to use
何时使用
- prep for an interview, a podcast booking or a meeting with someone
- what has a person said recently, and where
- who talks about a person, and is attention rising
- 为采访、播客邀约或与某人见面做准备
- 了解某人最近说了什么,以及在哪些节目中说过
- 了解谁在谈论某人,以及关注度是否正在上升
Pick the entity the user meant
识别用户所指的人物
Users give names; filters take ids only (ent_..., UC..., 11-character video ids), and a name where an id belongs throws .
id_required- Resolve the exact name the user said, with their own words about it as (a bare "Theo" has none).
context - and
bestgive the id. Asuggestedpick is an assumption: the answer names it, withsuggestedas the reason.suggested.evidence - : several entities fit, and
askgoes back to the user. No answer at all: the name is not in the index.ask.options
For this task:
- Resolve with . A first name alone ("Sam") matches many people: pass what the user said about them (runs OpenAI, hosts a show) as
{ type: "person" }, and when resolve still answerscontext, show its options.ask
用户提供的是姓名;筛选器只接受 ID(ent_...、UC...、11 位视频 ID),如果本应填写 ID 的位置传入姓名,则会抛出 。
id_required- 使用用户对名字的原话作为 ,解析用户所说的确切姓名(单独的“Theo”没有上下文)。
context - 和
best会给出 ID。选取suggested意味着这是一项推测:回答中应明确说明,并给出suggested作为依据。suggested.evidence - :有多个实体符合条件时,通过
ask交回给用户。完全没有结果:该姓名不在索引中。ask.options
对于此任务:
- 使用 进行解析。仅提供名字(“Sam”)会匹配到多个人:将用户对其身份的描述(负责 OpenAI、主持某档节目等)作为
{ type: "person" }传入;如果解析结果仍为context,则展示其选项。ask
Worked program
示例程序
Pass each block to as one program (a block marked arcmira_execute_write goes to that tool), with the name swapped for the user's. It opens with the pick: set to the user's own words about the name. When several entities fit it returns and runs nothing else. Show those options to the user, then run it again with set to the pick. Build date windows from and .
arcmira_execute_readCONTEXTaskIDarcmira.daysAgo(n)arcmira.today()将每个代码块作为单个程序传给 (标记为 arcmira_execute_write 的代码块则传给该工具),并将其中的姓名替换为用户提供的姓名。程序首先进行实体选择:将 设为用户对姓名所说的原话。当有多个实体符合条件时,它会返回 并且不执行其他操作。向用户展示这些选项,然后再次运行,并将 设为所选项的 ID。使用 和 构建日期窗口。
arcmira_execute_readCONTEXTaskIDarcmira.daysAgo(n)arcmira.today()Prep on one person
围绕一个人物做准备
javascript
const NAME = "Jensen Huang", CONTEXT = undefined, ID = null; // CONTEXT: the user's own words about the name, never a guess. After an ask, set ID to the picked option's id and run again
const r = ID ? null : await arcmira.resolve(NAME, { type: "person", context: CONTEXT });
const e = r && (r.best ?? r.suggested);
if (r && !e) return { ask: r.ask };
const id = ID ?? e.id;
const assumed = Boolean(r?.suggested), why = r?.suggested?.evidence ?? null;
const [m, rows, own] = await Promise.all([
arcmira.momentum(id),
arcmira.mentions({ entityId: id, after: arcmira.daysAgo(90), limit: 40 }),
arcmira.search({ query: "AI", speakerIds: [id], after: arcmira.daysAgo(180), limit: 5 }),
]);
const about = await arcmira.search({ query: m.entity.name, about: [id], after: arcmira.daysAgo(90), limit: 3 });
const appeared = new Map();
for (const x of rows.mentions) if (x.is_appearance) appeared.set(x.media.video_id, { show: x.media.source_channel?.name ?? null, episode: x.media.title, date: x.media.published_at });
let fromAppearance = null; // no speaker-tagged chunks: read their newest appearance instead
const ep = own.chunks.length === 0 ? rows.mentions.find(x => x.is_appearance) : undefined;
if (ep) {
try {
const t = await arcmira.transcript(ep.media.video_id, { start: Math.max(0, ep.start_seconds - 5), end: ep.start_seconds + 90 });
const s = Math.floor(t.lines[0]?.start ?? ep.start_seconds);
fromAppearance = { episode: t.video.title, show: t.video.channel_name, date: t.video.published_at, url: `${t.video.watch_url}${t.video.watch_url.includes("?") ? "&" : "?"}t=${s}`, lines: t.lines.map(l => `[${Math.round(l.start)}s] ${l.text}`), speaker_labelled: t.lines.some(l => l.speaker) };
} catch (err) {
fromAppearance = { episode: ep.media.title, error: err.code };
}
}
return {
person: { id, name: m.entity.name, page: m.entity.page, assumed, why },
attention: { verdict: m.verdict, last_30d: m.volume.mentions_30d, prior_30d: m.volume.mentions_prior_30d, as_of: m.as_of, top_shows: m.top_shows.map(s => [s.channel_name, s.mentions]) },
appeared_on: [...appeared.values()].slice(0, 8),
appeared_on_partial: rows.has_more, // true: only the newest 40 mention rows were read
in_their_words: own.chunks.map(c => ({ said: c.text.slice(0, 300), episode: c.video_title, show: c.channel_name, date: c.published_at, url: c.watch_url })),
from_their_appearance: fromAppearance,
said_about_them: about.chunks.map(c => ({ said: c.text.slice(0, 200), show: c.channel_name, date: c.published_at, url: c.watch_url })),
};javascript
const NAME = "Jensen Huang", CONTEXT = undefined, ID = null; // CONTEXT: the user's own words about the name, never a guess. After an ask, set ID to the picked option's id and run again
const r = ID ? null : await arcmira.resolve(NAME, { type: "person", context: CONTEXT });
const e = r && (r.best ?? r.suggested);
if (r && !e) return { ask: r.ask };
const id = ID ?? e.id;
const assumed = Boolean(r?.suggested), why = r?.suggested?.evidence ?? null;
const [m, rows, own] = await Promise.all([
arcmira.momentum(id),
arcmira.mentions({ entityId: id, after: arcmira.daysAgo(90), limit: 40 }),
arcmira.search({ query: "AI", speakerIds: [id], after: arcmira.daysAgo(180), limit: 5 }),
]);
const about = await arcmira.search({ query: m.entity.name, about: [id], after: arcmira.daysAgo(90), limit: 3 });
const appeared = new Map();
for (const x of rows.mentions) if (x.is_appearance) appeared.set(x.media.video_id, { show: x.media.source_channel?.name ?? null, episode: x.media.title, date: x.media.published_at });
let fromAppearance = null; // no speaker-tagged chunks: read their newest appearance instead
const ep = own.chunks.length === 0 ? rows.mentions.find(x => x.is_appearance) : undefined;
if (ep) {
try {
const t = await arcmira.transcript(ep.media.video_id, { start: Math.max(0, ep.start_seconds - 5), end: ep.start_seconds + 90 });
const s = Math.floor(t.lines[0]?.start ?? ep.start_seconds);
fromAppearance = { episode: t.video.title, show: t.video.channel_name, date: t.video.published_at, url: `${t.video.watch_url}${t.video.watch_url.includes("?") ? "&" : "?"}t=${s}`, lines: t.lines.map(l => `[${Math.round(l.start)}s] ${l.text}`), speaker_labelled: t.lines.some(l => l.speaker) };
} catch (err) {
fromAppearance = { episode: ep.media.title, error: err.code };
}
}
return {
person: { id, name: m.entity.name, page: m.entity.page, assumed, why },
attention: { verdict: m.verdict, last_30d: m.volume.mentions_30d, prior_30d: m.volume.mentions_prior_30d, as_of: m.as_of, top_shows: m.top_shows.map(s => [s.channel_name, s.mentions]) },
appeared_on: [...appeared.values()].slice(0, 8),
appeared_on_partial: rows.has_more, // true: only the newest 40 mention rows were read
in_their_words: own.chunks.map(c => ({ said: c.text.slice(0, 300), episode: c.video_title, show: c.channel_name, date: c.published_at, url: c.watch_url })),
from_their_appearance: fromAppearance,
said_about_them: about.chunks.map(c => ({ said: c.text.slice(0, 200), show: c.channel_name, date: c.published_at, url: c.watch_url })),
};A good answer
好的回答
- Names the person it researched (name and id), and any other person with the same name it set aside.
- Separates what the person said (speaker-filtered) from what others said about them, each with show, date and link.
- Gives the attention verdict, the 30-day count against the prior 30 days, and the top shows, with .
as_of - Lists recent episodes they appeared on, and ends with a few questions or themes that follow from the quotes when the user is prepping.
- 说明所调研的人物(姓名和 ID),并列出因同名而排除的其他人。
- 区分此人自己说过的话(按说话者筛选)与别人对他们的评价,并为每项提供节目、日期和链接。
- 给出关注度判断、最近 30 天与此前 30 天的提及次数对比,以及热门节目,并附上 。
as_of - 列出其最近参加过的节目,并在用户做准备时,以引述内容引出几个问题或主题。
Traps
陷阱
- A search with returns other people talking; only
aboutreturns the person's own words. Speaker tags cover part of the index, so when the speaker search is empty, read a window of an episode they appeared on and say the lines come from their appearance, since caption lines do not name the speaker.speakerIds - A chunk found with also holds other people's lines. Quote only lines that start with the person's name.
speakerIds - Put the user's topic in for the speaker search (it needs a word or phrase of two or more characters).
query - Mentions and momentum count the shows Arcmira indexes, not all media.
- 带 的搜索返回的是他人对该人的讨论;只有
about才会返回此人自己的言论。说话者标签仅覆盖索引的一部分,因此当说话者搜索为空时,应读取其参加节目的一个片段,并说明这些语句来自其出镜内容,因为字幕行不会标出说话者。speakerIds - 通过 找到的 chunk 也包含其他人的语句。只引用以该人物姓名开头的语句。
speakerIds - 将用户的主题放入说话者搜索的 中(该查询需要一个长度至少为两个字符的单词或短语)。
query - 和
mentions统计的是 Arcmira 索引中的节目,而非所有媒体。momentum
After the answer
回答之后
Monitors can follow what a research turn found, and each alert uses 25 credits from the account's plan, then its on-demand budget. The skill sets one up.
company-watchIf anything was wrong, slow, or missing for the user, send one arcmira_feedback.
监控器可以持续跟踪一次调研发现的内容;每次提醒会先从账户套餐中消耗 25 credits,然后使用按需预算。 skill 可用于设置这种监控。
company-watch如果结果对用户而言有任何错误、速度过慢或遗漏,请提交一次 。
arcmira_feedback