一次性对话
本篇带你用通义千问 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_tokens、output_tokens、total_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-plus 与 https://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_url 与 api_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 端点,并用 AsyncCodyClient 的 run() 完成一次性任务,同时了解 RunResult 与三种构造方式。同步 CodyClient 可在非 async 场景兜底。下一篇「多轮对话」将介绍如何复用 session_id 延续上下文。