Skip to content
Embabel 文档版本 0.3.0-SNAPSHOT 源快照 bba0dce2 更新于 2026-09-29

05 · 指南(Guides)

以下章节专门讲解智能体示例(Agent Examples)。

星座运势示例(Horoscope Example)

StarNewsFinder 是一个简单的智能体:它从用户输入中找出人名与星座,通过外部 API 获取该星座的运势, 再借助 Web 工具检索相关新闻,最后为用户写出一篇有趣的小文。

其中 findNewsStories 这个 action 演示了 PromptRunner 上的 withToolCallContext()。 交互级(interaction-level)上下文会携带领域元数据 —— 人名、星座、功能标识符 —— 传递给那一次 LLM 调用中所触发的每一个工具,包括远程 MCP 工具(在那里它会变成 MCP 的 _meta):

java
@Action
public RelevantNewsStories findNewsStories(
        StarPerson person, Horoscope horoscope, Ai ai) {

    var interactionContext = ToolCallContext.of(Map.of(
            "personName", person.name(),
            "starSign", person.sign(),
            "feature", "star-news-finder"
    ));

    return ai
            .withDefaultLlm()
            .withId("find_news_stories")
            .withToolGroup(CoreToolGroups.WEB)
            .withToolCallContext(interactionContext) // ①
            .createObject(prompt, RelevantNewsStories.class);
}

① 该上下文会与调用时通过 ProcessOptions.withToolCallContext() 设置的进程级上下文合并; 发生冲突时,交互级的值优先。

你可以从 shell 里验证端到端的传递效果:

bash
sc tenantId=acme
x "Natasha is Pisces. Find news for her" -d

该示例中 check_tool_call_context 这个诊断工具(包含在 WEB 工具组里)会打印它收到的上下文条目, 以此确认这些数据确实走通了整条链路:

[task-2] INFO ContextDiagnosticTools - ToolCallContext received: {personName=Alex, starSign=Cancer, feature=star-news-finder, tenantId=acme}

关于 ToolCallContext 的完整文档(包括如何注入到 @LlmTool 方法,以及用 ToolCallContextMcpMetaConverter 控制哪些内容跨越 MCP 进程边界),见 hub.embabel.com/reference/tools。

电影示例(Movie Example)

(原文此节尚无内容)

BytesRouter 是社区翻译站点,所有译文仅供参考,一切以官方英文原文为准。