LangChain · Agent
LangChain 接入 Tikway:ChatOpenAI 配置与 Agent 工具调用
更新日期:
想给自己的 Python 应用接入 AI Agent,可以先用 LangChain 的 ChatOpenAI 连接 Tikway,再逐步验证工具调用。基础地址、模型 ID 和 Key 配对正确后,模型负责生成工具调用请求,Python 应用负责执行工具并把结果返回模型。本文用一个只做整数加法的本地工具演示这个过程,不需要接入搜索服务或访问业务数据。
1. 先选支持工具调用的模型
打开模型目录,选择同时支持 OpenAI 协议、Chat Completions 和工具调用 / Function Calling 的文本模型,复制完整 ID。文本问答成功不代表工具调用也成功,单独核对所选型号的能力和参数。
从控制台创建 Tikway API Key。这里的 Base URL 为 https://api.tikway.ai/v1;SDK 会追加 /chat/completions。不要把完整端点当作 Base URL,也不要把官网业务接口 /api 地址填进模型客户端。
在自己的 Python 虚拟环境中安装:
python -m pip install -U langchain-openai
配置当前终端的环境变量。下面是 Bash / macOS / Linux / WSL 写法:
export TIKWAY_API_KEY='替换为你的 Tikway API Key'
export TIKWAY_MODEL='替换为目录中的完整模型 ID'
Windows PowerShell 写法:
$env:TIKWAY_API_KEY = '替换为你的 Tikway API Key'
$env:TIKWAY_MODEL = '替换为目录中的完整模型 ID'
2. 先测试一条普通文本请求
保存为 langchain_chat.py。运行脚本会调用真实模型并产生适用的 API 费用。本文提供配置和自检方法,尚未对你的账号、所选模型或工具流程进行端到端验证。
import os
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model=os.environ["TIKWAY_MODEL"],
api_key=os.environ["TIKWAY_API_KEY"],
base_url="https://api.tikway.ai/v1",
use_responses_api=False,
timeout=60,
max_retries=0,
)
response = llm.invoke("只回复 OK")
print(response.content)
print(response.usage_metadata)
python langchain_chat.py
use_responses_api=False 将示例明确限定在 Chat Completions 路径。不要额外启用 OpenAI 内置 Web Search、Code Interpreter 或远程 MCP,并推定这些能力也能通过同一路径使用。它们属于不同接口和工具形态,需要另外确认。
3. 加上一个可核对结果的本地工具
文本请求正常后,保存下面的代码为 langchain_agent.py。它最多发送三轮模型请求,关闭自动重试,遇到未知工具或无效参数就停止,便于定位首次工具调用。示例不执行模型生成的任意代码。
import os
from langchain_core.messages import HumanMessage, ToolMessage
from langchain_core.tools import tool
from langchain_openai import ChatOpenAI
@tool
def add_numbers(a: int, b: int) -> int:
"""Add two integers and return their sum."""
return a + b
llm = ChatOpenAI(
model=os.environ["TIKWAY_MODEL"],
api_key=os.environ["TIKWAY_API_KEY"],
base_url="https://api.tikway.ai/v1",
use_responses_api=False,
timeout=60,
max_retries=0,
)
agent = llm.bind_tools([add_numbers])
messages = [HumanMessage(content="使用 add_numbers 工具计算 17 + 25,然后报告结果。")]
tool_seen = False
for step in range(3):
answer = agent.invoke(messages)
messages.append(answer)
print("step:", step + 1, "usage:", answer.usage_metadata)
if not answer.tool_calls:
print(answer.content)
if not tool_seen:
raise RuntimeError("模型没有请求工具;这次未完成工具调用验证")
break
for call in answer.tool_calls:
if call["name"] != add_numbers.name:
raise RuntimeError("模型请求了未允许的工具")
result = add_numbers.invoke(call["args"])
tool_seen = True
print("tool:", call["name"], "args:", call["args"], "result:", result)
messages.append(ToolMessage(content=str(result), tool_call_id=call["id"]))
else:
raise RuntimeError("达到三轮上限,工具流程仍未结束")
python langchain_agent.py
核对日志里是否出现 add_numbers、参数 17 和 25、本地返回值 42,以及随后基于工具结果的最终回答。仅看到模型直接说“42”,还不能说明工具真的被执行。保留 tool_call_id 配对,模型消息后应追加对应工具结果;不要只把工具返回值当成普通用户消息。
4. 怎么排查 Agent 接入问题?
| 现象 | 优先检查 |
|---|---|
| 401 | Key 是否属于 Tikway、是否复制了空格、运行终端是否读到了新变量;参考 401 排查 |
| 404 或返回 HTML | 实际 URL 是否是 /v1/chat/completions,有没有重复 /v1 或误用了官网 /api |
普通文本成功但 tools 报错 |
所选模型和路由是否支持 Function Calling,工具 schema 是否符合要求 |
| 没有工具调用 | 查看 tool_calls;确认模型能力、工具描述与任务要求,再做小规模测试 |
| 有工具请求却无法结束 | 检查本地函数错误、参数校验、tool_call_id 和消息顺序;限制轮次 |
| 流式输出异常 | 先确认非流式工具流程,再阅读 SSE 排查 |
本地工具能够运行,也不等于所有第三方工具、MCP 服务或 LangGraph Agent 功能都已兼容。接入真实业务时逐个验证工具,只提供任务所需权限;这里的加法示例可作为最小复现。
5. Agent 费用为什么比一次聊天高?
一次 Agent 任务可能包含多轮请求。工具定义、历史消息和工具返回值会增加后续输入,最终回答还会产生输出 Token。先用费用计算器估算每轮文本预算,再结合实际轮次、usage 与控制台调用记录核对;不要把一轮价格当作整个 Agent 任务的价格。
继续阅读:Agent API 接入与选型 · Dify 接入 Tikway · n8n AI Agent 接入 Tikway · 模型与费用核对
配置参考:LangChain ChatOpenAI 官方文档。示例采用文档中的自定义 Base URL、bind_tools 和工具消息方式;不同版本或模型的参数支持可能不同。