主题
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)
(原文此节尚无内容)