Skip to main content
Open In ColabOpen on GitHub

Dappier

Dappier 连接任何语言模型或您的 Agentic AI 到实时、权利清白的专属数据源,使您的 AI 成为任何领域的专家。我们的专业模型包括实时时搜网、新闻、体育、金融股市数据、加密货币数据以及来自顶级出版商的独家内容。在 marketplace.dappier.com 的市场中探索一系列数据模型。

Dappier 提供丰富、准备好的提示以及上下文相关的内容字符串,优化以实现与 LangChain 的无缝集成。无论您是在构建对话式 AI、推荐引擎还是智能搜索,Dappier 的 LLM-agnostic RAG 模型都能确保您的 AI 能访问经过验证的最新数据——无需自己构建和管理自己的检索管道。

Dappier工具

这将帮助你开始使用Dappier 工具。要查看所有DappierRetriever功能和配置的详细文档,请访问API参考

概览

The DappierRealTimeSearchTool 和 DappierAIRecommendationTool 使 AI 应用程序能够获得实时数据和基于 AI 的见解。前者提供了对新闻、天气、旅行和金融市场等领域的最新信息的访问,而后者则通过 Dappier 预训练的 RAG 模型和自然语言 API 提供来自新闻、金融和体育等多个领域的高质量内容。

设置

此工具位于langchain-dappier包中。

%pip install -qU langchain-dappier

Credentials

我们也需要设置 Dappier API 凭证,这些凭证可以在 Dappier 网站 生成。

import getpass
import os

if not os.environ.get("DAPPIER_API_KEY"):
os.environ["DAPPIER_API_KEY"] = getpass.getpass("Dappier API key:\n")

如果您想要从单个查询中获取自动跟踪,您也可以通过取消注释下方代码来设置您的LangSmith API密钥:

# os.environ["LANGSMITH_API_KEY"] = getpass.getpass("Enter your LangSmith API key: ")
# os.environ["LANGSMITH_TRACING"] = "true"

Dappier实时搜索工具

访问实时的谷歌搜索结果,包括最新新闻、天气、旅游和优惠信息,以及来自 polygon.io 的最新财经新闻、股票价格和交易数据,全部由 AI 洞察驱动,助您随时掌握最新资讯。

Instantiation

  • ai_model_id: str 使用此查询的AI模型ID。AI模型ID始终以前缀“am_”开头。

    默认为"am_01j06ytn18ejftedz6dyhz2b15"。

    提供多种AI模型ID,可在以下网址找到: https://marketplace.dappier.com/marketplace

from langchain_dappier import DappierRealTimeSearchTool

tool = DappierRealTimeSearchTool(
# ai_model_id="...", # overwrite default ai_model_id
# name="...", # overwrite default tool name
# description="...", # overwrite default tool description
# args_schema=..., # overwrite default args_schema: BaseModel
)

Invocation

使用参数直接调用

The DappierRealTimeSearchTool 接受一个名为“查询”的参数,该参数应该是一个自然语言查询:

tool.invoke({"query": "What happened at the last wimbledon"})
"At the last Wimbledon in 2024, Carlos Alcaraz won the title by defeating Novak Djokovic. This victory marked Alcaraz's fourth Grand Slam title at just 21 years old! 🎉🏆🎾"

使用工具调用启动

我们也可以通过模型生成的ToolCall调用工具,在这种情况下将返回一个ToolMessage:

# This is usually generated by a model, but we'll create a tool call directly for demo purposes.
model_generated_tool_call = {
"args": {"query": "euro 2024 host nation"},
"id": "1",
"name": "dappier",
"type": "tool_call",
}
tool_msg = tool.invoke(model_generated_tool_call)

# The content is a JSON string of results
print(tool_msg.content[:400])
Euro 2024 is being hosted by Germany! 🇩🇪 The tournament runs from June 14 to July 14, 2024, featuring 24 teams competing across various cities like Berlin and Munich. It's going to be an exciting summer of football! ⚽️🏆

链式调用

我们可以通过首先将工具绑定到一个调用模型,然后调用来使用我们的工具在一个链中:

pip install -qU "langchain[openai]"
import getpass
import os

if not os.environ.get("OPENAI_API_KEY"):
os.environ["OPENAI_API_KEY"] = getpass.getpass("Enter API key for OpenAI: ")

from langchain.chat_models import init_chat_model

llm = init_chat_model("gpt-4o-mini", model_provider="openai")
import datetime

from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnableConfig, chain

today = datetime.datetime.today().strftime("%D")
prompt = ChatPromptTemplate(
[
("system", f"You are a helpful assistant. The date today is {today}."),
("human", "{user_input}"),
("placeholder", "{messages}"),
]
)

# specifying tool_choice will force the model to call this tool.
llm_with_tools = llm.bind_tools([tool])

llm_chain = prompt | llm_with_tools


@chain
def tool_chain(user_input: str, config: RunnableConfig):
input_ = {"user_input": user_input}
ai_msg = llm_chain.invoke(input_, config=config)
tool_msgs = tool.batch(ai_msg.tool_calls, config=config)
return llm_chain.invoke({**input_, "messages": [ai_msg, *tool_msgs]}, config=config)


tool_chain.invoke("who won the last womens singles wimbledon")
AIMessage(content="Barbora Krejčíková won the women's singles title at Wimbledon 2024, defeating Jasmine Paolini in the final with a score of 6–2, 2–6, 6–4. This victory marked her first Wimbledon singles title and her second major singles title overall! 🎉🏆🎾", additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 69, 'prompt_tokens': 222, 'total_tokens': 291, 'completion_tokens_details': {'accepted_prediction_tokens': 0, 'audio_tokens': 0, 'reasoning_tokens': 0, 'rejected_prediction_tokens': 0}, 'prompt_tokens_details': {'audio_tokens': 0, 'cached_tokens': 0}}, 'model_name': 'gpt-4o-2024-08-06', 'system_fingerprint': 'fp_4691090a87', 'finish_reason': 'stop', 'logprobs': None}, id='run-87a385dd-103b-4344-a3be-2d6fd1dcfdf5-0', usage_metadata={'input_tokens': 222, 'output_tokens': 69, 'total_tokens': 291, 'input_token_details': {'audio': 0, 'cache_read': 0}, 'output_token_details': {'audio': 0, 'reasoning': 0}})

DappierAI推荐工具

使用Dappier的预训练RAG模型和自然语言API,为您的AI应用注入动力,提供来自新闻、金融、体育、天气等多个垂直领域的优质内容提供商的事实性和时效性响应。

Instantiation

  • data_model_id: str
    使用的数据模型ID用于推荐。数据模型ID始终以前缀"dm_"开头。默认值为"dm_01j0pb465keqmatq9k83dthx34"。
    多个数据模型ID可供选择,可以在Dappier 市场平台.

  • similarity_top_k: int
    基于相似性检索的顶级文档数量。默认值为“9”。

  • ref: 可选[str] 显示AI推荐的站点域名。默认为

  • num_articles_ref: int The minimum number of articles to return from the specified reference domain (

  • 搜索算法: Literal["最近年份", "语义", "最近年份_语义", "热门"] 用于检索文章的搜索算法。默认值为 "最近年份"。

from langchain_dappier import DappierAIRecommendationTool

tool = DappierAIRecommendationTool(
data_model_id="dm_01j0pb465keqmatq9k83dthx34",
similarity_top_k=3,
ref="sportsnaut.com",
num_articles_ref=2,
search_algorithm="most_recent",
# name="...", # overwrite default tool name
# description="...", # overwrite default tool description
# args_schema=..., # overwrite default args_schema: BaseModel
)

Invocation

使用参数直接调用

The DappierAIRecommendationTool 接受一个名为“查询”的参数,该参数应该是一个自然语言查询:

tool.invoke({"query": "latest sports news"})
[{'author': 'Matt Weaver',
'image_url': 'https://images.dappier.com/dm_01j0pb465keqmatq9k83dthx34/Screenshot_20250117_021643_Gallery_.jpg?width=428&height=321',
'pubdate': 'Fri, 17 Jan 2025 08:04:03 +0000',
'source_url': 'https://sportsnaut.com/chili-bowl-thursday-bell-column/',
'summary': "The article highlights the thrilling unpredictability of the Chili Bowl Midget Nationals, focusing on the dramatic shifts in fortune for drivers like Christopher Bell, Tanner Thorson, and Karter Sarff during Thursday's events. Key moments included Sarff's unfortunate pull-off and a last-lap crash that allowed Ryan Bernal to capitalize and improve his standing, showcasing the chaotic nature of the race and the importance of strategy and luck.\n\nAs the competition intensifies leading up to Championship Saturday, Bell faces the challenge of racing from a Last Chance Race, reflecting on the excitement and difficulties of the sport. The article emphasizes the emotional highs and lows experienced by racers, with insights from Bell and Bernal on the unpredictable nature of racing. Overall, it captures the camaraderie and passion that define the Chili Bowl, illustrating how each moment contributes to the event's narrative.",
'title': 'Thursday proves why every lap of Chili Bowl is so consequential'},
{'author': 'Matt Higgins',
'image_url': 'https://images.dappier.com/dm_01j0pb465keqmatq9k83dthx34/Pete-Alonso-24524027_.jpg?width=428&height=321',
'pubdate': 'Fri, 17 Jan 2025 02:48:42 +0000',
'source_url': 'https://sportsnaut.com/new-york-mets-news-pete-alonso-rejected-last-ditch-contract-offer/',
'summary': "The New York Mets are likely parting ways with star first baseman Pete Alonso after failing to finalize a contract agreement. Alonso rejected a last-minute three-year offer worth between $68 and $70 million, leading the Mets to redirect funds towards acquiring a top reliever. With Alonso's free-agent options dwindling, speculation arises about his potential signing with another team for the 2025 season, while the Mets plan to shift Mark Vientos to first base.\n\nIn a strategic move, the Mets are also considering a trade for Toronto Blue Jays' star first baseman Vladimir Guerrero Jr. This potential acquisition aims to enhance the Mets' competitiveness as they reshape their roster. Guerrero's impressive offensive stats make him a valuable target, and discussions are in the early stages. Fans and analysts are keenly watching the situation, as a trade involving such a prominent player could significantly impact both teams.",
'title': 'MLB insiders reveal New York Mets’ last-ditch contract offer that Pete Alonso rejected'},
{'author': 'Jim Cerny',
'image_url': 'https://images.dappier.com/dm_01j0pb465keqmatq9k83dthx34/NHL-New-York-Rangers-at-Utah-25204492_.jpg?width=428&height=321',
'pubdate': 'Fri, 17 Jan 2025 05:10:39 +0000',
'source_url': 'https://www.foreverblueshirts.com/new-york-rangers-news/stirring-5-3-comeback-win-utah-close-road-trip/',
'summary': "The New York Rangers achieved a thrilling 5-3 comeback victory against the Utah Hockey Club, showcasing their resilience after a prior overtime loss. The Rangers scored three unanswered goals in the third period, with key contributions from Reilly Smith, Chris Kreider, and Artemi Panarin, who sealed the win with an empty-net goal. This victory marked their first win of the season when trailing after two periods and capped off a successful road trip, improving their record to 21-20-3.\n\nIgor Shesterkin's strong performance in goal, along with Arthur Kaliyev's first goal for the team, helped the Rangers overcome an early deficit. The game featured multiple lead changes, highlighting the competitive nature of both teams. As the Rangers prepare for their next game against the Columbus Blue Jackets, they aim to close the gap in the playoff race, with the Blue Jackets currently holding a five-point lead in the Eastern Conference standings.",
'title': 'Rangers score 3 times in 3rd period for stirring 5-3 comeback win against Utah to close road trip'}]

使用工具调用启动

我们也可以通过模型生成的ToolCall调用工具,在这种情况下将返回一个ToolMessage:

# This is usually generated by a model, but we'll create a tool call directly for demo purposes.
model_generated_tool_call = {
"args": {"query": "top 3 news articles"},
"id": "1",
"name": "dappier",
"type": "tool_call",
}
tool_msg = tool.invoke(model_generated_tool_call)

# The content is a JSON string of results
print(tool_msg.content[:400])
[{"author": "Matt Johnson", "image_url": "https://images.dappier.com/dm_01j0pb465keqmatq9k83dthx34/MLB-New-York-Mets-at-Colorado-Rockies-23948644_.jpg?width=428&height=321", "pubdate": "Fri, 17 Jan 2025 13:31:02 +0000", "source_url": "https://sportsnaut.com/new-york-mets-rumors-vladimir-guerrero-jr-news/", "summary": "The New York Mets are refocusing their strategy after failing to extend a contra

API 参考

详细介绍了所有DappierRealTimeSearchTool功能和配置的文档请访问API参考