以编程方式使用文档

本指南提供快速入门 Moonshot AI 的概述 聊天模型。有关最新的包详情、示例和源代码,请参阅 langchain-moonshot 仓库.

概述

集成详情

可序列化JS 支持下载量版本
ChatMoonshotlangchain-moonshotbeta!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_identifiermax_completion_tokens.
  • - kimi-k2.5 的验证比通用 OpenAI 兼容聊天模型更严格。
  • - 对于 kimi-k2.5, top_p 必须保持 0.95, n 必须保持 1,两者都必须保持 presence_penaltyfrequency_penalty 必须保持 0.0.
  • - 当 thinking=True,Moonshot 内置 $web_search 被拒绝用于 kimi-k2.5.

仓库

有关最新的包代码、README 示例、发行说明和安装元数据,请参阅: