文档中心 / SDK 教程 / 基础篇

一次性对话

本篇带你用通义千问 qwen3.5-plus 在约 5 分钟内跑通第一个 Cody SDK 编码任务:安装、配置环境变量、创建 AsyncCodyClient,并调用 run() 拿到结果。全程与本地 core 进程内通信,无额外 HTTP 代理层。

安装与配置

先安装包,再通过环境变量指向阿里云 Coding 专属端点(与下文示例一致):

$ pip install cody-ai

# 配置通义千问(阿里云 Coding 专属端点)
$ export CODY_MODEL=qwen3.5-plus
$ export CODY_MODEL_API_KEY=sk-xxx
$ export CODY_MODEL_BASE_URL=https://coding.dashscope.aliyuncs.com/v1

配置好上述环境变量后,后续示例里可以不再写模型信息,直接使用 AsyncCodyClient(workdir=".") 即可。

配置优先级(从高到低)为:代码构造参数 > 环境变量CODY_MODEL / CODY_MODEL_API_KEY / CODY_MODEL_BASE_URL)> 项目配置 > 全局配置 > 默认值。

最简示例:一次 run()

下面是一段可运行的最小异步脚本:依赖上一节的环境变量,不再在代码里写 model / api_key

import asyncio
from cody import AsyncCodyClient

async def main():
    async with AsyncCodyClient(workdir="/path/to/project") as client:
        result = await client.run("为 utils.py 添加类型注解")
        print(result.output)

asyncio.run(main())

async with 会在退出时正确释放客户端资源;workdir 是 Agent 读写文件的根目录,请指向真实项目路径。run() 返回 RunResult,其中 output 是模型最终回复文本。

RunResult 字段

字段说明
output字符串,助手最终输出。
session_id可选会话 ID;多轮对话时用于接续同一会话。
usage用量:input_tokensoutput_tokenstotal_tokens
thinking开启思考模式时可能有内容,否则为 None

读取示例:

# 在 await client.run(...) 之后
print(result.output)
print(result.session_id)
print(result.usage.input_tokens, result.usage.output_tokens, result.usage.total_tokens)
if result.thinking:
    print(result.thinking)

三种创建客户端的方式

主流程仍使用 qwen3.5-plushttps://coding.dashscope.aliyuncs.com/v1,按场景任选其一。

方式一:直接构造

适合独立脚本、CI 或不想依赖 shell 环境变量的场景。

client = AsyncCodyClient(
    workdir="/path/to/project",
    model="qwen3.5-plus",
    base_url="https://coding.dashscope.aliyuncs.com/v1",
    api_key="sk-xxx",
)

方式二:Cody Builder(推荐)

链式调用、类型提示友好,便于扩展思考模式等可选项。

from cody.sdk import Cody

client = (
    Cody()
    .workdir("/path/to/project")
    .model("qwen3.5-plus")
    .base_url("https://coding.dashscope.aliyuncs.com/v1")
    .api_key("sk-xxx")
    .build()
)

方式三:config() 工厂

把配置抽成对象,多个 AsyncCodyClient 可共享同一份 cfg

from cody.sdk import config, AsyncCodyClient

cfg = config(
    model="qwen3.5-plus",
    base_url="https://coding.dashscope.aliyuncs.com/v1",
    workdir=".",
    api_key="sk-xxx",
)
client = AsyncCodyClient(config=cfg)

连接其他模型(扩展)

Cody 通过 base_urlapi_key 对接任意 OpenAI 兼容 API;后续教程默认仍以 Qwen 为例,只需替换 model / base_url / api_key 即可迁移。

# DeepSeek(可替换本教程中的 Qwen 配置)
client = Cody().workdir(".").model("deepseek-chat").base_url("https://api.deepseek.com/v1").api_key("sk-...").build()

# OpenAI
client = Cody().workdir(".").model("gpt-4o").base_url("https://api.openai.com/v1").api_key("sk-...").build()

同步版 CodyClient

若在 Jupyter、同步 Web 框架或简单脚本里不便使用 asyncio,可用同步客户端:with CodyClient(...) as client: 后直接 client.run(...)

from cody import CodyClient

with CodyClient(workdir=".") as client:
    result = client.run("创建一个 hello.py 文件")
    print(result.output)

同步版的 stream() 会返回完整列表,不是边生成边消费的真正流式;需要流式体验请用异步 API,详见第 03 篇。

小结

你已学会安装 cody-ai、用环境变量或代码指定 qwen3.5-plus 与 Coding 端点,并用 AsyncCodyClientrun() 完成一次性任务,同时了解 RunResult 与三种构造方式。同步 CodyClient 可在非 async 场景兜底。下一篇「多轮对话」将介绍如何复用 session_id 延续上下文。