整合指南
在 LangChain 中使用
LangChain 用 langchain-openai 的 ChatOpenAI 和 OpenAIEmbeddings 接入土土金 API,把 base_url 設為 https://www.tutujin.com/v1;Claude 也可以用 langchain-anthropic 的 ChatAnthropic 走原生介面。含 Python 與 JavaScript 示例。
LangChain 通過 langchain-openai 包接入土土金 API:ChatOpenAI 和 OpenAIEmbeddings 都支援自定義 base_url,設為 https://www.tutujin.com/v1,api_key 用土土金的 Key,model 填模型廣場裡的模型名。想走 Claude 原生介面,用 langchain-anthropic 的 ChatAnthropic,base_url 填 https://www.tutujin.com。
安裝
pip install langchain-openai langchain-anthropicnpm install @langchain/openai @langchain/core對話模型
import os
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="gpt-5.4-mini",
base_url="https://www.tutujin.com/v1",
api_key=os.environ["TUTUJIN_API_KEY"],
temperature=0.3,
max_retries=3,
timeout=60,
)
print(llm.invoke("用一句话解释向量数据库。").content)
# 流式
for chunk in llm.stream("写一段 100 字的产品介绍"):
print(chunk.content, end="", flush=True)import { ChatOpenAI } from '@langchain/openai'
const llm = new ChatOpenAI({
model: 'gpt-5.4-mini',
apiKey: process.env.TUTUJIN_API_KEY,
configuration: { baseURL: 'https://www.tutujin.com/v1' },
temperature: 0.3,
})
const res = await llm.invoke('用一句话解释向量数据库。')
console.log(res.content)
// 流式
for await (const chunk of await llm.stream('写一段 100 字的产品介绍')) {
process.stdout.write(String(chunk.content))
}換模型只改 model。目錄裡標註支援 Chat Completions 的模型,包括 DeepSeek、通義千問、Claude、Gemini 等,都可以用 ChatOpenAI 呼叫。
組合成鏈
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([
("system", "你是电商文案编辑,输出不超过 60 字。"),
("user", "为这件商品写一句卖点:{product}"),
])
chain = prompt | llm | StrOutputParser()
print(chain.invoke({"product": "304 不锈钢保温杯,500ml"}))向量模型
import os
from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings(
model="text-embedding-3-small",
base_url="https://www.tutujin.com/v1",
api_key=os.environ["TUTUJIN_API_KEY"],
)
vectors = embeddings.embed_documents(["退货政策是什么?", "多久发货?"])
query_vector = embeddings.embed_query("怎么退货")使用 OpenAI 以外的向量模型(例如 qwen3-embedding-8b)時,加上 check_embedding_ctx_length=False。預設情況下 OpenAIEmbeddings 會先用 OpenAI 的分詞器把文本轉成 token 再發送,其他廠商的模型不認這種輸入,關掉後直接傳送原始文本:
embeddings = OpenAIEmbeddings(
model="qwen3-embedding-8b",
base_url="https://www.tutujin.com/v1",
api_key=os.environ["TUTUJIN_API_KEY"],
check_embedding_ctx_length=False,
)向量可以接 LangChain 支援的任意向量庫(如 PGVector、Milvus、Qdrant、Chroma),做檢索增強生成,完整方案見企業知識庫與 RAG。
用原生介面呼叫 Claude
import os
from langchain_anthropic import ChatAnthropic
claude = ChatAnthropic(
model="claude-sonnet-5-5",
base_url="https://www.tutujin.com",
api_key=os.environ["TUTUJIN_API_KEY"],
max_tokens=1024,
)
print(claude.invoke("用三点总结这份会议纪要的要点:……").content)base_url 填站點根地址,不帶 /v1。
常見問題
| 現象 | 原因與處理 |
|---|---|
| 404 | ChatOpenAI 的 base_url 要帶 /v1;ChatAnthropic 的不帶 |
| 向量介面報 400 | 非 OpenAI 向量模型沒有加 check_embedding_ctx_length=False |
503 並提示 model_not_found | Key 所在分組沒有這個模型,見選擇分組 |
沒找到答案?加客服微信 JsnonoChat,傳送報錯資訊裡的 request id,我們幫你排查。