AI-NEWS · 2024年 10月 26日

在 Character.AI 的提示词设计 [译]

总结报告

简介

James Groeneveld 开发了一个名为 Prompt Poet 的工具,它是一个用于生成和处理提示的库,主要通过 Python 和相关技术实现。该项目包含 GitHub 和 PyPi 上的相关资源,支持多种格式如 YAML、Jinja2 和 f-strings。

技术细节

  1. Python f-strings:使用 f-strings 来动态构建提示模板。

  2. Prompt Poet 库

    • 导入所需的库和模块(os, getpass, promptpoet, langchain)。
    • 设置 OpenAI API 的环境变量。
    • 使用预定义的模板来生成提示消息,并通过 ChatOpenAI 模型获取响应。
  3. 示例代码

    import os
    import getpass
    from promptpoet import Prompt
    from langchain import ChatOpenAI
    
    # Uncomment if you need to set OPENAIAPIKEY.
    # os.environ["OPENAIAPIKEY"] = getpass.getpass()
    
    rawtemplate = """- name: system instructions\nrole: system\ncontent: Your name is  charactername  and you are meant to be helpful and never harmful to humans.\n- name: user query\nrole: user\ncontent: username:  userquery\n- name: response\nrole: user\ncontent: charactername :"""
    prompt = Prompt(rawtemplate, templatedata={"charactername": "Character Assistant", "username": "Jeff", "userquery": "Can you help me with my homework?"})
    
    model = ChatOpenAI(model="gpt-4o-mini")
    response = model.invoke(prompt.messages)
    
  4. YAML 和 Jinja2

    • 使用 YAML 来定义模板结构。
    • 利用 Jinja2 模板引擎处理动态内容,例如根据用户查询生成特定的响应。

特性

  1. 动态提示生成:支持使用 Jinja2、Yaml 及 f-strings 生成动态的提示消息。
  2. 音频模式:如果检测到用户正在使用音频,则会调整回答以保持简洁明了。
  3. 对话历史处理
    • 按优先级截断对话内容,避免超出指定的 token 数限制。

性能和优化

  1. Token 限制与截断

    • 设置 TOKENLIMITTRUNCATIONSTEP 参数来控制 prompt 的长度。
    • 使用 prompt.tokenize()prompt.truncate(tokenlimit=TOKENLIMIT, truncationstep=TRUNCATIONSTEP) 来处理超出 token 限制的提示。
  2. LLM API 调用

    • 示例中调用了 OpenAI 的 ChatOpenAI 模型,模型版本为 "gpt-4o-mini"
    • 使用了 LangChain 库来管理 LLM 接口。

界面与扩展

  1. UI 支持:提供一个用户界面来可视化提示生成过程,并支持 AI 动态调整。
  2. 代码示例
    prompt.tokenize()
    prompt.truncate(tokenlimit=TOKENLIMIT, truncationstep=TRUNCATIONSTEP)
    response = model.invoke(prompt.messages)
    

总结与展望

Prompt Poet 是一个强大的工具,能够动态生成和处理复杂的提示。它支持多种格式和技术(如 YAML、Jinja2 和 f-strings),并且能够高效地管理 token 限制。此外,其扩展性良好,可以与其他 AI 库和框架无缝集成,为用户提供更加智能和灵活的对话体验。

建议

  1. 进一步优化性能:针对特定模型和使用场景进行更详细的性能调优。
  2. 增加文档与示例:提供更多具体用例和详细操作指南,以方便用户理解和使用该工具。
  3. 社区参与:吸引更多开发者参与到该项目中来,共同推动其发展。

Source:https://baoyu.io/translations/character-ai/prompt-design-at-character-ai