page contents

f-string竟然失宠,python中的format竟然能用在这个需求中!

在近期的一个需求中犯了难,客户需要接入大模型,且提示词客户可以自定义,同时在自定义时能够引入用户搜索时产生的数据库统计数据。比较敏感的小伙伴可能想到目前火热的 AI-Agent 很容易处理这样的问题,使用 Call Function或MCP 服务即可解决数据交互问题。但这并不是一个 AI-Agent 的项目,且需求更加简单,鉴于成本问题,卡卡并未选择这样的方式,那么还有什么办法能够解决呢?

attachments-2025-09-K2aeagLj68c0db5f92105.png在近期的一个需求中犯了难,客户需要接入大模型,且提示词客户可以自定义,同时在自定义时能够引入用户搜索时产生的数据库统计数据。比较敏感的小伙伴可能想到目前火热的 AI-Agent 很容易处理这样的问题,使用 Call Function或MCP 服务即可解决数据交互问题。但这并不是一个 AI-Agent 的项目,且需求更加简单,鉴于成本问题,卡卡并未选择这样的方式,那么还有什么办法能够解决呢?

一、字符串替换

在这个时候,一个老办法正好能够解决这个需求,就是 字符串变量替换。

相信很多小伙伴看到过这样的方式:

• data=${data}

其中 ${data} 即为变量,可使用动态数据直接替换,这其实就是 f-string 的基本功能。

卡卡给该需求的设计方案即相关提示词的字段变为字符串,且当字符串中出现大括号,即可将其替换为相应的动态数据:

• 这是一个提示词,我需要使用数据{data},请帮我分析一下

替换为• 这是一个提示词,我需要使用数据2024年水产总值200亿,同年皮革产业同比上涨10%,请帮我分析一下二、实现方案

2.1 replace

最简单的方式即通过一个字典中保存数据,然后再使用字符串方法 replace 进行替换即可实现:

content = {

    'data': '2024年水产总值200亿,同年皮革产业同比上涨10%',

    'time': 2024

}

prompt = '这是一个提示词,我需要使用数据{data},请帮我分析一下'

for key in content:

    replace_str = '{' + key + '}'

    prompt = prompt.replace(replace_str, str(content[key]))

print(prompt)

• content:我们将数据内容填充到一个字典中,因为它天然拥有键值对,且键可以明确变量名称

• for key in content:遍历字典的所有键,用于做替换

• replace_str = '{' + key + '}':将键组装成变量的方式,例如 “data”变为“{data}”

• str(content[key]:将值用 str() 包裹,可以排除掉非字符串的替换带来的风险

2.2 eval

除了 replace,还有 f-string 可以实现,但由于自定义的提示词是客户提交的,你无法将其直接变为 f-string 的语句,因此需要用到 eval 将字符串的内容改为可执行代码:

data = '2024年水产总值200亿,同年皮革产业同比上涨10%'

time = 2024

prompt = '这是一个提示词,我需要使用数据{data},请帮我分析一下'

s = eval(f"f'{prompt}'")

print(s)

上方的代码其实就是将字符串强制转换为 f-string 的格式,然后用 eval() 进行执行。

不过卡卡非常不建议用 eval(),它将会引起安全风险!!!

2.3 正则

正则当然也能实现该目标,不过鉴于正则存在学习成本,卡卡也不怎么推荐该方法:

import re

data = '2024年水产总值200亿,同年皮革产业同比上涨10%'

time = 2024

prompt = '这是一个提示词,我需要使用数据{data},请帮我分析一下'

s = re.sub(r'\{data\}', data, prompt)

print(s)

2.4 字符串模板

除了以上比较经典的字符串替换方案,python也自带了一个字符串模板,它能够方便地实现我们的需求:

from string import Template

data = '2024年水产总值200亿,同年皮革产业同比上涨10%'

time = 2024

prompt = Template('这是一个提示词,我需要使用数据$data,请帮我分析一下')

s = prompt.safe_substitute(data=data)

print(s)

该字符模板的方式代码非常清晰明了,非常适合简单的变量替换。

三、动态获取问题

最简单的变量替换已经实现了,但是需求又增加了,需要将一个列表或字典中的某些数据拿出来。通过简单的字符串替换已经无法满足这个需求了,因此卡卡介绍使用古早的 format 来实现它。

测试案例

我们首先给一个测试案例:• 这是一个提示词,排名第一的是{data[0][name]},排名第二的是{data[1][name]},它们的数据分别是{data[0][count]}、{data[1][count]},请帮我分析一下format实现接下来我们直接来看 format 如何来实现该需求:data = [{

    'name': '哈士奇',

    'count': 10

}, {

    'name': '柯基',

    'count': 6

}]

prompt = '这是一个提示词,排名第一的是{data[0][name]},排名第二的是{data[1][name]},它们的数据分别是{data[0][count]}、{data[1][count]},请帮我分析一下'

prompt = prompt.format(data=data)

print(prompt)

现在用户可以舒舒服服地根据规则来制定自己的提示词了!

四、总结

现在很多情况下,我们已经习惯用 f-string 来进行字符串的的使用,渐渐抛弃了古早的一些方法。但其实在很多需求下,那些古早的方法依然会大放光芒,通过一些取巧的方式解决你的问题,所以别忘记它们!

更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
小柒
小柒

2188 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 2188 文章
  3. Pack 1351 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章