find-quotes

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Find quotes and clip moments

查找引文和剪辑时刻

search
finds the passage;
transcript
with
start
and
end
returns the exact lines around it with second offsets, which give the verbatim quote and the clip boundaries.
Run each program with
arcmira_execute_read
;
arcmira_describe
has the method reference.
search
查找相关段落;带
start
和
end
的
transcript
会返回其附近带秒数偏移的准确文本行,由此可获得逐字引文和剪辑边界。
使用
arcmira_execute_read
运行每个程序;
arcmira_describe
中有方法参考。

When to use

何时使用

  • find a quote, with the source and a timestamp
  • the moment a show talked about a topic, to clip or cite
  • what a specific person said about a topic, in their words
  • 查找引文,并附来源和时间戳
  • 查找某个节目谈论某个主题的具体时刻,以便剪辑或引用
  • 查找某个人就某个主题说过的话,并保留其原话

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
.
  1. Resolve the exact name the user said, with their own words about it as
    context
    (a bare "Theo" has none).
  2. best
    and
    suggested
    give the id. A
    suggested
    pick is an assumption: the answer names it, with
    suggested.evidence
    as the reason.
  3. ask
    : several entities fit, and
    ask.options
    goes back to the user. No answer at all: the name is not in the index.
For this task:
  • A speaker resolves with
    { type: "person" }
    ; pass the id as
    speakerIds
    (who said it). A person or brand the passage is about goes in
    about
    . A show goes in
    channelIds
    as its UC id.
  • People are often named by first name ("Chamath"). Pass what the user said about them as
    context
    ; resolve suggests the person when one stands out and asks when several fit.
  • The topic words go in
    query
    , never in
    about
    . If a filtered search returns no chunks, rerun it with fewer filters before saying nothing was found.
用户提供名称;筛选器只接受 id(
ent_...
、
UC...
、11 位 video id),在应使用 id 的位置传入名称会抛出
id_required
。
  1. 使用用户对它的原话作为
    context
    ,解析用户所说的准确名称(单独一个“Theo”没有上下文)。
  2. best
    和
    suggested
    会给出 id。选用
    suggested
    结果是一种推测:答案应说明该实体,并以
    suggested.evidence
    作为理由。
  3. ask
    :有多个实体都符合条件,此时通过
    ask.options
    交回给用户选择。完全没有结果:该名称不在索引中。
对于此任务:
  • 说话者使用
    { type: "person" }
    解析;将其 id 作为
    speakerIds
    传入(表示谁说了这些话)。内容所涉及的人或品牌放入
    about
    。节目则以其 UC id 放入
    channelIds
    。
  • 人们通常以名称呼(“Chamath”)。将用户对他们说过的话作为
    context
    传入;当某个人明显更匹配时,
    resolve
    会给出建议,有多个匹配时则要求用户选择。
  • 主题关键词放入
    query
    ,绝不要放入
    about
    。如果带筛选条件的搜索没有返回任何 chunks,请在断言未找到内容前用更少的筛选条件重试。

Worked program

完整示例程序

Pass each block to
arcmira_execute_read
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
CONTEXT
to the user's own words about the name. When several entities fit it returns
ask
and runs nothing else. Show those options to the user, then run it again with
ID
set to the pick. Build date windows from
arcmira.daysAgo(n)
and
arcmira.today()
.
将每个代码块作为一个程序传给
arcmira_execute_read
(标记为
arcmira_execute_write
的代码块应传给该工具),并把名称替换为用户提供的名称。程序首先进行实体选择:将
CONTEXT
设置为用户对该名称的原话。当有多个实体都符合条件时,它会返回
ask
,且不会执行其他操作。向用户展示这些选项,然后将
ID
设置为用户所选项的 id 并再次运行。使用
arcmira.daysAgo(n)
和
arcmira.today()
构建日期范围。

What one person said about a topic, with clip boundaries

某个人关于某个主题的原话及剪辑边界

javascript
const NAME = "Chamath", 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 hits = await arcmira.search({ query: "Anthropic IPO", speakerIds: [id], limit: 5 });
const moments = [];
for (const c of hits.chunks.slice(0, 2)) {
  const moment = { episode: c.video_title, show: c.channel_name, date: c.published_at, url: c.watch_url, speakers: c.speakers_by.map(s => s.name) };
  try {
    const t = await arcmira.transcript(c.video_id, { start: Math.max(0, c.start_seconds - 10), end: c.start_seconds + 50 });
    moment.clip = { start: t.lines[0]?.start ?? c.start_seconds, end: t.lines.at(-1)?.end ?? c.start_seconds + 60 };
    moment.lines = t.lines.map(l => `[${Math.round(l.start)}s] ${l.text}`);
  } catch (err) {
    moment.clip = { start: c.start_seconds, end: c.start_seconds + 60 };
    moment.passage = c.text;
    moment.transcript = err.code;
  }
  moments.push(moment);
}
return { speaker: { id, name: e?.name ?? null, assumed, why }, as_of: hits.as_of, ...(moments.length ? { moments } : { none: hits.note ?? null }) };
javascript
const NAME = "Chamath", 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 hits = await arcmira.search({ query: "Anthropic IPO", speakerIds: [id], limit: 5 });
const moments = [];
for (const c of hits.chunks.slice(0, 2)) {
  const moment = { episode: c.video_title, show: c.channel_name, date: c.published_at, url: c.watch_url, speakers: c.speakers_by.map(s => s.name) };
  try {
    const t = await arcmira.transcript(c.video_id, { start: Math.max(0, c.start_seconds - 10), end: c.start_seconds + 50 });
    moment.clip = { start: t.lines[0]?.start ?? c.start_seconds, end: t.lines.at(-1)?.end ?? c.start_seconds + 60 };
    moment.lines = t.lines.map(l => `[${Math.round(l.start)}s] ${l.text}`);
  } catch (err) {
    moment.clip = { start: c.start_seconds, end: c.start_seconds + 60 };
    moment.passage = c.text;
    moment.transcript = err.code;
  }
  moments.push(moment);
}
return { speaker: { id, name: e?.name ?? null, assumed, why }, as_of: hits.as_of, ...(moments.length ? { moments } : { none: hits.note ?? null }) };

A good answer

一个好的回答

  • Names the speaker or show it searched, with the id, and quotes the words exactly as the transcript lines give them, trimmed to whole sentences, never paraphrased inside quotation marks.
  • Gives the show, the episode title, the date, and the speaker when the chunk or a premium transcript names one.
  • Links the
    watch_url
    , which starts at the moment, and gives a clip start and end in seconds from the transcript lines.
  • Says so when nothing matched, with
    as_of
    , instead of offering a quote from memory.
  • 注明所搜索的说话者或节目及其 id,并严格按照
    transcript
    文本行逐字引用,裁剪为完整句子;引号内绝不能释义改写。
  • 给出节目、单集标题、日期,以及 chunk 或 premium transcript 中指明的说话者。
  • 提供
    watch_url
    链接(链接会从该时刻开始),并根据 transcript 文本行给出以秒为单位的剪辑开始和结束时间。
  • 如果没有匹配内容,应说明这一点并提供
    as_of
    ,而不是凭记忆提供引文。

Traps

注意事项

  • search
    ranks by the words in
    query
    ; put the distinctive words of the phrase there, not a paraphrase.
  • A chunk found with
    speakerIds
    also holds other people's lines. Quote only lines that start with the speaker's name ("Chamath Palihapitiya: ..."), never the whole passage.
  • Caption lines are machine text: fix nothing inside the quotation marks. A premium transcript (
    quality: "premium"
    , paid plans) adds speaker ids into
    speakers[]
    .
  • A caption read uses 4 credits per started 15 minutes of its
    start
    /
    end
    window, and of the whole episode without one. A Premium read uses credits for the whole video whatever the window.
  • Some videos have no readable caption track yet (
    transcript_unavailable
    ,
    transcript_fetching
    ); quote the search chunk
    text
    for those and say the words come from the search passage.
  • search
    根据
    query
    中的词进行排序;应放入目标短语中的独特词语,而不是释义。
  • 通过
    speakerIds
    找到的 chunk 也可能包含其他人的话。只引用以说话者姓名开头的文本行(“Chamath Palihapitiya: ...”),绝不要引用整个段落。
  • 字幕文本行是机器转写内容:引号内的内容不要做任何修改。premium transcript(
    quality: "premium"
    ,付费套餐)会将说话者 id 添加到
    speakers[]
    中。
  • 字幕读取按其
    start
    /
    end
    窗口内每开始的 15 分钟消耗 4 credits;未指定窗口时,则按整集节目计费。Premium 读取无论窗口大小,都会按整个视频消耗 credits。
  • 某些视频还没有可读取的字幕轨道(
    transcript_unavailable
    、
    transcript_fetching
    );对于这些视频,引用搜索 chunk 的
    text
    ,并说明这些内容来自搜索段落。

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
company-watch
skill sets one up.
If anything was wrong, slow, or missing for the user, send one arcmira_feedback.
监控器可以跟踪一次 research turn 的发现;每次提醒会先使用账户套餐中的 25 credits,然后使用其 on-demand budget。
company-watch
skill 可以设置这种监控。
如果结果有错误、运行缓慢或缺少用户所需内容,请发送一次
arcmira_feedback
。