本指南提供快速入门 Moonshot AI 的概述 聊天模型。有关最新的包详情、示例和源代码,请参阅 langchain-moonshot 仓库.
概述
集成详情
| 类 | 包 | 可序列化 | JS 支持 | 下载量 | 版本 |
|---|---|---|---|---|---|
ChatMoonshot | langchain-moonshot | beta | ❌ | !PyPI - 下载量 | !PyPI - 版本 |
模型特性
| 工具调用 | 结构化输出 | 图像输入 | 音频输入 | 视频输入 (kimi-k2.5 仅) | Token 级流式输出 | 原生异步 | Token 使用量 | 对数概率 |
|---|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ |
设置
要访问 Moonshot 模型,您需要一个 Moonshot 账户、API 密钥和 langchain-moonshot 集成包。
凭证
前往 Moonshot 控制台 创建 API 密钥。完成后,设置 MOONSHOT_API_KEY 环境变量。
if not os.getenv("MOONSHOT_API_KEY"):
os.environ["MOONSHOT_API_KEY"] = getpass.getpass("Enter your Moonshot API key: ")
默认情况下,该包使用 Moonshot 的国际端点 (https://api.moonshot.ai/v1)。要使用中国端点,请设置:
os.environ["MOONSHOT_API_BASE"] = "https://api.moonshot.cn/v1"
要启用模型调用的自动追踪,请设置您的 LangSmith API 密钥:
os.environ["LANGSMITH_API_KEY"] = getpass.getpass("Enter your LangSmith API key: ")
os.environ["LANGSMITH_TRACING"] = "true"
安装
LangChain Moonshot 集成位于 langchain-moonshot package:
pip install -U langchain-moonshot
uv add langchain-moonshot
实例化
现在我们可以实例化模型对象并生成响应:
from langchain_moonshot import ChatMoonshot
llm = ChatMoonshot(
model="kimi-k2.5",
thinking=False,
temperature=0.6,
max_retries=2,
# prompt_cache_key="docs-example-cache",
# safety_identifier="docs-example-user",
# max_completion_tokens=1024,
)
调用
messages = [
("system", "You are a concise bilingual assistant."),
("human", "Summarize why Moonshot reasoning models are useful in two bullet points."),
]
ai_msg = llm.invoke(messages)
print(ai_msg.text)
print(ai_msg.usage_metadata)
推理输出
ChatMoonshot 保留 Moonshot 的 reasoning_content 字段,适用于非流式和流式响应。
reasoning_llm = ChatMoonshot(
model="kimi-k2.5",
thinking=True,
temperature=1.0,
)
ai_msg = reasoning_llm.invoke(
"Explain in two bullet points why reasoning models are useful."
)
print(ai_msg.text)
print(ai_msg.additional_kwargs.get("reasoning_content"))
流式输出
要在流式传输时恢复使用元数据,请设置 stream_usage=True:
streaming_llm = ChatMoonshot(
model="kimi-k2.5",
thinking=True,
temperature=1.0,
stream_usage=True,
)
stream = streaming_llm.stream_events(
"Explain streaming output in two short bullet points.", version="v3"
)
for token in stream.text:
print(token, end="", flush=True)
for reasoning_token in stream.reasoning:
print(f"\n[reasoning] {reasoning_token}", end="", flush=True)
print()
print(stream.output.usage_metadata)
工具调用
Moonshot 支持通过 LangChain 进行工具调用 bind_tools:
from langchain.messages import ToolMessage
from langchain.tools import tool
@tool
def add(a: int, b: int) -> int:
"""Add two integers."""
return a + b
@tool
def multiply(a: int, b: int) -> int:
"""Multiply two integers."""
return a * b
llm_with_tools = ChatMoonshot(
model="kimi-k2.5",
thinking=False,
temperature=0.6,
).bind_tools([add, multiply])
messages = [
("system", "Use the provided math tools before answering."),
("human", "Add 17 and 25, multiply 12 by 13, then summarize the results."),
]
response = llm_with_tools.invoke(messages)
print(response.tool_calls)
if response.tool_calls:
tools_map = {"add": add, "multiply": multiply}
tool_results = []
for tool_call in response.tool_calls:
result = tools_map[tool_call["name"]].invoke(tool_call["args"])
tool_results.append(
ToolMessage(content=str(result), tool_call_id=tool_call["id"])
)
final_response = llm_with_tools.invoke([*messages, response, *tool_results])
print(final_response.text)
结构化输出
Moonshot 通过 LangChain 的 with_structured_output(...)支持结构化输出。Moonshot 不公开独立的 json_schema 在此包中的引导路径,因此 method="json_schema" 被有意降级为 function_calling.
from pydantic import BaseModel, Field
class WeatherAnswer(BaseModel):
city: str = Field(description="City name")
summary: str = Field(description="One-sentence weather summary")
structured_llm = ChatMoonshot(
model="kimi-k2.5",
thinking=False,
temperature=0.6,
).with_structured_output(WeatherAnswer)
result = structured_llm.invoke("Summarize today's weather in Shanghai.")
print(result)
多模态输入
支持视觉的 Moonshot 模型接受 OpenAI 风格的 image_url 内容块:
from langchain.messages import HumanMessage
vision_llm = ChatMoonshot(
model="moonshot-v1-32k-vision-preview",
)
message = HumanMessage(
content=[
{"type": "text", "text": "Describe the image and mention one concrete detail."},
{
"type": "image_url",
"image_url": {"url": "data:image/png;base64,<your-base64-image>"},
},
]
)
response = vision_llm.invoke([message])
print(response.text)
Moonshot 特定说明
- -
ChatMoonshot是一个独立的 LangChain 集成包,用于基于langchain-openai. - - 包公开的 Moonshot 特定请求控制包括
thinking,prompt_cache_key,safety_identifier和max_completion_tokens. - -
kimi-k2.5的验证比通用 OpenAI 兼容聊天模型更严格。 - - 对于
kimi-k2.5,top_p必须保持0.95,n必须保持1,两者都必须保持presence_penalty和frequency_penalty必须保持0.0. - - 当
thinking=True,Moonshot 内置$web_search被拒绝用于kimi-k2.5.
仓库
有关最新的包代码、README 示例、发行说明和安装元数据,请参阅: