您可以将MongoDB与 Fireworks AI集成,Fireworks AI 是一个针对开源模型的推理和培训平台。本指南展示了如何将 Fireworks 聊天模型与MongoDB结合使用,这允许您为代理响应提供上下文并配置代理的数据存储。
Fireworks AI的MongoDB集成提供以下功能:
聊天模型数据:将MongoDB数据作为上下文传递给聊天模型,或将其提供给模型调用的工具。
代理内存:将代理对话历史记录和会话状态保留为文档。
训练数据源:使用MongoDB数据微调 Fireworks 模型,并根据您的使用案例自定义其行为。
您可以使用 Fireworks SDK 或兼容的 API(例如 OpenAI API )调用 Fireworks 聊天模型。支持OpenAI 兼容提供程序的框架(包括 LangChain、LangGraph 和 LlamaIndex)也适用于 Fireworks。
开始体验
要完成使用 Fireworks 模型和MongoDB Vector Search构建RAG应用程序的教程,请参阅开始使用MongoDB Fireworks AI集成。
安装
要安装所需的软件包,运行以下命令:
pip install --quiet --upgrade pymongo openai此命令会安装以下软件包:
pymongo: MongoDB Python驾驶员openai:一个 OpenAI客户端,本页上的示例使用该客户端调用 Fireworks 聊天模型
LangChain 软件包
如果使用 LangChain 进行构建,请使用 langchain-fireworks 包的 ChatFireworks 类来调用 Fireworks 聊天模型。运行以下命令以安装此包:
pip install --quiet --upgrade langchain-fireworks使用
要将 Fireworks 聊天模型与MongoDB结合使用,请创建以下客户端:
配置为使用 Fireworks 端点的客户端,例如 OpenAI客户端
用于部署的MongoDB客户端
以下示例创建了这两个客户端并选择了 Fireworks 聊天模型:
FIREWORKS_BASE_URL = "https://api.fireworks.ai/inference/v1"fireworks = OpenAI( base_url=FIREWORKS_BASE_URL, api_key=os.environ["FIREWORKS_API_KEY"],)
mongo_client = MongoClient(os.environ["MONGODB_URI"])collection = mongo_client["<database-name>"]["<collection-name>"]
CHAT_MODEL = "accounts/fireworks/models/gpt-oss-120b"要使用此示例,设立以下环境变量:
与聊天模型交互
要将会话发送到 Fireworks 模型并接收响应,请在 Fireworks客户端上调用 chat.completions.create() 方法。本部分介绍如何通过以下方式自定义聊天模型交互:
使用MongoDB数据作为上下文
要根据您提供的上下文生成回答,请将 messages 参数设立为包含以下消息的列表:
system消息,指示模型仅从提供的上下文中进行回答user包含上下文和问题的消息
您可以将任何MongoDB查询结果作为上下文传递到 user 消息中,以从MongoDB数据生成响应。
以下示例将在MongoDB集合中查询一设立候选文档。然后,代码提供标题和情节作为上下文以生成电影推荐:
question = "Recommend a movie about a heist that goes wrong."movies = collection.find( {"plot": {"$regex": r"\bheist\b", "$options": "i"}}, {"_id": 0, "title": 1, "plot": 1}).limit(5)context = "\n".join(f'{m["title"]}: {m["plot"]}' for m in movies)
response = fireworks.chat.completions.create( model=CHAT_MODEL, messages=[ { "role": "system", "content": "Answer using only the movies in the context. " "If the context doesn't contain the answer, say so.", }, { "role": "user", "content": f"Context:\n{context}\n\nQuestion: {question}", }, ],)
print(response.choices[0].message.content)指定代理工具
要指定受支持的 Fireworks 聊天模型可以调用的工具列表,请使用 tools 参数。将此参数设置为函数定义列表,每个定义都包含函数的名称、描述和参数。
当模型决定调用函数时,它会在响应消息中返回 tool_calls 列表,而不是文本回答。您的代码运行已命名的函数,并将结果作为 tool 消息发回以继续对话。使用此模式可以构建一个代理,用于决定何时调用工具,例如查询MongoDB集合的函数。
此示例将执行以下动作:
定义查询MongoDB 的
search_movies工具允许模型决定是否调用该工具
运行
search_movies工具,如果模型请求,则将结果发送回模型生成最终建议
AGENT_MODEL = "accounts/fireworks/models/kimi-k3"
TOOLS = [ { "type": "function", "function": { "name": "search_movies", "description": "Keyword search over movie plots in the MongoDB movie catalog.", "parameters": { "type": "object", "properties": { "keyword": { "type": "string", "description": "A single keyword to search for in movie plots.", } }, "required": ["keyword"], }, }, }]
def search_movies(keyword): results = collection.find( {"plot": {"$regex": rf"\b{keyword}\b", "$options": "i"}}, {"_id": 0, "title": 1, "plot": 1} ).limit(5) return [f'{m["title"]}: {m["plot"]}' for m in results]
messages = [ { "role": "system", "content": "Call search_movies before you recommend a movie.", }, { "role": "user", "content": "Recommend a movie about a heist that goes wrong.", },]
response = fireworks.chat.completions.create( model=AGENT_MODEL, messages=messages, tools=TOOLS,)message = response.choices[0].messagemessages.append(message.model_dump(exclude_none=True))
for call in message.tool_calls: args = json.loads(call.function.arguments) results = search_movies(**args) messages.append( { "role": "tool", "tool_call_id": call.id, "content": json.dumps(results), } )
response = fireworks.chat.completions.create(model=AGENT_MODEL, messages=messages)print(response.choices[0].message.content)持久代理内存
要配置记住早期会话轮次的代理,请将每条消息存储在MongoDB集合中。然后,每当调用 chat.completions.create() 方法时,都将消息历史记录加载到 messages 列表中。在每个消息文档中存储 session_id 值,以将存储的历史记录分配给单个对话。
此示例将执行以下动作:
从
chat_history集合加载会话的任何现有消息历史记录追加一条新用户消息并使用合并的历史记录调用
chat.completions.create()将新用户消息和模型响应保存回
chat_history集合
history = mongo_client["<database-name>"]["chat_history"]
def load_history(session_id): return [ doc["message"] for doc in history.find({"session_id": session_id}).sort("seq", 1) ]
def save_messages(session_id, messages, start_seq): history.insert_many( {"session_id": session_id, "seq": start_seq + i, "message": message} for i, message in enumerate(messages) )
session_id = "demo-session"past_messages = load_history(session_id)new_messages = [{"role": "user", "content": "Recommend a movie about a heist that goes wrong."}]
response = fireworks.chat.completions.create( model=AGENT_MODEL, messages=past_messages + new_messages,)new_messages.append(response.choices[0].message.model_dump(exclude_none=True))
save_messages(session_id, new_messages, start_seq=len(past_messages))print(response.choices[0].message.content)由于代理会在每次调用时从 chat_history集合中加载过去的消息,因此使用相同 session_id 值的未来调用可以引用回此对话。
在MongoDB数据上训练模型
您可以使用MongoDB中存储的数据训练现有的开源聊天模型,针对特定使用案例自定义其行为并提高其准确性。
要使用MongoDB数据进行模型培训,您的文档必须以 Fireworks 期望的聊天格式存储messages大量。将这些文档从集合导出到 JSONL文件,其中每一行都是一个文档的 messages大量。然后,上传数据集并使用 firectl(即 Fireworks CLI)开始监督微调。
运行以下命令上传数据集并重新训练模型:
firectl dataset create <dataset-name> <path-to-jsonl-file>firectl sftj create \ --base-model <base-model-id> \ --dataset <dataset-name> \ --output-model <output-model-name>培训完成后,部署调整后的模型,并在聊天调用中使用其模型ID代替基本模型ID 。要学习;了解支持的基本模型、培训方法和部署选项,请参阅 Fireworks 文档中的监督微调。
其他资源
Fireworks AI食谱 GitHub存储库