(各位访问大哥能否留一些宝贵建议给小弟,没人的话就当个人日常vlog)为什么选择这条路,我认为deepseek是比我聪明的,根据它给的路线看看能学到什么程度。本来我在自动化测试方向学了一段时间,基本会用postman和selenium插件,算是入门一点点级别吧。但是网上有说软件测试可以作为保底工作,现在还有一年时间毕业,可以多尝试其他方面。目前agent开发这么火热,九月份还报了学校的ai开发课程,就想着提前学一下,看看能不能在这条路上走下去。

      第一天的话,看了半天的基础理论课程介绍,理解专用名词含义。其实在正式学习前就通过玩opencode懂了一些基础名词,像是: API Key — 你的"门禁卡"、Model(模型)— 你叫哪个 AI 来干活、Prompt(提示词)— 你对 AI 说的话、System Prompt vs User Prompt — 设定角色 vs 具体问题。不过开始正式学习后还是对这些以及别的名词有了更深入的理解。

      我让opencode给我创建一个简易聊天机器人,接入deepseek-chat模型。下面是它在D盘给我创的文件夹,子文件夹venv里的是Python 虚拟环境 ,.env里存的是api,tutor.py里的就是聊天机器人。

      tutor.py代码:

"""
ai-cli-tutor — 命令行 AI 编程老师
用法: python tutor.py
"""
import os
from openai import OpenAI
from dotenv import load_dotenv

# 加载 .env 文件中的 API Key
load_dotenv()

# 创建客户端,连 DeepSeek(免费)
client = OpenAI(
    api_key=os.getenv("DEEPSEEK_API_KEY"),
    base_url=os.getenv("DEEPSEEK_BASE_URL"),
)

# 设定 AI 的角色:编程老师
SYSTEM_PROMPT = """你是一个编程老师,名字叫"小码"。
规则:
1. 用中文回答,口语化,像和朋友聊天一样
2. 解释概念时用通俗的例子,不要堆术语
3. 如果用户让你写代码,要逐行解释每一行是干什么的
4. 回答控制在 200 字以内,除非用户明确要求详细"""


def ask(question: str) -> str:
    """向 AI 提问,返回回答"""
    response = client.chat.completions.create(
        model="deepseek-v3.2",
        messages=[
            {"role": "system", "content": SYSTEM_PROMPT},
            {"role": "user", "content": question},
        ],
        temperature=0.7,   # 0=死板,1=创意,0.7 刚好
        max_tokens=800,     # 限制回答长度,防超时
    )
    return response.choices[0].message.content


def main():
    print("=" * 50)
    print("  小码 AI 编程老师  (输入 quit 退出)")
    print("=" * 50)

    while True:
        user_input = input("\n你: ").strip()

        if not user_input:
            continue  # 空输入跳过

        if user_input.lower() in ("quit", "exit", "q"):
            print("小码: 再见! 有问题随时回来~")
            break

        print("小码: ", end="", flush=True)
        try:
            answer = ask(user_input)
            print(answer)
        except Exception as e:
            import traceback
            print(f"\n出错了: {e}")
            print("---完整错误信息---")
            traceback.print_exc()


if __name__ == "__main__":
    main()

      运行步骤:把api放在.env文件里(我用的是中转站,所以要把令牌api和接口地址base_url一起放进去)→在终端启动虚拟环境(venv\Scripts\activate)→然后打开项目所在文件夹并运行这个文件。

      正常情况下是可以直接和这个机器人进行聊天,但是我发送内容时得到的回复是

【出错了: Connection error.】。为了找到问题根源,我根据opencode的方案,修改报错代码段如下:

except Exception as e:
    import traceback
    print(f"\n出错了: {e}")
    print("---完整错误信息---")
    traceback.print_exc()

修改后运行代码会打印完整的调用栈,提升错在哪一行、什么原因。然后新建一个测试文件test_connection.py,发一个最简单的请求给智能体,排除了交互循环、System Prompt 等其他干扰因素。

"""连通性测试 — 检测能否连上中转站"""
import os
from openai import OpenAI
from dotenv import load_dotenv

load_dotenv()

print("API Key:", os.getenv("DEEPSEEK_API_KEY")[:20] + "...")
print("Base URL:", os.getenv("DEEPSEEK_BASE_URL"))

client = OpenAI(
    api_key=os.getenv("DEEPSEEK_API_KEY"),
    base_url=os.getenv("DEEPSEEK_BASE_URL"),
)

try:
    response = client.chat.completions.create(
        model="deepseek-chat",
        messages=[{"role": "user", "content": "回复 OK"}],
        max_tokens=10,
    )
    print("连接成功!回复:", response.choices[0].message.content)
except Exception as e:
    import traceback
    print("连接失败!")
    traceback.print_exc()

      运行这个测试文件,可以看到输出内容包含了具体的错误原因和代码行数。

      通过阅读这些报错信息,我发现关键一行:httpcore.ConnectError: [Errno 11001] getaddrinfo failed,就是说电脑找不到api.yunwuai.cc这个地址。下面是我解决这个问题的步骤:

  首先我怀疑是网络问题,在终端ping了一下baidu.com发现可以ping通,排除。

      然后我尝试能不能解析中转站的域名,这一步失败了。是接入api的代码有问题还是中转站的接口地址不对?继续往下。

      我解析了中转站的主站域名发现能解析,那大概率就是接口地址不对。

      我重新搜了中转站的接口地址,发现已经更新了。修改正确的接口地址后重新跑一下测试文件,果然接通了。

      关掉这些页面,重新在终端启动虚拟环境,再次运行主代码就跑通了,向聊天机器人发出提问也会有回应。

      总结:第一天学了agent应用开发的一些基础理论知识,然后让opencode搓了个简易聊天机器人熟悉框架。向机器人提问的时候得不到回复,逐步查明是输入的接口地址不对,修改后机器人就可以聊天了。我感觉处理这个明显错误的过程不值一提,但是提醒我以后对输入的信息要反复核查,明面的错误不应该犯。

       第一天就到这里吧。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐